diff --git a/CHANGES b/CHANGES index 1a443ca971..ae932be21c 100755 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,4 @@ + -- Add contributed "*80" support to blacklist numbers (Thanks James!) -- Add "NAT" option to sip user, peer, friend -- Add experimental "IAX2" protocol -- Add "Enhanced" AGI with audio pass-through (voice recognition anyone?) diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 4af888f1fc..191b21a2c0 100755 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -993,11 +993,8 @@ static int adsi_load_vmail(struct ast_channel *chan, int *useadsi) static void adsi_begin(struct ast_channel *chan, int *useadsi) { int x; - if(!strcasecmp(chan->type, "sip")){ - *useadsi = 0; + if (!adsi_available(chan)) return; - } - x = adsi_load_session(chan, adapp, adver, 1); if (x < 0) return; @@ -1309,9 +1306,7 @@ static void adsi_goodbye(struct ast_channel *chan) { char buf[256]; int bytes=0; - if(!strcasecmp(chan->type, "sip")){ - return; - } + if (!adsi_available(chan)) return; bytes += adsi_logo(buf + bytes); diff --git a/asterisk.c b/asterisk.c index ddfa0582a1..c7093a158b 100755 --- a/asterisk.c +++ b/asterisk.c @@ -670,7 +670,8 @@ static int ast_el_read_char(EditLine *el, char *cp) write(STDOUT_FILENO, "\r", 1); write(STDOUT_FILENO, buf, res); if ((buf[res-1] == '\n') || (buf[res-2] == '\n')) { - break; + *cp = CC_REFRESH; + return(1); } else { lastpos = 1; } diff --git a/channels/chan_sip.c b/channels/chan_sip.c index c4e0d20468..726218f0a6 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -937,6 +937,7 @@ static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title) ast_setstate(tmp, state); if (state == AST_STATE_RING) tmp->rings = 1; + tmp->adsicpe = AST_ADSI_UNAVAILABLE; tmp->writeformat = fmt; tmp->pvt->rawwriteformat = fmt; tmp->readformat = fmt; diff --git a/channels/chan_zap.c b/channels/chan_zap.c index cffaf3ea08..86548238a7 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -161,6 +161,8 @@ static int echocanbridged = 0; static int busydetect = 0; +static int busycount = 3; + static int callprogress = 0; static char accountcode[20] = ""; @@ -398,6 +400,7 @@ static struct zt_pvt { int outgoing; int dnd; int busydetect; + int busycount; int callprogress; struct ast_dsp *dsp; int cref; /* Call reference number */ @@ -3326,6 +3329,9 @@ static struct ast_channel *zt_new(struct zt_pvt *i, int state, int startpbx, int if (i->dsp) { ast_dsp_set_features(i->dsp, features); ast_dsp_digitmode(i->dsp, DSP_DIGITMODE_DTMF | i->dtmfrelax); + if (i->busydetect && CANBUSYDETECT(i)) { + ast_dsp_set_busy_count(i->dsp, i->busycount); + } } } } @@ -3806,6 +3812,15 @@ static void *ss_thread(void *data) if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "Parking call to '%s'\n", chan->name); break; + } else if (strlen(p->lastcallerid) && !strcmp(exten, "*80")) { + if (option_verbose > 2) + ast_verbose(VERBOSE_PREFIX_3 "Blacklisting number %s\n", p->lastcallerid); + res = ast_db_put("blacklist", p->lastcallerid, "1"); + if (!res) { + res = tone_zone_play_tone(p->subs[index].zfd, ZT_TONE_DIALRECALL); + memset(exten, 0, sizeof(exten)); + len = 0; + } } else if (p->hidecallerid && !strcmp(exten, "*82")) { if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "Enabling Caller*ID on %s\n", chan->name); @@ -4685,6 +4700,7 @@ static struct zt_pvt *mkintf(int channel, int signalling, int radio) tmp->echocancel = echocancel; tmp->echocanbridged = echocanbridged; tmp->busydetect = busydetect; + tmp->busycount = busycount; tmp->callprogress = callprogress; tmp->cancallforward = cancallforward; tmp->dtmfrelax = relaxdtmf; @@ -6086,6 +6102,8 @@ int load_module() echocanbridged = ast_true(v->value); } else if (!strcasecmp(v->name, "busydetect")) { busydetect = ast_true(v->value); + } else if (!strcasecmp(v->name, "busycount")) { + busycount = atoi(v->value); } else if (!strcasecmp(v->name, "callprogress")) { callprogress = ast_true(v->value); } else if (!strcasecmp(v->name, "echocancel")) { @@ -6404,6 +6422,7 @@ static int reload_zt(void) stripmsd = 0; callwaiting = 0; busydetect = 0; + busycount = 3; callprogress = 0; callwaitingcallerid = 0; hidecallerid = 0; @@ -6516,6 +6535,8 @@ static int reload_zt(void) transfer = ast_true(v->value); } else if (!strcasecmp(v->name, "busydetect")) { busydetect = ast_true(v->value); + } else if (!strcasecmp(v->name, "busycount")) { + busycount = atoi(v->value); } else if (!strcasecmp(v->name, "callprogress")) { callprogress = ast_true(v->value); } else if (!strcasecmp(v->name, "hidecallerid")) { diff --git a/manager.c b/manager.c index a0c06f5a5f..638c951b06 100755 --- a/manager.c +++ b/manager.c @@ -530,6 +530,10 @@ static void *accept_thread(void *ignore) struct sockaddr_in sin; int sinlen; struct mansession *s; + pthread_attr_t attr; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); for (;;) { sinlen = sizeof(sin); as = accept(asock, &sin, &sinlen); @@ -550,9 +554,10 @@ static void *accept_thread(void *ignore) s->next = sessions; sessions = s; ast_pthread_mutex_unlock(&sessionlock); - if (pthread_create(&t, NULL, session_do, s)) + if (pthread_create(&t, &attr, session_do, s)) destroy_session(s); } + pthread_attr_destroy(&attr); return NULL; }