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
This commit is contained in:
parent
7ed600459d
commit
44b6b77e68
21
Makefile
21
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)
|
||||
|
|
|
@ -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;
|
||||
|
|
142
bchannel.c
142
bchannel.c
|
@ -24,11 +24,15 @@
|
|||
#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
|
||||
|
||||
#include <asterisk/frame.h>
|
||||
|
||||
|
||||
#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;
|
||||
}
|
||||
|
@ -316,7 +322,6 @@ int bchannel_create(struct bchannel *bchannel)
|
|||
add_trace("stack", "id", "0x%08x", mISDNport->b_stid[i]);
|
||||
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:
|
||||
|
|
38
chan_lcr.c
38
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 \"<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",
|
||||
};
|
||||
|
||||
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
|
||||
);
|
||||
|
||||
|
|
20
extension.h
20
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
|
||||
};
|
||||
|
||||
|
||||
|
|
36
joinpbx.cpp
36
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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
10
message.h
10
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
|
||||
|
|
Loading…
Reference in New Issue