fix and work
authorSuper User <root@isdn.jolly.ten>
Sun, 25 May 2008 14:12:20 +0000 (16:12 +0200)
committerSuper User <root@isdn.jolly.ten>
Sun, 25 May 2008 14:12:20 +0000 (16:12 +0200)
modified:   Makefile
modified:   action.cpp
modified:   bchannel.c
modified:   chan_lcr.c
modified:   extension.h
modified:   joinpbx.cpp
modified:   mISDN.cpp
modified:   message.h

Makefile
action.cpp
bchannel.c
chan_lcr.c
extension.h
joinpbx.cpp
mISDN.cpp
message.h

index 1d215a8..5c43a9a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@
 #*****************************************************************************/ 
 
 WITH-CRYPTO = 42 # comment this out, if no libcrypto should be used
 #*****************************************************************************/ 
 
 WITH-CRYPTO = 42 # comment this out, if no libcrypto should be used
-WITH-ASTERISK = 42 # comment this out, if you don't require built-in Asterisk channel driver.
+#WITH-ASTERISK = 42 # comment this out, if you don't require built-in Asterisk channel driver.
 WITH-SOCKET = 42 # compile for socket based mISDN (this options is far unfinished !!!)
 # note: check your location and the names of libraries.
 
 WITH-SOCKET = 42 # compile for socket based mISDN (this options is far unfinished !!!)
 # note: check your location and the names of libraries.
 
@@ -161,13 +161,10 @@ trace.o: trace.c *.h Makefile
        $(PP) -c $(CFLAGS) trace.c -o trace.o
 
 chan_lcr.o: chan_lcr.c *.h Makefile
        $(PP) -c $(CFLAGS) trace.c -o trace.o
 
 chan_lcr.o: chan_lcr.c *.h Makefile
-       $(CC) -D_GNU_SOURCE  -c $(CFLAGS) chan_lcr.c -o chan_lcr.o
+       $(CC) -D_GNU_SOURCE -c $(CFLAGS) chan_lcr.c -o chan_lcr.o
 
 bchannel.o: bchannel.c *.h Makefile
 
 bchannel.o: bchannel.c *.h Makefile
-       $(CC) -c $(CFLAGS) bchannel.c -o bchannel.o
-
-chan_lcr.so: chan_lcr.o bchannel.o *.h Makefile
-       gcc -shared -x $(LDFLAGS) -o chan_lcr.so chan_lcr.o bchannel.o
+       $(CC) -D_GNU_SOURCE -c $(CFLAGS) bchannel.c -o bchannel.o
 
 
 #$(WIZZARD): wizzard.c Makefile
 
 
 #$(WIZZARD): wizzard.c Makefile
@@ -235,9 +232,9 @@ $(LCRADMIN): lcradmin.c cause.c *.h Makefile
        $(PP) $(LIBDIR) $(CFLAGS_LCRADMIN) $(CURSES) -lm lcradmin.c cause.c \
        -o $(LCRADMIN) 
 
        $(PP) $(LIBDIR) $(CFLAGS_LCRADMIN) $(CURSES) -lm lcradmin.c cause.c \
        -o $(LCRADMIN) 
 
-$(CHAN_LCR): chan_lcr.o bchannel.o
-       $(CC) $(LIBDIR) chan_lcr.o bchannel.o \
-       $(CHANLIBS) -o $(CHAN_LCR) 
+$(CHAN_LCR): chan_lcr.o bchannel.o *.h Makefile
+       gcc -shared -Xlinker -x $(LDFLAGS) -o $(CHAN_LCR) chan_lcr.o bchannel.o
+
 
 $(LCRWATCH): watch.c *.h Makefile
        $(PP) $(LIBDIR) $(CFLAGS) -lm watch.c \
 
 $(LCRWATCH): watch.c *.h Makefile
        $(PP) $(LIBDIR) $(CFLAGS) -lm watch.c \
@@ -267,9 +264,9 @@ install:
        -killall -9 -w -q lcr # the following error must be ignored
        cp $(LCR) $(INSTALL_BIN)
        cp $(LCRADMIN) $(INSTALL_BIN)
        -killall -9 -w -q lcr # the following error must be ignored
        cp $(LCR) $(INSTALL_BIN)
        cp $(LCRADMIN) $(INSTALL_BIN)
-ifdef WITH-ASTERISK
-       cp $(CHAN_LCR) $(INSTALL_BIN)
-endif
+#ifdef WITH-ASTERISK
+#      cp $(CHAN_LCR) $(INSTALL_CHAN)
+#endif
 #      cp $(LCRWATCH) $(INSTALL_BIN)
        cp $(GEN) $(INSTALL_BIN)
        cp $(GENW) $(INSTALL_BIN)
 #      cp $(LCRWATCH) $(INSTALL_BIN)
        cp $(GEN) $(INSTALL_BIN)
        cp $(GENW) $(INSTALL_BIN)
index 4eb340a..e98193b 100644 (file)
@@ -562,7 +562,7 @@ void EndpointAppPBX::action_init_partyline(void)
                if (!(relation=joinpbx->add_relation()))
                        FATAL("No memory for join relation\n");
                relation->type = RELATION_TYPE_SETUP;
                if (!(relation=joinpbx->add_relation()))
                        FATAL("No memory for join relation\n");
                relation->type = RELATION_TYPE_SETUP;
-               relation->channel_state = CHANNEL_STATE_CONNECT;
+               relation->channel_state = 1;
                relation->rx_state = NOTIFY_STATE_ACTIVE;
                relation->tx_state = NOTIFY_STATE_ACTIVE;
                relation->epoint_id = ea_endpoint->ep_serial;
                relation->rx_state = NOTIFY_STATE_ACTIVE;
                relation->tx_state = NOTIFY_STATE_ACTIVE;
                relation->epoint_id = ea_endpoint->ep_serial;
index a30a86a..258893e 100644 (file)
 #include <netinet/in.h>
 #include <netdb.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <netdb.h>
 #include <sys/socket.h>
+#include <mISDNif.h>
 #else
 #include <mISDNuser/isdn_net.h>
 #include <mISDNuser/net_l3.h>
 #endif
 
 #else
 #include <mISDNuser/isdn_net.h>
 #include <mISDNuser/net_l3.h>
 #endif
 
+#include <asterisk/frame.h>
+
+
 #include "extension.h"
 #include "message.h"
 #include "lcrsocket.h"
 #include "extension.h"
 #include "message.h"
 #include "lcrsocket.h"
@@ -76,11 +80,11 @@ int bchannel_initialize(void)
                ret = mISDN_open();
                if (ret < 0)
                {
                ret = mISDN_open();
                if (ret < 0)
                {
-                       CERROR("cannot open mISDN device ret=%d errno=%d (%s) Check for mISDN modules!\nAlso did you create \"/dev/mISDN\"? Do: \"mknod /dev/mISDN c 46 0\"\n", ret, errno, strerror(errno));
+                       CERROR(NULL, NULL, "cannot open mISDN device ret=%d errno=%d (%s) Check for mISDN modules!\nAlso did you create \"/dev/mISDN\"? Do: \"mknod /dev/mISDN c 46 0\"\n", ret, errno, strerror(errno));
                        return(-1);
                }
                bchannel_device = ret;
                        return(-1);
                }
                bchannel_device = ret;
-               CDEBUG("mISDN device opened.\n");
+               CDEBUG(NULL, NULL, "mISDN device opened.\n");
 
                /* create entity for layer 3 TE-mode */
                mISDN_write_frame(bchannel_device, buff, 0, MGR_NEWENTITY | REQUEST, 0, 0, NULL, TIMEOUT_1SEC);
 
                /* create entity for layer 3 TE-mode */
                mISDN_write_frame(bchannel_device, buff, 0, MGR_NEWENTITY | REQUEST, 0, 0, NULL, TIMEOUT_1SEC);
@@ -88,7 +92,7 @@ int bchannel_initialize(void)
                if (ret < (int)mISDN_HEADER_LEN)
                {
                        noentity:
                if (ret < (int)mISDN_HEADER_LEN)
                {
                        noentity:
-                       CERROR("Cannot request MGR_NEWENTITY from mISDN. Exitting due to software bug.");
+                       CERROR(NULL, NULL, "Cannot request MGR_NEWENTITY from mISDN. Exitting due to software bug.");
                        return(-1);
                }
                bchannel_entity = frm->dinfo & 0xffff;
                        return(-1);
                }
                bchannel_entity = frm->dinfo & 0xffff;
