mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 18:55:19 +00:00 
			
		
		
		
	lun mar 17 21:04:15 CET 2003
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@650 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -114,6 +114,10 @@ static char *config = "zapata.conf"; | |||||||
| #define SIG_PRI		ZT_SIG_CLEAR | #define SIG_PRI		ZT_SIG_CLEAR | ||||||
| #define SIG_R2		ZT_SIG_CAS | #define SIG_R2		ZT_SIG_CAS | ||||||
| #define	SIG_SF		ZT_SIG_SF | #define	SIG_SF		ZT_SIG_SF | ||||||
|  | #define SIG_SFWINK 	(0x10000 | ZT_SIG_SF) | ||||||
|  | #define SIG_SF_FEATD	(0x20000 | ZT_SIG_SF) | ||||||
|  | #define	SIG_SF_FEATDMF	(0x40000 | ZT_SIG_SF) | ||||||
|  | #define	SIG_SF_FEATB	(0x80000 | ZT_SIG_SF) | ||||||
|  |  | ||||||
| #define NUM_SPANS 	32 | #define NUM_SPANS 	32 | ||||||
| #define RESET_INTERVAL	3600	/* How often (in seconds) to reset unused channels */ | #define RESET_INTERVAL	3600	/* How often (in seconds) to reset unused channels */ | ||||||
| @@ -466,8 +470,8 @@ static int cidrings[] = { | |||||||
| #define ISTRUNK(p) ((p->sig == SIG_FXSLS) || (p->sig == SIG_FXSKS) || \ | #define ISTRUNK(p) ((p->sig == SIG_FXSLS) || (p->sig == SIG_FXSKS) || \ | ||||||
| 			(p->sig == SIG_FXSGS) || (p->sig == SIG_PRI)) | 			(p->sig == SIG_FXSGS) || (p->sig == SIG_PRI)) | ||||||
|  |  | ||||||
| #define CANBUSYDETECT(p) (ISTRUNK(p) || (p->sig & SIG_EM) /* || (p->sig & __ZT_SIG_FXO) */) | #define CANBUSYDETECT(p) (ISTRUNK(p) || (p->sig & (SIG_EM | SIG_SF)) /* || (p->sig & __ZT_SIG_FXO) */) | ||||||
| #define CANPROGRESSDETECT(p) (ISTRUNK(p) || (p->sig & SIG_EM) /* || (p->sig & __ZT_SIG_FXO) */) | #define CANPROGRESSDETECT(p) (ISTRUNK(p) || (p->sig & (SIG_EM | SIG_SF)) /* || (p->sig & __ZT_SIG_FXO) */) | ||||||
|  |  | ||||||
| #if 0 | #if 0 | ||||||
| /* return non-zero if clear dtmf is appropriate */ | /* return non-zero if clear dtmf is appropriate */ | ||||||
| @@ -778,7 +782,15 @@ static char *sig2str(int sig) | |||||||
| 	case SIG_R2: | 	case SIG_R2: | ||||||
| 		return "R2 Signalling"; | 		return "R2 Signalling"; | ||||||
| 	case SIG_SF: | 	case SIG_SF: | ||||||
| 		return "SF (Tone) Signalling"; | 		return "SF (Tone) Signalling Immediate"; | ||||||
|  | 	case SIG_SFWINK: | ||||||
|  | 		return "SF (Tone) Signalling Wink"; | ||||||
|  | 	case SIG_SF_FEATD: | ||||||
|  | 		return "SF (Tone) Signalling with Feature Group D (DTMF)"; | ||||||
|  | 	case SIG_SF_FEATDMF: | ||||||
|  | 		return "SF (Tone) Signallong with Feature Group D (MF)"; | ||||||
|  | 	case SIG_SF_FEATB: | ||||||
|  | 		return "SF (Tone) Signalling with Feature Group B (MF)"; | ||||||
| 	case 0: | 	case 0: | ||||||
| 		return "Pseudo Signalling"; | 		return "Pseudo Signalling"; | ||||||
| 	default: | 	default: | ||||||
| @@ -1220,6 +1232,11 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout) | |||||||
| 	case SIG_FEATD: | 	case SIG_FEATD: | ||||||
| 	case SIG_FEATDMF: | 	case SIG_FEATDMF: | ||||||
| 	case SIG_FEATB: | 	case SIG_FEATB: | ||||||
|  | 	case SIG_SFWINK: | ||||||
|  | 	case SIG_SF: | ||||||
|  | 	case SIG_SF_FEATD: | ||||||
|  | 	case SIG_SF_FEATDMF: | ||||||
|  | 	case SIG_SF_FEATB: | ||||||
| 		c = strchr(dest, '/'); | 		c = strchr(dest, '/'); | ||||||
| 		if (c) | 		if (c) | ||||||
| 			c++; | 			c++; | ||||||
| @@ -1655,6 +1672,11 @@ static int zt_answer(struct ast_channel *ast) | |||||||
| 	case SIG_FEATD: | 	case SIG_FEATD: | ||||||
| 	case SIG_FEATDMF: | 	case SIG_FEATDMF: | ||||||
| 	case SIG_FEATB: | 	case SIG_FEATB: | ||||||
|  | 	case SIG_SF: | ||||||
|  | 	case SIG_SFWINK: | ||||||
|  | 	case SIG_SF_FEATD: | ||||||
|  | 	case SIG_SF_FEATDMF: | ||||||
|  | 	case SIG_SF_FEATB: | ||||||
| 	case SIG_FXOLS: | 	case SIG_FXOLS: | ||||||
| 	case SIG_FXOGS: | 	case SIG_FXOGS: | ||||||
| 	case SIG_FXOKS: | 	case SIG_FXOKS: | ||||||
| @@ -2411,7 +2433,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) | |||||||
| 				if (ast->_state == AST_STATE_DIALING) { | 				if (ast->_state == AST_STATE_DIALING) { | ||||||
| 					if (p->callprogress && CANPROGRESSDETECT(p) && p->dsp) { | 					if (p->callprogress && CANPROGRESSDETECT(p) && p->dsp) { | ||||||
| 						ast_log(LOG_DEBUG, "Done dialing, but waiting for progress detection before doing more...\n"); | 						ast_log(LOG_DEBUG, "Done dialing, but waiting for progress detection before doing more...\n"); | ||||||
| 					} else if (p->confirmanswer || (!p->dialednone && ((p->sig == SIG_EM) || (p->sig == SIG_EMWINK) || (p->sig == SIG_FEATD) || (p->sig == SIG_FEATDMF) || (p->sig == SIG_FEATB)))) { | 					} else if (p->confirmanswer || (!p->dialednone && ((p->sig == SIG_EM) || (p->sig == SIG_EMWINK) || (p->sig == SIG_FEATD) || (p->sig == SIG_FEATDMF) || (p->sig == SIG_FEATB) || (p->sig == SIG_SF) || (p->sig == SIG_SFWINK) || (p->sig == SIG_SF_FEATD) || (p->sig == SIG_SF_FEATDMF) || (p->sig == SIG_SF_FEATB)))) { | ||||||
| 						ast_setstate(ast, AST_STATE_RINGING); | 						ast_setstate(ast, AST_STATE_RINGING); | ||||||
| 					} else { | 					} else { | ||||||
| 						ast_setstate(ast, AST_STATE_UP); | 						ast_setstate(ast, AST_STATE_UP); | ||||||
| @@ -2552,6 +2574,11 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) | |||||||
| 			case SIG_FEATD: | 			case SIG_FEATD: | ||||||
| 			case SIG_FEATDMF: | 			case SIG_FEATDMF: | ||||||
| 			case SIG_FEATB: | 			case SIG_FEATB: | ||||||
|  | 			case SIG_SF: | ||||||
|  | 			case SIG_SFWINK: | ||||||
|  | 			case SIG_SF_FEATD: | ||||||
|  | 			case SIG_SF_FEATDMF: | ||||||
|  | 			case SIG_SF_FEATB: | ||||||
| 				if (ast->_state == AST_STATE_DOWN) { | 				if (ast->_state == AST_STATE_DOWN) { | ||||||
| 					if (option_debug) | 					if (option_debug) | ||||||
| 						ast_log(LOG_DEBUG, "Ring detected\n"); | 						ast_log(LOG_DEBUG, "Ring detected\n"); | ||||||
| @@ -2717,6 +2744,9 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) | |||||||
| 			case SIG_EM: | 			case SIG_EM: | ||||||
| 			case SIG_EMWINK: | 			case SIG_EMWINK: | ||||||
| 			case SIG_FEATD: | 			case SIG_FEATD: | ||||||
|  | 			case SIG_SF: | ||||||
|  | 			case SIG_SFWINK: | ||||||
|  | 			case SIG_SF_FEATD: | ||||||
| 			case SIG_FXSLS: | 			case SIG_FXSLS: | ||||||
| 			case SIG_FXSGS: | 			case SIG_FXSGS: | ||||||
| 				if (p->dialing) | 				if (p->dialing) | ||||||
| @@ -2726,6 +2756,8 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) | |||||||
| 				break; | 				break; | ||||||
| 			case SIG_FEATDMF: | 			case SIG_FEATDMF: | ||||||
| 			case SIG_FEATB: | 			case SIG_FEATB: | ||||||
|  | 			case SIG_SF_FEATDMF: | ||||||
|  | 			case SIG_SF_FEATB: | ||||||
| 				/* FGD MF *Must* wait for wink */ | 				/* FGD MF *Must* wait for wink */ | ||||||
| 				res = ioctl(p->subs[SUB_REAL].zfd, ZT_DIAL, &p->dop); | 				res = ioctl(p->subs[SUB_REAL].zfd, ZT_DIAL, &p->dop); | ||||||
| 				if (res < 0) { | 				if (res < 0) { | ||||||
| @@ -2750,6 +2782,9 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) | |||||||
| 			case SIG_EM: | 			case SIG_EM: | ||||||
| 			case SIG_EMWINK: | 			case SIG_EMWINK: | ||||||
| 			case SIG_FEATD: | 			case SIG_FEATD: | ||||||
|  | 			case SIG_SF: | ||||||
|  | 			case SIG_SFWINK: | ||||||
|  | 			case SIG_SF_FEATD: | ||||||
| 				res = ioctl(p->subs[SUB_REAL].zfd, ZT_DIAL, &p->dop); | 				res = ioctl(p->subs[SUB_REAL].zfd, ZT_DIAL, &p->dop); | ||||||
| 				if (res < 0) { | 				if (res < 0) { | ||||||
| 					ast_log(LOG_WARNING, "Unable to initiate dialing on trunk channel %d\n", p->channel); | 					ast_log(LOG_WARNING, "Unable to initiate dialing on trunk channel %d\n", p->channel); | ||||||
| @@ -2761,6 +2796,8 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) | |||||||
| 				break; | 				break; | ||||||
| 			case SIG_FEATDMF: | 			case SIG_FEATDMF: | ||||||
| 			case SIG_FEATB: | 			case SIG_FEATB: | ||||||
|  | 			case SIG_SF_FEATDMF: | ||||||
|  | 			case SIG_SF_FEATB: | ||||||
| 				ast_log(LOG_DEBUG, "Got hook complete in MF FGD, waiting for wink now on channel %d\n",p->channel); | 				ast_log(LOG_DEBUG, "Got hook complete in MF FGD, waiting for wink now on channel %d\n",p->channel); | ||||||
| 				break; | 				break; | ||||||
| 			default: | 			default: | ||||||
| @@ -3486,6 +3523,10 @@ static void *ss_thread(void *data) | |||||||
| 	case SIG_FEATDMF: | 	case SIG_FEATDMF: | ||||||
| 	case SIG_FEATB: | 	case SIG_FEATB: | ||||||
| 	case SIG_EMWINK: | 	case SIG_EMWINK: | ||||||
|  | 	case SIG_SF_FEATD: | ||||||
|  | 	case SIG_SF_FEATDMF: | ||||||
|  | 	case SIG_SF_FEATB: | ||||||
|  | 	case SIG_SFWINK: | ||||||
| 		zt_set_hook(p->subs[index].zfd, ZT_WINK); | 		zt_set_hook(p->subs[index].zfd, ZT_WINK); | ||||||
| 		for(;;) | 		for(;;) | ||||||
| 		{ | 		{ | ||||||
| @@ -3500,6 +3541,7 @@ static void *ss_thread(void *data) | |||||||
| 		if (ioctl(p->subs[index].zfd,ZT_GETEVENT,&j) == -1) return(NULL); | 		if (ioctl(p->subs[index].zfd,ZT_GETEVENT,&j) == -1) return(NULL); | ||||||
| 		/* Fall through */ | 		/* Fall through */ | ||||||
| 	case SIG_EM: | 	case SIG_EM: | ||||||
|  | 	case SIG_SF: | ||||||
| 		res = tone_zone_play_tone(p->subs[index].zfd, -1); | 		res = tone_zone_play_tone(p->subs[index].zfd, -1); | ||||||
| 		if (p->dsp) | 		if (p->dsp) | ||||||
| 			ast_dsp_digitreset(p->dsp); | 			ast_dsp_digitreset(p->dsp); | ||||||
| @@ -3518,18 +3560,21 @@ static void *ss_thread(void *data) | |||||||
| 			switch(p->sig) | 			switch(p->sig) | ||||||
| 			{ | 			{ | ||||||
| 			    case SIG_FEATD: | 			    case SIG_FEATD: | ||||||
|  | 			    case SIG_SF_FEATD: | ||||||
| 				res = my_getsigstr(chan,dtmfbuf + 1,'*',3000); | 				res = my_getsigstr(chan,dtmfbuf + 1,'*',3000); | ||||||
| 				if (res > 0) | 				if (res > 0) | ||||||
| 					res = my_getsigstr(chan,dtmfbuf + strlen(dtmfbuf),'*',3000); | 					res = my_getsigstr(chan,dtmfbuf + strlen(dtmfbuf),'*',3000); | ||||||
| 				if (res < 1) ast_dsp_digitreset(p->dsp); | 				if (res < 1) ast_dsp_digitreset(p->dsp); | ||||||
| 				break; | 				break; | ||||||
| 			    case SIG_FEATDMF: | 			    case SIG_FEATDMF: | ||||||
|  | 			    case SIG_SF_FEATDMF: | ||||||
| 				res = my_getsigstr(chan,dtmfbuf + 1,'#',3000); | 				res = my_getsigstr(chan,dtmfbuf + 1,'#',3000); | ||||||
| 				if (res > 0) | 				if (res > 0) | ||||||
| 					res = my_getsigstr(chan,dtmfbuf + strlen(dtmfbuf),'#',3000); | 					res = my_getsigstr(chan,dtmfbuf + strlen(dtmfbuf),'#',3000); | ||||||
| 				if (res < 1) ast_dsp_digitreset(p->dsp); | 				if (res < 1) ast_dsp_digitreset(p->dsp); | ||||||
| 				break; | 				break; | ||||||
| 			    case SIG_FEATB: | 			    case SIG_FEATB: | ||||||
|  | 			    case SIG_SF_FEATB: | ||||||
| 				res = my_getsigstr(chan,dtmfbuf + 1,'#',3000); | 				res = my_getsigstr(chan,dtmfbuf + 1,'#',3000); | ||||||
| 				if (res < 1) ast_dsp_digitreset(p->dsp); | 				if (res < 1) ast_dsp_digitreset(p->dsp); | ||||||
| 				break; | 				break; | ||||||
| @@ -4115,6 +4160,11 @@ static int handle_init_event(struct zt_pvt *i, int event) | |||||||
| 		case SIG_FEATDMF: | 		case SIG_FEATDMF: | ||||||
| 		case SIG_FEATB: | 		case SIG_FEATB: | ||||||
| 		case SIG_EM: | 		case SIG_EM: | ||||||
|  | 		case SIG_SFWINK: | ||||||
|  | 		case SIG_SF_FEATD: | ||||||
|  | 		case SIG_SF_FEATDMF: | ||||||
|  | 		case SIG_SF_FEATB: | ||||||
|  | 		case SIG_SF: | ||||||
| 				/* Check for callerid, digits, etc */ | 				/* Check for callerid, digits, etc */ | ||||||
| 				chan = zt_new(i, AST_STATE_RING, 0, SUB_REAL, 0); | 				chan = zt_new(i, AST_STATE_RING, 0, SUB_REAL, 0); | ||||||
| 				if (pthread_create(&threadid, &attr, ss_thread, chan)) { | 				if (pthread_create(&threadid, &attr, ss_thread, chan)) { | ||||||
| @@ -4155,6 +4205,11 @@ static int handle_init_event(struct zt_pvt *i, int event) | |||||||
| 		case SIG_FEATB: | 		case SIG_FEATB: | ||||||
| 		case SIG_EM: | 		case SIG_EM: | ||||||
| 		case SIG_EMWINK: | 		case SIG_EMWINK: | ||||||
|  | 		case SIG_SF_FEATD: | ||||||
|  | 		case SIG_SF_FEATDMF: | ||||||
|  | 		case SIG_SF_FEATB: | ||||||
|  | 		case SIG_SF: | ||||||
|  | 		case SIG_SFWINK: | ||||||
| 		case SIG_FXSLS: | 		case SIG_FXSLS: | ||||||
| 		case SIG_FXSGS: | 		case SIG_FXSGS: | ||||||
| 		case SIG_FXSKS: | 		case SIG_FXSKS: | ||||||
| @@ -4651,7 +4706,10 @@ static struct zt_pvt *mkintf(int channel, int signalling, int radio) | |||||||
| 		if ((signalling == SIG_FXSKS) || (signalling == SIG_FXSLS) || | 		if ((signalling == SIG_FXSKS) || (signalling == SIG_FXSLS) || | ||||||
| 		    (signalling == SIG_EM) || (signalling == SIG_EMWINK) || | 		    (signalling == SIG_EM) || (signalling == SIG_EMWINK) || | ||||||
| 			(signalling == SIG_FEATD) || (signalling == SIG_FEATDMF) || | 			(signalling == SIG_FEATD) || (signalling == SIG_FEATDMF) || | ||||||
| 			  (signalling == SIG_FEATB)) { | 			  (signalling == SIG_FEATB) || | ||||||
|  | 		    (signalling == SIG_SF) || (signalling == SIG_SFWINK) || | ||||||
|  | 			(signalling == SIG_SF_FEATD) || (signalling == SIG_SF_FEATDMF) || | ||||||
|  | 			  (signalling == SIG_SF_FEATB)) { | ||||||
| 			p.starttime = 250; | 			p.starttime = 250; | ||||||
| 			res = ioctl(tmp->subs[SUB_REAL].zfd, ZT_SET_PARAMS, &p); | 			res = ioctl(tmp->subs[SUB_REAL].zfd, ZT_SET_PARAMS, &p); | ||||||
| 			if (res < 0) { | 			if (res < 0) { | ||||||
| @@ -6213,6 +6271,21 @@ int load_module() | |||||||
| 			} else if (!strcasecmp(v->value, "sf")) { | 			} else if (!strcasecmp(v->value, "sf")) { | ||||||
| 				cur_signalling = SIG_SF; | 				cur_signalling = SIG_SF; | ||||||
| 				cur_radio = 0; | 				cur_radio = 0; | ||||||
|  | 			} else if (!strcasecmp(v->value, "sf_w")) { | ||||||
|  | 				cur_signalling = SIG_SFWINK; | ||||||
|  | 				cur_radio = 0; | ||||||
|  | 			} else if (!strcasecmp(v->value, "sf_featd")) { | ||||||
|  | 				cur_signalling = SIG_FEATD; | ||||||
|  | 				cur_radio = 0; | ||||||
|  | 			} else if (!strcasecmp(v->value, "sf_featdmf")) { | ||||||
|  | 				cur_signalling = SIG_FEATDMF; | ||||||
|  | 				cur_radio = 0; | ||||||
|  | 			} else if (!strcasecmp(v->value, "sf_featb")) { | ||||||
|  | 				cur_signalling = SIG_SF_FEATB; | ||||||
|  | 				cur_radio = 0; | ||||||
|  | 			} else if (!strcasecmp(v->value, "sf")) { | ||||||
|  | 				cur_signalling = SIG_SF; | ||||||
|  | 				cur_radio = 0; | ||||||
| 			} else if (!strcasecmp(v->value, "sf_rx")) { | 			} else if (!strcasecmp(v->value, "sf_rx")) { | ||||||
| 				cur_signalling = SIG_SF; | 				cur_signalling = SIG_SF; | ||||||
| 				cur_radio = 1; | 				cur_radio = 1; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user