提交 b67a52b1 authored 作者: Anthony Minessale's avatar Anthony Minessale

w00t

git-svn-id: http://svn.openzap.org/svn/openzap/trunk@102 a93c3328-9c30-0410-af19-c9cd2b2d52af
上级 2e097a54
...@@ -53,8 +53,9 @@ isdn/Q931StateNT.o \ ...@@ -53,8 +53,9 @@ isdn/Q931StateNT.o \
isdn/Q931StateTE.o \ isdn/Q931StateTE.o \
isdn/Q932mes.o isdn/Q932mes.o
PWD=$(shell pwd)
CFLAGS=$(ZAP_CFLAGS) -I`pwd`/include -I`pwd`/isdn/include INCS=-I$(PWD)/include -I$(PWD)/isdn/include
CFLAGS=$(ZAP_CFLAGS) $(INCS)
MYLIB=libopenzap.a MYLIB=libopenzap.a
TMP=-I../../libpri-1.2.4 -Iinclude -I. -w TMP=-I../../libpri-1.2.4 -Iinclude -I. -w
...@@ -67,14 +68,16 @@ $(MYLIB): $(OBJS) ...@@ -67,14 +68,16 @@ $(MYLIB): $(OBJS)
ranlib $(MYLIB) ranlib $(MYLIB)
testapp: testapp.c $(MYLIB) testapp: testapp.c $(MYLIB)
$(CC) -L. -Iinclude testapp.c -o testapp -lopenzap -lm -lpthread $(CC) $(INCS) -L. testapp.c -o testapp -lopenzap -lm -lpthread
testisdn: testisdn.c $(MYLIB)
$(CC) $(INCS) -L. testisdn.c -o testisdn -lopenzap -lm -lpthread
priserver.o: priserver.c priserver.o: priserver.c
$(CC) $(TMP) -c priserver.c -o priserver.o $(CC) $(INCS) $(TMP) -c priserver.c -o priserver.o
sangoma_pri.o: sangoma_pri.c sangoma_pri.o: sangoma_pri.c
$(CC) $(TMP) -c sangoma_pri.c -o sangoma_pri.o $(CC) $(INCS) $(TMP) -c sangoma_pri.c -o sangoma_pri.o
priserver: $(MYLIB) priserver.o sangoma_pri.o priserver: $(MYLIB) priserver.o sangoma_pri.o
$(CC) sangoma_pri.o priserver.o -L. -o priserver -lopenzap -lm -lpthread ../../libpri-1.2.4/libpri.a $(CC) sangoma_pri.o priserver.o -L. -o priserver -lopenzap -lm -lpthread ../../libpri-1.2.4/libpri.a
......
...@@ -88,6 +88,8 @@ ...@@ -88,6 +88,8 @@
#include "libteletone.h" #include "libteletone.h"
#include "zap_buffer.h" #include "zap_buffer.h"
#include "zap_threadmutex.h" #include "zap_threadmutex.h"
#include "Q931.h"
#include "Q921.h"
#ifdef NDEBUG #ifdef NDEBUG
#undef assert #undef assert
...@@ -185,6 +187,26 @@ struct zap_channel { ...@@ -185,6 +187,26 @@ struct zap_channel {
}; };
struct zap_sigmsg {
zap_signal_event_t event_id;
uint32_t chan_id;
char cid_name[80];
char ani[25];
char aniII[25];
char dnis[25];
};
struct zap_isdn_data {
Q921Data_t q921;
Q931_TrunkInfo_t q931;
zap_channel_t *dchan;
zap_channel_t *dchans[2];
struct zap_sigmsg sigmsg;
zio_signal_cb_t sig_cb;
uint32_t flags;
};
struct zap_span { struct zap_span {
uint32_t span_id; uint32_t span_id;
uint32_t chan_count; uint32_t chan_count;
...@@ -192,7 +214,10 @@ struct zap_span { ...@@ -192,7 +214,10 @@ struct zap_span {
struct zap_io_interface *zio; struct zap_io_interface *zio;
zio_event_cb_t event_callback; zio_event_cb_t event_callback;
zap_mutex_t *mutex; zap_mutex_t *mutex;
zap_trunk_type_t trunk_type;
zap_signal_type_t signal_type; zap_signal_type_t signal_type;
struct zap_isdn_data *isdn_data;
char last_error[256];
zap_channel_t channels[ZAP_MAX_CHANNELS_SPAN]; zap_channel_t channels[ZAP_MAX_CHANNELS_SPAN];
}; };
...@@ -212,6 +237,8 @@ struct zap_io_interface { ...@@ -212,6 +237,8 @@ struct zap_io_interface {
struct zap_span spans[ZAP_MAX_SPANS_INTERFACE]; struct zap_span spans[ZAP_MAX_SPANS_INTERFACE];
}; };
zap_trunk_type_t str2zap_trunk_type(char *name);
char *zap_trunk_type2str(zap_trunk_type_t type);
zap_status_t zap_span_find(const char *name, uint32_t id, zap_span_t **span); zap_status_t zap_span_find(const char *name, uint32_t id, zap_span_t **span);
zap_status_t zap_span_create(zap_io_interface_t *zio, zap_span_t **span); zap_status_t zap_span_create(zap_io_interface_t *zio, zap_span_t **span);
zap_status_t zap_span_close_all(zap_io_interface_t *zio); zap_status_t zap_span_close_all(zap_io_interface_t *zio);
...@@ -230,5 +257,7 @@ zap_status_t zap_global_destroy(void); ...@@ -230,5 +257,7 @@ zap_status_t zap_global_destroy(void);
void zap_global_set_logger(zap_logger_t logger); void zap_global_set_logger(zap_logger_t logger);
void zap_global_set_default_logger(int level); void zap_global_set_default_logger(int level);
uint32_t zap_separate_string(char *buf, char delim, char **array, int arraylen); uint32_t zap_separate_string(char *buf, char delim, char **array, int arraylen);
void print_bits(uint8_t *b, int bl, char *buf, int blen, int e);
#endif #endif
/*
* Copyright (c) 2007, Anthony Minessale II
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the original author; nor the names of any contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef ZAP_ISDN_H
#define ZAP_ISDN_H
#include "openzap.h"
typedef enum {
ZAP_ISDN_RUNNING = (1 << 0)
} zap_isdn_flag_t;
typedef struct zap_isdn_data zap_isdn_data_t;
zap_status_t zap_isdn_start(zap_span_t *span);
zap_status_t zap_isdn_init(void);
zap_status_t zap_isdn_configure_span(zap_span_t *span, Q921NetUser_t mode, Q931Dialect_t dialect, zio_signal_cb_t sig_cb);
#endif
...@@ -50,6 +50,14 @@ struct zap_io_interface; ...@@ -50,6 +50,14 @@ struct zap_io_interface;
#define ZAP_COMMAND_OBJ_INT *((int *)obj) #define ZAP_COMMAND_OBJ_INT *((int *)obj)
#define ZAP_COMMAND_OBJ_CHAR_P (char *)obj #define ZAP_COMMAND_OBJ_CHAR_P (char *)obj
typedef enum {
ZAP_TRUNK_E1,
ZAP_TRUNK_T1,
ZAP_TRUNK_J1,
ZAP_TRUNK_BRI,
ZAP_TRUNK_NONE
} zap_trunk_type_t;
typedef enum { typedef enum {
ZAP_SIGTYPE_NONE, ZAP_SIGTYPE_NONE,
ZAP_SIGTYPE_ISDN, ZAP_SIGTYPE_ISDN,
...@@ -71,7 +79,6 @@ typedef enum { ...@@ -71,7 +79,6 @@ typedef enum {
typedef enum { typedef enum {
ZAP_EVENT_NONE, ZAP_EVENT_NONE,
ZAP_EVENT_DTMF, ZAP_EVENT_DTMF,
ZAP_EVENT_COUNT ZAP_EVENT_COUNT
} zap_event_type_t; } zap_event_type_t;
...@@ -158,7 +165,10 @@ typedef enum { ...@@ -158,7 +165,10 @@ typedef enum {
typedef struct zap_channel zap_channel_t; typedef struct zap_channel zap_channel_t;
typedef struct zap_event zap_event_t; typedef struct zap_event zap_event_t;
typedef struct zap_sigmsg zap_sigmsg_t;
typedef struct zap_span zap_span_t;
#define ZIO_SIGNAL_CB_ARGS (zap_span_t *span, zap_sigmsg_t *sigmsg, void *raw_data, uint32_t raw_data_len)
#define ZIO_EVENT_CB_ARGS (zap_channel_t *zchan, zap_event_t *event) #define ZIO_EVENT_CB_ARGS (zap_channel_t *zchan, zap_event_t *event)
#define ZIO_CODEC_ARGS (void *data, zap_size_t max, zap_size_t *datalen) #define ZIO_CODEC_ARGS (void *data, zap_size_t max, zap_size_t *datalen)
#define ZIO_CONFIGURE_ARGS (struct zap_io_interface *zio) #define ZIO_CONFIGURE_ARGS (struct zap_io_interface *zio)
...@@ -169,6 +179,7 @@ typedef struct zap_event zap_event_t; ...@@ -169,6 +179,7 @@ typedef struct zap_event zap_event_t;
#define ZIO_READ_ARGS (zap_channel_t *zchan, void *data, zap_size_t *datalen) #define ZIO_READ_ARGS (zap_channel_t *zchan, void *data, zap_size_t *datalen)
#define ZIO_WRITE_ARGS (zap_channel_t *zchan, void *data, zap_size_t *datalen) #define ZIO_WRITE_ARGS (zap_channel_t *zchan, void *data, zap_size_t *datalen)
typedef zap_status_t (*zio_signal_cb_t) ZIO_SIGNAL_CB_ARGS ;
typedef zap_status_t (*zio_event_cb_t) ZIO_EVENT_CB_ARGS ; typedef zap_status_t (*zio_event_cb_t) ZIO_EVENT_CB_ARGS ;
typedef zap_status_t (*zio_codec_t) ZIO_CODEC_ARGS ; typedef zap_status_t (*zio_codec_t) ZIO_CODEC_ARGS ;
typedef zap_status_t (*zio_configure_t) ZIO_CONFIGURE_ARGS ; typedef zap_status_t (*zio_configure_t) ZIO_CONFIGURE_ARGS ;
...@@ -179,6 +190,7 @@ typedef zap_status_t (*zio_wait_t) ZIO_WAIT_ARGS ; ...@@ -179,6 +190,7 @@ typedef zap_status_t (*zio_wait_t) ZIO_WAIT_ARGS ;
typedef zap_status_t (*zio_read_t) ZIO_READ_ARGS ; typedef zap_status_t (*zio_read_t) ZIO_READ_ARGS ;
typedef zap_status_t (*zio_write_t) ZIO_WRITE_ARGS ; typedef zap_status_t (*zio_write_t) ZIO_WRITE_ARGS ;
#define ZIO_SIGNAL_CB_FUNCTION(name) zap_status_t name ZIO_SIGNAL_CB_ARGS
#define ZIO_EVENT_CB_FUNCTION(name) zap_status_t name ZIO_EVENT_CB_ARGS #define ZIO_EVENT_CB_FUNCTION(name) zap_status_t name ZIO_EVENT_CB_ARGS
#define ZIO_CODEC_FUNCTION(name) zap_status_t name ZIO_CODEC_ARGS #define ZIO_CODEC_FUNCTION(name) zap_status_t name ZIO_CODEC_ARGS
#define ZIO_CONFIGURE_FUNCTION(name) zap_status_t name ZIO_CONFIGURE_ARGS #define ZIO_CONFIGURE_FUNCTION(name) zap_status_t name ZIO_CONFIGURE_ARGS
...@@ -217,7 +229,7 @@ typedef zap_status_t (*zio_write_t) ZIO_WRITE_ARGS ; ...@@ -217,7 +229,7 @@ typedef zap_status_t (*zio_write_t) ZIO_WRITE_ARGS ;
#define ZAP_LOG_ALERT ZAP_PRE, ZAP_LOG_LEVEL_ALERT #define ZAP_LOG_ALERT ZAP_PRE, ZAP_LOG_LEVEL_ALERT
#define ZAP_LOG_EMERG ZAP_PRE, ZAP_LOG_LEVEL_EMERG #define ZAP_LOG_EMERG ZAP_PRE, ZAP_LOG_LEVEL_EMERG
typedef struct zap_span zap_span_t;
typedef void (*zap_logger_t)(char *file, const char *func, int line, int level, char *fmt, ...); typedef void (*zap_logger_t)(char *file, const char *func, int line, int level, char *fmt, ...);
typedef struct zap_io_interface zap_io_interface_t; typedef struct zap_io_interface zap_io_interface_t;
typedef struct hashtable zap_hash_t; typedef struct hashtable zap_hash_t;
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
*****************************************************************************/ *****************************************************************************/
#include "Q921.h" #include "Q921.h"
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h>
#include "mfifo.h" #include "mfifo.h"
/***************************************************************************** /*****************************************************************************
...@@ -265,7 +266,7 @@ int Q921Start(L2TRUNK trunk) ...@@ -265,7 +266,7 @@ int Q921Start(L2TRUNK trunk)
trunk->sapi, trunk->sapi,
trunk->NetUser == Q921_TE ? 0 : 1, trunk->NetUser == Q921_TE ? 0 : 1,
trunk->tei, trunk->tei,
0); 1);
} }
/***************************************************************************** /*****************************************************************************
...@@ -381,10 +382,12 @@ int Q921Rx12(L2TRUNK trunk) ...@@ -381,10 +382,12 @@ int Q921Rx12(L2TRUNK trunk)
L2UCHAR *mes; L2UCHAR *mes;
L2INT rs,size; /* receive size & Q921 frame size*/ L2INT rs,size; /* receive size & Q921 frame size*/
L2UCHAR *smes = MFIFOGetMesPtr(trunk->HDLCInQueue, &size); L2UCHAR *smes = MFIFOGetMesPtr(trunk->HDLCInQueue, &size);
if(smes != NULL) if(smes != NULL)
{ {
rs = size - trunk->Q921HeaderSpace; rs = size - trunk->Q921HeaderSpace;
mes = &smes[trunk->Q921HeaderSpace]; mes = &smes[trunk->Q921HeaderSpace];
/* check for I frame */ /* check for I frame */
if((mes[2] & 0x01) == 0) if((mes[2] & 0x01) == 0)
{ {
......
...@@ -55,13 +55,13 @@ ...@@ -55,13 +55,13 @@
these table entries during system inititialization of a stack. these table entries during system inititialization of a stack.
*****************************************************************************/ *****************************************************************************/
L3INT (*Q931Proc [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo *pTrunk, L3UCHAR *,L3INT); L3INT (*Q931Proc [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *,L3INT);
L3INT (*Q931Umes [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size); L3INT (*Q931Umes [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size);
L3INT (*Q931Pmes [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize); L3INT (*Q931Pmes [Q931MAXDLCT][Q931MAXMES]) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
L3INT (*Q931Uie [Q931MAXDLCT][Q931MAXIE]) (Q931_TrunkInfo *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff); L3INT (*Q931Uie [Q931MAXDLCT][Q931MAXIE]) (Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
L3INT (*Q931Pie [Q931MAXDLCT][Q931MAXIE]) (Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet); L3INT (*Q931Pie [Q931MAXDLCT][Q931MAXIE]) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
void (*Q931CreateDialectCB[Q931MAXDLCT]) (L3UCHAR iDialect)= void (*Q931CreateDialectCB[Q931MAXDLCT]) (L3UCHAR iDialect)=
{ {
...@@ -130,7 +130,7 @@ void Q931SetL2HeaderSpace(L3INT space) ...@@ -130,7 +130,7 @@ void Q931SetL2HeaderSpace(L3INT space)
Description: Dummy function for message processing. Description: Dummy function for message processing.
*****************************************************************************/ *****************************************************************************/
L3INT Q931ProcDummy(Q931_TrunkInfo *pTrunk, L3UCHAR * b,L3INT c) L3INT Q931ProcDummy(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b,L3INT c)
{ {
return Q931E_INTERNAL; return Q931E_INTERNAL;
} }
...@@ -142,7 +142,7 @@ L3INT Q931ProcDummy(Q931_TrunkInfo *pTrunk, L3UCHAR * b,L3INT c) ...@@ -142,7 +142,7 @@ L3INT Q931ProcDummy(Q931_TrunkInfo *pTrunk, L3UCHAR * b,L3INT c)
Description: Dummy function for message processing Description: Dummy function for message processing
*****************************************************************************/ *****************************************************************************/
L3INT Q931UmesDummy(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size) L3INT Q931UmesDummy(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)
{ {
return Q931E_UNKNOWN_MESSAGE; return Q931E_UNKNOWN_MESSAGE;
} }
...@@ -154,7 +154,7 @@ L3INT Q931UmesDummy(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT I ...@@ -154,7 +154,7 @@ L3INT Q931UmesDummy(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT I
Description: Dummy function for message processing Description: Dummy function for message processing
*****************************************************************************/ *****************************************************************************/
L3INT Q931UieDummy(Q931_TrunkInfo *pTrunk,ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff) L3INT Q931UieDummy(Q931_TrunkInfo_t *pTrunk,ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
{ {
return Q931E_UNKNOWN_IE; return Q931E_UNKNOWN_IE;
} }
...@@ -166,7 +166,7 @@ L3INT Q931UieDummy(Q931_TrunkInfo *pTrunk,ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf ...@@ -166,7 +166,7 @@ L3INT Q931UieDummy(Q931_TrunkInfo *pTrunk,ie *pIE,L3UCHAR * IBuf, L3UCHAR * OBuf
Description: Dummy function for message processing Description: Dummy function for message processing
*****************************************************************************/ *****************************************************************************/
L3INT Q931PmesDummy(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize) L3INT Q931PmesDummy(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
{ {
return Q931E_UNKNOWN_MESSAGE; return Q931E_UNKNOWN_MESSAGE;
} }
...@@ -178,7 +178,7 @@ L3INT Q931PmesDummy(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3INT ISize, L3UCHAR * ...@@ -178,7 +178,7 @@ L3INT Q931PmesDummy(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3INT ISize, L3UCHAR *
Description: Dummy function for message processing Description: Dummy function for message processing
*****************************************************************************/ *****************************************************************************/
L3INT Q931PieDummy(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet) L3INT Q931PieDummy(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet)
{ {
return Q931E_UNKNOWN_IE; return Q931E_UNKNOWN_IE;
} }
...@@ -190,7 +190,7 @@ L3INT Q931PieDummy(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *O ...@@ -190,7 +190,7 @@ L3INT Q931PieDummy(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *O
Description: Dummy function for message processing Description: Dummy function for message processing
*****************************************************************************/ *****************************************************************************/
L3INT Q931TxDummy(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT n) L3INT Q931TxDummy(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT n)
{ {
return Q931E_MISSING_CB; return Q931E_MISSING_CB;
} }
...@@ -275,7 +275,7 @@ void Q931Initialize() ...@@ -275,7 +275,7 @@ void Q931Initialize()
Return Value: none Return Value: none
*****************************************************************************/ *****************************************************************************/
void Q931TimeTick(Q931_TrunkInfo *pTrunk, L3ULONG ms) void Q931TimeTick(Q931_TrunkInfo_t *pTrunk, L3ULONG ms)
{ {
(void)pTrunk; (void)pTrunk;
ms=ms; /* avoid warning for now. */ ms=ms; /* avoid warning for now. */
...@@ -308,26 +308,27 @@ void Q931TimeTick(Q931_TrunkInfo *pTrunk, L3ULONG ms) ...@@ -308,26 +308,27 @@ void Q931TimeTick(Q931_TrunkInfo *pTrunk, L3ULONG ms)
see q931errors.h for details. see q931errors.h for details.
*****************************************************************************/ *****************************************************************************/
L3INT Q931Rx23(Q931_TrunkInfo *pTrunk, L3UCHAR * buf, L3INT Size) L3INT Q931Rx23(Q931_TrunkInfo_t *pTrunk, L3UCHAR * buf, L3INT Size)
{ {
L3UCHAR *Mes = &buf[Q931L2HeaderSpace]; L3UCHAR *Mes = &buf[Q931L2HeaderSpace];
L3INT RetCode = Q931E_NO_ERROR; L3INT RetCode = Q931E_NO_ERROR;
Q931mes_Alerting *m = (Q931mes_Alerting *) pTrunk->L3Buf;
Q931mes_Alerting * m = (Q931mes_Alerting*)Mes;
L3INT ISize; L3INT ISize;
L3INT IOff = 0; L3INT IOff = 0;
/* Protocol Discriminator */ /* Protocol Discriminator */
m->ProtDisc = Mes[IOff++]; m->ProtDisc = Mes[IOff++];
/* CRV */ /* CRV */
m->CRV = Q931Uie_CRV(pTrunk, Mes,m->buf, &IOff, &ISize); m->CRV = Q931Uie_CRV(pTrunk, Mes, m->buf, &IOff, &ISize);
/* Message Type */ /* Message Type */
m->MesType = Mes[IOff++]; m->MesType = Mes[IOff++];
/* Call table proc to unpack codec message */ /* Call table proc to unpack codec message */
RetCode = Q931Umes[pTrunk->Dialect][m->MesType](pTrunk, Mes, pTrunk->L3Buf,Q931L4HeaderSpace,Size- Q931L4HeaderSpace); RetCode = Q931Umes[pTrunk->Dialect][m->MesType](pTrunk, Mes, pTrunk->L3Buf, Q931L4HeaderSpace, Size - Q931L4HeaderSpace);
if(RetCode >= Q931E_NO_ERROR) if(RetCode >= Q931E_NO_ERROR)
{ {
RetCode=Q931Proc[pTrunk->Dialect][m->MesType](pTrunk, pTrunk->L3Buf, 2); RetCode=Q931Proc[pTrunk->Dialect][m->MesType](pTrunk, pTrunk->L3Buf, 2);
...@@ -349,7 +350,7 @@ L3INT Q931Rx23(Q931_TrunkInfo *pTrunk, L3UCHAR * buf, L3INT Size) ...@@ -349,7 +350,7 @@ L3INT Q931Rx23(Q931_TrunkInfo *pTrunk, L3UCHAR * buf, L3INT Size)
see q931errors.h for details. see q931errors.h for details.
*****************************************************************************/ *****************************************************************************/
L3INT Q931Tx34(Q931_TrunkInfo *pTrunk, L3UCHAR * Mes, L3INT Size) L3INT Q931Tx34(Q931_TrunkInfo_t *pTrunk, L3UCHAR * Mes, L3INT Size)
{ {
if (pTrunk->Q931Tx34CBProc) { if (pTrunk->Q931Tx34CBProc) {
return pTrunk->Q931Tx34CBProc(pTrunk->PrivateData34, Mes, Size); return pTrunk->Q931Tx34CBProc(pTrunk->PrivateData34, Mes, Size);
...@@ -371,7 +372,7 @@ L3INT Q931Tx34(Q931_TrunkInfo *pTrunk, L3UCHAR * Mes, L3INT Size) ...@@ -371,7 +372,7 @@ L3INT Q931Tx34(Q931_TrunkInfo *pTrunk, L3UCHAR * Mes, L3INT Size)
see q931errors.h for details. see q931errors.h for details.
*****************************************************************************/ *****************************************************************************/
L3INT Q931Rx43(Q931_TrunkInfo *pTrunk,L3UCHAR * buf, L3INT Size) L3INT Q931Rx43(Q931_TrunkInfo_t *pTrunk,L3UCHAR * buf, L3INT Size)
{ {
Q931mes_Header *ptr = (Q931mes_Header*)&buf[Q931L4HeaderSpace]; Q931mes_Header *ptr = (Q931mes_Header*)&buf[Q931L4HeaderSpace];
L3INT RetCode = Q931E_NO_ERROR; L3INT RetCode = Q931E_NO_ERROR;
...@@ -398,7 +399,7 @@ L3INT Q931Rx43(Q931_TrunkInfo *pTrunk,L3UCHAR * buf, L3INT Size) ...@@ -398,7 +399,7 @@ L3INT Q931Rx43(Q931_TrunkInfo *pTrunk,L3UCHAR * buf, L3INT Size)
see q931errors.h for details. see q931errors.h for details.
*****************************************************************************/ *****************************************************************************/
L3INT Q931Tx32(Q931_TrunkInfo *pTrunk, L3UCHAR * Mes, L3INT Size) L3INT Q931Tx32(Q931_TrunkInfo_t *pTrunk, L3UCHAR * Mes, L3INT Size)
{ {
L3INT OSize; L3INT OSize;
Q931mes_Alerting *ptr = (Q931mes_Alerting*)Mes; Q931mes_Alerting *ptr = (Q931mes_Alerting*)Mes;
...@@ -432,7 +433,7 @@ L3INT Q931Tx32(Q931_TrunkInfo *pTrunk, L3UCHAR * Mes, L3INT Size) ...@@ -432,7 +433,7 @@ L3INT Q931Tx32(Q931_TrunkInfo *pTrunk, L3UCHAR * Mes, L3INT Size)
*****************************************************************************/ *****************************************************************************/
void Q931SetError(Q931_TrunkInfo *pTrunk,L3INT ErrID, L3INT ErrPar1, L3INT ErrPar2) void Q931SetError(Q931_TrunkInfo_t *pTrunk,L3INT ErrID, L3INT ErrPar1, L3INT ErrPar2)
{ {
if (pTrunk->Q931ErrorCBProc) { if (pTrunk->Q931ErrorCBProc) {
pTrunk->Q931ErrorCBProc(pTrunk->PrivateData34, ErrID, ErrPar1, ErrPar2); pTrunk->Q931ErrorCBProc(pTrunk->PrivateData34, ErrID, ErrPar1, ErrPar2);
...@@ -461,7 +462,7 @@ void Q931SetDefaultErrorCB(Q931ErrorCB_t Q931ErrorPar) ...@@ -461,7 +462,7 @@ void Q931SetDefaultErrorCB(Q931ErrorCB_t Q931ErrorPar)
see q931errors.h for details. see q931errors.h for details.
*****************************************************************************/ *****************************************************************************/
L3INT Q931CreateCRV(Q931_TrunkInfo *pTrunk, L3INT * callIndex) L3INT Q931CreateCRV(Q931_TrunkInfo_t *pTrunk, L3INT * callIndex)
{ {
L3INT CRV = Q931GetUniqueCRV(pTrunk); L3INT CRV = Q931GetUniqueCRV(pTrunk);
...@@ -483,7 +484,7 @@ L3INT Q931CreateCRV(Q931_TrunkInfo *pTrunk, L3INT * callIndex) ...@@ -483,7 +484,7 @@ L3INT Q931CreateCRV(Q931_TrunkInfo *pTrunk, L3INT * callIndex)
see q931errors.h for details. see q931errors.h for details.
*****************************************************************************/ *****************************************************************************/
L3INT Q931AllocateCRV(Q931_TrunkInfo *pTrunk, L3INT iCRV, L3INT * callIndex) L3INT Q931AllocateCRV(Q931_TrunkInfo_t *pTrunk, L3INT iCRV, L3INT * callIndex)
{ {
L3INT x; L3INT x;
for(x=0; x < Q931MAXCALLPERTRUNK; x++) for(x=0; x < Q931MAXCALLPERTRUNK; x++)
...@@ -516,7 +517,7 @@ L3INT Q931AllocateCRV(Q931_TrunkInfo *pTrunk, L3INT iCRV, L3INT * callIndex) ...@@ -516,7 +517,7 @@ L3INT Q931AllocateCRV(Q931_TrunkInfo *pTrunk, L3INT iCRV, L3INT * callIndex)
Return Value: Call State. Return Value: Call State.
*****************************************************************************/ *****************************************************************************/
L3INT Q931GetCallState(Q931_TrunkInfo *pTrunk, L3INT iCRV) L3INT Q931GetCallState(Q931_TrunkInfo_t *pTrunk, L3INT iCRV)
{ {
L3INT x; L3INT x;
for(x=0; x < Q931MAXCALLPERTRUNK; x++) for(x=0; x < Q931MAXCALLPERTRUNK; x++)
...@@ -542,21 +543,21 @@ L3INT Q931GetCallState(Q931_TrunkInfo *pTrunk, L3INT iCRV) ...@@ -542,21 +543,21 @@ L3INT Q931GetCallState(Q931_TrunkInfo *pTrunk, L3INT iCRV)
callindex call index. callindex call index.
iTimer timer id iTimer timer id
*****************************************************************************/ *****************************************************************************/
L3INT Q931StartTimer(Q931_TrunkInfo *pTrunk, L3INT callIndex, L3USHORT iTimerID) L3INT Q931StartTimer(Q931_TrunkInfo_t *pTrunk, L3INT callIndex, L3USHORT iTimerID)
{ {
pTrunk->call[callIndex].Timer = Q931GetTime(); pTrunk->call[callIndex].Timer = Q931GetTime();
pTrunk->call[callIndex].TimerID = iTimerID; pTrunk->call[callIndex].TimerID = iTimerID;
return 0; return 0;
} }
L3INT Q931StopTimer(Q931_TrunkInfo *pTrunk, L3INT callindex, L3USHORT iTimerID) L3INT Q931StopTimer(Q931_TrunkInfo_t *pTrunk, L3INT callindex, L3USHORT iTimerID)
{ {
if(pTrunk->call[callindex].TimerID == iTimerID) if(pTrunk->call[callindex].TimerID == iTimerID)
pTrunk->call[callindex].TimerID = 0; pTrunk->call[callindex].TimerID = 0;
return 0; return 0;
} }
L3INT Q931SetState(Q931_TrunkInfo *pTrunk, L3INT callIndex, L3INT iState) L3INT Q931SetState(Q931_TrunkInfo_t *pTrunk, L3INT callIndex, L3INT iState)
{ {
pTrunk->call[callIndex].State = iState; pTrunk->call[callIndex].State = iState;
...@@ -584,7 +585,7 @@ void Q931SetGetTimeCB(L3ULONG (*callback)()) ...@@ -584,7 +585,7 @@ void Q931SetGetTimeCB(L3ULONG (*callback)())
Q931GetTimeProc = callback; Q931GetTimeProc = callback;
} }
L3INT Q931FindCRV(Q931_TrunkInfo *pTrunk, L3INT crv, L3INT *callindex) L3INT Q931FindCRV(Q931_TrunkInfo_t *pTrunk, L3INT crv, L3INT *callindex)
{ {
L3INT x; L3INT x;
for(x=0; x < Q931MAXCALLPERTRUNK; x++) for(x=0; x < Q931MAXCALLPERTRUNK; x++)
......
...@@ -68,7 +68,7 @@ L3INT Q931CreateIEIndex(L3INT iec) ...@@ -68,7 +68,7 @@ L3INT Q931CreateIEIndex(L3INT iec)
} }
*/ */
L3INT Q931Api_InitTrunk(Q931_TrunkInfo *pTrunk, L3INT Q931Api_InitTrunk(Q931_TrunkInfo_t *pTrunk,
Q931Dialect_t Dialect, Q931Dialect_t Dialect,
Q931NetUser_t NetUser, Q931NetUser_t NetUser,
Q931_TrunkType_t TrunkType, Q931_TrunkType_t TrunkType,
...@@ -146,9 +146,9 @@ L3INT Q931Api_InitTrunk(Q931_TrunkInfo *pTrunk, ...@@ -146,9 +146,9 @@ L3INT Q931Api_InitTrunk(Q931_TrunkInfo *pTrunk,
} }
void Q931SetMesProc(L3UCHAR mes, L3UCHAR dialect, void Q931SetMesProc(L3UCHAR mes, L3UCHAR dialect,
L3INT (*Q931ProcFunc)(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom), L3INT (*Q931ProcFunc)(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom),
L3INT (*Q931UmesFunc)(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size), L3INT (*Q931UmesFunc)(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size),
L3INT (*Q931PmesFunc)(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize) L3INT (*Q931PmesFunc)(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
) )
{ {
if(Q931ProcFunc != NULL) if(Q931ProcFunc != NULL)
...@@ -160,8 +160,8 @@ void Q931SetMesProc(L3UCHAR mes, L3UCHAR dialect, ...@@ -160,8 +160,8 @@ void Q931SetMesProc(L3UCHAR mes, L3UCHAR dialect,
} }
void Q931SetIEProc(L3UCHAR iec, L3UCHAR dialect, void Q931SetIEProc(L3UCHAR iec, L3UCHAR dialect,
L3INT (*Q931PieProc)(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet), L3INT (*Q931PieProc)(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet),
L3INT (*Q931UieProc)(Q931_TrunkInfo *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff) L3INT (*Q931UieProc)(Q931_TrunkInfo_t *pTrunk, ie *pIE, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff)
) )
{ {
if(Q931PieProc != NULL) if(Q931PieProc != NULL)
...@@ -357,7 +357,7 @@ ie Q931AppendIE( L3UCHAR *pm, L3UCHAR *pi) ...@@ -357,7 +357,7 @@ ie Q931AppendIE( L3UCHAR *pm, L3UCHAR *pi)
/***************************************************************************** /*****************************************************************************
*****************************************************************************/ *****************************************************************************/
L3INT Q931GetUniqueCRV(Q931_TrunkInfo *pTrunk) L3INT Q931GetUniqueCRV(Q931_TrunkInfo_t *pTrunk)
{ {
static L3INT crv={1}; static L3INT crv={1};
return crv++; return crv++;
...@@ -640,7 +640,7 @@ L3INT Q931InitIEHLComp(Q931ie_HLComp * pIE) ...@@ -640,7 +640,7 @@ L3INT Q931InitIEHLComp(Q931ie_HLComp * pIE)
return 0; return 0;
} }
L3INT Q931ProcUnknownMessage(Q931_TrunkInfo *pTrunk,L3UCHAR * b, L3INT iFrom) L3INT Q931ProcUnknownMessage(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom)
{ {
/* TODO: Unhandled paramaters */ /* TODO: Unhandled paramaters */
(void)pTrunk; (void)pTrunk;
...@@ -650,7 +650,7 @@ L3INT Q931ProcUnknownMessage(Q931_TrunkInfo *pTrunk,L3UCHAR * b, L3INT iFrom) ...@@ -650,7 +650,7 @@ L3INT Q931ProcUnknownMessage(Q931_TrunkInfo *pTrunk,L3UCHAR * b, L3INT iFrom)
return 0; return 0;
} }
L3INT Q931ProcUnexpectedMessage(Q931_TrunkInfo *pTrunk,L3UCHAR * b, L3INT iFrom) L3INT Q931ProcUnexpectedMessage(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom)
{ {
/* TODO: Unhandled paramaters */ /* TODO: Unhandled paramaters */
(void)pTrunk; (void)pTrunk;
...@@ -660,7 +660,7 @@ L3INT Q931ProcUnexpectedMessage(Q931_TrunkInfo *pTrunk,L3UCHAR * b, L3INT iFrom) ...@@ -660,7 +660,7 @@ L3INT Q931ProcUnexpectedMessage(Q931_TrunkInfo *pTrunk,L3UCHAR * b, L3INT iFrom)
return 0; return 0;
} }
L3INT Q931Disconnect(Q931_TrunkInfo *pTrunk, L3INT iTo, L3INT iCRV, L3INT iCause) L3INT Q931Disconnect(Q931_TrunkInfo_t *pTrunk, L3INT iTo, L3INT iCRV, L3INT iCause)
{ {
/* TODO: Unhandled paramaters */ /* TODO: Unhandled paramaters */
(void)pTrunk; (void)pTrunk;
...@@ -671,7 +671,7 @@ L3INT Q931Disconnect(Q931_TrunkInfo *pTrunk, L3INT iTo, L3INT iCRV, L3INT iCause ...@@ -671,7 +671,7 @@ L3INT Q931Disconnect(Q931_TrunkInfo *pTrunk, L3INT iTo, L3INT iCRV, L3INT iCause
return 0; return 0;
} }
L3INT Q931ReleaseComplete(Q931_TrunkInfo *pTrunk, L3INT iTo) L3INT Q931ReleaseComplete(Q931_TrunkInfo_t *pTrunk, L3INT iTo)
{ {
/* TODO: Unhandled paramaters */ /* TODO: Unhandled paramaters */
(void)pTrunk; (void)pTrunk;
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
*****************************************************************************/ *****************************************************************************/
L3INT Q932Umes_Facility(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size) L3INT Q932Umes_Facility(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)
{ {
/* L3INT i = IOff; */ /* L3INT i = IOff; */
/* L3INT ir=0; */ /* L3INT ir=0; */
...@@ -61,7 +61,7 @@ L3INT Q932Umes_Facility(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3I ...@@ -61,7 +61,7 @@ L3INT Q932Umes_Facility(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3I
Function: Q931Pmes_Facility Function: Q931Pmes_Facility
*****************************************************************************/ *****************************************************************************/
L3INT Q932Pmes_Facility(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize) L3INT Q932Pmes_Facility(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
{ {
L3BOOL RetCode = L3FALSE; L3BOOL RetCode = L3FALSE;
...@@ -77,7 +77,7 @@ L3INT Q932Pmes_Facility(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UC ...@@ -77,7 +77,7 @@ L3INT Q932Pmes_Facility(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UC
*****************************************************************************/ *****************************************************************************/
L3INT Q932Umes_Hold(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size) L3INT Q932Umes_Hold(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)
{ {
/* L3INT i = IOff; */ /* L3INT i = IOff; */
/* L3INT ir=0; */ /* L3INT ir=0; */
...@@ -95,7 +95,7 @@ L3INT Q932Umes_Hold(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT I ...@@ -95,7 +95,7 @@ L3INT Q932Umes_Hold(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT I
Function: Q931Pmes_Hold Function: Q931Pmes_Hold
*****************************************************************************/ *****************************************************************************/
L3INT Q932Pmes_Hold(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize) L3INT Q932Pmes_Hold(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
{ {
L3BOOL RetCode = L3FALSE; L3BOOL RetCode = L3FALSE;
...@@ -111,7 +111,7 @@ L3INT Q932Pmes_Hold(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR ...@@ -111,7 +111,7 @@ L3INT Q932Pmes_Hold(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR
*****************************************************************************/ *****************************************************************************/
L3INT Q932Umes_HoldAck(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size) L3INT Q932Umes_HoldAck(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)
{ {
/* L3INT i = IOff; */ /* L3INT i = IOff; */
/* L3INT ir=0; */ /* L3INT ir=0; */
...@@ -129,7 +129,7 @@ L3INT Q932Umes_HoldAck(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3IN ...@@ -129,7 +129,7 @@ L3INT Q932Umes_HoldAck(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3IN
Function: Q931Pmes_HoldAck Function: Q931Pmes_HoldAck
*****************************************************************************/ *****************************************************************************/
L3INT Q932Pmes_HoldAck(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize) L3INT Q932Pmes_HoldAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
{ {
L3BOOL RetCode = L3FALSE; L3BOOL RetCode = L3FALSE;
...@@ -145,7 +145,7 @@ L3INT Q932Pmes_HoldAck(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCH ...@@ -145,7 +145,7 @@ L3INT Q932Pmes_HoldAck(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCH
*****************************************************************************/ *****************************************************************************/
L3INT Q932Umes_HoldReject(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size) L3INT Q932Umes_HoldReject(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)
{ {
/* L3INT i = IOff; */ /* L3INT i = IOff; */
/* L3INT ir=0; */ /* L3INT ir=0; */
...@@ -163,7 +163,7 @@ L3INT Q932Umes_HoldReject(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L ...@@ -163,7 +163,7 @@ L3INT Q932Umes_HoldReject(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L
Function: Q931Pmes_HoldReject Function: Q931Pmes_HoldReject
*****************************************************************************/ *****************************************************************************/
L3INT Q932Pmes_HoldReject(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize) L3INT Q932Pmes_HoldReject(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
{ {
L3BOOL RetCode = L3FALSE; L3BOOL RetCode = L3FALSE;
...@@ -179,7 +179,7 @@ L3INT Q932Pmes_HoldReject(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3 ...@@ -179,7 +179,7 @@ L3INT Q932Pmes_HoldReject(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3
*****************************************************************************/ *****************************************************************************/
L3INT Q932Umes_Register(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size) L3INT Q932Umes_Register(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)
{ {
/* L3INT i = IOff; */ /* L3INT i = IOff; */
/* L3INT ir=0; */ /* L3INT ir=0; */
...@@ -197,7 +197,7 @@ L3INT Q932Umes_Register(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3I ...@@ -197,7 +197,7 @@ L3INT Q932Umes_Register(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3I
Function: Q931Pmes_Register Function: Q931Pmes_Register
*****************************************************************************/ *****************************************************************************/
L3INT Q932Pmes_Register(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize) L3INT Q932Pmes_Register(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
{ {
L3BOOL RetCode = L3FALSE; L3BOOL RetCode = L3FALSE;
...@@ -213,7 +213,7 @@ L3INT Q932Pmes_Register(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UC ...@@ -213,7 +213,7 @@ L3INT Q932Pmes_Register(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UC
*****************************************************************************/ *****************************************************************************/
L3INT Q932Umes_Retrieve(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size) L3INT Q932Umes_Retrieve(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)
{ {
/* L3INT i = IOff; */ /* L3INT i = IOff; */
/* L3INT ir=0; */ /* L3INT ir=0; */
...@@ -231,7 +231,7 @@ L3INT Q932Umes_Retrieve(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3I ...@@ -231,7 +231,7 @@ L3INT Q932Umes_Retrieve(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3I
Function: Q931Pmes_Retrieve Function: Q931Pmes_Retrieve
*****************************************************************************/ *****************************************************************************/
L3INT Q932Pmes_Retrieve(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize) L3INT Q932Pmes_Retrieve(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
{ {
L3BOOL RetCode = L3FALSE; L3BOOL RetCode = L3FALSE;
...@@ -247,7 +247,7 @@ L3INT Q932Pmes_Retrieve(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UC ...@@ -247,7 +247,7 @@ L3INT Q932Pmes_Retrieve(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UC
*****************************************************************************/ *****************************************************************************/
L3INT Q932Umes_RetrieveAck(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size) L3INT Q932Umes_RetrieveAck(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)
{ {
/* L3INT i = IOff; */ /* L3INT i = IOff; */
/* L3INT ir=0; */ /* L3INT ir=0; */
...@@ -265,7 +265,7 @@ L3INT Q932Umes_RetrieveAck(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, ...@@ -265,7 +265,7 @@ L3INT Q932Umes_RetrieveAck(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf,
Function: Q931Pmes_RetrieveAck Function: Q931Pmes_RetrieveAck
*****************************************************************************/ *****************************************************************************/
L3INT Q932Pmes_RetrieveAck(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize) L3INT Q932Pmes_RetrieveAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
{ {
L3BOOL RetCode = L3FALSE; L3BOOL RetCode = L3FALSE;
...@@ -281,7 +281,7 @@ L3INT Q932Pmes_RetrieveAck(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L ...@@ -281,7 +281,7 @@ L3INT Q932Pmes_RetrieveAck(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L
*****************************************************************************/ *****************************************************************************/
L3INT Q932Umes_RetrieveReject(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size) L3INT Q932Umes_RetrieveReject(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT IOff, L3INT Size)
{ {
/* L3INT i = IOff; */ /* L3INT i = IOff; */
/* L3INT ir=0; */ /* L3INT ir=0; */
...@@ -299,7 +299,7 @@ L3INT Q932Umes_RetrieveReject(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBu ...@@ -299,7 +299,7 @@ L3INT Q932Umes_RetrieveReject(Q931_TrunkInfo *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBu
Function: Q931Pmes_RetrieveReject Function: Q931Pmes_RetrieveReject
*****************************************************************************/ *****************************************************************************/
L3INT Q932Pmes_RetrieveReject(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize) L3INT Q932Pmes_RetrieveReject(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
{ {
L3BOOL RetCode = L3FALSE; L3BOOL RetCode = L3FALSE;
......
...@@ -154,38 +154,38 @@ typedef struct ...@@ -154,38 +154,38 @@ typedef struct
/***************************************************************************** /*****************************************************************************
Function Prototypes. Function Prototypes.
*****************************************************************************/ *****************************************************************************/
L3INT Q932ProcFacilityTE(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcFacilityTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcHoldTE(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcHoldTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcHoldAckTE(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcHoldAckTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcHoldRejectTE(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcHoldRejectTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcRegisterTE(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcRegisterTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcRetrieveTE(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcRetrieveTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcRetrieveAckTE(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcRetrieveAckTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcRetrieveRejectTE(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcRetrieveRejectTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcFacilityNT(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcFacilityNT(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcHoldNT(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcHoldNT(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcHoldAckNT(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcHoldAckNT(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcHoldRejectNT(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcHoldRejectNT(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcRegisterNT(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcRegisterNT(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcRetrieveNT(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcRetrieveNT(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcRetrieveAckNT(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcRetrieveAckNT(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932ProcRetrieveRejectNT(Q931_TrunkInfo *pTrunk, L3UCHAR * b, L3INT iFrom); L3INT Q932ProcRetrieveRejectNT(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT iFrom);
L3INT Q932Pmes_Facility(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize); L3INT Q932Pmes_Facility(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
L3INT Q932Pmes_Hold(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize); L3INT Q932Pmes_Hold(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
L3INT Q932Pmes_HoldAck(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize); L3INT Q932Pmes_HoldAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
L3INT Q932Pmes_HoldReject(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize); L3INT Q932Pmes_HoldReject(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
L3INT Q932Pmes_Register(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize); L3INT Q932Pmes_Register(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
L3INT Q932Pmes_Retrieve(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize); L3INT Q932Pmes_Retrieve(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
L3INT Q932Pmes_RetrieveAck(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize); L3INT Q932Pmes_RetrieveAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
L3INT Q932Pmes_RetrieveReject(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize); L3INT Q932Pmes_RetrieveReject(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
L3INT Q932Umes_Facility(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O); L3INT Q932Umes_Facility(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O);
L3INT Q932Umes_Hold(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O); L3INT Q932Umes_Hold(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O);
L3INT Q932Umes_HoldAck(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O); L3INT Q932Umes_HoldAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O);
L3INT Q932Umes_HoldReject(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O); L3INT Q932Umes_HoldReject(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O);
L3INT Q932Umes_Register(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O); L3INT Q932Umes_Register(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O);
L3INT Q932Umes_Retrieve(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O); L3INT Q932Umes_Retrieve(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O);
L3INT Q932Umes_RetrieveAck(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O); L3INT Q932Umes_RetrieveAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O);
L3INT Q932Umes_RetrieveReject(Q931_TrunkInfo *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O); L3INT Q932Umes_RetrieveReject(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR * OBuf, L3INT I, L3INT O);
...@@ -6,7 +6,7 @@ int main(int argc, char *argv[]) ...@@ -6,7 +6,7 @@ int main(int argc, char *argv[])
zap_channel_t *chan; zap_channel_t *chan;
unsigned ms = 20; unsigned ms = 20;
zap_codec_t codec = ZAP_CODEC_SLIN; zap_codec_t codec = ZAP_CODEC_SLIN;
unsigned runs = 4; unsigned runs = 1;
if (zap_global_init() != ZAP_SUCCESS) { if (zap_global_init() != ZAP_SUCCESS) {
fprintf(stderr, "Error loading OpenZAP\n"); fprintf(stderr, "Error loading OpenZAP\n");
......
#include "openzap.h"
#include "zap_isdn.h"
static ZIO_SIGNAL_CB_FUNCTION(on_signal)
{
return ZAP_FAIL;
}
int main(int argc, char *argv[])
{
zap_span_t *span;
zap_global_set_default_logger(ZAP_LOG_LEVEL_DEBUG);
if (zap_global_init() != ZAP_SUCCESS) {
fprintf(stderr, "Error loading OpenZAP\n");
exit(-1);
}
printf("OpenZAP loaded\n");
if (zap_span_find("wanpipe", 1, &span) != ZAP_SUCCESS) {
fprintf(stderr, "Error finding OpenZAP span\n");
}
zap_isdn_configure_span(span, Q931_TE, 0, on_signal);
zap_isdn_start(span);
while(zap_test_flag(span->isdn_data, ZAP_ISDN_RUNNING)) {
sleep(1);
}
zap_global_destroy();
}
/*
* Copyright (c) 2007, Anthony Minessale II
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the original author; nor the names of any contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "openzap.h"
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
*/ */
#include "openzap.h" #include "openzap.h"
#include "zap_isdn.h"
#include <stdarg.h> #include <stdarg.h>
#ifdef ZAP_WANPIPE_SUPPORT #ifdef ZAP_WANPIPE_SUPPORT
#include "zap_wanpipe.h" #include "zap_wanpipe.h"
...@@ -45,6 +46,16 @@ static struct { ...@@ -45,6 +46,16 @@ static struct {
zap_mutex_t *mutex; zap_mutex_t *mutex;
} globals; } globals;
static char *TRUNK_TYPE_NAMES[] = {
"E1",
"T1",
"J1",
"BRI",
"NONE",
NULL
};
static char *LEVEL_NAMES[] = { static char *LEVEL_NAMES[] = {
"EMERG", "EMERG",
"ALERT", "ALERT",
...@@ -57,6 +68,31 @@ static char *LEVEL_NAMES[] = { ...@@ -57,6 +68,31 @@ static char *LEVEL_NAMES[] = {
NULL NULL
}; };
zap_trunk_type_t str2zap_trunk_type(char *name)
{
int i;
zap_trunk_type_t t = ZAP_TRUNK_NONE;
for (i = 0; i < ZAP_TRUNK_NONE; i++) {
if (!strcasecmp(name, TRUNK_TYPE_NAMES[i])) {
t = (zap_trunk_type_t) i;
break;
}
}
return t;
}
char *zap_trunk_type2str(zap_trunk_type_t type)
{
if (type > ZAP_TRUNK_NONE) {
type = ZAP_TRUNK_NONE;
}
return TRUNK_TYPE_NAMES[(int)type];
}
static char *cut_path(char *in) static char *cut_path(char *in)
{ {
char *p, *ret = in; char *p, *ret = in;
...@@ -177,6 +213,9 @@ zap_status_t zap_span_close_all(zap_io_interface_t *zio) ...@@ -177,6 +213,9 @@ zap_status_t zap_span_close_all(zap_io_interface_t *zio)
if (span->mutex) { if (span->mutex) {
zap_mutex_destroy(&span->mutex); zap_mutex_destroy(&span->mutex);
} }
if (span->isdn_data) {
free(span->isdn_data);
}
} }
return i ? ZAP_SUCCESS : ZAP_FAIL; return i ? ZAP_SUCCESS : ZAP_FAIL;
...@@ -383,7 +422,6 @@ zap_status_t zap_channel_open(const char *name, uint32_t span_id, uint32_t chan_ ...@@ -383,7 +422,6 @@ zap_status_t zap_channel_open(const char *name, uint32_t span_id, uint32_t chan_
zio = (zap_io_interface_t *) hashtable_search(globals.interface_hash, (char *)name); zio = (zap_io_interface_t *) hashtable_search(globals.interface_hash, (char *)name);
zap_mutex_unlock(globals.mutex); zap_mutex_unlock(globals.mutex);
if (span_id < ZAP_MAX_SPANS_INTERFACE && chan_id < ZAP_MAX_CHANNELS_SPAN && zio) { if (span_id < ZAP_MAX_SPANS_INTERFACE && chan_id < ZAP_MAX_CHANNELS_SPAN && zio) {
zap_channel_t *check; zap_channel_t *check;
zap_mutex_lock(zio->spans[span_id].mutex); zap_mutex_lock(zio->spans[span_id].mutex);
...@@ -974,6 +1012,8 @@ zap_status_t zap_global_init(void) ...@@ -974,6 +1012,8 @@ zap_status_t zap_global_init(void)
uint32_t configured = 0; uint32_t configured = 0;
int modcount; int modcount;
zap_isdn_init();
memset(&interfaces, 0, sizeof(interfaces)); memset(&interfaces, 0, sizeof(interfaces));
globals.interface_hash = create_hashtable(16, hashfromstring, equalkeys); globals.interface_hash = create_hashtable(16, hashfromstring, equalkeys);
modcount = 0; modcount = 0;
...@@ -1110,3 +1150,32 @@ uint32_t zap_separate_string(char *buf, char delim, char **array, int arraylen) ...@@ -1110,3 +1150,32 @@ uint32_t zap_separate_string(char *buf, char delim, char **array, int arraylen)
return argc; return argc;
} }
void print_bits(uint8_t *b, int bl, char *buf, int blen, int e)
{
int i,j = 0,k;
if (blen < (bl * 10) + 2) {
return;
}
for (k = 0 ; k < bl; k++) {
buf[j++] = '[';
if (e) {
for(i = 7; i >= 0; i--) {
buf[j++] = ((b[k] & (1 << i)) ? '1' : '0');
}
} else {
for(i = 0; i < 8; i++) {
buf[j++] = ((b[k] & (1 << i)) ? '1' : '0');
}
}
buf[j++] = ']';
buf[j++] = '\n';
}
buf[j++] = '\0';
}
/*
* Copyright (c) 2007, Anthony Minessale II
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the original author; nor the names of any contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "openzap.h"
#include "zap_isdn.h"
#include "Q931.h"
#include "Q921.h"
static L3INT zap_isdn_931_err(void *pvt, L3INT id, L3INT p1, L3INT p2)
{
zap_log(ZAP_LOG_ERROR, "ERROR: %d %d %d", id, p1, p2);
return 0;
}
static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
{
zap_span_t *span = (zap_span_t *) pvt;
Q931mes_Generic *gen = (Q931mes_Generic *) msg;
assert(span != NULL);
zap_log(ZAP_LOG_DEBUG, "Yay I got an event! %d\n", gen->MesType);
return 0;
}
static int zap_isdn_921_21(void *pvt, L2UCHAR *msg, L2INT mlen)
{
zap_span_t *span = (zap_span_t *) pvt;
zap_size_t len = (zap_size_t) mlen;
assert(span != NULL);
return zap_channel_write(span->isdn_data->dchan, msg, &len) == ZAP_SUCCESS ? 0 : -1;
}
static void *zap_isdn_run(zap_thread_t *me, void *obj)
{
zap_span_t *span = (zap_span_t *) obj;
zap_isdn_data_t *data = span->isdn_data;
unsigned char buf[1024];
zap_size_t len = sizeof(buf);
zap_log(ZAP_LOG_DEBUG, "ISDN thread starting.\n");
Q921Start(&data->q921);
while(zap_test_flag(data, ZAP_ISDN_RUNNING)) {
zap_wait_flag_t flags = ZAP_READ;
zap_status_t status = zap_channel_wait(data->dchan, &flags, 100);
switch(status) {
case ZAP_FAIL:
{
zap_log(ZAP_LOG_ERROR, "D-Chan Read Error!\n");
snprintf(span->last_error, sizeof(span->last_error), "D-Chan Read Error!");
goto done;
}
break;
case ZAP_TIMEOUT:
{
/*zap_log(ZAP_LOG_DEBUG, "Timeout!\n");*/
/*Q931TimeTick(data->q931, L3ULONG ms);*/
}
break;
default:
{
if (flags & ZAP_READ) {
len = sizeof(buf);
if (zap_channel_read(data->dchan, buf, &len) == ZAP_SUCCESS) {
/*char bb[512] = "";
print_bits(buf, (int)len, bb, sizeof(bb), 1);
zap_log(ZAP_LOG_DEBUG, "Read %d bytes\n%s\n", (int)len, bb);
*/
Q921QueueHDLCFrame(&data->q921, buf, (int)len);
Q921Rx12(&data->q921);
}
} else {
zap_log(ZAP_LOG_DEBUG, "No Read FLAG!\n");
}
}
break;
}
}
done:
zap_channel_close(&data->dchans[0]);
zap_channel_close(&data->dchans[1]);
zap_clear_flag(span->isdn_data, ZAP_ISDN_RUNNING);
zap_log(ZAP_LOG_DEBUG, "ISDN thread ended.\n");
return NULL;
}
zap_status_t zap_isdn_init(void)
{
Q931Initialize();
return ZAP_SUCCESS;
}
zap_status_t zap_isdn_start(zap_span_t *span)
{
zap_set_flag(span->isdn_data, ZAP_ISDN_RUNNING);
return zap_thread_create_detached(zap_isdn_run, span);
}
zap_status_t zap_isdn_configure_span(zap_span_t *span, Q921NetUser_t mode, Q931Dialect_t dialect, zio_signal_cb_t sig_cb)
{
uint32_t x,i;
zap_channel_t *dchans[2] = {0};
if (span->signal_type) {
snprintf(span->last_error, sizeof(span->last_error), "Span is already configured for signalling.");
return ZAP_FAIL;
}
if (span->trunk_type >= ZAP_TRUNK_NONE) {
snprintf(span->last_error, sizeof(span->last_error), "Unknown trunk type!");
return ZAP_FAIL;
}
for(i = 1; i <= span->chan_count; i++) {
if (span->channels[i].type == ZAP_CHAN_TYPE_DQ921) {
if (zap_channel_open(span->zio->name, span->span_id, i, &dchans[x]) == ZAP_SUCCESS) {
zap_log(ZAP_LOG_DEBUG, "opening d-channel #%d %d:%d\n", x, dchans[x]->span_id, dchans[x]->chan_id);
x++;
}
}
}
if (!x) {
snprintf(span->last_error, sizeof(span->last_error), "Span has no D-Channels!");
return ZAP_FAIL;
}
span->isdn_data = malloc(sizeof(*span->isdn_data));
assert(span->isdn_data != NULL);
memset(span->isdn_data, 0, sizeof(*span->isdn_data));
span->isdn_data->sig_cb = sig_cb;
span->isdn_data->dchans[0] = dchans[0];
span->isdn_data->dchans[1] = dchans[1];
span->isdn_data->dchan = span->isdn_data->dchans[0];
Q921_InitTrunk(&span->isdn_data->q921,
0,
0,
mode,
0,
zap_isdn_921_21,
(Q921TxCB_t)Q931Rx23,
span,
&span->isdn_data->q931);
Q931Api_InitTrunk(&span->isdn_data->q931,
dialect,
mode,
span->trunk_type,
zap_isdn_931_34,
(Q931TxCB_t)Q921Rx32,
zap_isdn_931_err,
&span->isdn_data->q921,
span);
span->signal_type = ZAP_SIGTYPE_ISDN;
return ZAP_SUCCESS;
}
...@@ -203,6 +203,9 @@ static ZIO_CONFIGURE_FUNCTION(wanpipe_configure) ...@@ -203,6 +203,9 @@ static ZIO_CONFIGURE_FUNCTION(wanpipe_configure)
if (!strcasecmp(var, "enabled")) { if (!strcasecmp(var, "enabled")) {
zap_log(ZAP_LOG_WARNING, "'enabled' command ignored when it's not the first command in a [span]\n"); zap_log(ZAP_LOG_WARNING, "'enabled' command ignored when it's not the first command in a [span]\n");
} else if (!strcasecmp(var, "trunk_type")) {
span->trunk_type = str2zap_trunk_type(val);
zap_log(ZAP_LOG_DEBUG, "setting trunk type to '%s'\n", zap_trunk_type2str(span->trunk_type));
} else if (!strcasecmp(var, "b-channel")) { } else if (!strcasecmp(var, "b-channel")) {
configured += wp_configure_channel(&cfg, val, span, ZAP_CHAN_TYPE_B); configured += wp_configure_channel(&cfg, val, span, ZAP_CHAN_TYPE_B);
} else if (!strcasecmp(var, "d-channel")) { } else if (!strcasecmp(var, "d-channel")) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论