@@ -121,7 +125,7 @@ static void ph_control(unsigned long handle, unsigned long c1, unsigned long c2,
 #ifdef SOCKET_MISDN
        unsigned char buffer[MISDN_HEADER_LEN+sizeof(int)+sizeof(int)];
        struct mISDNhead *ctrl = (struct mISDNhead *)buffer;
 #ifdef SOCKET_MISDN
        unsigned char buffer[MISDN_HEADER_LEN+sizeof(int)+sizeof(int)];
        struct mISDNhead *ctrl = (struct mISDNhead *)buffer;
-       unsigned long *d = buffer+MISDN_HEADER_LEN;
+       unsigned long *d = (unsigned long *)(buffer+MISDN_HEADER_LEN);
        int ret;
 
        ctrl->prim = PH_CONTROL_REQ;
        int ret;
 
        ctrl->prim = PH_CONTROL_REQ;
@@ -130,7 +134,7 @@ static void ph_control(unsigned long handle, unsigned long c1, unsigned long c2,
        *d++ = c2;
        ret = sendto(handle, buffer, MISDN_HEADER_LEN+sizeof(int)*2, 0, NULL, 0);
        if (!ret)
        *d++ = c2;
        ret = sendto(handle, buffer, MISDN_HEADER_LEN+sizeof(int)*2, 0, NULL, 0);
        if (!ret)
-               CERROR("Failed to send to socket %d\n", handle);
+               CERROR(NULL, NULL, "Failed to send to socket %d\n", handle);
 #else
        unsigned char buffer[mISDN_HEADER_LEN+sizeof(int)+sizeof(int)];
        iframe_t *ctrl = (iframe_t *)buffer; 
 #else
        unsigned char buffer[mISDN_HEADER_LEN+sizeof(int)+sizeof(int)];
        iframe_t *ctrl = (iframe_t *)buffer; 
@@ -159,7 +163,7 @@ static void ph_control_block(unsigned long handle, unsigned long c1, void *c2, i
 #ifdef SOCKET_MISDN
        unsigned char buffer[MISDN_HEADER_LEN+sizeof(int)+c2_len];
        struct mISDNhead *ctrl = (struct mISDNhead *)buffer;
 #ifdef SOCKET_MISDN
        unsigned char buffer[MISDN_HEADER_LEN+sizeof(int)+c2_len];
        struct mISDNhead *ctrl = (struct mISDNhead *)buffer;
-       unsigned long *d = buffer+MISDN_HEADER_LEN;
+       unsigned long *d = (unsigned long *)(buffer+MISDN_HEADER_LEN);
        int ret;
 
        ctrl->prim = PH_CONTROL_REQ;
        int ret;
 
        ctrl->prim = PH_CONTROL_REQ;
@@ -168,7 +172,7 @@ static void ph_control_block(unsigned long handle, unsigned long c1, void *c2, i
        memcpy(d, c2, c2_len);
        ret = sendto(handle, buffer, MISDN_HEADER_LEN+sizeof(int)+c2_len, 0, NULL, 0);
        if (!ret)
        memcpy(d, c2, c2_len);
        ret = sendto(handle, buffer, MISDN_HEADER_LEN+sizeof(int)+c2_len, 0, NULL, 0);
        if (!ret)
-               CERROR("Failed to send to socket %d\n", handle);
+               CERROR(NULL, NULL, "Failed to send to socket %d\n", handle);
 #else
        unsigned char buffer[mISDN_HEADER_LEN+sizeof(int)+c2_len];
        iframe_t *ctrl = (iframe_t *)buffer;
 #else
        unsigned char buffer[mISDN_HEADER_LEN+sizeof(int)+c2_len];
        iframe_t *ctrl = (iframe_t *)buffer;
@@ -195,15 +199,14 @@ static void ph_control_block(unsigned long handle, unsigned long c1, void *c2, i
  */
 int bchannel_create(struct bchannel *bchannel)
 {
  */
 int bchannel_create(struct bchannel *bchannel)
 {
-       unsigned char buff[1024];
        int ret;
 #ifdef SOCKET_MISDN
        unsigned long on = 1;
        int ret;
 #ifdef SOCKET_MISDN
        unsigned long on = 1;
-       struct sockadd_mISDN addr;
+       struct sockaddr_mISDN addr;
 
        if (bchannel->b_sock)
        {
 
        if (bchannel->b_sock)
        {
-               CERROR("Error: Socket already created for handle 0x%x\n", bchannel->handle);
+               CERROR(NULL, NULL, "Socket already created for handle 0x%x\n", bchannel->handle);
                return(0);
        }
 
                return(0);
        }
 
@@ -211,10 +214,10 @@ int bchannel_create(struct bchannel *bchannel)
        bchannel->b_tx_dejitter = 1;
 
        /* open socket */
        bchannel->b_tx_dejitter = 1;
 
        /* open socket */
-       channel->b_sock = socket(PF_ISDN, SOCK_DGRAM, ISDN_P_B_L2DSP);
+       bchannel->b_sock = socket(PF_ISDN, SOCK_DGRAM, ISDN_P_B_L2DSP);
        if (bchannel->b_sock < 0)
        {
        if (bchannel->b_sock < 0)
        {
-               CERROR("Error: Failed to open bchannel-socket for handle 0x%x with mISDN-DSP layer. Did you load mISDNdsp.ko?\n", bchannel->handle);
+               CERROR(NULL, NULL, "Failed to open bchannel-socket for handle 0x%x with mISDN-DSP layer. Did you load mISDNdsp.ko?\n", bchannel->handle);
                return(0);
        }
        
                return(0);
        }
        
@@ -222,9 +225,9 @@ int bchannel_create(struct bchannel *bchannel)
        ret = ioctl(bchannel->b_sock, FIONBIO, &on);
        if (ret < 0)
        {
        ret = ioctl(bchannel->b_sock, FIONBIO, &on);
        if (ret < 0)
        {
-               CERROR("Error: Failed to set bchannel-socket handle 0x%x into nonblocking IO\n", bchannel->handle);
+               CERROR(NULL, NULL, "Failed to set bchannel-socket handle 0x%x into nonblocking IO\n", bchannel->handle);
                close(bchannel->b_sock);
                close(bchannel->b_sock);
-               channel->b_sock = -1;
+               bchannel->b_sock = -1;
                return(0);
        }
 
                return(0);
        }
 
@@ -235,9 +238,9 @@ int bchannel_create(struct bchannel *bchannel)
        ret = bind(bchannel->b_sock, (struct sockaddr *)&addr, sizeof(addr));
        if (ret < 0)
        {
        ret = bind(bchannel->b_sock, (struct sockaddr *)&addr, sizeof(addr));
        if (ret < 0)
        {
-               CERROR("Error: Failed to bind bchannel-socket for handle 0x%x with mISDN-DSP layer. Did you load mISDNdsp.ko?\n", bchannel->handle);
+               CERROR(NULL, NULL, "Failed to bind bchannel-socket for handle 0x%x with mISDN-DSP layer. Did you load mISDNdsp.ko?\n", bchannel->handle);
                close(bchannel->b_sock);
                close(bchannel->b_sock);
-               channel->b_sock = -1;
+               bchannel->b_sock = -1;
                return(0);
        }
 
                return(0);
        }
 
@@ -247,24 +250,27 @@ int bchannel_create(struct bchannel *bchannel)
        add_trace("socket", NULL, "%d", mISDNport->b_socket[i]);
        end_trace();
 #endif
        add_trace("socket", NULL, "%d", mISDNport->b_socket[i]);
        end_trace();
 #endif
+       return(1);
+}
 #else
 #else
+       unsigned char buff[1024];
        layer_info_t li;
        mISDN_pid_t pid;
 
        if (bchannel->b_stid)
        {
        layer_info_t li;
        mISDN_pid_t pid;
 
        if (bchannel->b_stid)
        {
-               CERROR("Error: stack already created for address 0x%lx\n", bchannel->b_stid);
+               CERROR(NULL, NULL, "Stack already created for address 0x%lx\n", bchannel->b_stid);
                return(0);
        }
 
        if (bchannel->b_addr)
        {
                return(0);
        }
 
        if (bchannel->b_addr)
        {
-               CERROR("Error: stack already created for address 0x%lx\n", bchannel->b_addr);
+               CERROR(NULL, NULL, "Stack already created for address 0x%lx\n", bchannel->b_addr);
                return(0);
        }
 
        /* create new layer */
                return(0);
        }
 
        /* create new layer */
-       CDEBUG("creating new layer for stid 0x%lx.\n" , bchannel->handle);
+       CDEBUG(NULL, NULL, "creating new layer for stid 0x%lx.\n" , bchannel->handle);
        memset(&li, 0, sizeof(li));
        memset(&pid, 0, sizeof(pid));
        li.object_id = -1;
        memset(&li, 0, sizeof(li));
        memset(&pid, 0, sizeof(pid));
        li.object_id = -1;
@@ -277,7 +283,7 @@ int bchannel_create(struct bchannel *bchannel)
        if (ret)
        {
                failed_new_layer:
        if (ret)
        {
                failed_new_layer:
-               CERROR("mISDN_new_layer() failed to add bchannel for stid 0x%lx.\n", bchannel->handle);
+               CERROR(NULL, NULL, "mISDN_new_layer() failed to add bchannel for stid 0x%lx.\n", bchannel->handle);
                goto failed;
        }
        if (!li.id)
                goto failed;
        }
        if (!li.id)
@@ -286,7 +292,7 @@ int bchannel_create(struct bchannel *bchannel)
        }
        bchannel->b_stid = bchannel->handle;
        bchannel->b_addr = li.id;
        }
        bchannel->b_stid = bchannel->handle;
        bchannel->b_addr = li.id;
-       CDEBUG("new layer (b_addr=0x%x)\n", bchannel->b_addr);
+       CDEBUG(NULL, NULL, "new layer (b_addr=0x%x)\n", bchannel->b_addr);
 
        /* create new stack */
        pid.protocol[1] = ISDN_PID_L1_B_64TRANS;
 
        /* create new stack */
        pid.protocol[1] = ISDN_PID_L1_B_64TRANS;
@@ -298,7 +304,7 @@ int bchannel_create(struct bchannel *bchannel)
        if (ret)
        {
                stack_error:
        if (ret)
        {
                stack_error:
-               CERROR("mISDN_set_stack() failed (ret=%d) to add bchannel stid=0x%lx\n", ret, bchannel->b_stid);
+               CERROR(NULL, NULL, "mISDN_set_stack() failed (ret=%d) to add bchannel stid=0x%lx\n", ret, bchannel->b_stid);
                mISDN_write_frame(bchannel_device, buff, bchannel->b_addr, MGR_DELLAYER | REQUEST, 0, 0, NULL, TIMEOUT_1SEC);
                goto failed;
        }
                mISDN_write_frame(bchannel_device, buff, bchannel->b_addr, MGR_DELLAYER | REQUEST, 0, 0, NULL, TIMEOUT_1SEC);
                goto failed;
        }
@@ -317,7 +323,6 @@ int bchannel_create(struct bchannel *bchannel)
        add_trace("stack", "address", "0x%08x", mISDNport->b_addr[i]);
        end_trace();
 #endif
        add_trace("stack", "address", "0x%08x", mISDNport->b_addr[i]);
        end_trace();
 #endif
-#endif
 
        return(1);
 
 
        return(1);
 
@@ -326,6 +331,7 @@ failed:
        bchannel->b_addr = 0;
        return(0);
 }
        bchannel->b_addr = 0;
        return(0);
 }
+#endif
 
 
 /*
 
 
 /*
@@ -341,7 +347,7 @@ void bchannel_activate(struct bchannel *bchannel, int activate)
        act.id = 0;
        ret = sendto(bchannel->b_sock, &act, MISDN_HEADER_LEN, 0, NULL, 0);
        if (!ret)
        act.id = 0;
        ret = sendto(bchannel->b_sock, &act, MISDN_HEADER_LEN, 0, NULL, 0);
        if (!ret)
-               CERROR("Failed to send to socket %d\n", bchannel->b_sock);
+               CERROR(NULL, NULL, "Failed to send to socket %d\n", bchannel->b_sock);
 #else
        iframe_t act;
 
 #else
        iframe_t act;
 
@@ -390,7 +396,11 @@ static void bchannel_activated(struct bchannel *bchannel)
        if (bchannel->b_rx_gain)
                ph_control(handle, DSP_VOL_CHANGE_RX, bchannel->b_rx_gain, "DSP-RX_GAIN", bchannel->b_rx_gain);
        if (bchannel->b_pipeline[0])
        if (bchannel->b_rx_gain)
                ph_control(handle, DSP_VOL_CHANGE_RX, bchannel->b_rx_gain, "DSP-RX_GAIN", bchannel->b_rx_gain);
        if (bchannel->b_pipeline[0])
+#ifdef SOCKET_MISDN
+               ph_control_block(handle, DSP_PIPELINE_CFG, bchannel->b_pipeline, strlen(bchannel->b_pipeline)+1, "DSP-PIPELINE", 0);
+#else
                ph_control_block(handle, PIPELINE_CFG, bchannel->b_pipeline, strlen(bchannel->b_pipeline)+1, "DSP-PIPELINE", 0);
                ph_control_block(handle, PIPELINE_CFG, bchannel->b_pipeline, strlen(bchannel->b_pipeline)+1, "DSP-PIPELINE", 0);
+#endif
        if (bchannel->b_conf)
                ph_control(handle, DSP_CONF_JOIN, bchannel->b_conf, "DSP-CONF", bchannel->b_conf);
        if (bchannel->b_echo)
        if (bchannel->b_conf)
                ph_control(handle, DSP_CONF_JOIN, bchannel->b_conf, "DSP-CONF", bchannel->b_conf);
        if (bchannel->b_echo)
@@ -441,7 +451,7 @@ static void bchannel_destroy(struct bchannel *bchannel)
        /* remove our stack only if set */
        if (bchannel->b_addr)
        {
        /* remove our stack only if set */
        if (bchannel->b_addr)
        {
-               CDEBUG("free stack (b_addr=0x%x)\n", bchannel->b_addr);
+               CDEBUG(NULL, NULL, "free stack (b_addr=0x%x)\n", bchannel->b_addr);
                mISDN_clear_stack(bchannel_device, bchannel->b_stid);
                mISDN_write_frame(bchannel_device, buff, bchannel->b_addr | FLG_MSG_DOWN, MGR_DELLAYER | REQUEST, 0, 0, NULL, TIMEOUT_1SEC);
                bchannel->b_stid = 0;
                mISDN_clear_stack(bchannel_device, bchannel->b_stid);
                mISDN_write_frame(bchannel_device, buff, bchannel->b_addr | FLG_MSG_DOWN, MGR_DELLAYER | REQUEST, 0, 0, NULL, TIMEOUT_1SEC);
                bchannel->b_stid = 0;
@@ -463,11 +473,15 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi
 //     unsigned char *p;
 //     int l;
 
 //     unsigned char *p;
 //     int l;
 
+#ifdef SOCKET_MISDN
+       if (prim == PH_CONTROL_IND)
+#else
        if (prim == (PH_CONTROL | INDICATION))
        if (prim == (PH_CONTROL | INDICATION))
+#endif
        {
                if (len < 4)
                {
        {
                if (len < 4)
                {
-                       CERROR("SHORT READ OF PH_CONTROL INDICATION\n");
+                       CERROR(NULL, NULL, "SHORT READ OF PH_CONTROL INDICATION\n");
                        return;
                }
                if ((cont&(~DTMF_TONE_MASK)) == DTMF_TONE_VAL)
                        return;
                }
                if ((cont&(~DTMF_TONE_MASK)) == DTMF_TONE_VAL)
@@ -483,7 +497,11 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi
                }
                switch(cont)
                {
                }
                switch(cont)
                {
+#ifdef SOCKET_MISDN
+                       case DSP_BF_REJECT:
+#else
                        case BF_REJECT:
                        case BF_REJECT:
+#endif
 #if 0
                        chan_trace_header(p_m_mISDNport, this, "BCHANNEL control", DIRECTION_IN);
                        add_trace("DSP-CRYPT", NULL, "error");
 #if 0
                        chan_trace_header(p_m_mISDNport, this, "BCHANNEL control", DIRECTION_IN);
                        add_trace("DSP-CRYPT", NULL, "error");
@@ -491,7 +509,11 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi
 #endif
                        break;
 
 #endif
                        break;
 
+#ifdef SOCKET_MISDN
+                       case DSP_BF_ACCEPT:
+#else
                        case BF_ACCEPT:
                        case BF_ACCEPT:
+#endif
 #if 0
                        chan_trace_header(p_m_mISDNport, this, "BCHANNEL control", DIRECTION_IN);
                        add_trace("DSP-CRYPT", NULL, "ok");
 #if 0
                        chan_trace_header(p_m_mISDNport, this, "BCHANNEL control", DIRECTION_IN);
                        add_trace("DSP-CRYPT", NULL, "ok");
@@ -510,6 +532,18 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi
                }
                return;
        }
                }
                return;
        }
+#ifdef SOCKET_MISDN
+       if (prim == PH_DATA_REQ)
+       {
+               if (!bchannel->b_txdata)
+               {
+                       /* if tx is off, it may happen that fifos send us pending informations, we just ignore them */
+                       CDEBUG(NULL, NULL, "ignoring tx data, because 'txdata' is turned off\n");
+                       return;
+               }
+               return;
+       }
+#else
        if (prim == (PH_SIGNAL | INDICATION))
        {
                switch(dinfo)
        if (prim == (PH_SIGNAL | INDICATION))
        {
                switch(dinfo)
@@ -518,7 +552,7 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi
                        if (!bchannel->b_txdata)
                        {
                                /* if tx is off, it may happen that fifos send us pending informations, we just ignore them */
                        if (!bchannel->b_txdata)
                        {
                                /* if tx is off, it may happen that fifos send us pending informations, we just ignore them */
-                               CDEBUG("PmISDN(%s) ignoring tx data, because 'txdata' is turned off\n", p_name);
+                               CDEBUG(NULL, NULL, "ignoring tx data, because 'txdata' is turned off\n");
                                return;
                        }
                        break;
                                return;
                        }
                        break;
@@ -534,9 +568,10 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi
                }
                return;
        }
                }
                return;
        }
+#endif
        if (prim != PH_DATA_IND && prim != DL_DATA_IND)
        {
        if (prim != PH_DATA_IND && prim != DL_DATA_IND)
        {
-               CERROR("Bchannel received unknown primitve: 0x%lx\n", prim);
+               CERROR(NULL, NULL, "Bchannel received unknown primitve: 0x%lx\n", prim);
                return;
        }
        /* calls will not process any audio data unless
                return;
        }
        /* calls will not process any audio data unless
@@ -546,13 +581,13 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi
        /* if rx is off, it may happen that fifos send us pending informations, we just ignore them */
        if (bchannel->b_rxoff)
        {
        /* if rx is off, it may happen that fifos send us pending informations, we just ignore them */
        if (bchannel->b_rxoff)
        {
-               CDEBUG("PmISDN(%s) ignoring data, because rx is turned off\n", p_name);
+               CDEBUG(NULL, NULL, "ignoring data, because rx is turned off\n");
                return;
        }
 
        if (!bchannel->call)
        {
                return;
        }
 
        if (!bchannel->call)
        {
-               CDEBUG("PmISDN(%s) ignoring data, because no call associated with bchannel\n", p_name);
+               CDEBUG(NULL, NULL, "ignoring data, because no call associated with bchannel\n");
                return;
        }
        if (!bchannel->call->audiopath)
                return;
        }
        if (!bchannel->call->audiopath)
@@ -563,7 +598,7 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi
        len = write(bchannel->call->pipe[1], data, len);
        if (len < 0)
        {
        len = write(bchannel->call->pipe[1], data, len);
        if (len < 0)
        {
-               CDEBUG("PmISDN(%s) broken pipe on bchannel pipe\n", p_name);
+               CDEBUG(NULL, NULL, "broken pipe on bchannel pipe\n");
                return;
        }
 }
                return;
        }
 }
