From 16b971f9688126aeb1620fb19f27bd1167c786c6 Mon Sep 17 00:00:00 2001 From: Arnaldo M Pereira Date: Wed, 6 Oct 2010 16:51:20 -0300 Subject: [PATCH 01/16] made ftdm_sched.c also work on win32 --- libs/freetdm/src/ftdm_sched.c | 56 +++++++++++++++++-------- libs/freetdm/src/include/ftdm_declare.h | 5 +++ 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/libs/freetdm/src/ftdm_sched.c b/libs/freetdm/src/ftdm_sched.c index a7736ce8a2..73facb35f4 100644 --- a/libs/freetdm/src/ftdm_sched.c +++ b/libs/freetdm/src/ftdm_sched.c @@ -34,6 +34,45 @@ #include "private/ftdm_core.h" +#ifdef __WINDOWS__ +#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) +#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 +#else /* */ +#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL +#endif /* */ +struct ftdm_timezone { + int tz_minuteswest; /* minutes W of Greenwich */ + int tz_dsttime; /* type of dst correction */ +}; +int gettimeofday(struct timeval *tv, struct ftdm_timezone *tz) +{ + FILETIME ft; + unsigned __int64 tmpres = 0; + static int tzflag; + if (NULL != tv) { + GetSystemTimeAsFileTime(&ft); + tmpres |= ft.dwHighDateTime; + tmpres <<= 32; + tmpres |= ft.dwLowDateTime; + + /*converting file time to unix epoch */ + tmpres /= 10; /*convert into microseconds */ + tmpres -= DELTA_EPOCH_IN_MICROSECS; + tv->tv_sec = (long) (tmpres / 1000000UL); + tv->tv_usec = (long) (tmpres % 1000000UL); + } + if (NULL != tz) { + if (!tzflag) { + _tzset(); + tzflag++; + } + tz->tz_minuteswest = _timezone / 60; + tz->tz_dsttime = _daylight; + } + return 0; +} +#endif /* __WINDOWS__ */ + typedef struct ftdm_timer ftdm_timer_t; static struct { @@ -55,9 +94,7 @@ struct ftdm_sched { struct ftdm_timer { char name[80]; ftdm_timer_id_t id; -#ifdef __linux__ struct timeval time; -#endif void *usrdata; ftdm_sched_callback_t callback; ftdm_timer_t *next; @@ -234,7 +271,6 @@ failed: FT_DECLARE(ftdm_status_t) ftdm_sched_run(ftdm_sched_t *sched) { ftdm_status_t status = FTDM_FAIL; -#ifdef __linux__ ftdm_timer_t *runtimer; ftdm_timer_t *timer; ftdm_sched_callback_t callback; @@ -300,10 +336,6 @@ tryagain: done: ftdm_mutex_unlock(sched->mutex); -#else - ftdm_log(FTDM_LOG_CRIT, "Not implemented in this platform\n"); - status = FTDM_NOTIMPL; -#endif #ifdef __WINDOWS__ UNREFERENCED_PARAMETER(sched); #endif @@ -315,7 +347,6 @@ FT_DECLARE(ftdm_status_t) ftdm_sched_timer(ftdm_sched_t *sched, const char *name int ms, ftdm_sched_callback_t callback, void *data, ftdm_timer_id_t *timerid) { ftdm_status_t status = FTDM_FAIL; -#ifdef __linux__ struct timeval now; int rc = 0; ftdm_timer_t *newtimer; @@ -378,10 +409,6 @@ FT_DECLARE(ftdm_status_t) ftdm_sched_timer(ftdm_sched_t *sched, const char *name done: ftdm_mutex_unlock(sched->mutex); -#else - ftdm_log(FTDM_LOG_CRIT, "Not implemented in this platform\n"); - status = FTDM_NOTIMPL; -#endif #ifdef __WINDOWS__ UNREFERENCED_PARAMETER(sched); UNREFERENCED_PARAMETER(name); @@ -396,7 +423,6 @@ done: FT_DECLARE(ftdm_status_t) ftdm_sched_get_time_to_next_timer(const ftdm_sched_t *sched, int32_t *timeto) { ftdm_status_t status = FTDM_FAIL; -#ifdef __linux__ int res = -1; int ms = 0; struct timeval currtime; @@ -445,10 +471,6 @@ FT_DECLARE(ftdm_status_t) ftdm_sched_get_time_to_next_timer(const ftdm_sched_t * done: ftdm_mutex_unlock(sched->mutex); -#else - ftdm_log(FTDM_LOG_ERROR, "Implement me!\n"); - status = FTDM_NOTIMPL; -#endif #ifdef __WINDOWS__ UNREFERENCED_PARAMETER(timeto); UNREFERENCED_PARAMETER(sched); diff --git a/libs/freetdm/src/include/ftdm_declare.h b/libs/freetdm/src/include/ftdm_declare.h index 03071a60bb..a3fc119946 100644 --- a/libs/freetdm/src/include/ftdm_declare.h +++ b/libs/freetdm/src/include/ftdm_declare.h @@ -156,7 +156,12 @@ typedef __int64 int64_t; typedef __int32 int32_t; typedef __int16 int16_t; typedef __int8 int8_t; +#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) +#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 #else +#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL +#endif /* _MSC_VER */ +#else /* __WINDOWS__ */ #define FTDM_INVALID_SOCKET -1 typedef int ftdm_socket_t; #include From fc55997b9e4c903ceb0ac1eb080a0defef70a26a Mon Sep 17 00:00:00 2001 From: Arnaldo M Pereira Date: Wed, 6 Oct 2010 17:51:29 -0300 Subject: [PATCH 02/16] created cmake files for freetdm --- libs/freetdm/CMakeLists.txt | 244 +++++++++++++++++++++++ libs/freetdm/mod_freetdm/CMakeLists.txt | 32 +++ libs/freetdm/sample/CMakeLists.txt | 8 + libs/freetdm/sample/boost/CMakeLists.txt | 12 ++ libs/freetdm/sample/dso/CMakeLists.txt | 12 ++ libs/freetdm/sample/sched/CMakeLists.txt | 12 ++ 6 files changed, 320 insertions(+) create mode 100644 libs/freetdm/CMakeLists.txt create mode 100644 libs/freetdm/mod_freetdm/CMakeLists.txt create mode 100644 libs/freetdm/sample/CMakeLists.txt create mode 100644 libs/freetdm/sample/boost/CMakeLists.txt create mode 100644 libs/freetdm/sample/dso/CMakeLists.txt create mode 100644 libs/freetdm/sample/sched/CMakeLists.txt diff --git a/libs/freetdm/CMakeLists.txt b/libs/freetdm/CMakeLists.txt new file mode 100644 index 0000000000..24cbf7c9eb --- /dev/null +++ b/libs/freetdm/CMakeLists.txt @@ -0,0 +1,244 @@ +# +# cmake file that generate build files for freetdm. +# this automatically includes the tests and also +# mod_freetdm +# +# Arnaldo M Pereira +# +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(freetdm) + +ADD_SUBDIRECTORY(sample) +ADD_SUBDIRECTORY(mod_freetdm) + +# includes +SET(freetdm_INCLUDES + ${PROJECT_SOURCE_DIR}/src/include + ${PROJECT_SOURCE_DIR}/src/isdn/include + ${PROJECT_SOURCE_DIR}/src/include/private + ${PROJECT_SOURCE_DIR}/src/ftmod/ftmod_sangoma_boost +) +INCLUDE_DIRECTORIES(${freetdm_INCLUDES}) +LINK_DIRECTORIES(${freetdm_BINARY_DIR}) + +# optional includes +IF(DEFINED SNGSS7) + SET(freetdm_INCLUDES ${freetdm_INCLUDES} /usr/include/sng_ss7) +ENDIF(DEFINED SNGSS7) + +IF(DEFINED SNGISDN) + SET(freetdm_INCLUDES ${freetdm_INCLUDES} /usr/include/sng_isdn) +ENDIF(DEFINED SNGISDN) + +# definitions / CFLAGS +ADD_DEFINITIONS(-DFTDM_CONFIG_DIR="/FIXME" -DFTDM_MOD_DIR="/FIXME") +IF(DEFINED WIN32) + ADD_DEFINITIONS(-DFREETDM_EXPORTS -DTELETONE_EXPORTS -DMOD_EXPORTS -DDLL_EXPORTS) +ENDIF(DEFINED WIN32) +IF(DEFINED SNGISDN) + SET(freetdm_INCLUDES ${freetdm_INCLUDES} /usr/include/sng_isdn) +ENDIF(DEFINED SNGISDN) + +# lib sources +SET(freetdm_SOURCES + ${PROJECT_SOURCE_DIR}/src/hashtable.c + ${PROJECT_SOURCE_DIR}/src/hashtable_itr.c + ${PROJECT_SOURCE_DIR}/src/ftdm_io.c + ${PROJECT_SOURCE_DIR}/src/ftdm_queue.c + ${PROJECT_SOURCE_DIR}/src/ftdm_sched.c + ${PROJECT_SOURCE_DIR}/src/ftdm_call_utils.c + ${PROJECT_SOURCE_DIR}/src/ftdm_config.c + ${PROJECT_SOURCE_DIR}/src/ftdm_callerid.c + ${PROJECT_SOURCE_DIR}/src/fsk.c + ${PROJECT_SOURCE_DIR}/src/uart.c + ${PROJECT_SOURCE_DIR}/src/g711.c + ${PROJECT_SOURCE_DIR}/src/libteletone_detect.c + ${PROJECT_SOURCE_DIR}/src/libteletone_generate.c + ${PROJECT_SOURCE_DIR}/src/ftdm_buffer.c + ${PROJECT_SOURCE_DIR}/src/ftdm_threadmutex.c + ${PROJECT_SOURCE_DIR}/src/ftdm_dso.c + ${PROJECT_SOURCE_DIR}/src/ftdm_cpu_monitor.c +) + +# libfreetdm.so +ADD_LIBRARY(${PROJECT_NAME} SHARED ${freetdm_SOURCES}) + +IF(NOT DEFINED WIN32) + TARGET_LINK_LIBRARIES(${PROJECT_NAME} m pthread dl) +ENDIF(NOT DEFINED WIN32) + +REMOVE_DEFINITIONS(-DLL_EXPORTS) + +# tools & tests +IF(NOT DEFINED WIN32) + FOREACH(TOOL testtones testpri testr2 testapp testcid) + ADD_EXECUTABLE(${TOOL} ${PROJECT_SOURCE_DIR}/src/${TOOL}.c) + TARGET_LINK_LIBRARIES(${TOOL} -l${PROJECT_NAME}) + ADD_DEPENDENCIES(${TOOL} ${PROJECT_NAME}) + ENDFOREACH(TOOL) + + ADD_EXECUTABLE(detect_dtmf + ${PROJECT_SOURCE_DIR}/src/detect_dtmf.c + ${PROJECT_SOURCE_DIR}/src/libteletone_detect.c + ) + TARGET_LINK_LIBRARIES(detect_dtmf ${PROJECT_NAME}) + ADD_DEPENDENCIES(detect_dtmf ${PROJECT_NAME}) + + ADD_EXECUTABLE(detect_tones + ${PROJECT_SOURCE_DIR}/src/detect_tones.c + ${PROJECT_SOURCE_DIR}/src/libteletone_detect.c + ) + TARGET_LINK_LIBRARIES(detect_tones ${PROJECT_NAME}) + ADD_DEPENDENCIES(detect_tones ${PROJECT_NAME}) + + ADD_EXECUTABLE(testanalog + ${PROJECT_SOURCE_DIR}/src/testanalog.c + ) + TARGET_LINK_LIBRARIES(testanalog -l${PROJECT_NAME}) + ADD_DEPENDENCIES(testanalog ${PROJECT_NAME}) + + # optional tests/tools + IF(HAVE_SCTP) + ADD_EXECUTABLE(testboost src/testboost.c) + TARGET_LINK_LIBRARIES(testboost ${PROJECT_NAME}) + ENDIF(HAVE_SCTP) +ELSE(NOT DEFINED WIN32) + MESSAGE(WARNING "Not building tools/tests on WIN32 yet.") +ENDIF(NOT DEFINED WIN32) + +# +# ftmod modules +# +SET(ftmod_DIR ${PROJECT_SOURCE_DIR}/src/ftmod) + +IF(DEFINED WIN32) + SET(ftmod_ADDITIONAL_SOURCES + ${PROJECT_SOURCE_DIR}/src/ftdm_io.c + ${PROJECT_SOURCE_DIR}/src/ftdm_config.c + ${PROJECT_SOURCE_DIR}/src/ftdm_queue.c + ${PROJECT_SOURCE_DIR}/src/g711.c + ) + SET(module_list skel analog analog_em) +ELSE(DEFINED WIN32) + SET(module_list skel analog analog_em zt) +ENDIF(DEFINED WIN32) + +# build default modules +FOREACH(module ${module_list}) + ADD_LIBRARY(ftmod_${module} MODULE ${ftmod_DIR}/ftmod_${module}/ftmod_${module}.c ${ftmod_ADDITIONAL_SOURCES}) + TARGET_LINK_LIBRARIES(ftmod_${module} ${PROJECT_NAME}) +ENDFOREACH(module) + +# build isdn ftmod +IF(DEFINED BUILD_FTMOD_ISDN) + SET(ftmod_isdn_SOURCES + ${PROJECT_SOURCE_DIR}/src/isdn/EuroISDNStateNT.c + ${PROJECT_SOURCE_DIR}/src/isdn/EuroISDNStateTE.c + ${PROJECT_SOURCE_DIR}/src/isdn/mfifo.c + ${PROJECT_SOURCE_DIR}/src/isdn/Q921.c + ${PROJECT_SOURCE_DIR}/src/isdn/Q931api.c + ${PROJECT_SOURCE_DIR}/src/isdn/Q931.c + ${PROJECT_SOURCE_DIR}/src/isdn/Q931ie.c + ${PROJECT_SOURCE_DIR}/src/isdn/Q931mes.c + ${PROJECT_SOURCE_DIR}/src/isdn/Q931StateNT.c + ${PROJECT_SOURCE_DIR}/src/isdn/Q931StateTE.c + ${PROJECT_SOURCE_DIR}/src/isdn/nationalmes.c + ${PROJECT_SOURCE_DIR}/src/isdn/nationalStateNT.c + ${PROJECT_SOURCE_DIR}/src/isdn/nationalStateTE.c + ${PROJECT_SOURCE_DIR}/src/isdn/DMSmes.c + ${PROJECT_SOURCE_DIR}/src/isdn/DMSStateNT.c + ${PROJECT_SOURCE_DIR}/src/isdn/DMSStateTE.c + ${PROJECT_SOURCE_DIR}/src/isdn/5ESSmes.c + ${PROJECT_SOURCE_DIR}/src/isdn/5ESSStateNT.c + ${PROJECT_SOURCE_DIR}/src/isdn/5ESSStateTE.c + ${PROJECT_SOURCE_DIR}/src/isdn/Q932mes.c + ${ftmod_DIR}/ftmod_isdn/ftmod_isdn.c + ) + IF(NOT DEFINED WIN32) + ADD_DEFINITIONS(-D_GNU_SOURCE) + ENDIF(NOT DEFINED WIN32) + ADD_LIBRARY(ftmod_isdn MODULE ${ftmod_isdn_SOURCES}) + TARGET_LINK_LIBRARIES(ftmod_isdn ${PROJECT_NAME}) +ENDIF(DEFINED BUILD_FTMOD_ISDN) + +# from now on, optionals +IF(DEFINED LIBSANGOMA) + ADD_LIBRARY(ftmod_wanpipe MODULE ${ftmod_DIR}/ftmod_wanpipe/ftmod_wanpipe.c) + IF(DEFINED WIN32) + MESSAGE(WARNING "FIXME: look for wanpipe headers on win32") + ELSE(DEFINED WIN32) + ADD_DEFINITIONS(-D__LINUX__) + INCLUDE_DIRECTORIES(/usr/include/wanpipe) + ENDIF(DEFINED WIN32) + TARGET_LINK_LIBRARIES(ftmod_wanpipe sangoma ${PROJECT_NAME}) +ENDIF(DEFINED LIBSANGOMA) + +IF(DEFINED HAVE_SCTP) + ADD_LIBRARY(ftmod_sangoma_boost MODULE + ${ftmod_DIR}/ftmod_sangoma_boost/sangoma_boost_client.c + ${ftmod_DIR}/ftmod_sangoma_boost/ftmod_sangoma_boost.c + ) + TARGET_LINK_LIBRARIES(ftmod_sangoma_boost ${PROJECT_NAME}) +ENDIF(DEFINED HAVE_SCTP) + +IF(DEFINED LIBPRI) + ADD_LIBRARY(ftmod_libpri MODULE + ${ftmod_DIR}/ftmod_libpri/libpri_client.c + ${ftmod_DIR}/ftmod_libpri/ftmod_libpri.c + ) + TARGET_LINK_LIBRARIES(ftmod_libpri ${PROJECT_NAME}) +ENDIF(DEFINED LIBPRI) + +IF(DEFINED PRITAP) + ADD_LIBRARY(ftmod_pritap MODULE + ${ftmod_DIR}/ftmod_pritap/pritap_client.c + ${ftmod_DIR}/ftmod_pritap/ftmod_pritap.c + ) + TARGET_LINK_LIBRARIES(ftmod_pritap ${PROJECT_NAME} pri) +ENDIF(DEFINED PRITAP) + +IF(DEFINED SNGSS7) + ADD_LIBRARY(ftmod_sangoma_ss7 MODULE + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_in.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cntrl.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_timers.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_sta.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_sts.c + ${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c + ) + IF(NOT DEFINED WIN32) + ADD_DEFINITIONS(-D_GNU_SOURCE) + ENDIF(NOT DEFINED WIN32) + TARGET_LINK_LIBRARIES(ftmod_sangoma_ss7 ${PROJECT_NAME} sng_ss7) +ENDIF(DEFINED SNGSS7) + +IF(DEFINED SNGISDN) + ADD_LIBRARY(ftmod_sangoma_isdn MODULE + ${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c + ${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c + ${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cntrl.c + ${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c + ${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c + ${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c + ${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c + ${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c + ${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c + ${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c + ) + IF(NOT DEFINED WIN32) + ADD_DEFINITIONS(-D_GNU_SOURCE) + ENDIF(NOT DEFINED WIN32) + TARGET_LINK_LIBRARIES(ftmod_sangoma_isdn ${PROJECT_NAME} sng_isdn) +ENDIF(DEFINED SNGISDN) + +IF(DEFINED OPENR2) + ADD_LIBRARY(ftmod_r2 MODULE ${ftmod_DIR}/ftmod_r2/ftmod_r2.c) + TARGET_LINK_LIBRARIES(ftmod_r2 ${PROJECT_NAME} openr2) +ENDIF(DEFINED OPENR2) diff --git a/libs/freetdm/mod_freetdm/CMakeLists.txt b/libs/freetdm/mod_freetdm/CMakeLists.txt new file mode 100644 index 0000000000..25847e713f --- /dev/null +++ b/libs/freetdm/mod_freetdm/CMakeLists.txt @@ -0,0 +1,32 @@ +# +# Arnaldo M Pereira +# +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(mod_freetdm) + +IF(NOT DEFINED WIN32) + ADD_DEFINITIONS(-g -O2 -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -O0 -g -ggdb -DPACKAGE_NAME=\"freetdm\" -DPACKAGE_TARNAME=\"freetdm\" -DPACKAGE_VERSION=\"pre-alpha\" -DPACKAGE_STRING=\"freetdm\ pre-alpha\" -DPACKAGE_BUGREPORT=\"bugs@freeswitch.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"libfreetdm\" -DVERSION=\"0.1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_LIBDL=1 -DHAVE_LIBPTHREAD=1 -DHAVE_LIBM=1 -DSIZEOF_LONG=8 -DHAVE_NETINET_SCTP_H=1 -DHAVE_NETDB_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_GETHOSTBYNAME_R=1) # -DDEBUG=/\*\*/) +ENDIF(NOT DEFINED WIN32) + +# includes +SET(mod_freetdm_INCLUDES + ${PROJECT_SOURCE_DIR}/../src/include + ${PROJECT_SOURCE_DIR}/../src/isdn/include + ${PROJECT_SOURCE_DIR}/../../libteletone/src + ${PROJECT_SOURCE_DIR}/../../../src/include +) +INCLUDE_DIRECTORIES(${mod_freetdm_INCLUDES}) + +LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/..) +ADD_LIBRARY(${PROJECT_NAME} SHARED mod_freetdm.c) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} freetdm -fPIC -Werror -fvisibility=hidden) + +IF(DEFINED WIN32) + SET(EXT lib) +ELSE(DEFINED WIN32) + SET(EXT so) +ENDIF(DEFINED WIN32) + +ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E rename lib${PROJECT_NAME}.${EXT} ${PROJECT_NAME}.${EXT} +) diff --git a/libs/freetdm/sample/CMakeLists.txt b/libs/freetdm/sample/CMakeLists.txt new file mode 100644 index 0000000000..330d590fd4 --- /dev/null +++ b/libs/freetdm/sample/CMakeLists.txt @@ -0,0 +1,8 @@ +# +# Arnaldo M Pereira +# +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(sample) + +ADD_SUBDIRECTORY(boost) +#ADD_SUBDIRECTORY(sched) FIXME: this code doesnt compile diff --git a/libs/freetdm/sample/boost/CMakeLists.txt b/libs/freetdm/sample/boost/CMakeLists.txt new file mode 100644 index 0000000000..6f36f106a5 --- /dev/null +++ b/libs/freetdm/sample/boost/CMakeLists.txt @@ -0,0 +1,12 @@ +# +# Arnaldo M Pereira +# +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(boost) + +IF(NOT DEFINED WIN32) + INCLUDE_DIRECTORIES(/usr/local/freeswitch/include) + ADD_DEFINITIONS(-Wall) + ADD_EXECUTABLE(ftdmstart ftdmstart.c) + TARGET_LINK_LIBRARIES(ftdmstart freetdm) +ENDIF(NOT DEFINED WIN32) diff --git a/libs/freetdm/sample/dso/CMakeLists.txt b/libs/freetdm/sample/dso/CMakeLists.txt new file mode 100644 index 0000000000..defcc5c7f5 --- /dev/null +++ b/libs/freetdm/sample/dso/CMakeLists.txt @@ -0,0 +1,12 @@ +# +# Arnaldo M Pereira +# +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(dso) + +IF(NOT DEFINED WIN32) + INCLUDE_DIRECTORIES(/usr/local/freeswitch/include) + ADD_DEFINITIONS(-Wall) + ADD_EXECUTABLE(ftdmload ftdmload.c) + TARGET_LINK_LIBRARIES(ftdmload freetdm) +ENDIF(NOT DEFINED WIN32) diff --git a/libs/freetdm/sample/sched/CMakeLists.txt b/libs/freetdm/sample/sched/CMakeLists.txt new file mode 100644 index 0000000000..d769925be0 --- /dev/null +++ b/libs/freetdm/sample/sched/CMakeLists.txt @@ -0,0 +1,12 @@ +# +# Arnaldo M Pereira +# +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(sched) + +IF(NOT DEFINED WIN32) + INCLUDE_DIRECTORIES(/usr/local/freeswitch/include) + ADD_DEFINITIONS(-Wall) + ADD_EXECUTABLE(ftdmsched ftdmsched.c) + TARGET_LINK_LIBRARIES(ftdmsched freetdm) +ENDIF(NOT DEFINED WIN32) From fee4f5507b31e76040533489c7ed4b52352deb66 Mon Sep 17 00:00:00 2001 From: Arnaldo M Pereira Date: Wed, 13 Oct 2010 17:15:21 -0300 Subject: [PATCH 03/16] freetdm: fixes to build on win32 --- .../ftmod_sangoma_isdn/ftmod_sangoma_isdn.h | 4 ++ .../ftmod_sangoma_isdn_stack_cntrl.c | 4 +- .../ftmod_sangoma_isdn_stack_hndl.c | 58 +++++++++++-------- .../ftmod_sangoma_isdn_stack_rcv.c | 51 ++++++++++------ 4 files changed, 75 insertions(+), 42 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h index bc928354a7..d575fcdd22 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h @@ -38,8 +38,12 @@ #include #include #include +#ifdef HAVE_STDINT_H #include +#endif +#ifdef HAVE_UNISTD_H #include +#endif #include #include "private/ftdm_core.h" diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c index cea8ac0173..27c16c2a51 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c @@ -158,7 +158,7 @@ ftdm_status_t sng_isdn_deactivate_phy(ftdm_span_t *span) ftdm_status_t sng_isdn_activate_cc(ftdm_span_t *span) { - CcMngmt cntrl;; + CcMngmt cntrl; Pst pst; sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data; @@ -239,7 +239,7 @@ ftdm_status_t sng_isdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t tra ftdm_status_t sng_isdn_cntrl_q931(ftdm_span_t *span, uint8_t action, uint8_t subaction) { - InMngmt cntrl;; + InMngmt cntrl; Pst pst; sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data; diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c index 827647f1f6..cb32730c5c 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c @@ -42,7 +42,6 @@ extern ftdm_status_t cpy_calling_name_from_stack(ftdm_caller_data_t *ftdm, Displ /* Remote side transmit a SETUP */ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); unsigned i; int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; @@ -54,6 +53,8 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event) sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data; ConEvnt *conEvnt = &sngisdn_event->event.conEvnt; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_assert(!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_STATE_CHANGE), "State change flag pending\n"); ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_DEBUG, "Processing SETUP (suId:%u suInstId:%u spInstId:%u)\n", suId, suInstId, spInstId); @@ -241,8 +242,6 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event) /* Remote side transmit a CONNECT or CONNECT ACK */ void sngisdn_process_con_cfm (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -250,6 +249,8 @@ void sngisdn_process_con_cfm (sngisdn_event_data_t *sngisdn_event) sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info; ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from conStEvnt struct for now */ /* CnStEvnt *cnStEvnt = &sngisdn_event->event.cnStEvnt; */ @@ -313,8 +314,6 @@ void sngisdn_process_con_cfm (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_cnst_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -328,6 +327,8 @@ void sngisdn_process_cnst_ind (sngisdn_event_data_t *sngisdn_event) CnStEvnt *cnStEvnt = &sngisdn_event->event.cnStEvnt; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_assert(!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_STATE_CHANGE), "State change flag pending\n"); ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Processing %s (suId:%u suInstId:%u spInstId:%u ces:%d)\n", @@ -445,8 +446,6 @@ sngisdn_process_cnst_ind_end: void sngisdn_process_disc_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -455,6 +454,8 @@ void sngisdn_process_disc_ind (sngisdn_event_data_t *sngisdn_event) DiscEvnt *discEvnt = &sngisdn_event->event.discEvnt; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Processing DISCONNECT (suId:%u suInstId:%u spInstId:%u)\n", suId, suInstId, spInstId); ftdm_assert(!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_STATE_CHANGE), "State change flag pending\n"); @@ -502,7 +503,6 @@ void sngisdn_process_disc_ind (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_rel_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -511,6 +511,8 @@ void sngisdn_process_rel_ind (sngisdn_event_data_t *sngisdn_event) RelEvnt *relEvnt = &sngisdn_event->event.relEvnt; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Processing RELEASE/RELEASE COMPLETE (suId:%u suInstId:%u spInstId:%u)\n", suId, suInstId, spInstId); ftdm_assert(!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_STATE_CHANGE), "State change flag pending\n"); @@ -597,7 +599,6 @@ void sngisdn_process_rel_ind (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_dat_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -605,6 +606,8 @@ void sngisdn_process_dat_ind (sngisdn_event_data_t *sngisdn_event) sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info; ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from infoEvnt struct for now */ /* InfoEvnt *infoEvnt = &sngisdn_event->event.infoEvnt; */ @@ -615,7 +618,6 @@ void sngisdn_process_dat_ind (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_sshl_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -623,6 +625,8 @@ void sngisdn_process_sshl_ind (sngisdn_event_data_t *sngisdn_event) sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info; ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from ssHlEvnt struct for now */ /* SsHlEvnt *ssHlEvnt = &sngisdn_event->event.ssHlEvnt; */ @@ -633,14 +637,15 @@ void sngisdn_process_sshl_ind (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_sshl_cfm (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; - + sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info; ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from ssHlEvnt struct for now */ /* SsHlEvnt *ssHlEvnt = &sngisdn_event->event.ssHlEvnt; */ @@ -651,7 +656,6 @@ void sngisdn_process_sshl_cfm (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_rmrt_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -659,6 +663,8 @@ void sngisdn_process_rmrt_ind (sngisdn_event_data_t *sngisdn_event) sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info; ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from ssHlEvnt struct for now */ /* RmRtEvnt *rmRtEvnt = &sngisdn_event->event.rmRtEvnt; */ @@ -669,7 +675,6 @@ void sngisdn_process_rmrt_ind (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_rmrt_cfm (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -677,6 +682,8 @@ void sngisdn_process_rmrt_cfm (sngisdn_event_data_t *sngisdn_event) sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info; ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from ssHlEvnt struct for now */ /* RmRtEvnt *rmRtEvnt = &sngisdn_event->event.rmRtEvnt; */ @@ -687,7 +694,6 @@ void sngisdn_process_rmrt_cfm (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_flc_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -695,6 +701,8 @@ void sngisdn_process_flc_ind (sngisdn_event_data_t *sngisdn_event) sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info; ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from ssHlEvnt struct for now */ /* StaEvnt *staEvnt = &sngisdn_event->event.staEvnt; */ @@ -705,8 +713,6 @@ void sngisdn_process_flc_ind (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_fac_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -717,6 +723,8 @@ void sngisdn_process_fac_ind (sngisdn_event_data_t *sngisdn_event) FacEvnt *facEvnt = &sngisdn_event->event.facEvnt; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Processing FACILITY IND (suId:%u suInstId:%u spInstId:%u)\n", suId, suInstId, spInstId); switch (ftdmchan->state) { @@ -758,8 +766,6 @@ void sngisdn_process_fac_ind (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_sta_cfm (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - int16_t suId = sngisdn_event->suId; uint32_t suInstId = sngisdn_event->suInstId; uint32_t spInstId = sngisdn_event->spInstId; @@ -770,6 +776,8 @@ void sngisdn_process_sta_cfm (sngisdn_event_data_t *sngisdn_event) uint8_t call_state = 0; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + if (staEvnt->callSte.eh.pres && staEvnt->callSte.callGlblSte.pres) { call_state = staEvnt->callSte.callGlblSte.val; } @@ -983,11 +991,12 @@ void sngisdn_process_sta_cfm (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_srv_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; int16_t dChan = sngisdn_event->dChan; uint8_t ces = sngisdn_event->ces; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from ssHlEvnt struct for now */ /*Srv *srvEvnt = &sngisdn_event->event.srvEvnt;*/ @@ -998,11 +1007,12 @@ void sngisdn_process_srv_ind (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_srv_cfm (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; int16_t dChan = sngisdn_event->dChan; uint8_t ces = sngisdn_event->ces; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from ssHlEvnt struct for now */ /*Srv *srvEvnt = &sngisdn_event->event.srvEvnt;*/ @@ -1013,12 +1023,13 @@ void sngisdn_process_srv_cfm (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_rst_cfm (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; int16_t dChan = sngisdn_event->dChan; uint8_t ces = sngisdn_event->ces; uint8_t evntType = sngisdn_event->evntType; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from ssHlEvnt struct for now */ /*Rst *rstEvnt = &sngisdn_event->event.rstEvnt;*/ @@ -1030,12 +1041,13 @@ void sngisdn_process_rst_cfm (sngisdn_event_data_t *sngisdn_event) void sngisdn_process_rst_ind (sngisdn_event_data_t *sngisdn_event) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); int16_t suId = sngisdn_event->suId; int16_t dChan = sngisdn_event->dChan; uint8_t ces = sngisdn_event->ces; uint8_t evntType = sngisdn_event->evntType; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + /* Function does not require any info from ssHlEvnt struct for now */ /*Rst *rstEvnt = &sngisdn_event->event.rstEvnt;*/ diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c index 9bf60537fe..5580f3a950 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c @@ -43,11 +43,12 @@ extern void get_memory_info(void); void sngisdn_rcv_con_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, ConEvnt *conEvnt, int16_t dChan, uint8_t ces) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); uint8_t bchan_no = 0; sngisdn_chan_data_t *sngisdn_info = NULL; sngisdn_event_data_t *sngisdn_event = NULL; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_assert(g_sngisdn_data.ccs[suId].activation_done != 0, "Con Ind on unconfigured cc\n"); ftdm_assert(g_sngisdn_data.dchans[dChan].num_spans != 0, "Con Ind on unconfigured dchan\n"); @@ -103,10 +104,11 @@ void sngisdn_rcv_con_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, Co void sngisdn_rcv_con_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, CnStEvnt *cnStEvnt, int16_t dChan, uint8_t ces) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info = NULL; sngisdn_event_data_t *sngisdn_event = NULL; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_assert(g_sngisdn_data.ccs[suId].activation_done != 0, "Con Cfm on unconfigured cc\n"); ftdm_assert(g_sngisdn_data.dchans[dChan].num_spans != 0, "Con Cfm on unconfigured dchan\n"); @@ -146,10 +148,11 @@ void sngisdn_rcv_con_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, Cn void sngisdn_rcv_cnst_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, CnStEvnt *cnStEvnt, uint8_t evntType, int16_t dChan, uint8_t ces) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info = NULL; sngisdn_event_data_t *sngisdn_event = NULL; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_assert(g_sngisdn_data.ccs[suId].activation_done != 0, "Cnst Ind on unconfigured cc\n"); ftdm_assert(g_sngisdn_data.dchans[dChan].num_spans != 0, "Cnst Ind on unconfigured dchan\n"); @@ -196,10 +199,11 @@ void sngisdn_rcv_cnst_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, C void sngisdn_rcv_disc_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, DiscEvnt *discEvnt) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info = NULL; sngisdn_event_data_t *sngisdn_event = NULL; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_assert(spInstId != 0, "Received DISCONNECT with invalid id"); if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && @@ -231,9 +235,10 @@ void sngisdn_rcv_disc_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, D void sngisdn_rcv_rel_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, RelEvnt *relEvnt) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info = NULL; sngisdn_event_data_t *sngisdn_event = NULL; + + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { @@ -264,10 +269,11 @@ void sngisdn_rcv_rel_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, Re void sngisdn_rcv_dat_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, InfoEvnt *infoEvnt) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info; sngisdn_event_data_t *sngisdn_event = NULL; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { @@ -296,9 +302,10 @@ void sngisdn_rcv_dat_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, In void sngisdn_rcv_sshl_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, SsHlEvnt *ssHlEvnt, uint8_t action) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info; sngisdn_event_data_t *sngisdn_event = NULL; + + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { @@ -329,9 +336,10 @@ void sngisdn_rcv_sshl_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, S void sngisdn_rcv_sshl_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, SsHlEvnt *ssHlEvnt, uint8_t action) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info; sngisdn_event_data_t *sngisdn_event = NULL; + + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { @@ -361,9 +369,10 @@ void sngisdn_rcv_sshl_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, S } void sngisdn_rcv_rmrt_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, RmRtEvnt *rmRtEvnt, uint8_t action) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info; sngisdn_event_data_t *sngisdn_event = NULL; + + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { @@ -394,9 +403,10 @@ void sngisdn_rcv_rmrt_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, R void sngisdn_rcv_rmrt_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, RmRtEvnt *rmRtEvnt, uint8_t action) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info; sngisdn_event_data_t *sngisdn_event = NULL; + + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { @@ -427,9 +437,10 @@ void sngisdn_rcv_rmrt_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, R void sngisdn_rcv_flc_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, StaEvnt *staEvnt) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info; sngisdn_event_data_t *sngisdn_event = NULL; + + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { @@ -460,9 +471,10 @@ void sngisdn_rcv_flc_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, St void sngisdn_rcv_fac_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, FacEvnt *facEvnt, uint8_t evntType, int16_t dChan, uint8_t ces) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info; sngisdn_event_data_t *sngisdn_event = NULL; + + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { @@ -493,9 +505,10 @@ void sngisdn_rcv_fac_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, Fa void sngisdn_rcv_sta_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, StaEvnt *staEvnt) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); sngisdn_chan_data_t *sngisdn_info; sngisdn_event_data_t *sngisdn_event = NULL; + + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { @@ -525,11 +538,12 @@ void sngisdn_rcv_sta_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, St void sngisdn_rcv_srv_ind (int16_t suId, Srv *srvEvnt, int16_t dChan, uint8_t ces) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); unsigned i; sngisdn_span_data_t *signal_data; sngisdn_event_data_t *sngisdn_event = NULL; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_log(FTDM_LOG_INFO, "Received SERVICE IND (dChan:%d ces:%u)\n", dChan, ces); /* Enqueue the event to each span within the dChan */ @@ -554,11 +568,12 @@ void sngisdn_rcv_srv_ind (int16_t suId, Srv *srvEvnt, int16_t dChan, uint8_t ces void sngisdn_rcv_srv_cfm (int16_t suId, Srv *srvEvnt, int16_t dChan, uint8_t ces) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); unsigned i; sngisdn_span_data_t *signal_data = NULL; sngisdn_event_data_t *sngisdn_event = NULL; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_log(FTDM_LOG_INFO, "Received SERVICE CFM (dChan:%d ces:%u)\n", dChan, ces); /* Enqueue the event to each span within the dChan */ @@ -582,11 +597,12 @@ void sngisdn_rcv_srv_cfm (int16_t suId, Srv *srvEvnt, int16_t dChan, uint8_t ces void sngisdn_rcv_rst_ind (int16_t suId, Rst *rstEvnt, int16_t dChan, uint8_t ces, uint8_t evntType) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); unsigned i; sngisdn_span_data_t *signal_data = NULL; sngisdn_event_data_t *sngisdn_event = NULL; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_log(FTDM_LOG_INFO, "Received RESTART IND (dChan:%d ces:%u type:%u)\n", dChan, ces, evntType); /* Enqueue the event to each span within the dChan */ @@ -612,11 +628,12 @@ void sngisdn_rcv_rst_ind (int16_t suId, Rst *rstEvnt, int16_t dChan, uint8_t ces void sngisdn_rcv_rst_cfm (int16_t suId, Rst *rstEvnt, int16_t dChan, uint8_t ces, uint8_t evntType) { - ISDN_FUNC_TRACE_ENTER(__FUNCTION__); unsigned i; sngisdn_span_data_t *signal_data; sngisdn_event_data_t *sngisdn_event = NULL; + ISDN_FUNC_TRACE_ENTER(__FUNCTION__); + ftdm_log(FTDM_LOG_INFO, "Received RESTART CFM (dChan:%d ces:%u type:%u)\n", dChan, ces, evntType); /* Enqueue the event to each span within the dChan */ From b2d9e55c27c934eb19f348377001cd4beecf218d Mon Sep 17 00:00:00 2001 From: Arnaldo M Pereira Date: Fri, 15 Oct 2010 11:08:46 -0300 Subject: [PATCH 04/16] added ftmod_sangoma_isdn.2008.vcproj and changed freetdm solution file to include ftmod_sangoma_isdn to the build process --- libs/freetdm/freetdm.2008.sln | 12 +- .../ftmod_sangoma_isdn.2008.vcproj | 235 ++++++++++++++++++ 2 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj diff --git a/libs/freetdm/freetdm.2008.sln b/libs/freetdm/freetdm.2008.sln index 66ea2920a2..aeaaf2529a 100644 --- a/libs/freetdm/freetdm.2008.sln +++ b/libs/freetdm/freetdm.2008.sln @@ -58,6 +58,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testsangomaboost", "msvc\te {93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_sangoma_isdn", "src\ftmod\ftmod_sangoma_isdn\ftmod_sangoma_isdn.2008.vcproj", "{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}" + ProjectSection(ProjectDependencies) = postProject + {93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -123,7 +128,6 @@ Global {1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|Win32.ActiveCfg = Release|Win32 {1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|x64.ActiveCfg = Release|x64 {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|Win32.ActiveCfg = Debug|Win32 - {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|Win32.Build.0 = Debug|Win32 {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|x64.ActiveCfg = Debug|x64 {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|x64.Build.0 = Debug|x64 {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|Win32.ActiveCfg = Release|Win32 @@ -146,6 +150,12 @@ Global {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|Win32.Build.0 = Release|Win32 {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|x64.ActiveCfg = Release|x64 {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|x64.Build.0 = Release|x64 + {B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Debug|Win32.ActiveCfg = Debug|Win32 + {B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Debug|Win32.Build.0 = Debug|Win32 + {B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Debug|x64.ActiveCfg = Debug|Win32 + {B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Release|Win32.ActiveCfg = Release|Win32 + {B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Release|Win32.Build.0 = Release|Win32 + {B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Release|x64.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj new file mode 100644 index 0000000000..06fc3b8372 --- /dev/null +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 9ccf10282df8bf66b10e68c3908b19d5f52123c0 Mon Sep 17 00:00:00 2001 From: Arnaldo M Pereira Date: Fri, 15 Oct 2010 18:26:25 -0300 Subject: [PATCH 05/16] created macro FT_DECLARE_INLINE, to declare inline functions on ftmod_sangoma_isdn. also added msvc project file for the module, its now linking against libsng_isdn on win32 --- libs/freetdm/freetdm.2008.sln | 4 +-- .../ftmod_sangoma_isdn.2008.vcproj | 30 +++++++++++-------- .../ftmod_sangoma_isdn/ftmod_sangoma_isdn.h | 4 +-- .../ftmod_sangoma_isdn_support.c | 10 +++---- libs/freetdm/src/include/ftdm_declare.h | 2 ++ 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/libs/freetdm/freetdm.2008.sln b/libs/freetdm/freetdm.2008.sln index aeaaf2529a..cb3f21d7f9 100644 --- a/libs/freetdm/freetdm.2008.sln +++ b/libs/freetdm/freetdm.2008.sln @@ -80,7 +80,6 @@ Global {93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|x64.ActiveCfg = Release|x64 {93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|x64.Build.0 = Release|x64 {BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|Win32.ActiveCfg = Debug|Win32 - {BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|Win32.Build.0 = Debug|Win32 {BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|x64.ActiveCfg = Debug|x64 {BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|x64.Build.0 = Debug|x64 {BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|Win32.ActiveCfg = Release|Win32 @@ -124,6 +123,7 @@ Global {E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Release|Win32.ActiveCfg = Release|Win32 {E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Release|x64.ActiveCfg = Release|x64 {1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|Win32.ActiveCfg = Debug|Win32 + {1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|Win32.Build.0 = Debug|Win32 {1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|x64.ActiveCfg = Debug|x64 {1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|Win32.ActiveCfg = Release|Win32 {1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|x64.ActiveCfg = Release|x64 @@ -135,7 +135,6 @@ Global {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|x64.ActiveCfg = Release|x64 {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|x64.Build.0 = Release|x64 {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|Win32.ActiveCfg = Debug|Win32 - {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|Win32.Build.0 = Debug|Win32 {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|x64.ActiveCfg = Debug|x64 {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|x64.Build.0 = Debug|x64 {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|Win32.ActiveCfg = Release|Win32 @@ -143,7 +142,6 @@ Global {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|x64.ActiveCfg = Release|x64 {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|x64.Build.0 = Release|x64 {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|Win32.ActiveCfg = Debug|Win32 - {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|Win32.Build.0 = Debug|Win32 {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|x64.ActiveCfg = Debug|x64 {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|x64.Build.0 = Debug|x64 {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj index 06fc3b8372..dd833185fe 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj @@ -6,7 +6,7 @@ ProjectGUID="{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}" RootNamespace="ftmod_sangoma_isdn" Keyword="Win32Proj" - TargetFrameworkVersion="0" + TargetFrameworkVersion="131072" > ftdmchan->span->signal_data)->cc_id; @@ -66,7 +66,7 @@ void __inline__ clear_call_data(sngisdn_chan_data_t *sngisdn_info) return; } -void __inline__ clear_call_glare_data(sngisdn_chan_data_t *sngisdn_info) +FT_DECLARE_INLINE(void) clear_call_glare_data(sngisdn_chan_data_t *sngisdn_info) { ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_DEBUG, "Clearing glare data (suId:%d suInstId:%u spInstId:%u actv-suInstId:%u actv-spInstId:%u)\n", sngisdn_info->glare.suId, @@ -91,7 +91,7 @@ void __inline__ clear_call_glare_data(sngisdn_chan_data_t *sngisdn_info) } -uint32_t __inline__ get_unique_suInstId(uint8_t cc_id) +FT_DECLARE_INLINE(uint32_t) get_unique_suInstId(uint8_t cc_id) { uint32_t suInstId; ftdm_mutex_lock(g_sngisdn_data.ccs[cc_id].mutex); @@ -112,7 +112,7 @@ uint32_t __inline__ get_unique_suInstId(uint8_t cc_id) return 0; } -ftdm_status_t __inline__ get_ftdmchan_by_suInstId(uint8_t cc_id, uint32_t suInstId, sngisdn_chan_data_t **sngisdn_data) +FT_DECLARE_INLINE(ftdm_status_t) get_ftdmchan_by_suInstId(uint8_t cc_id, uint32_t suInstId, sngisdn_chan_data_t **sngisdn_data) { ftdm_assert_return(g_sngisdn_data.ccs[cc_id].activation_done, FTDM_FAIL, "Trying to find call on unconfigured CC\n"); @@ -123,7 +123,7 @@ ftdm_status_t __inline__ get_ftdmchan_by_suInstId(uint8_t cc_id, uint32_t suInst return FTDM_SUCCESS; } -ftdm_status_t __inline__ get_ftdmchan_by_spInstId(uint8_t cc_id, uint32_t spInstId, sngisdn_chan_data_t **sngisdn_data) +FT_DECLARE_INLINE(ftdm_status_t) get_ftdmchan_by_spInstId(uint8_t cc_id, uint32_t spInstId, sngisdn_chan_data_t **sngisdn_data) { ftdm_assert_return(g_sngisdn_data.ccs[cc_id].activation_done, FTDM_FAIL, "Trying to find call on unconfigured CC\n"); diff --git a/libs/freetdm/src/include/ftdm_declare.h b/libs/freetdm/src/include/ftdm_declare.h index a3fc119946..2985ab4f45 100644 --- a/libs/freetdm/src/include/ftdm_declare.h +++ b/libs/freetdm/src/include/ftdm_declare.h @@ -70,6 +70,7 @@ extern "C" { #define FT_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl #define FT_DECLARE_DATA __declspec(dllimport) #endif +#define FT_DECLARE_INLINE(type) type #define EX_DECLARE_DATA __declspec(dllexport) #else #if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(HAVE_VISIBILITY) @@ -81,6 +82,7 @@ extern "C" { #define FT_DECLARE_NONSTD(type) type #define FT_DECLARE_DATA #endif +#define FT_DECLARE_INLINE(type) type __inline__ #define EX_DECLARE_DATA #endif From 4f6871698f788d1f0c9dff9c75732bee7ca5751e Mon Sep 17 00:00:00 2001 From: Arnaldo M Pereira Date: Mon, 18 Oct 2010 13:26:01 -0200 Subject: [PATCH 06/16] disabled 64bit compatibility check on msvc build, hard coded FREETDM_EXPORTS to ensure its set --- .../ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj index dd833185fe..e5d6b74e36 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj @@ -41,13 +41,13 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories=""C:\Program Files\libsng_isdn\include";"C:\Program Files\libsng_isdn\include\sng_isdn";../../include;"C:\Program Files\Sangoma\include"" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;FREETDM_EXPORTS;" MinimalRebuild="true" + ExceptionHandling="0" BasicRuntimeChecks="3" - RuntimeLibrary="3" UsePrecompiledHeader="0" WarningLevel="3" - Detect64BitPortabilityProblems="true" + Detect64BitPortabilityProblems="false" DebugInformationFormat="4" /> Date: Mon, 18 Oct 2010 13:27:58 -0200 Subject: [PATCH 07/16] added some casts and type changes to ftmod_sangoma_isdn, to avoid compilation warnings on msvc --- .../ftmod_sangoma_isdn_stack_cfg.c | 2 +- .../ftmod_sangoma_isdn_stack_hndl.c | 4 +- .../ftmod_sangoma_isdn_stack_rcv.c | 44 +++++++++---------- .../ftmod_sangoma_isdn_trace.c | 4 +- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c index 7f3c4c3d07..5a3e06ec89 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c @@ -227,7 +227,7 @@ ftdm_status_t sng_isdn_stack_cfg_phy_psap(ftdm_span_t *span) for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) { ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr); if (ftdmchan->type == FTDM_CHAN_TYPE_DQ921) { - d_channel_fd = ftdmchan->sockfd; + d_channel_fd = (S32) ftdmchan->sockfd; break; } } diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c index cb32730c5c..725e1bbf11 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c @@ -78,7 +78,7 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event) break; } - sngisdn_info->suInstId = get_unique_suInstId(suId); + sngisdn_info->suInstId = get_unique_suInstId((int8_t) suId); sngisdn_info->spInstId = spInstId; if (conEvnt->cdPtyNmb.eh.pres && signal_data->num_local_numbers) { @@ -206,7 +206,7 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event) sngisdn_set_flag(sngisdn_info, FLAG_DELAYED_REL); sngisdn_info->glare.suId = suId; - sngisdn_info->glare.suInstId = get_unique_suInstId(suId); + sngisdn_info->glare.suInstId = get_unique_suInstId((int8_t) suId); sngisdn_info->glare.spInstId = spInstId; sngisdn_info->glare.dChan = dChan; diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c index 5580f3a950..39c5693728 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c @@ -112,7 +112,7 @@ void sngisdn_rcv_con_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, Cn ftdm_assert(g_sngisdn_data.ccs[suId].activation_done != 0, "Con Cfm on unconfigured cc\n"); ftdm_assert(g_sngisdn_data.dchans[dChan].num_spans != 0, "Con Cfm on unconfigured dchan\n"); - if (get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) != FTDM_SUCCESS) { + if (get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) != FTDM_SUCCESS) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ISDN_FUNC_TRACE_EXIT(__FUNCTION__); return; @@ -156,7 +156,7 @@ void sngisdn_rcv_cnst_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, C ftdm_assert(g_sngisdn_data.ccs[suId].activation_done != 0, "Cnst Ind on unconfigured cc\n"); ftdm_assert(g_sngisdn_data.dchans[dChan].num_spans != 0, "Cnst Ind on unconfigured dchan\n"); - if (get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) != FTDM_SUCCESS) { + if (get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) != FTDM_SUCCESS) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ISDN_FUNC_TRACE_EXIT(__FUNCTION__); return; @@ -206,8 +206,8 @@ void sngisdn_rcv_disc_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, D ftdm_assert(spInstId != 0, "Received DISCONNECT with invalid id"); - if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && - !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { + if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && + !(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ftdm_assert(0, "Inconsistent call states\n"); @@ -240,8 +240,8 @@ void sngisdn_rcv_rel_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, Re ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && - !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { + if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && + !(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); /* It seems that Trillium has a bug where they sometimes send release twice on a call, so do not crash on these for now */ @@ -274,8 +274,8 @@ void sngisdn_rcv_dat_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, In ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && - !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { + if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && + !(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ftdm_assert(0, "Inconsistent call states\n"); @@ -307,8 +307,8 @@ void sngisdn_rcv_sshl_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, S ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && - !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { + if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && + !(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ftdm_assert(0, "Inconsistent call states\n"); @@ -341,8 +341,8 @@ void sngisdn_rcv_sshl_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, S ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && - !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { + if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && + !(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ftdm_assert(0, "Inconsistent call states\n"); @@ -374,8 +374,8 @@ void sngisdn_rcv_rmrt_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, R ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && - !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { + if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && + !(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ftdm_assert(0, "Inconsistent call states\n"); @@ -408,8 +408,8 @@ void sngisdn_rcv_rmrt_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, R ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && - !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { + if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && + !(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ftdm_assert(0, "Inconsistent call states\n"); @@ -442,8 +442,8 @@ void sngisdn_rcv_flc_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, St ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && - !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { + if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && + !(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ftdm_assert(0, "Inconsistent call states\n"); @@ -476,8 +476,8 @@ void sngisdn_rcv_fac_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, Fa ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && - !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { + if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && + !(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ftdm_assert(0, "Inconsistent call states\n"); @@ -510,8 +510,8 @@ void sngisdn_rcv_sta_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, St ISDN_FUNC_TRACE_ENTER(__FUNCTION__); - if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && - !(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { + if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) && + !(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) { ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId); ftdm_assert(0, "Inconsistent call states\n"); diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c index 7d4d347eab..624d35c147 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c @@ -100,7 +100,7 @@ uint8_t get_bits(uint8_t octet, uint8_t bitLo, uint8_t bitHi) void sngisdn_trace_q921(char* str, uint8_t* data, uint32_t data_len) { int str_len; - int i; + uint32_t i; uint8_t sapi, cr, ea, tei, ns, nr, pf, p, cmd; uint8_t frame_format = 0; @@ -649,7 +649,7 @@ uint32_t sngisdn_decode_ie(char *str, uint32_t *str_len, uint8_t current_codeset void print_hex_dump(char* str, uint32_t *str_len, uint8_t* data, uint32_t index_start, uint32_t index_end) { - int k; + uint32_t k; *str_len += sprintf(&str[*str_len], " [ "); for(k=index_start; k <= index_end; k++) { if (k && !(k%32)) { From fcf027550c824bc49c55b79ff07abe14b328f368 Mon Sep 17 00:00:00 2001 From: Arnaldo M Pereira Date: Mon, 18 Oct 2010 15:37:28 -0200 Subject: [PATCH 08/16] removed macro FREETDM_EXPORTS from msvc ftmod_sangoma_isdn build, changed visibility on e other functions and added EX_DECLARE_DATA to ftmod_sangoma_isdn module definition. now building and loading on win32, but not working. --- .../ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj | 2 +- .../src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c | 2 +- .../src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj index e5d6b74e36..e3930d8188 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.2008.vcproj @@ -41,7 +41,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories=""C:\Program Files\libsng_isdn\include";"C:\Program Files\libsng_isdn\include\sng_isdn";../../include;"C:\Program Files\Sangoma\include"" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;FREETDM_EXPORTS;" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;" MinimalRebuild="true" ExceptionHandling="0" BasicRuntimeChecks="3" diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c index 0ed5902153..803e6371d7 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c @@ -1010,7 +1010,7 @@ static FIO_IO_LOAD_FUNCTION(ftdm_sangoma_isdn_io_init) return FTDM_SUCCESS; } -ftdm_module_t ftdm_module = +EX_DECLARE_DATA ftdm_module_t ftdm_module = { "sangoma_isdn", /* char name[256]; */ ftdm_sangoma_isdn_io_init, /* fio_io_load_t */ diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h index 81121af6cd..7db753e420 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h @@ -266,16 +266,16 @@ extern ftdm_sngisdn_data_t g_sngisdn_data; ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_span_t *span); /* Support functions */ -uint32_t get_unique_suInstId(uint8_t cc_id); +FT_DECLARE_INLINE(uint32_t) get_unique_suInstId(uint8_t cc_id); FT_DECLARE_INLINE(void) clear_call_data(sngisdn_chan_data_t *sngisdn_info); FT_DECLARE_INLINE(void) clear_call_glare_data(sngisdn_chan_data_t *sngisdn_info); void stack_hdr_init(Header *hdr); void stack_pst_init(Pst *pst); -ftdm_status_t get_ftdmchan_by_spInstId(uint8_t cc_id, uint32_t spInstId, sngisdn_chan_data_t **sngisdn_data); -ftdm_status_t get_ftdmchan_by_suInstId(uint8_t cc_id, uint32_t suInstId, sngisdn_chan_data_t **sngisdn_data); -ftdm_status_t sng_isdn_set_avail_rate(ftdm_span_t *ftdmspan, sngisdn_avail_t avail); +FT_DECLARE_INLINE(ftdm_status_t) get_ftdmchan_by_spInstId(uint8_t cc_id, uint32_t spInstId, sngisdn_chan_data_t **sngisdn_data); +FT_DECLARE_INLINE(ftdm_status_t) get_ftdmchan_by_suInstId(uint8_t cc_id, uint32_t suInstId, sngisdn_chan_data_t **sngisdn_data); +FT_DECLARE_INLINE(ftdm_status_t) sng_isdn_set_avail_rate(ftdm_span_t *ftdmspan, sngisdn_avail_t avail); /* Outbound Call Control functions */ void sngisdn_snd_setup(ftdm_channel_t *ftdmchan); From df005951ebbbd0e25551158bfcb0f87ee27dfc6f Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Thu, 21 Oct 2010 10:45:03 -0700 Subject: [PATCH 09/16] freetdm: Added Print for Called Number, Calling Name on incoming/outgoing calls --- .../ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c | 5 ++--- .../ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c index 827647f1f6..41833c54d3 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c @@ -79,6 +79,7 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event) sngisdn_info->suInstId = get_unique_suInstId(suId); sngisdn_info->spInstId = spInstId; + if (conEvnt->cdPtyNmb.eh.pres && signal_data->num_local_numbers) { uint8_t local_number_matched = 0; @@ -128,14 +129,12 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event) #if 0 /* Export ftdmchan variables here if we need to */ ftdm_channel_add_var(ftdmchan, "isdn_specific_var", "1"); - ftdm_channel_add_var(ftdmchan, "isdn_crap", "morecrap"); - ftdm_channel_add_var(ftdmchan, "isdn_stuff", "s"); - ftdm_channel_add_var(ftdmchan, "isdn_d", "asdsadasdasdsad"); #endif /* Fill in call information */ cpy_calling_num_from_stack(&ftdmchan->caller_data, &conEvnt->cgPtyNmb); cpy_called_num_from_stack(&ftdmchan->caller_data, &conEvnt->cdPtyNmb); cpy_calling_name_from_stack(&ftdmchan->caller_data, &conEvnt->display); + ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_INFO, "Incoming call: Called No:[%s] Calling No:[%s]\n", ftdmchan->caller_data.dnis.digits, ftdmchan->caller_data.cid_num.digits); if (conEvnt->bearCap[0].eh.pres) { ftdmchan->caller_data.bearer_layer1 = sngisdn_get_infoTranCap_from_stack(conEvnt->bearCap[0].usrInfoLyr1Prot.val); diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c index 80a85ceec8..3284d54165 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c @@ -143,6 +143,7 @@ void sngisdn_snd_setup(ftdm_channel_t *ftdmchan) signal_data->signalling == SNGISDN_SIGNALING_NET) { sngisdn_info->ces = CES_MNGMNT; } + ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_INFO, "Outgoing call: Called No:[%s] Calling No:[%s]\n", ftdmchan->caller_data.dnis.digits, ftdmchan->caller_data.cid_num.digits); cpy_called_num_from_user(&conEvnt.cdPtyNmb, &ftdmchan->caller_data); cpy_calling_num_from_user(&conEvnt.cgPtyNmb, &ftdmchan->caller_data); From 742da182180a3bd479828d2477d7263001f77d09 Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Mon, 25 Oct 2010 07:32:55 -0700 Subject: [PATCH 10/16] Added state handler for overlap-receive --- .../ftmod_sangoma_isdn_stack_hndl.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c index 41833c54d3..5b0e1b5810 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c @@ -968,6 +968,18 @@ void sngisdn_process_sta_cfm (sngisdn_event_data_t *sngisdn_event) //ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART); break; } + break; + case 25: /* Overlap receiving */ + switch (ftdmchan->state) { + case FTDM_CHANNEL_STATE_COLLECT: + /* do nothing */ + break; + default: + ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Don't know how to handle incompatible state. remote call state:%d our state:%s\n", call_state, ftdm_channel_state2str(ftdmchan->state)); + //ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART); + break; + } + break; default: ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Don't know how to handle incompatible state. remote call state:%d our state:%s\n", call_state, ftdm_channel_state2str(ftdmchan->state)); //ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART); From 9a0f638d1914b112b2990407a254afcd86d52bbc Mon Sep 17 00:00:00 2001 From: Arnaldo M Pereira Date: Mon, 25 Oct 2010 19:06:59 -0200 Subject: [PATCH 11/16] freetdm: removed duplicated DELTA_EPOCH_IN_MICROSECS definition --- libs/freetdm/src/ftdm_sched.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libs/freetdm/src/ftdm_sched.c b/libs/freetdm/src/ftdm_sched.c index 73facb35f4..c48c3e9433 100644 --- a/libs/freetdm/src/ftdm_sched.c +++ b/libs/freetdm/src/ftdm_sched.c @@ -35,11 +35,6 @@ #include "private/ftdm_core.h" #ifdef __WINDOWS__ -#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) -#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 -#else /* */ -#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL -#endif /* */ struct ftdm_timezone { int tz_minuteswest; /* minutes W of Greenwich */ int tz_dsttime; /* type of dst correction */ From a30800632e83bb227660100e81a691b15438f1cf Mon Sep 17 00:00:00 2001 From: Arnaldo M Pereira Date: Mon, 25 Oct 2010 19:22:51 -0200 Subject: [PATCH 12/16] freetdm: reverted wrong changes to freetdm.2008.sln --- libs/freetdm/freetdm.2008.sln | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libs/freetdm/freetdm.2008.sln b/libs/freetdm/freetdm.2008.sln index cb3f21d7f9..bdfd0b83bf 100644 --- a/libs/freetdm/freetdm.2008.sln +++ b/libs/freetdm/freetdm.2008.sln @@ -80,6 +80,7 @@ Global {93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|x64.ActiveCfg = Release|x64 {93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|x64.Build.0 = Release|x64 {BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|Win32.ActiveCfg = Debug|Win32 + {BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|Win32.Build.0 = Debug|Win32 {BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|x64.ActiveCfg = Debug|x64 {BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|x64.Build.0 = Debug|x64 {BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|Win32.ActiveCfg = Release|Win32 @@ -128,6 +129,7 @@ Global {1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|Win32.ActiveCfg = Release|Win32 {1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|x64.ActiveCfg = Release|x64 {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|Win32.ActiveCfg = Debug|Win32 + {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|Win32.Build.0 = Debug|Win32 {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|x64.ActiveCfg = Debug|x64 {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|x64.Build.0 = Debug|x64 {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|Win32.ActiveCfg = Release|Win32 @@ -142,6 +144,7 @@ Global {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|x64.ActiveCfg = Release|x64 {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|x64.Build.0 = Release|x64 {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|Win32.ActiveCfg = Debug|Win32 + {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|Win32.Build.0 = Debug|Win32 {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|x64.ActiveCfg = Debug|x64 {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|x64.Build.0 = Debug|x64 {0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|Win32.ActiveCfg = Release|Win32 From 09dc7c32f05359e58d26a1ba554431567ec04969 Mon Sep 17 00:00:00 2001 From: Arnaldo M Pereira Date: Mon, 25 Oct 2010 19:30:04 -0200 Subject: [PATCH 13/16] freetdm: added testsangomaboost back to build by default on msvc --- libs/freetdm/freetdm.2008.sln | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/freetdm/freetdm.2008.sln b/libs/freetdm/freetdm.2008.sln index bdfd0b83bf..61f631f5c0 100644 --- a/libs/freetdm/freetdm.2008.sln +++ b/libs/freetdm/freetdm.2008.sln @@ -137,6 +137,7 @@ Global {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|x64.ActiveCfg = Release|x64 {D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|x64.Build.0 = Release|x64 {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|Win32.ActiveCfg = Debug|Win32 + {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|Win32.Build.0 = Debug|Win32 {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|x64.ActiveCfg = Debug|x64 {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|x64.Build.0 = Debug|x64 {2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|Win32.ActiveCfg = Release|Win32 From 3ad8a33b622b1bbcd7a27c969ac13ddcb2a2dad2 Mon Sep 17 00:00:00 2001 From: Konrad Hammel Date: Mon, 25 Oct 2010 16:55:03 -0400 Subject: [PATCH 14/16] freetdm: ss7, bug fix in obci_bita handling freetdm: ss7, added support for SAM freetdm: ss7, updated support for COT in IAM --- .../ftmod_sangoma_ss7_handle.c | 106 ++++++++++++++++-- .../ftmod_sangoma_ss7_main.c | 54 ++++----- .../ftmod_sangoma_ss7_main.h | 2 + .../ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c | 3 +- .../ftmod_sangoma_ss7_support.c | 44 ++++++++ 5 files changed, 172 insertions(+), 37 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c index 807b3b62c7..c4922654eb 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c @@ -216,8 +216,20 @@ ftdm_status_t handle_con_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ sprintf(nadi, "%d", siConEvnt->cdPtyNum.natAddrInd.val); ftdm_channel_add_var(ftdmchan, "ss7_cld_nadi", nadi); - /* set the state of the channel to collecting...the rest is done by the chan monitor */ - ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_COLLECT); + + /* check if a COT test is requested */ + if ((siConEvnt->natConInd.eh.pres) && (siConEvnt->natConInd.contChkInd.pres)) { + SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Found COT Request\n", sngss7_info->circuit->cic); + + /* tell the core to loop the channel */ + ftdm_channel_command(ftdmchan, FTDM_COMMAND_ENABLE_LOOP, NULL); + + /* move to in loop state */ + ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_IN_LOOP); + } else { + /* set the state of the channel to collecting...the rest is done by the chan monitor */ + ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_COLLECT); + } } /* if (channel is usable */ @@ -256,6 +268,9 @@ handle_glare: default: /* should not have gotten an IAM while in this state */ SS7_ERROR_CHAN(ftdmchan, "Got IAM on channel in invalid state(%s)...reset!\n", ftdm_channel_state2str (ftdmchan->state)); + /* reset the cic */ + sngss7_set_flag(sngss7_info, FLAG_RESET_TX); + /* move the state of the channel to RESTART to force a reset */ ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_RESTART); @@ -292,6 +307,7 @@ ftdm_status_t handle_con_sta(uint32_t suInstId, uint32_t spInstId, uint32_t circ /**************************************************************************/ case (ADDRCMPLT): SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Rx ACM\n", sngss7_info->circuit->cic); + switch (ftdmchan->state) { /**********************************************************************/ case FTDM_CHANNEL_STATE_DIALING: @@ -315,14 +331,22 @@ ftdm_status_t handle_con_sta(uint32_t suInstId, uint32_t spInstId, uint32_t circ ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA); } - break; + break; /**********************************************************************/ default: /* incorrect state...reset the CIC */ + SS7_ERROR_CHAN(ftdmchan, "RX ACM in invalid state :%s...resetting CIC\n", + ftdm_channel_state2str (ftdmchan->state)); + + /* reset the cic */ + sngss7_set_flag(sngss7_info, FLAG_RESET_TX); + /* go to RESTART */ - ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS); - break; + ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_RESTART); + break; /**********************************************************************/ } /* switch (ftdmchan->state) */ + + break; /**************************************************************************/ case (MODIFY): SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Rx MODIFY\n", sngss7_info->circuit->cic); @@ -354,6 +378,34 @@ ftdm_status_t handle_con_sta(uint32_t suInstId, uint32_t spInstId, uint32_t circ /**************************************************************************/ case (SUBSADDR): SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Rx SAM\n", sngss7_info->circuit->cic); + + /* check the channel state */ + switch (ftdmchan->state) { + /**********************************************************************/ + case (FTDM_CHANNEL_STATE_COLLECT): + + /* confirm that the event contains the subsquent number field */ + if (siCnStEvnt->subNum.eh.pres && siCnStEvnt->subNum.addrSig.pres) { + /* add the digits to the ftdm channel variable */ + append_tknStr_from_sngss7(siCnStEvnt->subNum.addrSig, + ftdmchan->caller_data.dnis.digits, + siCnStEvnt->subNum.oddEven); + } else { + SS7_INFO_CHAN(ftdmchan,"No Called party (DNIS) information in SAM!%s\n", " "); + } + + /* go to idle so that collect state is processed again */ + ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_IDLE); + + break; + /**********************************************************************/ + default: + SS7_ERROR_CHAN(ftdmchan, "RX SAM in invalid state :%s...ignoring\n", + ftdm_channel_state2str (ftdmchan->state)); + break; + /**********************************************************************/ + } /* switch (ftdmchan->state) */ + break; /**************************************************************************/ case (EXIT): @@ -830,7 +882,7 @@ ftdm_status_t handle_sta_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ break; /**************************************************************************/ case SIT_STA_CONTCHK: /* continuity check */ - SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Rx COT start\n", sngss7_info->circuit->cic); + SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Rx CCR start\n", sngss7_info->circuit->cic); handle_cot_start(suInstId, spInstId, circuit, globalFlg, evntType, siStaEvnt); break; /**************************************************************************/ @@ -840,7 +892,7 @@ ftdm_status_t handle_sta_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ break; /**************************************************************************/ case SIT_STA_STPCONTIN: /* stop continuity */ - SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Rx COT stop\n", sngss7_info->circuit->cic); + SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Rx CCR stop\n", sngss7_info->circuit->cic); handle_cot_stop(suInstId, spInstId, circuit, globalFlg, evntType, siStaEvnt); break; /**************************************************************************/ @@ -1225,7 +1277,7 @@ ftdm_status_t handle_cot_start(uint32_t suInstId, uint32_t spInstId, uint32_t ci /* open the channel if it is not open */ if (!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_OPEN)) { if (ftdm_channel_open_chan(ftdmchan) != FTDM_SUCCESS) { - SS7_ERROR("Failed to open CIC %d for COT test!\n", sngss7_info->circuit->cic); + SS7_ERROR("Failed to open CIC %d for CCR test!\n", sngss7_info->circuit->cic); /* KONRAD FIX ME */ SS7_FUNC_TRACE_EXIT(__FUNCTION__); return FTDM_FAIL; @@ -1290,6 +1342,38 @@ ftdm_status_t handle_cot(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, { SS7_FUNC_TRACE_ENTER(__FUNCTION__); + sngss7_chan_data_t *sngss7_info = NULL; + ftdm_channel_t *ftdmchan = NULL; + + /* get the ftdmchan and ss7_chan_data from the circuit */ + if (extract_chan_data(circuit, &sngss7_info, &ftdmchan)) { + SS7_ERROR("Failed to extract channel data for circuit = %d!\n", circuit); + SS7_FUNC_TRACE_EXIT(__FUNCTION__); + return FTDM_FAIL; + } + + /* lock the channel */ + ftdm_mutex_lock(ftdmchan->mutex); + + switch (ftdmchan->state) { + /**************************************************************************/ + case (FTDM_CHANNEL_STATE_IN_LOOP): + /* tell the core to stop looping the channel */ + ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_LOOP, NULL); + + /* exit out of the LOOP state and go to collect */ + ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_COLLECT); + + break; + /**************************************************************************/ + default: + /* exit out of the LOOP state to the last state */ + ftdm_set_state_locked(ftdmchan, ftdmchan->last_state); + + break; + /**************************************************************************/ + } /* switch (ftdmchan->state) */ + if ( (siStaEvnt->contInd.eh.pres > 0) && (siStaEvnt->contInd.contInd.pres > 0)) { SS7_INFO("Continuity Test result for CIC = %d (span %d, chan %d) is: \"%s\"\n", g_ftdm_sngss7_data.cfg.isupCkt[circuit].cic, @@ -1300,13 +1384,13 @@ ftdm_status_t handle_cot(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, SS7_ERROR("Recieved Continuity report containing no results!\n"); } + /* unlock the channel again before we exit */ + ftdm_mutex_unlock(ftdmchan->mutex); + SS7_FUNC_TRACE_EXIT(__FUNCTION__); return FTDM_SUCCESS; } -/******************************************************************************/ - - /******************************************************************************/ ftdm_status_t handle_blo_req(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, uint8_t globalFlg, uint8_t evntType, SiStaEvnt *siStaEvnt) { diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c index 587242d94e..ebb4efa311 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c @@ -79,7 +79,7 @@ ftdm_state_map_t sangoma_ss7_state_map = { ZSD_INBOUND, ZSM_UNACCEPTABLE, {FTDM_CHANNEL_STATE_IDLE, FTDM_END}, - {FTDM_CHANNEL_STATE_RESTART, FTDM_END} + {FTDM_CHANNEL_STATE_RESTART, FTDM_CHANNEL_STATE_COLLECT, FTDM_END} }, { ZSD_INBOUND, @@ -100,7 +100,8 @@ ftdm_state_map_t sangoma_ss7_state_map = { ZSM_UNACCEPTABLE, {FTDM_CHANNEL_STATE_COLLECT, FTDM_END}, {FTDM_CHANNEL_STATE_SUSPENDED, FTDM_CHANNEL_STATE_RESTART, - FTDM_CHANNEL_STATE_CANCEL, FTDM_CHANNEL_STATE_RING, FTDM_END} + FTDM_CHANNEL_STATE_CANCEL, FTDM_CHANNEL_STATE_RING, + FTDM_CHANNEL_STATE_IDLE, FTDM_END} }, { ZSD_INBOUND, @@ -526,29 +527,32 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan) ftdm_set_state_locked (ftdmchan, FTDM_CHANNEL_STATE_RING); } else { - SS7_INFO_CHAN(ftdmchan,"Received %d out of %d so far: %s...starting T35\n", - i, - g_ftdm_sngss7_data.min_digits, - ftdmchan->caller_data.dnis.digits); - - /* start ISUP t35 */ - if (ftdm_sched_timer (sngss7_info->t35.sched, - "t35", - sngss7_info->t35.beat, - sngss7_info->t35.callback, - &sngss7_info->t35, - &sngss7_info->t35.hb_timer_id)) { - - SS7_ERROR ("Unable to schedule timer, hanging up call!\n"); - - ftdmchan->caller_data.hangup_cause = 41; - - /* set the flag to indicate this hangup is started from the local side */ - sngss7_set_flag (sngss7_info, FLAG_LOCAL_REL); - - /* end the call */ - ftdm_set_state_locked (ftdmchan, FTDM_CHANNEL_STATE_CANCEL); - } /* if (ftdm_sched_timer(sngss7_info->t35.sched, */ + /* if we are coming from idle state then we have already been here once before */ + if (ftdmchan->last_state != FTDM_CHANNEL_STATE_IDLE) { + SS7_INFO_CHAN(ftdmchan,"Received %d out of %d so far: %s...starting T35\n", + i, + g_ftdm_sngss7_data.min_digits, + ftdmchan->caller_data.dnis.digits); + + /* start ISUP t35 */ + if (ftdm_sched_timer (sngss7_info->t35.sched, + "t35", + sngss7_info->t35.beat, + sngss7_info->t35.callback, + &sngss7_info->t35, + &sngss7_info->t35.hb_timer_id)) { + + SS7_ERROR ("Unable to schedule timer, hanging up call!\n"); + + ftdmchan->caller_data.hangup_cause = 41; + + /* set the flag to indicate this hangup is started from the local side */ + sngss7_set_flag (sngss7_info, FLAG_LOCAL_REL); + + /* end the call */ + ftdm_set_state_locked (ftdmchan, FTDM_CHANNEL_STATE_CANCEL); + } /* if (ftdm_sched_timer(sngss7_info->t35.sched, */ + } /* if (ftdmchan->last_state != FTDM_CHANNEL_STATE_IDLE) */ } /* checking ST/#digits */ break; diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h index 27833cb2a2..378b50e0ad 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h @@ -581,6 +581,8 @@ uint8_t copy_cgPtyNum_to_sngss7(ftdm_caller_data_t *ftdm, SiCgPtyNum *cgPtyNum); uint8_t copy_cdPtyNum_from_sngss7(ftdm_caller_data_t *ftdm, SiCdPtyNum *cdPtyNum); uint8_t copy_cdPtyNum_to_sngss7(ftdm_caller_data_t *ftdm, SiCdPtyNum *cdPtyNum); uint8_t copy_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven); +uint8_t append_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven); + int check_for_state_change(ftdm_channel_t *ftdmchan); int check_cics_in_range(sngss7_chan_data_t *sngss7_info); int check_for_reset(sngss7_chan_data_t *sngss7_info); diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c index 8cbe6d9498..f2e34e6c2c 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c @@ -341,9 +341,10 @@ void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan) /* fill in any optional parameters */ if (sngss7_test_options(isup_intf, SNGSS7_ACM_OBCI_BITA)) { + SS7_DEBUG_CHAN(ftdmchan, "Found ACM_OBCI_BITA flag:0x%X\n", isup_intf->options); acm.optBckCalInd.eh.pres = PRSNT_NODEF; acm.optBckCalInd.inbndInfoInd.pres = PRSNT_NODEF; - acm.optBckCalInd.inbndInfoInd.val = sngss7_test_options(isup_intf, SNGSS7_ACM_OBCI_BITA); + acm.optBckCalInd.inbndInfoInd.val = 0x1; acm.optBckCalInd.caFwdMayOcc.pres = PRSNT_DEF; acm.optBckCalInd.simpleSegmInd.pres = PRSNT_DEF; acm.optBckCalInd.mlppUserInd.pres = PRSNT_DEF; diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c index 718663950a..4d514caf86 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c @@ -44,6 +44,7 @@ uint32_t sngss7_id; /* PROTOTYPES *****************************************************************/ uint8_t copy_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven); +uint8_t append_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven); uint8_t copy_cgPtyNum_from_sngss7(ftdm_caller_data_t *ftdm, SiCgPtyNum *cgPtyNum); uint8_t copy_cgPtyNum_to_sngss7(ftdm_caller_data_t *ftdm, SiCgPtyNum *cgPtyNum); uint8_t copy_cdPtyNum_from_sngss7(ftdm_caller_data_t *ftdm, SiCdPtyNum *cdPtyNum); @@ -343,6 +344,49 @@ uint8_t copy_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven) return 0; } +/******************************************************************************/ +uint8_t append_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven) +{ + int i = 0; + int j = 0; + + /* check if the token string is present */ + if (str.pres == 1) { + /* find the length of the digits so far */ + j = strlen(ftdm); + + /* confirm that we found an acceptable length */ + if ( j > 25 ) { + SS7_ERROR("string length exceeds maxium value...aborting append!\n"); + return 1; + } /* if ( j > 25 ) */ + + /* copy in digits */ + for (i = 0; i < str.len; i++) { + /* convert 4 bit integer to char and copy into lower nibblet*/ + sprintf(&ftdm[j], "%X", (str.val[i] & 0x0F)); + /* move along */ + j++; + /* convert 4 bit integer to char and copy into upper nibblet */ + sprintf(&ftdm[j], "%X", ((str.val[i] & 0xF0) >> 4)); + /* move along */ + j++; + } /* for (i = 0; i < str.len; i++) */ + + /* if the odd flag is up the last digit is a fake "0" */ + if ((oddEven.pres == 1) && (oddEven.val == 1)) { + ftdm[j-1] = '\0'; + } else { + ftdm[j] = '\0'; + } /* if ((oddEven.pres == 1) && (oddEven.val == 1)) */ + } else { + SS7_ERROR("Asked to copy tknStr that is not present!\n"); + return 1; + } /* if (str.pres == 1) */ + + return 0; +} + /******************************************************************************/ int check_for_state_change(ftdm_channel_t *ftdmchan) { From 5fe38d5f88991bd99088a27d64662c027165085a Mon Sep 17 00:00:00 2001 From: Konrad Hammel Date: Wed, 27 Oct 2010 18:07:56 -0400 Subject: [PATCH 15/16] freetdm: ss7, bug fix in COT handling --- .../src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c index c4922654eb..7519b2787d 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c @@ -218,7 +218,10 @@ ftdm_status_t handle_con_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ /* check if a COT test is requested */ - if ((siConEvnt->natConInd.eh.pres) && (siConEvnt->natConInd.contChkInd.pres)) { + if ((siConEvnt->natConInd.eh.pres) && + (siConEvnt->natConInd.contChkInd.pres) && + (siConEvnt->natConInd.contChkInd.val)) { + SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Found COT Request\n", sngss7_info->circuit->cic); /* tell the core to loop the channel */ From 6f2ccbae21199c8ef786903f1ef83f67d9efe4a0 Mon Sep 17 00:00:00 2001 From: Konrad Hammel Date: Thu, 28 Oct 2010 17:09:51 -0400 Subject: [PATCH 16/16] freetdm: ss7 - update to support CCR --- .../ftmod_sangoma_ss7_handle.c | 32 ++++++++++++------- .../ftmod_sangoma_ss7_main.c | 11 ++++++- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c index 7519b2787d..af3b9edbae 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c @@ -598,7 +598,7 @@ ftdm_status_t handle_rel_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ /* this is a remote hangup request */ sngss7_set_flag(sngss7_info, FLAG_REMOTE_REL); - +ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_LOOP, NULL); /* move the state of the channel to CANCEL to end the call */ ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_TERMINATING); @@ -613,7 +613,7 @@ ftdm_status_t handle_rel_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ if (siRelEvnt->causeDgn.causeVal.pres) { ftdmchan->caller_data.hangup_cause = siRelEvnt->causeDgn.causeVal.val; } else { - SS7_ERROR("REL does not have a cause code!\n"); + SS7_ERROR("REL does not have a cause ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_LOOP, NULL);code!\n"); ftdmchan->caller_data.hangup_cause = 0; } @@ -625,6 +625,23 @@ ftdm_status_t handle_rel_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ break; /**************************************************************************/ + case FTDM_CHANNEL_STATE_IN_LOOP: + + /* inform the core to unloop the channel*/ + ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_LOOP, NULL); + + /* since we need to acknowledge the hang up set the flag for remote release */ + sngss7_set_flag(sngss7_info, FLAG_REMOTE_REL); + + /* go to hangup complete to send the RLC */ + ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_HANGUP_COMPLETE); + + /* save the call info for the RLC */ + sngss7_info->suInstId = get_unique_id(); + sngss7_info->spInstId = spInstId; + + break; + /**************************************************************************/ default: /* throw the reset flag */ @@ -1293,15 +1310,6 @@ ftdm_status_t handle_cot_start(uint32_t suInstId, uint32_t spInstId, uint32_t ci /* switch to the IN_LOOP state */ ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_IN_LOOP); - /* store the sngss7 ids */ - if (suInstId == 0) { - sngss7_info->suInstId = get_unique_id(); - } else { - sngss7_info->suInstId = suInstId; - } - sngss7_info->spInstId = spInstId; - sngss7_info->globalFlg = globalFlg; - /* unlock the channel again before we exit */ ftdm_mutex_unlock(ftdmchan->mutex); @@ -1662,7 +1670,7 @@ ftdm_status_t handle_rsc_rsp(uint32_t suInstId, uint32_t spInstId, uint32_t circ sngss7_set_flag(sngss7_info, FLAG_RESET_TX_RSP); /* go to DOWN */ - ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_DOWN); + /*ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_DOWN);*/ break; /**********************************************************************/ diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c index ebb4efa311..7612f3dd74 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c @@ -93,7 +93,8 @@ ftdm_state_map_t sangoma_ss7_state_map = { ZSM_UNACCEPTABLE, {FTDM_CHANNEL_STATE_IN_LOOP, FTDM_END}, {FTDM_CHANNEL_STATE_SUSPENDED, FTDM_CHANNEL_STATE_RESTART, - FTDM_CHANNEL_STATE_COLLECT, FTDM_CHANNEL_STATE_DOWN, FTDM_END} + FTDM_CHANNEL_STATE_COLLECT, FTDM_CHANNEL_STATE_DOWN, + FTDM_CHANNEL_STATE_HANGUP_COMPLETE, FTDM_END} }, { ZSD_INBOUND, @@ -970,6 +971,14 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan) ftdm_set_state_locked (ftdmchan, ftdmchan->last_state); break; /******************************************************************/ + case (FTDM_CHANNEL_STATE_IN_LOOP): + /* we screwed up in a COT/CCR, remove the loop */ + ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_LOOP, NULL); + + /* go to down */ + ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_DOWN); + break; + /******************************************************************/ default: /* KONRAD: find out what the cause code should be */ ftdmchan->caller_data.hangup_cause = 41;