Index: asterisk-1.6.0-beta7.1/channels/chan_zap.c =================================================================== --- asterisk-1.6.0-beta7.1.orig/channels/chan_zap.c 2008-04-03 08:24:56.000000000 +0300 +++ asterisk-1.6.0-beta7.1/channels/chan_zap.c 2008-04-03 16:06:26.000000000 +0300 @@ -5817,6 +5817,27 @@ case AST_CONTROL_SRCUPDATE: res = 0; break; + case AST_CONTROL_CONNECTEDLINE: +#ifdef HAVE_PRI + if (p->pri) { + char lid_num[80], lid_name[80]; + int lid_pres; + + if (ast_parse_connectedline_data((unsigned char *) data, datalen, lid_num, sizeof(lid_num), lid_name, sizeof(lid_name), &lid_pres)) { + res = 0; + break; + } + + ast_debug(1, "Called name changed to %s on channel %s\n", lid_name, chan->name); + + if (!pri_grab(p, p->pri)) { + pri_call_set_called_name(p->call, lid_num, lid_name, lid_pres); + pri_rel(p->pri); + } else + ast_log(LOG_WARNING, "Unable to grab PRI on span %d\n", p->span); + } +#endif + break; case -1: res = tone_zone_play_tone(p->subs[index].zfd, -1); break; @@ -10700,6 +10721,8 @@ pri->pvts[chanpos]->call = NULL; pri->pvts[chanpos]->exten[0] = '\0'; } + if (pri->facilityenable) + pri_facility_enable(pri->pri); if (crv) ast_mutex_unlock(&crv->lock); ast_mutex_unlock(&pri->pvts[chanpos]->lock); @@ -10751,6 +10774,9 @@ } #endif + if (!ast_strlen_zero(e->ringing.calledname)) + ast_queue_connectedline_update(pri->pvts[chanpos]->owner, NULL, e->ringing.calledname, 0); + ast_mutex_unlock(&pri->pvts[chanpos]->lock); } } @@ -10908,6 +10934,9 @@ } #endif + if (!ast_strlen_zero(e->answer.calledname)) + ast_queue_connectedline_update(pri->pvts[chanpos]->owner, NULL, e->answer.calledname, 0); + ast_mutex_unlock(&pri->pvts[chanpos]->lock); } } @@ -10974,6 +11003,9 @@ } #endif + if (pri->pvts[chanpos]->owner && !ast_strlen_zero(e->hangup.calledname)) + ast_queue_connectedline_update(pri->pvts[chanpos]->owner, NULL, e->hangup.calledname, 0); + ast_mutex_unlock(&pri->pvts[chanpos]->lock); } else { ast_log(LOG_WARNING, "Hangup on bad channel %d/%d on span %d\n",