Index: pbx.c =================================================================== RCS file: /usr/cvsroot/asterisk/pbx.c,v retrieving revision 1.152 diff -u -r1.152 pbx.c --- pbx.c 9 Sep 2004 20:05:57 -0000 1.152 +++ pbx.c 13 Sep 2004 15:39:26 -0000 @@ -898,6 +898,29 @@ *ret = workspace; } else *ret = NULL; + } else if (c && !strcmp(var, "LASTCALLERIDNUM")) { + if (c->lastcallerid) + strncpy(workspace, c->lastcallerid, workspacelen - 1); + ast_callerid_parse(workspace, &name, &num); + if (num) { + ast_shrink_phone_number(num); + *ret = num; + } else + *ret = workspace; + } else if (c && !strcmp(var, "LASTCALLERIDNAME")) { + if (c->lastcallerid) + strncpy(workspace, c->lastcallerid, workspacelen - 1); + ast_callerid_parse(workspace, &name, &num); + if (name) + *ret = name; + else + *ret = workspace; + } else if (c && !strcmp(var, "LASTCALLERID")) { + if (c->lastcallerid) { + strncpy(workspace, c->lastcallerid, workspacelen - 1); + *ret = workspace; + } else + *ret = NULL; } else if (c && !strcmp(var, "DNID")) { if (c->dnid) { strncpy(workspace, c->dnid, workspacelen - 1); Index: channels/chan_mgcp.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_mgcp.c,v retrieving revision 1.76 diff -u -r1.76 chan_mgcp.c --- channels/chan_mgcp.c 26 Aug 2004 04:56:26 -0000 1.76 +++ channels/chan_mgcp.c 13 Sep 2004 15:39:30 -0000 @@ -357,7 +357,6 @@ char context[AST_MAX_EXTENSION]; char language[MAX_LANGUAGE]; char callerid[AST_MAX_EXTENSION]; /* Caller*ID */ - char lastcallerid[AST_MAX_EXTENSION]; /* Last Caller*ID */ char call_forward[AST_MAX_EXTENSION]; /* Last Caller*ID */ char mailbox[AST_MAX_EXTENSION]; char musicclass[MAX_LANGUAGE]; @@ -2046,7 +2045,7 @@ l = ""; /* Keep track of last callerid for blacklist and callreturn */ - strncpy(p->lastcallerid, l, sizeof(p->lastcallerid) - 1); + strncpy(sub->owner->lastcallerid, l, sizeof(sub->owner->lastcallerid) - 1); snprintf(tone2, sizeof(tone2), "%s,L/ci(%02d/%02d/%02d/%02d,%s,%s)", tone, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, l, n); @@ -2557,8 +2556,8 @@ timeout = firstdigittimeout; } else if (p->callreturn && !strcmp(exten, "*69")) { res = 0; - if (strlen(p->lastcallerid)) { - res = ast_say_digit_str(chan, p->lastcallerid, "", chan->language); + if (strlen(chan->lastcallerid)) { + res = ast_say_digit_str(chan, chan->lastcallerid, "", chan->language); } if (!res) /*res = tone_zone_play_tone(p->subs[index].zfd, ZT_TONE_DIALRECALL);*/ @@ -2612,11 +2611,11 @@ ast_verbose(VERBOSE_PREFIX_3 "Parking call to '%s'\n", chan->name); } break; - } else if (strlen(p->lastcallerid) && !strcmp(exten, "*80")) { + } else if (strlen(chan->lastcallerid) && !strcmp(exten, "*80")) { if (option_verbose > 2) { - ast_verbose(VERBOSE_PREFIX_3 "Blacklisting number %s\n", p->lastcallerid); + ast_verbose(VERBOSE_PREFIX_3 "Blacklisting number %s\n", chan->lastcallerid); } - res = ast_db_put("blacklist", p->lastcallerid, "1"); + res = ast_db_put("blacklist", chan->lastcallerid, "1"); if (!res) { /*res = tone_zone_play_tone(p->subs[index].zfd, ZT_TONE_DIALRECALL);*/ transmit_notify_request(sub, "L/sl"); Index: channels/chan_skinny.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_skinny.c,v retrieving revision 1.53 diff -u -r1.53 chan_skinny.c --- channels/chan_skinny.c 8 Aug 2004 17:15:02 -0000 1.53 +++ channels/chan_skinny.c 13 Sep 2004 15:39:33 -0000 @@ -635,7 +635,6 @@ char context[AST_MAX_EXTENSION]; char language[MAX_LANGUAGE]; char callerid[AST_MAX_EXTENSION]; /* Caller*ID */ - char lastcallerid[AST_MAX_EXTENSION]; /* Last Caller*ID */ char call_forward[AST_MAX_EXTENSION]; char mailbox[AST_MAX_EXTENSION]; char musicclass[MAX_LANGUAGE]; @@ -1355,8 +1354,8 @@ timeout = firstdigittimeout; } else if (l->callreturn && !strcmp(exten, "*69")) { res = 0; - if (!ast_strlen_zero(l->lastcallerid)) { - res = ast_say_digit_str(chan, l->lastcallerid, "", chan->language); + if (!ast_strlen_zero(chan->lastcallerid)) { + res = ast_say_digit_str(chan, chan->lastcallerid, "", chan->language); } if (!res) { transmit_tone(s, SKINNY_DIALTONE); @@ -1406,11 +1405,11 @@ ast_verbose(VERBOSE_PREFIX_3 "Parking call to '%s'\n", chan->name); } break; - } else if (!ast_strlen_zero(l->lastcallerid) && !strcmp(exten, "*80")) { + } else if (!ast_strlen_zero(chan->lastcallerid) && !strcmp(exten, "*80")) { if (option_verbose > 2) { - ast_verbose(VERBOSE_PREFIX_3 "Blacklisting number %s\n", l->lastcallerid); + ast_verbose(VERBOSE_PREFIX_3 "Blacklisting number %s\n", chan->lastcallerid); } - res = ast_db_put("blacklist", l->lastcallerid, "1"); + res = ast_db_put("blacklist", chan->lastcallerid, "1"); if (!res) { transmit_tone(s, SKINNY_DIALTONE); memset(exten, 0, sizeof(exten)); Index: channels/chan_zap.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_zap.c,v retrieving revision 1.338 diff -u -r1.338 chan_zap.c --- channels/chan_zap.c 11 Sep 2004 13:37:36 -0000 1.338 +++ channels/chan_zap.c 13 Sep 2004 15:39:42 -0000 @@ -452,7 +452,6 @@ char language[MAX_LANGUAGE]; char musicclass[MAX_LANGUAGE]; char callerid[AST_MAX_EXTENSION]; - char lastcallerid[AST_MAX_EXTENSION]; char *origcallerid; /* malloced original callerid */ char callwaitcid[AST_MAX_EXTENSION]; char rdnis[AST_MAX_EXTENSION]; @@ -1579,9 +1578,9 @@ l = NULL; } if (l) - strncpy(p->lastcallerid, l, sizeof(p->lastcallerid) - 1); + strncpy(ast->lastcallerid, l, sizeof(ast->lastcallerid) - 1); else - p->lastcallerid[0] = '\0'; + ast->lastcallerid[0] = '\0'; ast_setstate(ast, AST_STATE_RINGING); index = zt_get_index(ast, p, 0); if (index > -1) { @@ -3838,7 +3837,7 @@ } if (p->subs[index].needcallerid) { - ast_set_callerid(ast, !ast_strlen_zero(p->lastcallerid) ? p->lastcallerid : NULL, 1); + ast_set_callerid(ast, !ast_strlen_zero(ast->lastcallerid) ? ast->lastcallerid : NULL, 1); p->subs[index].needcallerid = 0; } @@ -4921,8 +4920,8 @@ timeout = firstdigittimeout; } else if (p->callreturn && !strcmp(exten, "*69")) { res = 0; - if (!ast_strlen_zero(p->lastcallerid)) { - res = ast_say_digit_str(chan, p->lastcallerid, "", chan->language); + if (!ast_strlen_zero(chan->lastcallerid)) { + res = ast_say_digit_str(chan, chan->lastcallerid, "", chan->language); } if (!res) res = tone_zone_play_tone(p->subs[index].zfd, ZT_TONE_DIALRECALL); @@ -4967,10 +4966,10 @@ if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "Parking call to '%s'\n", chan->name); break; - } else if (!ast_strlen_zero(p->lastcallerid) && !strcmp(exten, "*80")) { + } else if (!ast_strlen_zero(chan->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"); + ast_verbose(VERBOSE_PREFIX_3 "Blacklisting number %s\n", chan->lastcallerid); + res = ast_db_put("blacklist", chan->lastcallerid, "1"); if (!res) { res = tone_zone_play_tone(p->subs[index].zfd, ZT_TONE_DIALRECALL); memset(exten, 0, sizeof(exten)); @@ -7494,7 +7493,9 @@ } else { /* Re-use *69 field for PRI */ ast_mutex_lock(&pri->pvts[chanpos]->lock); - snprintf(pri->pvts[chanpos]->lastcallerid, sizeof(pri->pvts[chanpos]->lastcallerid), "\"%s\" <%s>", e->facname.callingname, e->facname.callingnum); + /* I'm not entirely sure what I'm doing here -- robf XXX */ + /* snprintf(pri->pvts[chanpos]->lastcallerid, sizeof(pri->pvts[chanpos]->lastcallerid), "\"%s\" <%s>", e->facname.callingname, e->facname.callingnum); */ + snprintf(pri->pvts[chanpos]->owner->lastcallerid, sizeof(pri->pvts[chanpos]->owner->lastcallerid), "\"%s\" <%s>", e->facname.callingname, e->facname.callingnum); pri->pvts[chanpos]->subs[SUB_REAL].needcallerid =1; zt_enable_ec(pri->pvts[chanpos]); ast_mutex_unlock(&pri->pvts[chanpos]->lock); Index: include/asterisk/channel.h =================================================================== RCS file: /usr/cvsroot/asterisk/include/asterisk/channel.h,v retrieving revision 1.54 diff -u -r1.54 channel.h --- include/asterisk/channel.h 6 Aug 2004 14:43:25 -0000 1.54 +++ include/asterisk/channel.h 13 Sep 2004 15:39:43 -0000 @@ -227,6 +227,9 @@ /*! channel flags of AST_FLAG_ type */ int flag; + + /*! last callerid that called this channel */ + char lastcallerid[AST_MAX_EXTENSION]; /*! For easy linking */ struct ast_channel *next;