diff --git a/.cvsignore b/.cvsignore index 6257c57854d864e6b80e247253a987b1bc3321cb..d16cc070bc7503e86f8e26eb6176c87374617e34 100755 --- a/.cvsignore +++ b/.cvsignore @@ -3,3 +3,4 @@ build.h ast_expr.c .version .depend +.applied diff --git a/channels/chan_zap.c b/channels/chan_zap.c index 58037681463f6febf8e653de042ce63e9e6357a9..d97748f5a82231543a58a466648cdde38ced3681 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -108,11 +108,11 @@ static char *typecompat = "Tor"; /* Retain compatibility with chan_tor */ static char *config = "zapata.conf"; #define SIG_EM ZT_SIG_EM -#define SIG_EMWINK (0x10000 | ZT_SIG_EM) -#define SIG_FEATD (0x20000 | ZT_SIG_EM) -#define SIG_FEATDMF (0x40000 | ZT_SIG_EM) -#define SIG_FEATB (0x80000 | ZT_SIG_EM) -#define SIG_E911 (0x100000 | ZT_SIG_EM) +#define SIG_EMWINK (0x100000 | ZT_SIG_EM) +#define SIG_FEATD (0x200000 | ZT_SIG_EM) +#define SIG_FEATDMF (0x400000 | ZT_SIG_EM) +#define SIG_FEATB (0x800000 | ZT_SIG_EM) +#define SIG_E911 (0x1000000 | ZT_SIG_EM) #define SIG_FXSLS ZT_SIG_FXSLS #define SIG_FXSGS ZT_SIG_FXSGS #define SIG_FXSKS ZT_SIG_FXSKS @@ -122,10 +122,11 @@ static char *config = "zapata.conf"; #define SIG_PRI ZT_SIG_CLEAR #define SIG_R2 ZT_SIG_CAS #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 SIG_SFWINK (0x100000 | ZT_SIG_SF) +#define SIG_SF_FEATD (0x200000 | ZT_SIG_SF) +#define SIG_SF_FEATDMF (0x400000 | ZT_SIG_SF) +#define SIG_SF_FEATB (0x800000 | ZT_SIG_SF) +#define SIG_EM_E1 ZT_SIG_EM_E1 #define NUM_SPANS 32 #define RESET_INTERVAL 3600 /* How often (in seconds) to reset unused channels */ @@ -560,8 +561,8 @@ static int cidrings[NUM_CADENCE_MAX] = { #define ISTRUNK(p) ((p->sig == SIG_FXSLS) || (p->sig == SIG_FXSKS) || \ (p->sig == SIG_FXSGS) || (p->sig == SIG_PRI)) -#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 | SIG_SF)) /* || (p->sig & __ZT_SIG_FXO) */) +#define CANBUSYDETECT(p) (ISTRUNK(p) || (p->sig & (SIG_EM | SIG_EM_E1 | SIG_SF)) /* || (p->sig & __ZT_SIG_FXO) */) +#define CANPROGRESSDETECT(p) (ISTRUNK(p) || (p->sig & (SIG_EM | SIG_EM_E1 | SIG_SF)) /* || (p->sig & __ZT_SIG_FXO) */) #ifdef ZAPATA_PRI /* translate between PRI causes and asterisk's */ @@ -884,6 +885,8 @@ static char *sig2str(int sig) return "E & M Immediate"; case SIG_EMWINK: return "E & M Wink"; + case SIG_EM_E1: + return "E & M E1"; case SIG_FEATD: return "Feature Group D (DTMF)"; case SIG_FEATDMF: @@ -1492,6 +1495,7 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout) case SIG_FXSKS: case SIG_EMWINK: case SIG_EM: + case SIG_EM_E1: case SIG_FEATD: case SIG_FEATDMF: case SIG_E911: @@ -2013,6 +2017,7 @@ static int zt_answer(struct ast_channel *ast) p->ringt = 0; /* Fall through */ case SIG_EM: + case SIG_EM_E1: case SIG_EMWINK: case SIG_FEATD: case SIG_FEATDMF: @@ -2852,7 +2857,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) if (ast->_state == AST_STATE_DIALING) { if (p->callprogress && CANPROGRESSDETECT(p) && p->dsp && p->outgoing) { 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_E911) || (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)))) { + } else if (p->confirmanswer || (!p->dialednone && ((p->sig == SIG_EM) || (p->sig == SIG_EM_E1) || (p->sig == SIG_EMWINK) || (p->sig == SIG_FEATD) || (p->sig == SIG_FEATDMF) || (p->sig == SIG_E911) || (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); } else { ast_setstate(ast, AST_STATE_UP); @@ -3064,6 +3069,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) } /* Fall through */ case SIG_EM: + case SIG_EM_E1: case SIG_EMWINK: case SIG_FEATD: case SIG_FEATDMF: @@ -3254,6 +3260,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) update_conf(p); break; case SIG_EM: + case SIG_EM_E1: case SIG_EMWINK: case SIG_FEATD: case SIG_SF: @@ -3294,6 +3301,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) case SIG_FXSGS: case SIG_FXSKS: case SIG_EM: + case SIG_EM_E1: case SIG_EMWINK: case SIG_FEATD: case SIG_SF: @@ -4212,6 +4220,7 @@ static void *ss_thread(void *data) return NULL; /* Fall through */ case SIG_EM: + case SIG_EM_E1: case SIG_SF: res = tone_zone_play_tone(p->subs[index].zfd, -1); if (p->dsp) @@ -4912,6 +4921,7 @@ static int handle_init_event(struct zt_pvt *i, int event) case SIG_E911: case SIG_FEATB: case SIG_EM: + case SIG_EM_E1: case SIG_SFWINK: case SIG_SF_FEATD: case SIG_SF_FEATDMF: @@ -4959,6 +4969,7 @@ static int handle_init_event(struct zt_pvt *i, int event) case SIG_E911: case SIG_FEATB: case SIG_EM: + case SIG_EM_E1: case SIG_EMWINK: case SIG_SF_FEATD: case SIG_SF_FEATDMF: @@ -5368,7 +5379,7 @@ static struct zt_pvt *mkintf(int channel, int signalling, int radio) free(tmp); return NULL; } - if (p.sigtype != (signalling & 0xffff)) { + if (p.sigtype != (signalling & 0x3ffff)) { ast_log(LOG_ERROR, "Signalling requested is %s but line is in %s signalling\n", sig2str(signalling), sig2str(p.sigtype)); free(tmp); tmp = NULL; @@ -5501,7 +5512,7 @@ static struct zt_pvt *mkintf(int channel, int signalling, int radio) #endif /* Adjust starttime on loopstart and kewlstart trunks to reasonable values */ if ((signalling == SIG_FXSKS) || (signalling == SIG_FXSLS) || - (signalling == SIG_EM) || (signalling == SIG_EMWINK) || + (signalling == SIG_EM) || (signalling == SIG_EM_E1) || (signalling == SIG_EMWINK) || (signalling == SIG_FEATD) || (signalling == SIG_FEATDMF) || (signalling == SIG_FEATB) || (signalling == SIG_E911) || (signalling == SIG_SF) || (signalling == SIG_SFWINK) || @@ -7610,6 +7621,8 @@ static int setup_zap(void) } else if (!strcasecmp(v->name, "signalling")) { if (!strcasecmp(v->value, "em")) { cur_signalling = SIG_EM; + } else if (!strcasecmp(v->value, "em_e1")) { + cur_signalling = SIG_EM_E1; } else if (!strcasecmp(v->value, "em_w")) { cur_signalling = SIG_EMWINK; cur_radio = 0;