Index: channels/chan_mgcp.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_mgcp.c,v retrieving revision 1.114 diff -u -r1.114 chan_mgcp.c --- channels/chan_mgcp.c 5 Apr 2005 21:40:37 -0000 1.114 +++ channels/chan_mgcp.c 6 Apr 2005 18:50:31 -0000 @@ -375,6 +375,7 @@ ast_group_t callgroup; ast_group_t pickupgroup; int callwaiting; + int hascallwaiting; int transfer; int threewaycalling; int singlepath; @@ -1048,6 +1049,10 @@ if ((p->hookstate == MGCP_ONHOOK) && (!sub->next->rtp)) { p->hidecallerid = 0; + if (p->hascallwaiting && !p->callwaiting) { + ast_verbose(VERBOSE_PREFIX_3 "Enabling call waiting on %s\n", ast->name); + p->callwaiting = -1; + } if (has_voicemail(p)) { if (mgcpdebug) { ast_verbose(VERBOSE_PREFIX_3 "MGCP mgcp_hangup(%s) on %s@%s set vmwi(+)\n", @@ -2646,7 +2651,7 @@ /*zt_wait_event(p->subs[index].zfd);*/ ast_hangup(chan); return NULL; - } else if (p->callwaiting && !strcmp(exten, "*70")) { + } else if (p->hascallwaiting && p->callwaiting && !strcmp(exten, "*70")) { if (option_verbose > 2) { ast_verbose(VERBOSE_PREFIX_3 "Disabling call waiting on %s\n", chan->name); } @@ -3192,6 +3197,11 @@ } } if ((p->hookstate == MGCP_ONHOOK) && (!sub->rtp) && (!sub->next->rtp)) { + p->hidecallerid = 0; + if (p->hascallwaiting && !p->callwaiting) { + ast_verbose(VERBOSE_PREFIX_3 "Enabling call waiting on MGCP/%s@%s-%d\n", p->name, p->parent->name, sub->id); + p->callwaiting = -1; + } if (has_voicemail(p)) { if (option_verbose > 2) { ast_verbose(VERBOSE_PREFIX_3 "MGCP handle_request(%s@%s) set vmwi(+)\n", p->name, p->parent->name); @@ -3726,6 +3736,7 @@ e->singlepath = singlepath; e->canreinvite = canreinvite; e->callwaiting = callwaiting; + e->hascallwaiting = callwaiting; e->slowsequence = slowsequence; e->transfer = transfer; e->threewaycalling = threewaycalling; @@ -3830,6 +3841,7 @@ e->canreinvite = canreinvite; e->singlepath = singlepath; e->callwaiting = callwaiting; + e->hascallwaiting = callwaiting; e->slowsequence = slowsequence; e->transfer = transfer; e->threewaycalling = threewaycalling;