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 :) )
This commit is contained in:
schlaile 2008-06-14 20:21:14 +02:00 committed by root
parent d2b113f2c4
commit 0543086812
3 changed files with 27 additions and 8 deletions

View File

@ -197,7 +197,7 @@ $(LCR): main.o \
socket_server.o \
trace.o
$(PP) $(LIBDIR) \
main.o \
main.o \
options.ooo \
interface.o \
extension.o \

View File

@ -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;
}

View File

@ -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;