@@ -575,7 +610,12 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi
 void bchannel_transmit(struct bchannel *bchannel, unsigned char *data, int len)
 {
        unsigned char buff[1025];
 void bchannel_transmit(struct bchannel *bchannel, unsigned char *data, int len)
 {
        unsigned char buff[1025];
+#ifdef SOCKET_MISDN
+       struct mISDNhead *frm = (struct mISDNhead *)buff;
+#else
        iframe_t *frm = (iframe_t *)buff;
        iframe_t *frm = (iframe_t *)buff;
+#endif
+       int ret;
 
        if (bchannel->b_state != BSTATE_ACTIVE)
                return;
 
        if (bchannel->b_state != BSTATE_ACTIVE)
                return;
@@ -584,7 +624,7 @@ void bchannel_transmit(struct bchannel *bchannel, unsigned char *data, int len)
        frm->id = 0;
        ret = sendto(bchannel->b_sock, data, len, 0, NULL, 0);
        if (!ret)
        frm->id = 0;
        ret = sendto(bchannel->b_sock, data, len, 0, NULL, 0);
        if (!ret)
-               CERROR("Failed to send to socket %d\n", bchannel->b_sock);
+               CERROR(NULL, NULL, "Failed to send to socket %d\n", bchannel->b_sock);
 #else
        frm->prim = DL_DATA | REQUEST; 
        frm->addr = bchannel->b_addr | FLG_MSG_DOWN;
 #else
        frm->prim = DL_DATA | REQUEST; 
        frm->addr = bchannel->b_addr | FLG_MSG_DOWN;
@@ -619,7 +659,7 @@ void bchannel_join(struct bchannel *bchannel, unsigned short id)
        }
        if (bchannel->b_state == BSTATE_ACTIVE)
        {
        }
        if (bchannel->b_state == BSTATE_ACTIVE)
        {
-               ph_control(handle, DSP_RX_OFF, bchannel->b_rxoff, "DSP-RX_OFF", bchannel->b_conf);
+               ph_control(handle, DSP_RECEIVE_OFF, bchannel->b_rxoff, "DSP-RX_OFF", bchannel->b_conf);
                ph_control(handle, DSP_CONF_JOIN, bchannel->b_conf, "DSP-CONF", bchannel->b_conf);
        }
 }
                ph_control(handle, DSP_CONF_JOIN, bchannel->b_conf, "DSP-CONF", bchannel->b_conf);
        }
 }
@@ -633,7 +673,6 @@ int bchannel_handle(void)
 {
        int ret, work = 0;
        struct bchannel *bchannel;
 {
        int ret, work = 0;
        struct bchannel *bchannel;
-       int i;
        char buffer[2048+MISDN_HEADER_LEN];
        struct mISDNhead *hh = (struct mISDNhead *)buffer;
 
        char buffer[2048+MISDN_HEADER_LEN];
        struct mISDNhead *hh = (struct mISDNhead *)buffer;
 
@@ -651,41 +690,40 @@ int bchannel_handle(void)
                                switch(hh->prim)
                                {
                                        /* we don't care about confirms, we use rx data to sync tx */
                                switch(hh->prim)
                                {
                                        /* we don't care about confirms, we use rx data to sync tx */
-                                       case PH_DATA_CONF:
-                                       case DL_DATA_CONF:
+                                       case PH_DATA_CNF:
                                        break;
 
                                        /* we receive audio data, we respond to it AND we send tones */
                                        case PH_DATA_IND:
                                        break;
 
                                        /* we receive audio data, we respond to it AND we send tones */
                                        case PH_DATA_IND:
+                                       case PH_DATA_REQ:
                                        case DL_DATA_IND:
                                        case DL_DATA_IND:
-                                       case PH_SIGNAL_IND:
-                                       case PH_CONTROL | INDICATION:
-                                       bchannel_receive(bchannel, hh->prim, hh->dinfo, buffer+MISDN_HEADER_LEN, ret-MISDN_HEADER_LEN);
+                                       case PH_CONTROL_IND:
+                                       bchannel_receive(bchannel, hh->prim, hh->id, buffer+MISDN_HEADER_LEN, ret-MISDN_HEADER_LEN);
                                        break;
 
                                        case PH_ACTIVATE_IND:
                                        case DL_ESTABLISH_IND:
                                        break;
 
                                        case PH_ACTIVATE_IND:
                                        case DL_ESTABLISH_IND:
-                                       case PH_ACTIVATE_CONF:
-                                       case DL_ESTABLISH_CONF:
-                                       CDEBUG("DL_ESTABLISH confirm: bchannel is now activated (socket %d).\n", bchannel->b_sock);
+                                       case PH_ACTIVATE_CNF:
+                                       case DL_ESTABLISH_CNF:
+                                       CDEBUG(NULL, NULL, "DL_ESTABLISH confirm: bchannel is now activated (socket %d).\n", bchannel->b_sock);
                                        bchannel_activated(bchannel);
                                        break;
 
                                        case PH_DEACTIVATE_IND:
                                        case DL_RELEASE_IND:
                                        bchannel_activated(bchannel);
                                        break;
 
                                        case PH_DEACTIVATE_IND:
                                        case DL_RELEASE_IND:
-                                       case PH_DEACTIVATE_CONF:
-                                       case DL_RELEASE_CONF:
-                                       CDEBUG("DL_RELEASE confirm: bchannel is now de-activated (socket %d).\n", bchannel->b_sock);
+                                       case PH_DEACTIVATE_CNF:
+                                       case DL_RELEASE_CNF:
+                                       CDEBUG(NULL, NULL, "DL_RELEASE confirm: bchannel is now de-activated (socket %d).\n", bchannel->b_sock);
 //                                     bchannel_deactivated(bchannel);
                                        break;
 
                                        default:
 //                                     bchannel_deactivated(bchannel);
                                        break;
 
                                        default:
-                                       CERROR("child message not handled: prim(0x%x) socket(%d) msg->len(%d)\n", hh->prim, bchannel->b_sock, msg->len);
+                                       CERROR(NULL, NULL, "child message not handled: prim(0x%x) socket(%d) data len(%d)\n", hh->prim, bchannel->b_sock, ret - MISDN_HEADER_LEN);
                                }
                        } else
                        {
                                if (ret < 0 && errno != EWOULDBLOCK)
                                }
                        } else
                        {
                                if (ret < 0 && errno != EWOULDBLOCK)
-                                       CERROR("Read from socket %d failed with return code %d\n", bchannel->b_sock, ret);
+                                       CERROR(NULL, NULL, "Read from socket %d failed with return code %d\n", bchannel->b_sock, ret);
                        }
                }
                bchannel = bchannel->next;
                        }
                }
                bchannel = bchannel->next;
@@ -712,7 +750,7 @@ int bchannel_handle(void)
        {
                if (errno == EAGAIN)
                        return(0);
        {
                if (errno == EAGAIN)
                        return(0);
-               CERROR("Failed to do mISDN_read()\n");
+               CERROR(NULL, NULL, "Failed to do mISDN_read()\n");
                return(0);
        }
        if (!len)
                return(0);
        }
        if (!len)
@@ -743,7 +781,7 @@ int bchannel_handle(void)
        } 
        if (!bchannel)
        {
        } 
        if (!bchannel)
        {
-               CERROR("message belongs to no bchannel: prim(0x%x) addr(0x%x) msg->len(%d)\n", frm->prim, frm->addr, len);
+               CERROR(NULL, NULL, "message belongs to no bchannel: prim(0x%x) addr(0x%x) msg->len(%d)\n", frm->prim, frm->addr, len);
                goto out;
        }
 
                goto out;
        }
 
@@ -767,7 +805,7 @@ int bchannel_handle(void)
                case DL_ESTABLISH | INDICATION:
                case PH_ACTIVATE | CONFIRM:
                case DL_ESTABLISH | CONFIRM:
                case DL_ESTABLISH | INDICATION:
                case PH_ACTIVATE | CONFIRM:
                case DL_ESTABLISH | CONFIRM:
-               CDEBUG( "DL_ESTABLISH confirm: bchannel is now activated (address 0x%x).\n", frm->addr);
+               CDEBUG(NULL, NULL, "DL_ESTABLISH confirm: bchannel is now activated (address 0x%x).\n", frm->addr);
                bchannel_activated(bchannel);
                break;
 
                bchannel_activated(bchannel);
                break;
 
@@ -775,12 +813,12 @@ int bchannel_handle(void)
                case DL_RELEASE | INDICATION:
                case PH_DEACTIVATE | CONFIRM:
                case DL_RELEASE | CONFIRM:
                case DL_RELEASE | INDICATION:
                case PH_DEACTIVATE | CONFIRM:
                case DL_RELEASE | CONFIRM:
-               CDEBUG("DL_RELEASE confirm: bchannel is now de-activated (address 0x%x).\n", frm->addr);
+               CDEBUG(NULL, NULL, "DL_RELEASE confirm: bchannel is now de-activated (address 0x%x).\n", frm->addr);
 //             bchannel_deactivated(bchannel);
                break;
 
                default:
 //             bchannel_deactivated(bchannel);
                break;
 
                default:
-               CERROR("message not handled: prim(0x%x) addr(0x%x) msg->len(%d)\n", frm->prim, frm->addr, len);
+               CERROR(NULL, NULL, "message not handled: prim(0x%x) addr(0x%x) msg->len(%d)\n", frm->prim, frm->addr, len);
        }
 
        out:
        }
 
        out:
index b1e659c..fa37ef6 100644 (file)
@@ -447,6 +447,7 @@ static void lcr_start_pbx(struct chan_call *call, struct ast_channel *ast, int c
                        CDEBUG(call, ast, "Got 'sending complete', but extension '%s' will not match at context '%s' - releasing.\n", ast->exten, ast->context);
                        cause = 1;
                        goto release;
                        CDEBUG(call, ast, "Got 'sending complete', but extension '%s' will not match at context '%s' - releasing.\n", ast->exten, ast->context);
                        cause = 1;
                        goto release;
+               }
                if (!ast_exists_extension(ast, ast->context, ast->exten, 1, call->oad))
                {
                        CDEBUG(call, ast, "Got 'sending complete', but extension '%s' would match at context '%s', if more digits would be dialed - releasing.\n", ast->exten, ast->context);
                if (!ast_exists_extension(ast, ast->context, ast->exten, 1, call->oad))
                {
                        CDEBUG(call, ast, "Got 'sending complete', but extension '%s' would match at context '%s', if more digits would be dialed - releasing.\n", ast->exten, ast->context);
@@ -748,12 +749,13 @@ static void lcr_in_release(struct chan_call *call, int message_type, union param
  */
 static void lcr_in_information(struct chan_call *call, int message_type, union parameter *param)
 {
  */
 static void lcr_in_information(struct chan_call *call, int message_type, union parameter *param)
 {
+       struct ast_channel *ast = call->ast;
        struct ast_frame fr;
        char *p;
 
        CDEBUG(call, call->ast, "Incomming information from LCR. (dialing=%d)\n", param->information.id);
        
        struct ast_frame fr;
        char *p;
 
        CDEBUG(call, call->ast, "Incomming information from LCR. (dialing=%d)\n", param->information.id);
        
-       if (!call->ast) return;
+       if (!ast) return;
 
        /* pbx not started */
        if (!call->pbx_started)
 
        /* pbx not started */
        if (!call->pbx_started)
@@ -1649,7 +1651,7 @@ enum ast_bridge_result lcr_bridge(struct ast_channel *ast1,
        struct ast_frame        *f;
        int                     bridge_id;
 
        struct ast_frame        *f;
        int                     bridge_id;
 
-       CDEBUG(NULL, ast, "Received briding request from Asterisk.\n");
+       CDEBUG(NULL, NULL, "Received briding request from Asterisk.\n");
        
        /* join via dsp (if the channels are currently open) */
        ast_mutex_lock(&chan_lock);
        
        /* join via dsp (if the channels are currently open) */
        ast_mutex_lock(&chan_lock);
@@ -1676,7 +1678,7 @@ enum ast_bridge_result lcr_bridge(struct ast_channel *ast1,
                who = ast_waitfor_n(carr, 2, &to);
 
                if (!who) {
                who = ast_waitfor_n(carr, 2, &to);
 
                if (!who) {
-                       CDEBUG(NULL, ast, "Empty read on bridge, breaking out.\n");
+                       CDEBUG(NULL, NULL, "Empty read on bridge, breaking out.\n");
                        break;
                }
                f = ast_read(who);
                        break;
                }
                f = ast_read(who);
@@ -1704,7 +1706,7 @@ enum ast_bridge_result lcr_bridge(struct ast_channel *ast1,
     
        }
        
     
        }
        
-       CDEBUG(NULL, ast, "Releasing bride.\n");
+       CDEBUG(NULL, NULL, "Releasing bride.\n");
 
        /* split channels */
        ast_mutex_lock(&chan_lock);
 
        /* split channels */
        ast_mutex_lock(&chan_lock);
@@ -1733,7 +1735,7 @@ enum ast_bridge_result lcr_bridge(struct ast_channel *ast1,
        
        return AST_BRIDGE_COMPLETE;
 }
        
        return AST_BRIDGE_COMPLETE;
 }
-struct ast_channel_tech lcr_tech = {
+static struct ast_channel_tech lcr_tech = {
        .type="LCR",
        .description="Channel driver for connecting to Linux-Call-Router",
 #ifdef TODO
        .type="LCR",
        .description="Channel driver for connecting to Linux-Call-Router",
 #ifdef TODO
@@ -1794,49 +1796,49 @@ static int lcr_port_unload (int fd, int argc, char *argv[])
        return 0;
 }
 
        return 0;
 }
 
-struct ast_cli_entry cli_show_lcr =
+static struct ast_cli_entry cli_show_lcr =
 { {"lcr", "show", "lcr", NULL},
  lcr_show_lcr,
  "Shows current states of LCR core",
  "Usage: lcr show lcr\n",
 };
 
 { {"lcr", "show", "lcr", NULL},
  lcr_show_lcr,
  "Shows current states of LCR core",
  "Usage: lcr show lcr\n",
 };
 
-struct ast_cli_entry cli_show_calls =
+static struct ast_cli_entry cli_show_calls =
 { {"lcr", "show", "calls", NULL},
  lcr_show_calls,
  "Shows current calls made by LCR and Asterisk",
  "Usage: lcr show calls\n",
 };
 
 { {"lcr", "show", "calls", NULL},
  lcr_show_calls,
  "Shows current calls made by LCR and Asterisk",
  "Usage: lcr show calls\n",
 };
 
-struct ast_cli_entry cli_reload_routing =
+static struct ast_cli_entry cli_reload_routing =
 { {"lcr", "reload", "routing", NULL},
  lcr_reload_routing,
  "Reloads routing conf of LCR, current uncomplete calls will be disconnected",
  "Usage: lcr reload routing\n",
 };
 
 { {"lcr", "reload", "routing", NULL},
  lcr_reload_routing,
  "Reloads routing conf of LCR, current uncomplete calls will be disconnected",
  "Usage: lcr reload routing\n",
 };
 
-struct ast_cli_entry cli_reload_interfaces =
+static struct ast_cli_entry cli_reload_interfaces =
 { {"lcr", "reload", "interfaces", NULL},
  lcr_reload_interfaces,
  "Reloads interfaces conf of LCR",
  "Usage: lcr reload interfaces\n",
 };
 
 { {"lcr", "reload", "interfaces", NULL},
  lcr_reload_interfaces,
  "Reloads interfaces conf of LCR",
  "Usage: lcr reload interfaces\n",
 };
 
-struct ast_cli_entry cli_port_block =
+static struct ast_cli_entry cli_port_block =
 { {"lcr", "port", "block", NULL},
  lcr_port_block,
  "Blocks LCR port for further calls",
  "Usage: lcr port block \"<port>\"\n",
 };
 
 { {"lcr", "port", "block", NULL},
  lcr_port_block,
  "Blocks LCR port for further calls",
  "Usage: lcr port block \"<port>\"\n",
 };
 
-struct ast_cli_entry cli_port_unblock =
+static struct ast_cli_entry cli_port_unblock =
 { {"lcr", "port", "unblock", NULL},
  lcr_port_unblock,
  "Unblocks or loads LCR port, port is opened my mISDN",
  "Usage: lcr port unblock \"<port>\"\n",
 };
 
 { {"lcr", "port", "unblock", NULL},
  lcr_port_unblock,
  "Unblocks or loads LCR port, port is opened my mISDN",
  "Usage: lcr port unblock \"<port>\"\n",
 };
 
-struct ast_cli_entry cli_port_unload =
+static struct ast_cli_entry cli_port_unload =
 { {"lcr", "port", "unload", NULL},
  lcr_port_unload,
  "Unloads LCR port, port is closes by mISDN",
 { {"lcr", "port", "unload", NULL},
  lcr_port_unload,
  "Unloads LCR port, port is closes by mISDN",
@@ -1847,7 +1849,7 @@ struct ast_cli_entry cli_port_unload =
 /*
  * module loading and destruction
  */
 /*
  * module loading and destruction
  */
-static int load_module(void)
+int load_module(void)
 {
        int i;
 
 {
        int i;
 
@@ -1921,7 +1923,7 @@ static int load_module(void)
        return 0;
 }
 
        return 0;
 }
 
-static int unload_module(void)
+int unload_module(void)
 {
        /* First, take us out of the channel loop */
        CDEBUG(NULL, NULL, "-- Unregistering mISDN Channel Driver --\n");
 {
        /* First, take us out of the channel loop */
        CDEBUG(NULL, NULL, "-- Unregistering mISDN Channel Driver --\n");
@@ -1978,12 +1980,4 @@ char *key(void)
        return ASTERISK_GPL_KEY;
 }
 
        return ASTERISK_GPL_KEY;
 }
 
-#define AST_MODULE "chan_lcr"
-AST_MODULE_INFO(               ASTERISK_GPL_KEY,
-                                AST_MODFLAG_DEFAULT,
-                                "Channel driver for LCR",
-                                load_module,
-                                unload_module,
-                                reload_module
-                           );
 
 
index 88bfc72..cb5f149 100644 (file)
@@ -25,11 +25,11 @@ enum {
        DISPLAY_CID_ABBREV_NUMBER,              /* "05 5551212" */
        DISPLAY_CID_ABBREV_NAME,                /* "05 Axel" */
        DISPLAY_CID_ABBREV_NUMBER_NAME,         /* "05 5551212 Axel" */
        DISPLAY_CID_ABBREV_NUMBER,              /* "05 5551212" */
        DISPLAY_CID_ABBREV_NAME,                /* "05 Axel" */
        DISPLAY_CID_ABBREV_NUMBER_NAME,         /* "05 5551212 Axel" */
-       DISPLAY_CID_ABBREV_NAME_NUMBER,         /* "05 Axel 5551212" */
+       DISPLAY_CID_ABBREV_NAME_NUMBER          /* "05 Axel 5551212" */
 };
 enum {
        DISPLAY_CID_INTERNAL_OFF,               /* "20" */
 };
 enum {
        DISPLAY_CID_INTERNAL_OFF,               /* "20" */
-       DISPLAY_CID_INTERNAL_ON,                /* "Intern 20" */
+       DISPLAY_CID_INTERNAL_ON         /* "Intern 20" */
 };
 
 /* display of clear causes using display messages */
 };
 
 /* display of clear causes using display messages */
@@ -40,14 +40,14 @@ enum {
        DISPLAY_CAUSE_GERMAN,           /* "34 - kein Kanal" */
        DISPLAY_LOCATION_ENGLISH,       /* "34 - Network (Remote)" */
        DISPLAY_LOCATION_GERMAN,        /* "34 - Vermittlung (Gegenstelle)" */
        DISPLAY_CAUSE_GERMAN,           /* "34 - kein Kanal" */
        DISPLAY_LOCATION_ENGLISH,       /* "34 - Network (Remote)" */
        DISPLAY_LOCATION_GERMAN,        /* "34 - Vermittlung (Gegenstelle)" */
-       DISPLAY_CAUSE_NUMBER,           /* "Cause 34" */
+       DISPLAY_CAUSE_NUMBER            /* "Cause 34" */
 };
 
 /* clip */
 
 enum {
        CLIP_ASIS,                      /* use colp as presented by caller */
 };
 
 /* clip */
 
 enum {
        CLIP_ASIS,                      /* use colp as presented by caller */
-       CLIP_HIDE,                      /* use extension's caller id */
+       CLIP_HIDE                       /* use extension's caller id */
 };
 
 /* colp */
 };
 
 /* colp */
@@ -55,7 +55,7 @@ enum {
 enum {
        COLP_ASIS,                      /* use colp as presented by called */
        COLP_HIDE,                      /* use extension's caller id */
 enum {
        COLP_ASIS,                      /* use colp as presented by called */
        COLP_HIDE,                      /* use extension's caller id */
-       COLP_FORCE,                     /* use colp even if called dosn't provide or allow */
+       COLP_FORCE                      /* use colp even if called dosn't provide or allow */
 };
 
 /* codec to use */
 };
 
 /* codec to use */
@@ -65,7 +65,7 @@ enum {
        CODEC_MONO,                     /* record wave mono */
        CODEC_STEREO,                   /* record wave stereo */
        CODEC_8BIT,                     /* record wave mono 8bit */
        CODEC_MONO,                     /* record wave mono */
        CODEC_STEREO,                   /* record wave stereo */
        CODEC_8BIT,                     /* record wave mono 8bit */
-       CODEC_LAW,                      /* record LAW */
+       CODEC_LAW                       /* record LAW */
 };
 
 /* VBOX mode */
 };
 
 /* VBOX mode */
@@ -73,7 +73,7 @@ enum {
 enum {
        VBOX_MODE_NORMAL,               /* normal mode: send announcement, then record */
        VBOX_MODE_PARALLEL,             /* parallel mode: send announcement and record during announcement */
 enum {
        VBOX_MODE_NORMAL,               /* normal mode: send announcement, then record */
        VBOX_MODE_PARALLEL,             /* parallel mode: send announcement and record during announcement */
-       VBOX_MODE_ANNOUNCEMENT,         /* announcement mode: send announcement and disconnect */
+       VBOX_MODE_ANNOUNCEMENT          /* announcement mode: send announcement and disconnect */
 };
 
 /* VBOX display */
 };
 
 /* VBOX display */
@@ -81,14 +81,14 @@ enum {
 enum {
        VBOX_DISPLAY_BRIEF,             /* parallel mode: send announcement and record during announcement */
        VBOX_DISPLAY_DETAILED,          /* announcement mode: send announcement and disconnect */
 enum {
        VBOX_DISPLAY_BRIEF,             /* parallel mode: send announcement and record during announcement */
        VBOX_DISPLAY_DETAILED,          /* announcement mode: send announcement and disconnect */
-       VBOX_DISPLAY_OFF,               /* normal mode: send announcement, then record */
+       VBOX_DISPLAY_OFF                /* normal mode: send announcement, then record */
 };
 
 /* VBOX language */
 
 enum {
        VBOX_LANGUAGE_ENGLISH,          /* display and announcements are in english */
 };
 
 /* VBOX language */
 
 enum {
        VBOX_LANGUAGE_ENGLISH,          /* display and announcements are in english */
-       VBOX_LANGUAGE_GERMAN,           /* display and announcements are in german */
+       VBOX_LANGUAGE_GERMAN            /* display and announcements are in german */
 };
 
 /* dsptones */
 };
 
 /* dsptones */
@@ -97,7 +97,7 @@ enum {
        DSP_NONE,
        DSP_AMERICAN,
        DSP_GERMAN,
        DSP_NONE,
        DSP_AMERICAN,
        DSP_GERMAN,
-       DSP_OLDGERMAN,
+       DSP_OLDGERMAN
 };
 
 
 };
 
 
index 635f059..0e15ef1 100644 (file)
@@ -168,18 +168,10 @@ void joinpbx_debug(class JoinPBX *joinpbx, char *function)
                        UPRINT(strchr(buffer,0), " type=unknown");
                        break;
                }
                        UPRINT(strchr(buffer,0), " type=unknown");
                        break;
                }
-               switch(relation->channel_state)
-               {
-                       case CHANNEL_STATE_CONNECT:
+               if (relation->channel_state)
                        UPRINT(strchr(buffer,0), " channel=CONNECT");
                        UPRINT(strchr(buffer,0), " channel=CONNECT");
-                       break;
-                       case CHANNEL_STATE_HOLD:
+               else
                        UPRINT(strchr(buffer,0), " channel=HOLD");
                        UPRINT(strchr(buffer,0), " channel=HOLD");
-                       break;
-                       default:
-                       UPRINT(strchr(buffer,0), " channel=unknown");
-                       break;
-               }
                switch(relation->tx_state)
                {
                        case NOTIFY_STATE_ACTIVE:
                switch(relation->tx_state)
                {
                        case NOTIFY_STATE_ACTIVE:
@@ -254,7 +246,7 @@ JoinPBX::JoinPBX(class Endpoint *epoint) : Join()
        relation = j_relation = (struct join_relation *)MALLOC(sizeof(struct join_relation));
        cmemuse++;
        relation->type = RELATION_TYPE_CALLING;
        relation = j_relation = (struct join_relation *)MALLOC(sizeof(struct join_relation));
        cmemuse++;
        relation->type = RELATION_TYPE_CALLING;
-       relation->channel_state = CHANNEL_STATE_HOLD; /* audio is assumed on a new join */
+       relation->channel_state = 0; /* audio is assumed on a new join */
        relation->tx_state = NOTIFY_STATE_ACTIVE; /* new joins always assumed to be active */
        relation->rx_state = NOTIFY_STATE_ACTIVE; /* new joins always assumed to be active */
        relation->epoint_id = epoint->ep_serial;
        relation->tx_state = NOTIFY_STATE_ACTIVE; /* new joins always assumed to be active */
        relation->rx_state = NOTIFY_STATE_ACTIVE; /* new joins always assumed to be active */
        relation->epoint_id = epoint->ep_serial;
@@ -319,7 +311,7 @@ void JoinPBX::bridge(void)
                {
                        PDEBUG(DEBUG_JOIN, "join%d ignoring relation without port object.\n", j_serial);
 //#warning testing: keep on hold until single audio stream available
                {
                        PDEBUG(DEBUG_JOIN, "join%d ignoring relation without port object.\n", j_serial);
 //#warning testing: keep on hold until single audio stream available
-                       relation->channel_state = CHANNEL_STATE_HOLD;
+                       relation->channel_state = 0;
                        relation = relation->next;
                        continue;
                }
                        relation = relation->next;
                        continue;
                }
@@ -327,7 +319,7 @@ void JoinPBX::bridge(void)
                {
                        PDEBUG(DEBUG_JOIN, "join%d ignoring relation with ep%d due to port_list.\n", j_serial, epoint->ep_serial);
 //#warning testing: keep on hold until single audio stream available
                {
                        PDEBUG(DEBUG_JOIN, "join%d ignoring relation with ep%d due to port_list.\n", j_serial, epoint->ep_serial);
 //#warning testing: keep on hold until single audio stream available
-                       relation->channel_state = CHANNEL_STATE_HOLD;
+                       relation->channel_state = 0;
                        relation = relation->next;
                        continue;
                }
                        relation = relation->next;
                        continue;
                }
@@ -359,13 +351,13 @@ void JoinPBX::bridge(void)
        while(relation)
        {
                /* count connected relations */
        while(relation)
        {
                /* count connected relations */
-               if ((relation->channel_state == CHANNEL_STATE_CONNECT)
+               if ((relation->channel_state == 1)
                 && (relation->rx_state != NOTIFY_STATE_SUSPEND)
                 && (relation->rx_state != NOTIFY_STATE_HOLD))
                        numconnect ++;
 
                /* remove unconnected parties from conference, also remove remotely disconnected parties so conference will not be disturbed. */
                 && (relation->rx_state != NOTIFY_STATE_SUSPEND)
                 && (relation->rx_state != NOTIFY_STATE_HOLD))
                        numconnect ++;
 
                /* remove unconnected parties from conference, also remove remotely disconnected parties so conference will not be disturbed. */
-               if (relation->channel_state == CHANNEL_STATE_CONNECT
+               if (relation->channel_state == 1
                 && relation->rx_state != NOTIFY_STATE_HOLD
                 && relation->rx_state != NOTIFY_STATE_SUSPEND
                 && relations>1 // no conf with one member
                 && relation->rx_state != NOTIFY_STATE_HOLD
                 && relation->rx_state != NOTIFY_STATE_SUSPEND
                 && relations>1 // no conf with one member
@@ -415,7 +407,7 @@ void JoinPBX::bridge(void)
                relation = j_relation;
                while(relation)
                {
                relation = j_relation;
                while(relation)
                {
-                       if ((relation->channel_state == CHANNEL_STATE_CONNECT)
+                       if ((relation->channel_state == 1)
                         && (relation->rx_state != NOTIFY_STATE_SUSPEND)
                         && (relation->rx_state != NOTIFY_STATE_HOLD))
                                relation->tx_state = notify_state_change(j_serial, relation->epoint_id, relation->tx_state, NOTIFY_STATE_HOLD);
                         && (relation->rx_state != NOTIFY_STATE_SUSPEND)
                         && (relation->rx_state != NOTIFY_STATE_HOLD))
                                relation->tx_state = notify_state_change(j_serial, relation->epoint_id, relation->tx_state, NOTIFY_STATE_HOLD);
@@ -428,7 +420,7 @@ void JoinPBX::bridge(void)
                relation = j_relation;
                while(relation)
                {
                relation = j_relation;
                while(relation)
                {
-                       if ((relation->channel_state == CHANNEL_STATE_CONNECT)
+                       if ((relation->channel_state == 1)
                         && (relation->rx_state != NOTIFY_STATE_SUSPEND)
                         && (relation->rx_state != NOTIFY_STATE_HOLD))
                                relation->tx_state = notify_state_change(j_serial, relation->epoint_id, relation->tx_state, NOTIFY_STATE_CONFERENCE);
                         && (relation->rx_state != NOTIFY_STATE_SUSPEND)
                         && (relation->rx_state != NOTIFY_STATE_HOLD))
                                relation->tx_state = notify_state_change(j_serial, relation->epoint_id, relation->tx_state, NOTIFY_STATE_CONFERENCE);
@@ -453,7 +445,7 @@ void JoinPBX::bridge_data(unsigned long epoint_from, struct join_relation *relat
                return;
 
        /* skip if source endpoint has NOT audio mode CONNECT */
                return;
 
        /* skip if source endpoint has NOT audio mode CONNECT */
-       if (relation_from->channel_state != CHANNEL_STATE_CONNECT)
+       if (relation_from->channel_state != 1)
                return;
 
        /* get destination relation */
                return;
 
        /* get destination relation */
@@ -465,7 +457,7 @@ void JoinPBX::bridge_data(unsigned long epoint_from, struct join_relation *relat
        }
 
        /* skip if destination endpoint has NOT audio mode CONNECT */
        }
 
        /* skip if destination endpoint has NOT audio mode CONNECT */
-       if (relation_to->channel_state != CHANNEL_STATE_CONNECT)
+       if (relation_to->channel_state != 1)
                return;
 
        /* now we may send our data to the endpoint where it
                return;
 
        /* now we may send our data to the endpoint where it
@@ -489,9 +481,9 @@ int JoinPBX::release(struct join_relation *relation, int location, int cause)
        int destroy = 0;
 
        /* remove from bridge */
        int destroy = 0;
 
        /* remove from bridge */
-       if (relation->channel_state != CHANNEL_STATE_HOLD)
+       if (relation->channel_state != 0)
        {
        {
-               relation->channel_state = CHANNEL_STATE_HOLD;
+               relation->channel_state = 0;
                j_updatebridge = 1; /* update bridge flag */
                // note: if join is not released, bridge must be updated
        }
                j_updatebridge = 1; /* update bridge flag */
                // note: if join is not released, bridge must be updated
        }
@@ -1005,7 +997,7 @@ int JoinPBX::out_setup(unsigned long epoint_id, int message_type, union paramete
        if (!(relation=add_relation()))
                FATAL("No memory for relation.\n");
        relation->type = RELATION_TYPE_SETUP;
        if (!(relation=add_relation()))
                FATAL("No memory for relation.\n");
        relation->type = RELATION_TYPE_SETUP;
-       relation->channel_state = CHANNEL_STATE_HOLD; /* audio is assumed on a new join */
+       relation->channel_state = 0; /* audio is assumed on a new join */
        relation->tx_state = NOTIFY_STATE_ACTIVE; /* new joins always assumed to be active */
        relation->rx_state = NOTIFY_STATE_ACTIVE; /* new joins always assumed to be active */
        /* create a new endpoint */
        relation->tx_state = NOTIFY_STATE_ACTIVE; /* new joins always assumed to be active */
        relation->rx_state = NOTIFY_STATE_ACTIVE; /* new joins always assumed to be active */
        /* create a new endpoint */
index b44049f..53cb774 100644 (file)
--- a/mISDN.cpp
+++ b/mISDN.cpp
@@ -2293,6 +2293,8 @@ int mISDN_handler(void)
                                                /* we receive audio data, we respond to it AND we send tones */
                                                case PH_DATA_IND:
                                                case DL_DATA_IND:
                                                /* we receive audio data, we respond to it AND we send tones */
                                                case PH_DATA_IND:
                                                case DL_DATA_IND:
+                                               case PH_DATA_REQ:
+                                               case DL_DATA_REQ:
                                                case PH_CONTROL_IND:
                                                if (mISDNport->b_port[i])
                                                        mISDNport->b_port[i]->bchannel_receive(hh, buffer+MISDN_HEADER_LEN, ret-MISDN_HEADER_LEN);
                                                case PH_CONTROL_IND:
                                                if (mISDNport->b_port[i])
                                                        mISDNport->b_port[i]->bchannel_receive(hh, buffer+MISDN_HEADER_LEN, ret-MISDN_HEADER_LEN);
index b248f6a..d88d76a 100644 (file)
--- a/message.h
+++ b/message.h
@@ -15,26 +15,26 @@ enum { /* interface types */
        INFO_ITYPE_ISDN,
        INFO_ITYPE_ISDN_EXTENSION, /* call from internal extension */
        INFO_ITYPE_CHAN,
        INFO_ITYPE_ISDN,
        INFO_ITYPE_ISDN_EXTENSION, /* call from internal extension */
        INFO_ITYPE_CHAN,
-       INFO_ITYPE_VBOX,
+       INFO_ITYPE_VBOX
 };
 
 enum { /* number types */
        INFO_NTYPE_UNKNOWN = 0,
        INFO_NTYPE_SUBSCRIBER,
        INFO_NTYPE_NATIONAL,
 };
 
 enum { /* number types */
        INFO_NTYPE_UNKNOWN = 0,
        INFO_NTYPE_SUBSCRIBER,
        INFO_NTYPE_NATIONAL,
-       INFO_NTYPE_INTERNATIONAL,
+       INFO_NTYPE_INTERNATIONAL
 };
 
 enum { /* number presentation */
        INFO_PRESENT_NULL = 0,
        INFO_PRESENT_ALLOWED,
        INFO_PRESENT_RESTRICTED,
 };
 
 enum { /* number presentation */
        INFO_PRESENT_NULL = 0,
        INFO_PRESENT_ALLOWED,
        INFO_PRESENT_RESTRICTED,
-       INFO_PRESENT_NOTAVAIL,
+       INFO_PRESENT_NOTAVAIL
 };
 
 enum { /* number presentation */
        INFO_SCREEN_USER, /* user provided */
 };
 
 enum { /* number presentation */
        INFO_SCREEN_USER, /* user provided */
-       INFO_SCREEN_NETWORK, /* network provided */
+       INFO_SCREEN_NETWORK /* network provided */
 };
 
 enum { /* redirection reason */
 };
 
 enum { /* redirection reason */
@@ -43,7 +43,7 @@ enum { /* redirection reason */
        INFO_REDIR_NORESPONSE,
        INFO_REDIR_UNCONDITIONAL,
        INFO_REDIR_OUTOFORDER,
        INFO_REDIR_NORESPONSE,
        INFO_REDIR_UNCONDITIONAL,
        INFO_REDIR_OUTOFORDER,
-       INFO_REDIR_CALLDEFLECT,
+       INFO_REDIR_CALLDEFLECT
 };
 
 #define        INFO_NOTIFY_NONE                        0x00
 };
 
 #define        INFO_NOTIFY_NONE                        0x00