From 44b6b77e68c2b685174c09da4467139e009130b4 Mon Sep 17 00:00:00 2001 From: Super User Date: Sun, 25 May 2008 16:12:20 +0200 Subject: [PATCH] fix and work 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 | 21 ++++----- action.cpp | 2 +- bchannel.c | 142 ++++++++++++++++++++++++++++++++++++++---------------------- chan_lcr.c | 38 +++++++--------- extension.h | 20 ++++----- joinpbx.cpp | 36 ++++++--------- mISDN.cpp | 2 + message.h | 10 ++--- 8 files changed, 147 insertions(+), 124 deletions(-) diff --git a/Makefile b/Makefile index 1d215a8..5c43a9a 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ #*****************************************************************************/ 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. @@ -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 - $(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 - $(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 @@ -235,9 +232,9 @@ $(LCRADMIN): lcradmin.c cause.c *.h Makefile $(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 \ @@ -267,9 +264,9 @@ install: -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) diff --git a/action.cpp b/action.cpp index 4eb340a..e98193b 100644 --- a/action.cpp +++ b/action.cpp @@ -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; - 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; diff --git a/bchannel.c b/bchannel.c index a30a86a..258893e 100644 --- a/bchannel.c +++ b/bchannel.c @@ -24,11 +24,15 @@ #include #include #include +#include #else #include #include #endif +#include + + #include "extension.h" #include "message.h" #include "lcrsocket.h" @@ -76,11 +80,11 @@ int bchannel_initialize(void) 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; - 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); @@ -88,7 +92,7 @@ int bchannel_initialize(void) 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; @@ -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; - unsigned long *d = buffer+MISDN_HEADER_LEN; + unsigned long *d = (unsigned long *)(buffer+MISDN_HEADER_LEN); 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) - 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; @@ -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; - unsigned long *d = buffer+MISDN_HEADER_LEN; + unsigned long *d = (unsigned long *)(buffer+MISDN_HEADER_LEN); 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) - 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; @@ -195,15 +199,14 @@ static void ph_control_block(unsigned long handle, unsigned long c1, void *c2, i */ int bchannel_create(struct bchannel *bchannel) { - unsigned char buff[1024]; int ret; #ifdef SOCKET_MISDN unsigned long on = 1; - struct sockadd_mISDN addr; + struct sockaddr_mISDN addr; 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); } @@ -211,10 +214,10 @@ int bchannel_create(struct bchannel *bchannel) 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) { - 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); } @@ -222,9 +225,9 @@ int bchannel_create(struct bchannel *bchannel) 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); - channel->b_sock = -1; + bchannel->b_sock = -1; 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) { - 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); - channel->b_sock = -1; + bchannel->b_sock = -1; return(0); } @@ -247,24 +250,27 @@ int bchannel_create(struct bchannel *bchannel) add_trace("socket", NULL, "%d", mISDNport->b_socket[i]); end_trace(); #endif + return(1); +} #else + unsigned char buff[1024]; 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) { - 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 */ - 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; @@ -277,7 +283,7 @@ int bchannel_create(struct bchannel *bchannel) 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) @@ -286,7 +292,7 @@ int bchannel_create(struct bchannel *bchannel) } 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; @@ -298,7 +304,7 @@ int bchannel_create(struct bchannel *bchannel) 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; } @@ -317,7 +323,6 @@ int bchannel_create(struct bchannel *bchannel) add_trace("stack", "address", "0x%08x", mISDNport->b_addr[i]); end_trace(); #endif -#endif return(1); @@ -326,6 +331,7 @@ failed: 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) - 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; @@ -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]) +#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); +#endif 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) { - 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; @@ -463,11 +473,15 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi // unsigned char *p; // int l; +#ifdef SOCKET_MISDN + if (prim == PH_CONTROL_IND) +#else if (prim == (PH_CONTROL | INDICATION)) +#endif { 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) @@ -483,7 +497,11 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi } switch(cont) { +#ifdef SOCKET_MISDN + case DSP_BF_REJECT: +#else case BF_REJECT: +#endif #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; +#ifdef SOCKET_MISDN + case DSP_BF_ACCEPT: +#else case BF_ACCEPT: +#endif #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; } +#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) @@ -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 */ - 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; @@ -534,9 +568,10 @@ static void bchannel_receive(struct bchannel *bchannel, unsigned long prim, unsi } return; } +#endif 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 @@ -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) { - 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) { - 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) @@ -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) { - CDEBUG("PmISDN(%s) broken pipe on bchannel pipe\n", p_name); + CDEBUG(NULL, NULL, "broken pipe on bchannel pipe\n"); 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]; +#ifdef SOCKET_MISDN + struct mISDNhead *frm = (struct mISDNhead *)buff; +#else iframe_t *frm = (iframe_t *)buff; +#endif + int ret; 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) - 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; @@ -619,7 +659,7 @@ void bchannel_join(struct bchannel *bchannel, unsigned short id) } 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); } } @@ -633,7 +673,6 @@ int bchannel_handle(void) { int ret, work = 0; struct bchannel *bchannel; - int i; 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 */ - 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: + case PH_DATA_REQ: 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: - 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: - 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: - 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) - 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; @@ -712,7 +750,7 @@ int bchannel_handle(void) { 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) @@ -743,7 +781,7 @@ int bchannel_handle(void) } 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; } @@ -767,7 +805,7 @@ int bchannel_handle(void) 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; @@ -775,12 +813,12 @@ int bchannel_handle(void) 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: - 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: diff --git a/chan_lcr.c b/chan_lcr.c index b1e659c..fa37ef6 100644 --- a/chan_lcr.c +++ b/chan_lcr.c @@ -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; + } 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) { + 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); - if (!call->ast) return; + if (!ast) return; /* 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; - 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); @@ -1676,7 +1678,7 @@ enum ast_bridge_result lcr_bridge(struct ast_channel *ast1, 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); @@ -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); @@ -1733,7 +1735,7 @@ enum ast_bridge_result lcr_bridge(struct ast_channel *ast1, 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 @@ -1794,49 +1796,49 @@ static int lcr_port_unload (int fd, int argc, char *argv[]) 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", }; -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", }; -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", }; -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", }; -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 \"\"\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 \"\"\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", @@ -1847,7 +1849,7 @@ struct ast_cli_entry cli_port_unload = /* * module loading and destruction */ -static int load_module(void) +int load_module(void) { int i; @@ -1921,7 +1923,7 @@ static int load_module(void) 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"); @@ -1978,12 +1980,4 @@ char *key(void) 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 - ); diff --git a/extension.h b/extension.h index 88bfc72..cb5f149 100644 --- a/extension.h +++ b/extension.h @@ -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_NAME_NUMBER, /* "05 Axel 5551212" */ + DISPLAY_CID_ABBREV_NAME_NUMBER /* "05 Axel 5551212" */ }; 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 */ @@ -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_NUMBER, /* "Cause 34" */ + DISPLAY_CAUSE_NUMBER /* "Cause 34" */ }; /* 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 */ @@ -55,7 +55,7 @@ enum { 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 */ @@ -65,7 +65,7 @@ enum { 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 */ @@ -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 */ - VBOX_MODE_ANNOUNCEMENT, /* announcement mode: send announcement and disconnect */ + VBOX_MODE_ANNOUNCEMENT /* announcement mode: send announcement and disconnect */ }; /* 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 */ - 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_GERMAN, /* display and announcements are in german */ + VBOX_LANGUAGE_GERMAN /* display and announcements are in german */ }; /* dsptones */ @@ -97,7 +97,7 @@ enum { DSP_NONE, DSP_AMERICAN, DSP_GERMAN, - DSP_OLDGERMAN, + DSP_OLDGERMAN }; diff --git a/joinpbx.cpp b/joinpbx.cpp index 635f059..0e15ef1 100644 --- a/joinpbx.cpp +++ b/joinpbx.cpp @@ -168,18 +168,10 @@ void joinpbx_debug(class JoinPBX *joinpbx, char *function) 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"); - break; - case CHANNEL_STATE_HOLD: + else UPRINT(strchr(buffer,0), " channel=HOLD"); - break; - default: - UPRINT(strchr(buffer,0), " channel=unknown"); - break; - } 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->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; @@ -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 - relation->channel_state = CHANNEL_STATE_HOLD; + relation->channel_state = 0; 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 - relation->channel_state = CHANNEL_STATE_HOLD; + relation->channel_state = 0; relation = relation->next; continue; } @@ -359,13 +351,13 @@ void JoinPBX::bridge(void) 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. */ - 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 @@ -415,7 +407,7 @@ void JoinPBX::bridge(void) 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); @@ -428,7 +420,7 @@ void JoinPBX::bridge(void) 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); @@ -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 */ - if (relation_from->channel_state != CHANNEL_STATE_CONNECT) + if (relation_from->channel_state != 1) 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 */ - 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 @@ -489,9 +481,9 @@ int JoinPBX::release(struct join_relation *relation, int location, int cause) 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 } @@ -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; - 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 */ diff --git a/mISDN.cpp b/mISDN.cpp index b44049f..53cb774 100644 --- 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: + 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); diff --git a/message.h b/message.h index b248f6a..d88d76a 100644 --- 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_VBOX, + INFO_ITYPE_VBOX }; 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, - INFO_PRESENT_NOTAVAIL, + INFO_PRESENT_NOTAVAIL }; enum { /* number presentation */ INFO_SCREEN_USER, /* user provided */ - INFO_SCREEN_NETWORK, /* network provided */ + INFO_SCREEN_NETWORK /* network provided */ }; enum { /* redirection reason */ @@ -43,7 +43,7 @@ enum { /* redirection reason */ INFO_REDIR_NORESPONSE, INFO_REDIR_UNCONDITIONAL, INFO_REDIR_OUTOFORDER, - INFO_REDIR_CALLDEFLECT, + INFO_REDIR_CALLDEFLECT }; #define INFO_NOTIFY_NONE 0x00 -- 2.13.6