made callerid handling work in call from asterisk
authorschlaile <root@asterisk.schlaile.de>
Sat, 14 Jun 2008 18:21:14 +0000 (20:21 +0200)
committerroot <root@asterisk.schlaile.de>
Sat, 14 Jun 2008 18:21:14 +0000 (20:21 +0200)
(Asterisk 1.4.18 at least changes cid records between call and setup ...)
fixed Makefile (emacs kept complaining :) )

Makefile
chan_lcr.c
chan_lcr.h

index 046d30a..bb902a0 100644 (file)
--- 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 \
index ab9c76a..3e89585 100644 (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; 
 }
index c24a666..52bb095 100644 (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;