From 2602a26dadc3b1ebda09ad2ae517ec70cf6569f5 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 27 Feb 2008 00:05:52 +0000 Subject: [PATCH] incomplete framework for boost git-svn-id: http://svn.openzap.org/svn/openzap/trunk@409 a93c3328-9c30-0410-af19-c9cd2b2d52af --- libs/openzap/Makefile.in | 12 ++- libs/openzap/src/include/zap_ss7_boost.h | 72 ++++++++++++++ libs/openzap/src/testboost.c | 61 ++++++++++++ libs/openzap/src/zap_ss7_boost.c | 114 +++++++++++++++++++++++ 4 files changed, 256 insertions(+), 3 deletions(-) create mode 100644 libs/openzap/src/include/zap_ss7_boost.h create mode 100644 libs/openzap/src/testboost.c create mode 100644 libs/openzap/src/zap_ss7_boost.c diff --git a/libs/openzap/Makefile.in b/libs/openzap/Makefile.in index 3a057d258e..c4a533bc24 100644 --- a/libs/openzap/Makefile.in +++ b/libs/openzap/Makefile.in @@ -67,7 +67,8 @@ $(SRC)/isdn/5ESSStateNT.c \ $(SRC)/isdn/5ESSStateTE.c \ $(SRC)/isdn/Q932mes.c \ $(SRC)/zap_zt.c \ -$(SRC)/zap_wanpipe.c +$(SRC)/zap_wanpipe.c \ +$(SRC)/zap_ss7_boost.c OBJS=\ $(SRC)/hashtable.o \ @@ -105,7 +106,8 @@ $(SRC)/isdn/5ESSStateNT.o \ $(SRC)/isdn/5ESSStateTE.o \ $(SRC)/isdn/Q932mes.o \ $(SRC)/zap_zt.o \ -$(SRC)/zap_wanpipe.o +$(SRC)/zap_wanpipe.o \ +$(SRC)/zap_ss7_boost.o #SRCS=$(shell echo $(OBJS) | sed "s/\.o/\.c/g") @@ -129,6 +131,7 @@ $(SRC)/include/zap_skel.h \ $(SRC)/include/zap_threadmutex.h \ $(SRC)/include/zap_types.h \ $(SRC)/include/zap_wanpipe.h \ +$(SRC)/include/zap_ss7_boost.h \ $(SRC)/include/zap_zt.h \ $(SRC)/isdn/include/mfifo.h \ $(SRC)/isdn/include/national.h \ @@ -182,6 +185,9 @@ detect_dtmf: $(SRC)/detect_dtmf.c $(MYLIB) testisdn: $(SRC)/testisdn.c $(MYLIB) $(CC) $(INCS) $(ZAP_CFLAGS) -L. $(SRC)/testisdn.c -o testisdn -lopenzap -lm -lpthread +testboost: $(SRC)/testboost.c $(MYLIB) + $(CC) $(INCS) $(ZAP_CFLAGS) -L. $(SRC)/testboost.c -o testboost -lopenzap -lm -lpthread + testanalog: $(SRC)/testanalog.c $(MYLIB) $(CC) $(INCS) -L. $(SRC)/testanalog.c -o testanalog -lopenzap -lm -lpthread @@ -218,5 +224,5 @@ mod_openzap-clean: @if [ -f mod_openzap/mod_openzap.so ] ; then cd mod_openzap && make clean ; fi clean: mod_openzap-clean - rm -f $(SRC)/*.o $(SRC)/isdn/*.o $(MYLIB) *~ \#* testapp testcid testtones detect_tones detect_dtmf priserver testisdn testanalog + rm -f $(SRC)/*.o $(SRC)/isdn/*.o $(MYLIB) *~ \#* testapp testcid testtones detect_tones detect_dtmf priserver testisdn testboost testanalog @if [ -f $(LIBPRI)/$(LIBPRIA) ] ; then cd $(LIBPRI) && make clean ; fi diff --git a/libs/openzap/src/include/zap_ss7_boost.h b/libs/openzap/src/include/zap_ss7_boost.h new file mode 100644 index 0000000000..9e0d19e655 --- /dev/null +++ b/libs/openzap/src/include/zap_ss7_boost.h @@ -0,0 +1,72 @@ +/* + * 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_SS7_BOOST_H +#define ZAP_SS7_BOOST_H +#include "openzap.h" + +typedef enum { + ZAP_SS7_BOOST_RUNNING = (1 << 0) +} zap_isdn_flag_t; + +struct zap_ss7_boost_data { + const char *local_ip; + int local_port; + const char *remote_ip; + int remote_port; + zio_signal_cb_t signal_cb; + uint32_t flags; +}; +typedef struct zap_ss7_boost_data zap_ss7_boost_data_t; + +zap_status_t zap_ss7_boost_start(zap_span_t *span); +zap_status_t zap_ss7_boost_init(void); +zap_status_t zap_ss7_boost_configure_span(zap_span_t *span, + const char *local_ip, int local_port, + const char *remote_ip, int remote_port, + zio_signal_cb_t sig_cb); + + +#endif + +/* For Emacs: + * Local Variables: + * mode:c + * indent-tabs-mode:t + * tab-width:4 + * c-basic-offset:4 + * End: + * For VIM: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + */ + diff --git a/libs/openzap/src/testboost.c b/libs/openzap/src/testboost.c new file mode 100644 index 0000000000..4fb9ee12ba --- /dev/null +++ b/libs/openzap/src/testboost.c @@ -0,0 +1,61 @@ +#include "openzap.h" +#include "zap_ss7_boost.h" + +static ZIO_SIGNAL_CB_FUNCTION(on_signal) +{ + return ZAP_FAIL; +} + +int main(int argc, char *argv[]) +{ + zap_span_t *span; + zap_ss7_boost_data_t *data; + + zap_global_set_default_logger(ZAP_LOG_LEVEL_DEBUG); + + if (argc < 2) { + printf("umm no\n"); + exit(-1); + } + + if (zap_global_init() != ZAP_SUCCESS) { + fprintf(stderr, "Error loading OpenZAP\n"); + exit(-1); + } + + printf("OpenZAP loaded\n"); + + if (zap_span_find(atoi(argv[1]), &span) != ZAP_SUCCESS) { + fprintf(stderr, "Error finding OpenZAP span\n"); + goto done; + } + + + if (zap_ss7_boost_configure_span(span, "127.0.0.65", 53000, "127.0.0.66", 53000, on_signal) == ZAP_SUCCESS) { + data = span->signal_data; + zap_ss7_boost_start(span); + } else { + fprintf(stderr, "Error starting SS7_BOOST\n"); + goto done; + } + + while(zap_test_flag(data, ZAP_SS7_BOOST_RUNNING)) { + zap_sleep(1 * 1000); + } + + done: + + zap_global_destroy(); + +} + +/* For Emacs: + * Local Variables: + * mode:c + * indent-tabs-mode:t + * tab-width:4 + * c-basic-offset:4 + * End: + * For VIM: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + */ diff --git a/libs/openzap/src/zap_ss7_boost.c b/libs/openzap/src/zap_ss7_boost.c new file mode 100644 index 0000000000..bf195e1c9d --- /dev/null +++ b/libs/openzap/src/zap_ss7_boost.c @@ -0,0 +1,114 @@ +/* + * 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 "ss7_boost_client.h" +#include "zap_ss7_boost.h" + + +static ZIO_CHANNEL_REQUEST_FUNCTION(ss7_boost_channel_request) +{ + zap_status_t status = ZAP_SUCCESS; + return status; +} + + +static ZIO_CHANNEL_OUTGOING_CALL_FUNCTION(ss7_boost_outgoing_call) +{ + zap_status_t status = ZAP_SUCCESS; + zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_DIALING); + return status; +} + +static void *zap_ss7_boost_run(zap_thread_t *me, void *obj) +{ + zap_span_t *span = (zap_span_t *) obj; + zap_ss7_boost_data_t *ss7_boost_data = span->signal_data; + + while (zap_running() && zap_test_flag(ss7_boost_data, ZAP_SS7_BOOST_RUNNING)) { + break; + } + + zap_clear_flag(ss7_boost_data, ZAP_SS7_BOOST_RUNNING); + + zap_log(ZAP_LOG_DEBUG, "SS7_BOOST thread ended.\n"); + return NULL; +} + +zap_status_t zap_ss7_boost_init(void) +{ + return ZAP_SUCCESS; +} + +zap_status_t zap_ss7_boost_start(zap_span_t *span) +{ + zap_ss7_boost_data_t *ss7_boost_data = span->signal_data; + zap_set_flag(ss7_boost_data, ZAP_SS7_BOOST_RUNNING); + return zap_thread_create_detached(zap_ss7_boost_run, span); +} + +zap_status_t zap_ss7_boost_configure_span(zap_span_t *span, + const char *local_ip, int local_port, + const char *remote_ip, int remote_port, + zio_signal_cb_t sig_cb) +{ + zap_ss7_boost_data_t *ss7_boost_data = NULL; + + ss7_boost_data = malloc(sizeof(*ss7_boost_data)); + assert(ss7_boost_data); + memset(ss7_boost_data, 0, sizeof(*ss7_boost_data)); + + ss7_boost_data->local_ip = local_ip; + ss7_boost_data->local_port = local_port; + ss7_boost_data->remote_ip = remote_ip; + ss7_boost_data->remote_port = remote_port; + ss7_boost_data->signal_cb = sig_cb; + + span->signal_data = ss7_boost_data; + span->signal_type = ZAP_SIGTYPE_SS7BOOST; + span->outgoing_call = ss7_boost_outgoing_call; + span->channel_request = ss7_boost_channel_request; + + return ZAP_SUCCESS; +} + +/* For Emacs: + * Local Variables: + * mode:c + * indent-tabs-mode:t + * tab-width:4 + * c-basic-offset:4 + * End: + * For VIM: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + */