summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatteo Brancaleoni <mbrancaleoni@espia.it>2003-03-06 06:00:17 +0000
committerMatteo Brancaleoni <mbrancaleoni@espia.it>2003-03-06 06:00:17 +0000
commita8723ad68f80bafb65ee6a66d2b4b1f6a7ee01c8 (patch)
treea465cf508d2edd9491659377160fbecff07c950a
parentfa50831650a4485ada9ad391134c45f5c348defc (diff)
Thu Mar 6 07:00:01 CET 2003
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@633 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rwxr-xr-xCHANGES1
-rwxr-xr-xapps/app_voicemail.c9
-rwxr-xr-xasterisk.c3
-rwxr-xr-xchannels/chan_sip.c1
-rwxr-xr-xchannels/chan_zap.c21
-rwxr-xr-xmanager.c7
6 files changed, 33 insertions, 9 deletions
diff --git a/CHANGES b/CHANGES
index 1a443ca97..ae932be21 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 4af888f1f..191b21a2c 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 ddfa0582a..c7093a158 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 c4e0d2046..726218f0a 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 cffaf3ea0..86548238a 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 a0c06f5a5..638c951b0 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;
}