From 0543086812cd2fbeb0f0a9dc1f908a8c2d86c020 Mon Sep 17 00:00:00 2001 From: schlaile Date: Sat, 14 Jun 2008 20:21:14 +0200 Subject: [PATCH] made callerid handling work in call from asterisk (Asterisk 1.4.18 at least changes cid records between call and setup ...) fixed Makefile (emacs kept complaining :) ) --- Makefile | 2 +- chan_lcr.c | 29 ++++++++++++++++++++++------- chan_lcr.h | 4 ++++ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 046d30a..bb902a0 100644 --- a/Makefile +++ b/Makefile @@ -197,7 +197,7 @@ $(LCR): main.o \ socket_server.o \ trace.o $(PP) $(LIBDIR) \ - main.o \ + main.o \ options.ooo \ interface.o \ extension.o \ diff --git a/chan_lcr.c b/chan_lcr.c index ab9c76a..3e89585 100644 --- a/chan_lcr.c +++ b/chan_lcr.c @@ -508,7 +508,7 @@ static void send_setup_to_lcr(struct chan_call *call) if (!call->ast || !call->ref) return; - CDEBUG(call, call->ast, "Sending setup to LCR. (interface=%s dialstring=%s)\n", call->interface, call->dialstring); + CDEBUG(call, call->ast, "Sending setup to LCR. (interface=%s dialstring=%s, cid=%s)\n", call->interface, call->dialstring, call->cid_num); /* send setup message to LCR */ memset(&newparam, 0, sizeof(union parameter)); @@ -520,13 +520,13 @@ static void send_setup_to_lcr(struct chan_call *call) newparam.setup.callerinfo.ntype = INFO_NTYPE_UNKNOWN; strncpy(newparam.setup.callerinfo.display, call->display, sizeof(newparam.setup.callerinfo.display)-1); call->display[0] = '\0'; - if (ast->cid.cid_num) if (ast->cid.cid_num[0]) - strncpy(newparam.setup.callerinfo.id, ast->cid.cid_num, sizeof(newparam.setup.callerinfo.id)-1); - if (ast->cid.cid_name) if (ast->cid.cid_name[0]) - strncpy(newparam.setup.callerinfo.name, ast->cid.cid_name, sizeof(newparam.setup.callerinfo.name)-1); - if (ast->cid.cid_rdnis) if (ast->cid.cid_rdnis[0]) + if (call->cid_num[0]) + strncpy(newparam.setup.callerinfo.id, call->cid_num, sizeof(newparam.setup.callerinfo.id)-1); + if (call->cid_name[0]) + strncpy(newparam.setup.callerinfo.name, call->cid_name, sizeof(newparam.setup.callerinfo.name)-1); + if (call->cid_rdnis[0]) { - strncpy(newparam.setup.redirinfo.id, ast->cid.cid_rdnis, sizeof(newparam.setup.redirinfo.id)-1); + strncpy(newparam.setup.redirinfo.id, call->cid_rdnis, sizeof(newparam.setup.redirinfo.id)-1); newparam.setup.redirinfo.itype = INFO_ITYPE_CHAN; newparam.setup.redirinfo.ntype = INFO_NTYPE_UNKNOWN; } @@ -1651,6 +1651,21 @@ static int lcr_call(struct ast_channel *ast, char *dest, int timeout) && ast->transfercapability != INFO_BC_VIDEO) ast->transfercapability = INFO_BC_DATAUNRESTRICTED; + call->cid_num[0] = 0; + call->cid_name[0] = 0; + call->cid_rdnis[0] = 0; + + if (ast->cid.cid_num) if (ast->cid.cid_num[0]) + strncpy(call->cid_num, ast->cid.cid_num, + sizeof(call->cid_num)-1); + + if (ast->cid.cid_name) if (ast->cid.cid_name[0]) + strncpy(call->cid_name, ast->cid.cid_name, + sizeof(call->cid_name)-1); + if (ast->cid.cid_rdnis) if (ast->cid.cid_rdnis[0]) + strncpy(call->cid_rdnis, ast->cid.cid_rdnis, + sizeof(call->cid_rdnis)-1); + ast_mutex_unlock(&chan_lock); return 0; } diff --git a/chan_lcr.h b/chan_lcr.h index c24a666..52bb095 100644 --- a/chan_lcr.h +++ b/chan_lcr.h @@ -27,6 +27,7 @@ struct chan_call { unsigned char dialque[64]; /* queue dialing prior setup ack */ char oad[64];/* caller id in number format */ + struct connect_info connectinfo; /* store connectinfo form lcr */ int bridge_id; @@ -43,6 +44,9 @@ struct chan_call { /* LCR interface name for setup */ char dialstring[64]; /* cached dial string for setup */ + char cid_num[64]; /* cached cid for setup */ + char cid_name[64]; /* cached cid for setup */ + char cid_rdnis[64]; /* cached cid for setup */ char display[128]; /* display for setup */ int dtmf; -- 2.13.6