summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorschlaile2008-06-14 20:21:14 +0200
committerroot2008-06-14 20:21:14 +0200
commit0543086812cd2fbeb0f0a9dc1f908a8c2d86c020 (patch)
treec8d63935ccf83060f95262868532b528e16aad3e
parentchanged long to int (64 bit system's compatibilty) (diff)
downloadlcr-0543086812cd2fbeb0f0a9dc1f908a8c2d86c020.tar.gz
lcr-0543086812cd2fbeb0f0a9dc1f908a8c2d86c020.tar.xz
lcr-0543086812cd2fbeb0f0a9dc1f908a8c2d86c020.zip
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 :) )
-rw-r--r--Makefile2
-rw-r--r--chan_lcr.c29
-rw-r--r--chan_lcr.h4
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;