chan_lcr: this fixes hanging with app_rxfax and a race condition
[lcr.git] / bchannel.c
index 6b005ec..eb1ad88 100644 (file)
 #include <sys/socket.h>
 #include <mISDNif.h>
 
+#define AF_COMPATIBILITY_FUNC 1
+#define MISDN_OLD_AF_COMPATIBILITY 1
+#include <compat_af_isdn.h>
+
 #include <asterisk/frame.h>
 
 
@@ -53,6 +57,8 @@ enum {
 
 int bchannel_initialize(void)
 {
+       init_af_isdn();
+
        return(0);
 }
 
@@ -445,20 +451,22 @@ void bchannel_transmit(struct bchannel *bchannel, unsigned char *data, int len)
                return;
        switch(bchannel->b_mode)
        {
-               case 0:
+       case 0:
                for (i = 0; i < len; i++)
                        *p++ = flip_bits[*data++];
                frm->prim = DL_DATA_REQ;
                break;
-               case 1:
+       case 1:
                for (i = 0; i < len; i++)
                        *p++ = flip_bits[*data++];
                frm->prim = PH_DATA_REQ;
                break;
-               case 2:
+       case 2:
+               memcpy(p, data, len);
                frm->prim = DL_DATA_REQ;
                break;
-               case 3:
+       case 3:
+               memcpy(p, data, len);
                frm->prim = PH_DATA_REQ;
                break;
        }
@@ -559,7 +567,7 @@ int bchannel_handle(void)
 {
        int ret, work = 0;
        struct bchannel *bchannel;
-       char buffer[2048+MISDN_HEADER_LEN];
+       unsigned char buffer[2048+MISDN_HEADER_LEN];
        struct mISDNhead *hh = (struct mISDNhead *)buffer;
 
        /* process all bchannels */