diff --git a/.gitignore b/.gitignore index da9e275130..51edfbf0f1 100644 --- a/.gitignore +++ b/.gitignore @@ -214,6 +214,9 @@ ipch/ /src/mod/languages/mod_managed/Win32/Debug_CLR/mod_managed.*.log /src/mod/languages/mod_managed/Win32/Release_CLR/mod_managed.*.log +/src/.dirstamp +/src/mod/languages/mod_v8/src/.dirstamp + libs/libsndfile/Scripts/build-test-tarball.mk libs/libsndfile/doc/libsndfile.css libs/libsndfile/echo-install-dirs diff --git a/Makefile.am b/Makefile.am index 3d948a80fb..50f05dcfa2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -139,7 +139,7 @@ endif if HAVE_LIBEDIT CORE_CFLAGS += -I$(switch_srcdir)/libs/libedit/src -DSWITCH_HAVE_LIBEDIT -CORE_LIBS += libs/libedit/src/.libs/libedit.a $(TINFO_LIBS) +CORE_LIBS += libs/libedit/src/.libs/libedit.a endif if ENABLE_TIMERFD_WRAPPER @@ -159,6 +159,10 @@ libfreeswitch_la_LDFLAGS = -version-info 1:0:0 $(AM_LDFLAGS) $(PLATFORM_CORE_LDF libfreeswitch_la_LIBADD = $(CORE_LIBS) $(APR_LIBS) $(PLATFORM_CORE_LIBS) libfreeswitch_la_DEPENDENCIES = $(BUILT_SOURCES) +if HAVE_LIBEDIT +libfreeswitch_la_LIBADD += $(TINFO_LIBS) +endif + if HAVE_ODBC libfreeswitch_la_LDFLAGS += $(ODBC_LIB_FLAGS) endif diff --git a/build/modmake.rulesam b/build/modmake.rulesam index aa36997bd8..386fd41e06 100644 --- a/build/modmake.rulesam +++ b/build/modmake.rulesam @@ -2,6 +2,9 @@ AUTOMAKE_OPTIONS = foreign subdir-objects AM_CFLAGS = $(SWITCH_AM_CFLAGS) $(SWITCH_ANSI_CFLAGS) AM_CPPFLAGS = $(SWITCH_AM_CXXFLAGS) AM_LDFLAGS = $(SWITCH_AM_LDFLAGS) +DEFAULT_VARS = CFLAGS="$(CFLAGS)" CPPFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" CC="$(CC)" CXX="$(CXX)" +DEFAULT_ARGS = --build=$(build) --host=$(host) --target=$(target) --prefix="$(prefix)" --exec_prefix="$(exec_prefix)" --libdir="$(libdir)" --disable-shared --with-pic + #we should set all these vars from configure, no reason to have these in each Makefile.am LIBTOOL = echo "`link=\`echo $@|grep .la;echo $@|grep .so;echo $@|grep .dll\`;if test -n "$$link"; then echo Creating $@;fi`";`if test -z "$(VERBOSE)" ; \ then echo $(SHELL) $(switch_builddir)/quiet_libtool ;else echo $(SHELL) $(switch_builddir)/libtool; fi` diff --git a/libs/.gitignore b/libs/.gitignore index 4f048d2620..0370074fb0 100644 --- a/libs/.gitignore +++ b/libs/.gitignore @@ -19,6 +19,11 @@ opal *_manifest.rc *.pc +*/.dirstamp +*/*/.dirstamp +*/*/*/.dirstamp +*/*/*/*/.dirstamp + /*.tar.* /*/*.dSYM/ @@ -978,6 +983,8 @@ opal /yaml/tests/run-parser /yaml/tests/run-scanner +/broadvoice/broadvoice.spec + /zeromq-*/ /jpeg-8d/ /v8-*/ diff --git a/libs/apr-util/configure.gnu b/libs/apr-util/configure.gnu index 525c42f37f..72f3dccb09 100644 --- a/libs/apr-util/configure.gnu +++ b/libs/apr-util/configure.gnu @@ -1,4 +1,4 @@ #! /bin/sh srcpath=$(dirname $0 2>/dev/null ) || srcpath="." -$srcpath/configure "$@" --with-apr=../apr --without-sqlite2 --without-sqlite3 --with-expat=builtin +$srcpath/configure "$@" --with-apr=../apr --disable-shared --with-pic --without-sqlite2 --without-sqlite3 --with-expat=builtin diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index c2cc70f57c..94a1965201 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Thu Mar 6 00:30:51 CDT 2014 +Tue Mar 11 18:16:09 CDT 2014 diff --git a/libs/sofia-sip/libsofia-sip-ua/nta/nta.c b/libs/sofia-sip/libsofia-sip-ua/nta/nta.c index 71f742e941..9a357a9249 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nta/nta.c +++ b/libs/sofia-sip/libsofia-sip-ua/nta/nta.c @@ -11176,7 +11176,6 @@ nta_reliable_t *reliable_find(nta_agent_t const *agent, if (rel->rel_rseq == rack->ra_response) return (nta_reliable_t *)rel; - return NULL; } } diff --git a/libs/unimrcp/libs/mrcpv2-transport/Makefile.am b/libs/unimrcp/libs/mrcpv2-transport/Makefile.am index 9fd54323fc..f70441e402 100644 --- a/libs/unimrcp/libs/mrcpv2-transport/Makefile.am +++ b/libs/unimrcp/libs/mrcpv2-transport/Makefile.am @@ -1,6 +1,6 @@ MAINTAINERCLEANFILES = Makefile.in -AM_CPPFLAG = -I$(top_srcdir)/libs/mrcpv2-transport/include \ +AM_CPPFLAGS = -I$(top_srcdir)/libs/mrcpv2-transport/include \ -I$(top_srcdir)/libs/mrcp/include \ -I$(top_srcdir)/libs/mrcp/message/include \ -I$(top_srcdir)/libs/mrcp/control/include \ diff --git a/src/include/switch_hashtable.h b/src/include/switch_hashtable.h index 4056064a32..7bf0ea86a0 100644 --- a/src/include/switch_hashtable.h +++ b/src/include/switch_hashtable.h @@ -199,6 +199,11 @@ static inline int switch_hash_equalkeys(void *k1, void *k2) return strcmp((char *) k1, (char *) k2) ? 0 : 1; } +static inline int switch_hash_equalkeys_ci(void *k1, void *k2) +{ + return strcasecmp((char *) k1, (char *) k2) ? 0 : 1; +} + static inline uint32_t switch_hash_default(void *ky) { unsigned char *str = (unsigned char *) ky; diff --git a/src/mod/applications/mod_enum/Makefile.am b/src/mod/applications/mod_enum/Makefile.am index 7a6b10df99..648cc6fcc6 100644 --- a/src/mod/applications/mod_enum/Makefile.am +++ b/src/mod/applications/mod_enum/Makefile.am @@ -16,7 +16,7 @@ BUILT_SOURCES=$(LDNS_BUILDDIR)/ldns/util.h $(LDNS_BUILDDIR)/ldns/util.h $(LDNS_BUILDDIR)/Makefile: $(LDNS_DIR)/Makefile.in mkdir -p $(LDNS_BUILDDIR) - cd $(LDNS_BUILDDIR) && $(DEFAULT_VARS) $(LDNS_DIR)/configure $(DEFAULT_ARGS) --srcdir=$(LDNS_DIR) --disable-gost --without-ssl --disable-sha2 + cd $(LDNS_BUILDDIR) && $(DEFAULT_VARS) $(LDNS_DIR)/configure $(DEFAULT_ARGS) --srcdir=$(LDNS_DIR) --disable-gost --without-ssl --disable-sha2 --disable-shared --with-pic $(TOUCH_TARGET) $(LDNS_LA): $(LDNS_BUILDDIR)/Makefile diff --git a/src/mod/applications/mod_httapi/mod_httapi.c b/src/mod/applications/mod_httapi/mod_httapi.c index b0f84737e4..954d4b31aa 100644 --- a/src/mod/applications/mod_httapi/mod_httapi.c +++ b/src/mod/applications/mod_httapi/mod_httapi.c @@ -2317,9 +2317,23 @@ SWITCH_STANDARD_APP(httapi_function) /* HTTP FILE INTERFACE */ +static const char *find_ext(const char *in) +{ + const char *p = in + (strlen(in) - 1); + + while(p >= in && *p) { + if (*p == '/') return NULL; + if (*p == '.') return (p+1); + p--; + } + + return NULL; +} + static char *load_cache_data(http_file_context_t *context, const char *url) { - char *ext = NULL, *dext = NULL, *p; + const char *ext = NULL; + char *dext = NULL, *p; char digest[SWITCH_MD5_DIGEST_STRING_SIZE] = { 0 }; char meta_buffer[1024] = ""; int fd; @@ -2332,11 +2346,7 @@ static char *load_cache_data(http_file_context_t *context, const char *url) } if (zstr(ext)) { - if ((ext = strrchr(url, '.'))) { - ext++; - } else { - ext = "wav"; - } + ext = find_ext(url); } if (ext && (p = strchr(ext, '?'))) { @@ -2348,9 +2358,8 @@ static char *load_cache_data(http_file_context_t *context, const char *url) } context->cache_file_base = switch_core_sprintf(context->pool, "%s%s%s", globals.cache_path, SWITCH_PATH_SEPARATOR, digest); - context->cache_file = switch_core_sprintf(context->pool, "%s%s%s.%s", globals.cache_path, SWITCH_PATH_SEPARATOR, digest, ext); - context->meta_file = switch_core_sprintf(context->pool, "%s.meta", context->cache_file); - context->lock_file = switch_core_sprintf(context->pool, "%s.lock", context->cache_file); + context->meta_file = switch_core_sprintf(context->pool, "%s%s%s.meta", globals.cache_path, SWITCH_PATH_SEPARATOR, digest); + context->lock_file = switch_core_sprintf(context->pool, "%s%s%s.lock", globals.cache_path, SWITCH_PATH_SEPARATOR, digest); if (switch_file_exists(context->meta_file, context->pool) == SWITCH_STATUS_SUCCESS && ((fd = open(context->meta_file, O_RDONLY, 0)) > -1)) { if ((bytes = read(fd, meta_buffer, sizeof(meta_buffer))) > 0) { @@ -2363,10 +2372,20 @@ static char *load_cache_data(http_file_context_t *context, const char *url) } context->metadata = switch_core_strdup(context->pool, p); } + + if ((p = strrchr(context->metadata, ':'))) { + p++; + if (!zstr(p)) { + ext = p; + } + } + } close(fd); } + context->cache_file = switch_core_sprintf(context->pool, "%s%s%s%s%s", globals.cache_path, SWITCH_PATH_SEPARATOR, digest, ext ? "." : "", ext ? ext : ""); + switch_safe_free(dext); return context->cache_file; @@ -2626,6 +2645,7 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char switch_status_t status = SWITCH_STATUS_FALSE; time_t now = switch_epoch_time_now(NULL); char *metadata; + const char *ext = NULL; load_cache_data(context, url); @@ -2635,6 +2655,10 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char lock_file(context, SWITCH_TRUE); + if (context->url_params) { + ext = switch_event_get_header(context->url_params, "ext"); + } + if (!context->url_params || !switch_true(switch_event_get_header(context->url_params, "nohead"))) { const char *ct = NULL; const char *newext = NULL; @@ -2650,8 +2674,7 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char } } - if ((!context->url_params || !switch_event_get_header(context->url_params, "ext")) - && headers && (ct = switch_event_get_header(headers, "content-type"))) { + if (zstr(ext) && headers && (ct = switch_event_get_header(headers, "content-type"))) { if (switch_strcasecmp_any(ct, "audio/mpeg", "audio/x-mpeg", "audio/mp3", "audio/x-mp3", "audio/mpeg3", "audio/x-mpeg3", "audio/mpg", "audio/x-mpg", "audio/x-mpegaudio", NULL)) { newext = "mp3"; @@ -2660,14 +2683,14 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char } } + if (newext) { + ext = newext; + } else if (zstr(ext)) { + ext = find_ext(context->cache_file); + } + if (newext) { - char *p; - - if ((p = strrchr(context->cache_file, '.'))) { - *p = '\0'; - } - context->cache_file = switch_core_sprintf(context->pool, "%s.%s", context->cache_file, newext); } @@ -2678,11 +2701,12 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char } if (!unreachable && !zstr(context->metadata)) { - metadata = switch_core_sprintf(context->pool, "%s:%s:%s:%s", + metadata = switch_core_sprintf(context->pool, "%s:%s:%s:%s:%s", url, switch_event_get_header_nil(headers, "last-modified"), switch_event_get_header_nil(headers, "etag"), - switch_event_get_header_nil(headers, "content-length") + switch_event_get_header_nil(headers, "content-length"), + ext ); if (!strcmp(metadata, context->metadata)) { @@ -2701,11 +2725,12 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char } - metadata = switch_core_sprintf(context->pool, "%s:%s:%s:%s", + metadata = switch_core_sprintf(context->pool, "%s:%s:%s:%s:%s", url, switch_event_get_header_nil(headers, "last-modified"), switch_event_get_header_nil(headers, "etag"), - switch_event_get_header_nil(headers, "content-length") + switch_event_get_header_nil(headers, "content-length"), + ext ); write_meta_file(context, metadata, headers); diff --git a/src/mod/applications/mod_http_cache/mod_http_cache.c b/src/mod/applications/mod_http_cache/mod_http_cache.c index fd003ade80..625fe236bb 100644 --- a/src/mod/applications/mod_http_cache/mod_http_cache.c +++ b/src/mod/applications/mod_http_cache/mod_http_cache.c @@ -1633,7 +1633,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_http_cache_load) gcache.pool = pool; switch_core_hash_init(&gcache.map); switch_core_hash_init(&gcache.profiles); - switch_core_hash_init_nocase(&gcache.fqdn_profiles, gcache.pool); + switch_core_hash_init_nocase(&gcache.fqdn_profiles); switch_mutex_init(&gcache.mutex, SWITCH_MUTEX_UNNESTED, gcache.pool); switch_thread_rwlock_create(&gcache.shutdown_lock, gcache.pool); diff --git a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c index 90faa63057..ece3025579 100644 --- a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c +++ b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c @@ -2047,11 +2047,11 @@ static switch_status_t synth_load(switch_loadable_module_interface_t *module_int mrcp_client_application_register(globals.mrcp_client, globals.synth.app, "synth"); /* map FreeSWITCH params to MRCP param */ - switch_core_hash_init_nocase(&globals.synth.fs_param_map, pool); + switch_core_hash_init_nocase(&globals.synth.fs_param_map); switch_core_hash_insert(globals.synth.fs_param_map, "voice", "voice-name"); /* map MRCP params to UniMRCP ID */ - switch_core_hash_init_nocase(&globals.synth.param_id_map, pool); + switch_core_hash_init_nocase(&globals.synth.param_id_map); switch_core_hash_insert(globals.synth.param_id_map, "jump-size", unimrcp_param_id_create(SYNTHESIZER_HEADER_JUMP_SIZE, pool)); switch_core_hash_insert(globals.synth.param_id_map, "kill-on-barge-in", unimrcp_param_id_create(SYNTHESIZER_HEADER_KILL_ON_BARGE_IN, pool)); switch_core_hash_insert(globals.synth.param_id_map, "speaker-profile", unimrcp_param_id_create(SYNTHESIZER_HEADER_SPEAKER_PROFILE, pool)); @@ -3794,12 +3794,12 @@ static switch_status_t recog_load(switch_loadable_module_interface_t *module_int mrcp_client_application_register(globals.mrcp_client, globals.recog.app, "recog"); /* map FreeSWITCH params or old params to MRCPv2 param */ - switch_core_hash_init_nocase(&globals.recog.fs_param_map, pool); + switch_core_hash_init_nocase(&globals.recog.fs_param_map); /* MRCPv1 param */ switch_core_hash_insert(globals.recog.fs_param_map, "recognizer-start-timers", "start-input-timers"); /* map MRCP params to UniMRCP ID */ - switch_core_hash_init_nocase(&globals.recog.param_id_map, pool); + switch_core_hash_init_nocase(&globals.recog.param_id_map); switch_core_hash_insert(globals.recog.param_id_map, "Confidence-Threshold", unimrcp_param_id_create(RECOGNIZER_HEADER_CONFIDENCE_THRESHOLD, pool)); switch_core_hash_insert(globals.recog.param_id_map, "Sensitivity-Level", unimrcp_param_id_create(RECOGNIZER_HEADER_SENSITIVITY_LEVEL, pool)); switch_core_hash_insert(globals.recog.param_id_map, "Speed-Vs-Accuracy", unimrcp_param_id_create(RECOGNIZER_HEADER_SPEED_VS_ACCURACY, pool)); @@ -4332,7 +4332,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_unimrcp_load) memset(&globals, 0, sizeof(globals)); switch_mutex_init(&globals.mutex, SWITCH_MUTEX_UNNESTED, pool); globals.speech_channel_number = 0; - switch_core_hash_init_nocase(&globals.profiles, pool); + switch_core_hash_init_nocase(&globals.profiles); /* get MRCP module configuration */ mod_unimrcp_do_config(); diff --git a/src/mod/codecs/mod_celt/Makefile.am b/src/mod/codecs/mod_celt/Makefile.am index 472b96032c..e9611bd575 100644 --- a/src/mod/codecs/mod_celt/Makefile.am +++ b/src/mod/codecs/mod_celt/Makefile.am @@ -19,7 +19,7 @@ $(CELT_DIR): $(CELT_BUILDDIR)/Makefile: $(CELT_DIR) mkdir -p $(CELT_BUILDDIR) - cd $(CELT_BUILDDIR) && $(DEFAULT_VARS) $(CELT_DIR)/configure $(DEFAULT_ARGS) --srcdir=$(CELT_DIR) + cd $(CELT_BUILDDIR) && $(DEFAULT_VARS) $(CELT_DIR)/configure $(DEFAULT_ARGS) --disable-shared --with-pic --srcdir=$(CELT_DIR) $(TOUCH_TARGET) $(CELT_LA): $(CELT_BUILDDIR)/Makefile diff --git a/src/mod/codecs/mod_silk/Makefile.am b/src/mod/codecs/mod_silk/Makefile.am index b73a8d1947..b1e1062f8a 100644 --- a/src/mod/codecs/mod_silk/Makefile.am +++ b/src/mod/codecs/mod_silk/Makefile.am @@ -6,7 +6,7 @@ SILK_BUILDDIR=$(switch_builddir)/libs/silk SILK_LA=$(SILK_BUILDDIR)/.libs/libSKP_SILK_SDK.la mod_LTLIBRARIES = mod_silk.la -mod_silk_la_SOURCES = mod_silk.c $(switch_srcdir)/libs/stfu/stfu.c +mod_silk_la_SOURCES = mod_silk.c ../../../../libs/stfu/stfu.c mod_silk_la_CFLAGS = $(AM_CFLAGS) -I$(SILK_DIR)/src -I$(SILK_DIR)/interface mod_silk_la_LIBADD = $(switch_builddir)/libfreeswitch.la $(SILK_LA) mod_silk_la_LDFLAGS = -avoid-version -module -no-undefined -shared diff --git a/src/mod/endpoints/mod_dingaling/Makefile.am b/src/mod/endpoints/mod_dingaling/Makefile.am index 32dc19d0a3..dbfed5e34f 100644 --- a/src/mod/endpoints/mod_dingaling/Makefile.am +++ b/src/mod/endpoints/mod_dingaling/Makefile.am @@ -6,7 +6,7 @@ IKS_LA=$(IKS_BUILDDIR)/src/libiksemel.la DING_DIR=$(switch_srcdir)/libs/libdingaling mod_LTLIBRARIES = mod_dingaling.la -mod_dingaling_la_SOURCES = mod_dingaling.c $(DING_DIR)/src/libdingaling.c $(DING_DIR)/src/sha1.c +mod_dingaling_la_SOURCES = mod_dingaling.c ../../../../libs/libdingaling/src/libdingaling.c ../../../../libs/libdingaling/src/sha1.c mod_dingaling_la_CFLAGS = $(AM_CFLAGS) mod_dingaling_la_CFLAGS += `$(switch_srcdir)/libs/apr/apr-1-config --cflags --cppflags --includes` mod_dingaling_la_CFLAGS += `$(switch_srcdir)/libs/apr-util/apu-1-config --includes` diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c index 2d243fdc02..dfda8ad63a 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.c +++ b/src/mod/endpoints/mod_skinny/mod_skinny.c @@ -1142,7 +1142,7 @@ switch_status_t channel_answer_channel(switch_core_session_t *session) /* Wait for media */ while(!switch_test_flag(tech_pvt, TFLAG_IO)) { switch_cond_next(); - if (++x > 1000) { + if (++x > 5000) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Wait tooo long to answer %s:%s\n", switch_channel_get_variable(channel, "skinny_device_name"), switch_channel_get_variable(channel, "skinny_device_instance")); return SWITCH_STATUS_FALSE; diff --git a/src/mod/endpoints/mod_skinny/skinny_protocol.c b/src/mod/endpoints/mod_skinny/skinny_protocol.c index 5498e5ebee..ee8c8b73e3 100644 --- a/src/mod/endpoints/mod_skinny/skinny_protocol.c +++ b/src/mod/endpoints/mod_skinny/skinny_protocol.c @@ -911,6 +911,7 @@ switch_status_t perform_send_open_receive_channel(listener_t *listener, message->data.open_receive_channel.echo_cancel_type = echo_cancel_type; message->data.open_receive_channel.g723_bitrate = g723_bitrate; message->data.open_receive_channel.conference_id2 = conference_id2; + message->data.open_receive_channel.rtptimeout = htonl(0x0a); /* message->data.open_receive_channel.reserved[0] = reserved[0]; message->data.open_receive_channel.reserved[1] = reserved[1]; diff --git a/src/mod/endpoints/mod_skinny/skinny_protocol.h b/src/mod/endpoints/mod_skinny/skinny_protocol.h index 870b4c578a..4ea82ec057 100644 --- a/src/mod/endpoints/mod_skinny/skinny_protocol.h +++ b/src/mod/endpoints/mod_skinny/skinny_protocol.h @@ -458,7 +458,7 @@ struct PACKED dialed_phone_book_message { struct PACKED accessory_status_message { uint32_t accessory_id; uint32_t accessory_status; - uint32_t unknown; + /* uint32_t unknown; */ /* this field is missing in 7925G */ }; /* RegisterAckMessage */ @@ -683,7 +683,9 @@ struct PACKED open_receive_channel_message { uint32_t echo_cancel_type; uint32_t g723_bitrate; uint32_t conference_id2; - uint32_t reserved[10]; + uint32_t reserved[14]; + uint32_t rtpdtmfpayload; + uint32_t rtptimeout; }; /* CloseReceiveChannelMessage */ diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index e6efd6a110..8af25fa96a 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -802,7 +802,7 @@ switch_status_t skinny_session_start_media(switch_core_session_t *session, liste SKINNY_CODEC_ULAW_64K, /* uint32_t payload_capacity, */ 0, /* uint32_t echo_cancel_type, */ 0, /* uint32_t g723_bitrate, */ - 0, /* uint32_t conference_id2, */ + tech_pvt->call_id, /* uint32_t conference_id2, */ 0 /* uint32_t reserved[10] */ ); } @@ -868,7 +868,7 @@ switch_status_t skinny_session_unhold_line(switch_core_session_t *session, liste SKINNY_CODEC_ULAW_64K, /* uint32_t payload_capacity, */ 0, /* uint32_t echo_cancel_type, */ 0, /* uint32_t g723_bitrate, */ - 0, /* uint32_t conference_id2, */ + tech_pvt->call_id, /* uint32_t conference_id2, */ 0 /* uint32_t reserved[10] */ ); diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 8c0fe09bf2..016b48989a 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -270,6 +270,9 @@ typedef enum { PFLAG_MESSAGES_RESPOND_200_OK, PFLAG_SUBSCRIBE_RESPOND_200_OK, PFLAG_PARSE_ALL_INVITE_HEADERS, + PFLAG_TCP_UNREG_ON_SOCKET_CLOSE, + PFLAG_TLS_ALWAYS_NAT, + PFLAG_TCP_ALWAYS_NAT, /* No new flags below this line */ PFLAG_MAX } PFLAGS; diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index fe3dd14463..d395810616 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -4103,6 +4103,24 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name) } else { sofia_clear_pflag(profile, PFLAG_MWI_USE_REG_CALLID); } + } else if (!strcasecmp(var, "tcp-unreg-on-socket-close")) { + if (switch_true(val)) { + sofia_set_pflag(profile, PFLAG_TCP_UNREG_ON_SOCKET_CLOSE); + } else { + sofia_clear_pflag(profile, PFLAG_TCP_UNREG_ON_SOCKET_CLOSE); + } + } else if (!strcasecmp(var, "tcp-always-nat")) { + if (switch_true(val)) { + sofia_set_pflag(profile, PFLAG_TCP_ALWAYS_NAT); + } else { + sofia_clear_pflag(profile, PFLAG_TCP_ALWAYS_NAT); + } + } else if (!strcasecmp(var, "tls-always-nat")) { + if (switch_true(val)) { + sofia_set_pflag(profile, PFLAG_TCP_ALWAYS_NAT); + } else { + sofia_clear_pflag(profile, PFLAG_TCP_ALWAYS_NAT); + } } else if (!strcasecmp(var, "presence-proto-lookup")) { if (switch_true(val)) { sofia_set_pflag(profile, PFLAG_PRESENCE_MAP); @@ -8195,7 +8213,24 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia char *sql = NULL; char *acl_context = NULL; const char *r_sdp = NULL; - int broken_device = 0; + int is_tcp = 0, is_tls = 0; + const char *uparams = NULL; + + + if (sip && sip->sip_contact && sip->sip_contact->m_url && sip->sip_contact->m_url->url_params) { + uparams = sip->sip_contact->m_url->url_params; + } else { + uparams = NULL; + } + + + if (uparams) { + if (switch_stristr("transport=tcp", uparams)) { + is_tcp = 1; + } else if (switch_stristr("transport=tls", uparams)) { + is_tls = 1; + } + } profile->ib_calls++; @@ -8239,14 +8274,13 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia } - if (!switch_check_network_list_ip(network_ip, profile->local_network) && - profile->server_rport_level >= 2 && sip->sip_user_agent && sip->sip_user_agent->g_string && - (!strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) || - !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20) )) { - broken_device = 1; - } - - if (sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION) || broken_device) { + if (sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION) || + (sofia_test_pflag(profile, PFLAG_TLS_ALWAYS_NAT) && (is_tcp || is_tls)) || + (!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) && + profile->server_rport_level >= 2 && sip->sip_user_agent && + sip->sip_user_agent->g_string && + (!strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) || !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20))) + ) { if (sip && sip->sip_via) { const char *port = sip->sip_via->v_port; const char *host = sip->sip_via->v_host; diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index f2fec6254a..ba9c8cf2f8 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -2180,8 +2180,8 @@ int sofia_glue_init_sql(sofia_profile_t *profile) } - test_sql = switch_mprintf("delete from sip_registrations where (sub_host is null or contact like '%%TCP%%' " - "or status like '%%TCP%%' or status like '%%TLS%%') and hostname='%q' " + test_sql = switch_mprintf("delete from sip_registrations where sub_host is null " + "and hostname='%q' " "and network_ip like '%%' and network_port like '%%' and sip_username " "like '%%' and mwi_user like '%%' and mwi_host like '%%' " "and orig_server_host like '%%' and orig_hostname like '%%'", mod_sofia_globals.hostname); diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index 4ebb4055b4..cecde4986e 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -1187,10 +1187,10 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand if (sip && sip->sip_via && (vproto = sip->sip_via->v_protocol)) { if (!strcasecmp(vproto, "sip/2.0/ws")) { is_ws = 1; - is_nat++; + is_nat = "ws"; } else if (!strcasecmp(vproto, "sip/2.0/wss")) { is_wss = 1; - is_nat++; + is_nat = "wss"; if (uparams && (p = switch_stristr("transport=ws", uparams))) { if (p[12] != 's') { @@ -1269,24 +1269,29 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand if (uparams && switch_stristr("transport=tls", uparams)) { is_tls += 1; - is_nat++; + if (sofia_test_pflag(profile, PFLAG_TLS_ALWAYS_NAT)) { + is_nat = "tls"; + } } if (!is_wss && !is_ws && uparams && switch_stristr("transport=ws", uparams)) { - is_nat++; + is_nat = "ws"; is_ws += 1; } if (sip->sip_contact->m_url->url_type == url_sips) { proto = "sips"; is_tls += 2; - is_nat++; + if (sofia_test_pflag(profile, PFLAG_TLS_ALWAYS_NAT)) { + is_nat = "tls"; + } } - if (uparams && switch_stristr("transport=tcp", uparams)) { is_tcp = 1; - is_nat++; + if (sofia_test_pflag(profile, PFLAG_TCP_ALWAYS_NAT)) { + is_nat = "tcp"; + } } display = contact->m_display; @@ -1464,7 +1469,8 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand to_user = force_user; } - if (profile->server_rport_level >= 2 && sip->sip_user_agent && + if (!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) && + profile->server_rport_level >= 2 && sip->sip_user_agent && sip->sip_user_agent->g_string && ( !strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) || !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20) )) { if (sip && sip->sip_via) { @@ -1737,9 +1743,7 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand switch_safe_free(url); switch_safe_free(contact); - - - if ((is_wss || is_ws || is_tcp || is_tls) && !sofia_private && call_id) { + if ((is_wss || is_ws || (sofia_test_pflag(profile, PFLAG_TCP_UNREG_ON_SOCKET_CLOSE) && (is_tcp || is_tls))) && !sofia_private && call_id) { char key[256] = ""; nua_handle_t *hnh; switch_snprintf(key, sizeof(key), "%s%s%s", call_id, network_ip, network_port_c); diff --git a/src/mod/event_handlers/mod_cdr_mongodb/Makefile.am b/src/mod/event_handlers/mod_cdr_mongodb/Makefile.am index 87cb8d4d6c..68f5d3814b 100644 --- a/src/mod/event_handlers/mod_cdr_mongodb/Makefile.am +++ b/src/mod/event_handlers/mod_cdr_mongodb/Makefile.am @@ -2,7 +2,7 @@ include $(top_srcdir)/build/modmake.rulesam MODNAME=mod_cdr_mongodb MONGODB_DRIVER=./driver/src mod_LTLIBRARIES = mod_cdr_mongodb.la -mod_cdr_mongodb_la_SOURCES = mod_cdr_mongodb.c $(MONGODB_DRIVER)/encoding.c $(MONGODB_DRIVER)/env_posix.c $(MONGODB_DRIVER)/bson.c $(MONGODB_DRIVER)/md5.c $(MONGODB_DRIVER)/mongo.c $(MONGODB_DRIVER)/numbers.c +mod_cdr_mongodb_la_SOURCES = mod_cdr_mongodb.c ./driver/src/encoding.c ./driver/src/env_posix.c ./driver/src/bson.c ./driver/src/md5.c ./driver/src/mongo.c ./driver/src/numbers.c mod_cdr_mongodb_la_CFLAGS = $(AM_CFLAGS) mod_cdr_mongodb_la_CPPFLAGS = -I$(MONGODB_DRIVER) -I$(switch_srcdir)/libs/stfu/ -I$(switch_srcdir)/libs/libteletone/src/ -D_GNU_SOURCE mod_cdr_mongodb_la_LIBADD = $(switch_builddir)/libfreeswitch.la diff --git a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c index 12c5fe2b48..d211fc7e7a 100644 --- a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c +++ b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c @@ -755,7 +755,7 @@ static int check_log_queue(listener_t *listener) /* send out any pending crap in the log queue */ if (switch_test_flag(listener, LFLAG_LOG)) { - while (msgs_sent < 100 && switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) { + while (msgs_sent < prefs.max_log_bulk && switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) { switch_log_node_t *dnode = (switch_log_node_t *) pop; if (dnode->data) { @@ -817,7 +817,7 @@ static int check_event_queue(listener_t *listener) /* send out any pending crap in the event queue */ if (switch_test_flag(listener, LFLAG_EVENTS)) { - while (msgs_sent < 100 && switch_queue_trypop(listener->event_queue, &pop) == SWITCH_STATUS_SUCCESS) { + while (msgs_sent < prefs.max_event_bulk && switch_queue_trypop(listener->event_queue, &pop) == SWITCH_STATUS_SUCCESS) { switch_event_t *pevent = (switch_event_t *) pop; @@ -998,7 +998,7 @@ static void listener_main_loop(listener_t *listener) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%d messages sent in a loop\n", msgs_sent); #endif } else { /* no more messages right now, relax */ - switch_yield(100000); + switch_yield(10000); } } if (prefs.done) { @@ -1157,6 +1157,9 @@ static int config(void) prefs.shortname = SWITCH_TRUE; prefs.encoding = ERLANG_STRING; prefs.compat_rel = 0; + prefs.max_event_bulk = 1; + prefs.max_log_bulk = 1; + if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf); @@ -1199,6 +1202,10 @@ static int config(void) } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Max acl records of %d reached\n", MAX_ACL); } + } else if (!strcasecmp(var, "max-event-bulk") && !zstr(val)) { + prefs.max_event_bulk = atoi(val); + } else if (!strcasecmp(var, "max-log-bulk") && !zstr(val)) { + prefs.max_log_bulk = atoi(val); } } } diff --git a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.h b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.h index d84fd0f505..719210dca8 100644 --- a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.h +++ b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.h @@ -216,6 +216,8 @@ struct prefs_struct { uint32_t id; erlang_encoding_t encoding; int compat_rel; + int max_event_bulk; + int max_log_bulk; }; typedef struct prefs_struct prefs_t; diff --git a/src/mod/event_handlers/mod_rayo/mod_rayo.c b/src/mod/event_handlers/mod_rayo/mod_rayo.c index f6ea6b717b..12e13c3b54 100644 --- a/src/mod/event_handlers/mod_rayo/mod_rayo.c +++ b/src/mod/event_handlers/mod_rayo/mod_rayo.c @@ -763,6 +763,7 @@ static void stop_deliver_message_threads(void) */ void rayo_message_send(struct rayo_actor *from, const char *to, iks *payload, int dup, int reply, const char *file, int line) { + const char *msg_name; struct rayo_message *msg = malloc(sizeof(*msg)); if (dup) { msg->payload = iks_copy(payload); @@ -783,6 +784,21 @@ void rayo_message_send(struct rayo_actor *from, const char *to, iks *payload, in msg->file = strdup(file); msg->line = line; + /* add timestamp to presence events */ + msg_name = iks_name(msg->payload); + if (!zstr(msg_name) && !strcmp("presence", msg_name)) { + iks *delay = iks_insert(msg->payload, "delay"); + switch_time_exp_t tm; + char timestamp[80]; + switch_size_t retsize; + + iks_insert_attrib(delay, "xmlns", "urn:xmpp:delay"); + + switch_time_exp_tz(&tm, switch_time_now(), 0); + switch_strftime_nocheck(timestamp, &retsize, sizeof(timestamp), "%Y-%m-%dT%TZ", &tm); + iks_insert_attrib_printf(delay, "stamp", "%s", timestamp); + } + if (switch_queue_trypush(globals.msg_queue, msg) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "failed to queue message!\n"); rayo_message_destroy(msg); @@ -1973,7 +1989,7 @@ static iks *join_call(struct rayo_call *call, switch_core_session_t *session, st struct rayo_call *b_call = RAYO_CALL_LOCATE(call_uri); if (!b_call) { /* not a rayo call */ - response = iks_new_error_detailed(node, STANZA_ERROR_SERVICE_UNAVAILABLE, "b-leg is not a rayo call"); + response = iks_new_error_detailed(node, STANZA_ERROR_SERVICE_UNAVAILABLE, "b-leg is gone"); } else if (!has_call_control(b_call, msg)) { /* not allowed to join to this call */ response = iks_new_error(node, STANZA_ERROR_NOT_ALLOWED); @@ -1990,7 +2006,7 @@ static iks *join_call(struct rayo_call *call, switch_core_session_t *session, st call->pending_join_request = iks_copy(node); if (switch_ivr_uuid_bridge(rayo_call_get_uuid(call), rayo_call_get_uuid(b_call)) != SWITCH_STATUS_SUCCESS) { iks *request = call->pending_join_request; - iks *result = iks_new_error_detailed(request, STANZA_ERROR_ITEM_NOT_FOUND, "failed to bridge call"); + iks *result = iks_new_error(request, STANZA_ERROR_SERVICE_UNAVAILABLE); call->pending_join_request = NULL; RAYO_SEND_REPLY(call, iks_find_attrib_soft(request, "from"), result); iks_delete(call->pending_join_request); diff --git a/src/mod/event_handlers/mod_rayo/rayo_input_component.c b/src/mod/event_handlers/mod_rayo/rayo_input_component.c index dcd0999758..d7f67ec7a1 100644 --- a/src/mod/event_handlers/mod_rayo/rayo_input_component.c +++ b/src/mod/event_handlers/mod_rayo/rayo_input_component.c @@ -514,9 +514,13 @@ static iks *start_call_voice_input(struct input_component *component, switch_cor /* start speech detection */ switch_channel_set_variable(switch_core_session_get_channel(session), "fire_asr_events", "true"); + switch_mutex_unlock(handler->mutex); /* unlock handler mutex, otherwise deadlock will happen when switch_ivr_detect_speech adds a new media bug */ if (switch_ivr_detect_speech(session, component->recognizer, grammar.data, "mod_rayo_grammar", "", NULL) != SWITCH_STATUS_SUCCESS) { + switch_mutex_lock(handler->mutex); handler->voice_component = NULL; rayo_component_send_complete(RAYO_COMPONENT(component), COMPONENT_COMPLETE_ERROR); + } else { + switch_mutex_lock(handler->mutex); } switch_safe_free(grammar.data); diff --git a/src/mod/formats/mod_portaudio_stream/Makefile.am b/src/mod/formats/mod_portaudio_stream/Makefile.am index ae9896a7b0..4ca5d80757 100644 --- a/src/mod/formats/mod_portaudio_stream/Makefile.am +++ b/src/mod/formats/mod_portaudio_stream/Makefile.am @@ -6,7 +6,7 @@ PALA=$(switch_builddir)/libs/portaudio/lib/libportaudio.la MODPA_DIR=$(switch_srcdir)/src/mod/endpoints/mod_portaudio mod_LTLIBRARIES = mod_portaudio_stream.la -mod_portaudio_stream_la_SOURCES = mod_portaudio_stream.c $(MODPA_DIR)/pablio.c $(MODPA_DIR)/pa_ringbuffer.c +mod_portaudio_stream_la_SOURCES = mod_portaudio_stream.c ../../endpoints/mod_portaudio/pablio.c ../../endpoints/mod_portaudio/pa_ringbuffer.c mod_portaudio_stream_la_CFLAGS = -I. -I$(PA_DIR)/include -D__EXTENSION__=1 -I$(MODPA_DIR) $(AM_CFLAGS) mod_portaudio_stream_la_LIBADD = $(switch_builddir)/libfreeswitch.la $(PALA) mod_portaudio_stream_la_LDFLAGS = -avoid-version -module -no-undefined -shared $(PA_LIBS) diff --git a/src/mod/formats/mod_shout/Makefile.am b/src/mod/formats/mod_shout/Makefile.am index fe1bcdece5..fb2cb5e4f7 100644 --- a/src/mod/formats/mod_shout/Makefile.am +++ b/src/mod/formats/mod_shout/Makefile.am @@ -31,7 +31,7 @@ $(MPG123_DIR): $(MPG123_BUILDDIR)/Makefile: $(MPG123_DIR) mkdir -p $(MPG123_BUILDDIR) - cd $(MPG123_BUILDDIR) && $(DEFAULT_VARS) $(MPG123_DIR)/configure $(DEFAULT_ARGS) --srcdir=$(MPG123_DIR) CPPFLAGS= LDFLAGS= + cd $(MPG123_BUILDDIR) && $(DEFAULT_VARS) $(MPG123_DIR)/configure $(DEFAULT_ARGS) --disable-shared --with-pic --srcdir=$(MPG123_DIR) CPPFLAGS= LDFLAGS= $(TOUCH_TARGET) $(MPG123LA): $(MPG123_BUILDDIR)/Makefile @@ -43,7 +43,7 @@ $(LAME_DIR): $(LAME_BUILDDIR)/Makefile: $(LAME_DIR) mkdir -p $(LAME_BUILDDIR) - cd $(LAME_BUILDDIR) && $(DEFAULT_VARS) $(LAME_DIR)/configure $(DEFAULT_ARGS) --disable-decoder --srcdir=$(LAME_DIR) CPPFLAGS= LDFLAGS= + cd $(LAME_BUILDDIR) && $(DEFAULT_VARS) $(LAME_DIR)/configure $(DEFAULT_ARGS) --disable-shared --with-pic --disable-decoder --srcdir=$(LAME_DIR) CPPFLAGS= LDFLAGS= $(TOUCH_TARGET) $(LAMELA): $(LAME_BUILDDIR)/Makefile @@ -56,7 +56,7 @@ $(SHOUT_DIR): $(SHOUT_BUILDDIR)/Makefile: $(SHOUT_DIR) mkdir -p $(SHOUT_BUILDDIR) - cd $(SHOUT_BUILDDIR) && $(DEFAULT_VARS) $(SHOUT_DIR)/configure $(DEFAULT_ARGS) --srcdir=$(SHOUT_DIR) --without-speex --without-vorbis --without-ogg CPPFLAGS= LDFLAGS= + cd $(SHOUT_BUILDDIR) && $(DEFAULT_VARS) $(SHOUT_DIR)/configure $(DEFAULT_ARGS) --disable-shared --with-pic --srcdir=$(SHOUT_DIR) --without-speex --without-vorbis --without-ogg CPPFLAGS= LDFLAGS= $(TOUCH_TARGET) $(SHOUTLA): $(SHOUT_BUILDDIR)/Makefile diff --git a/src/mod/xml_int/mod_xml_rpc/Makefile.am b/src/mod/xml_int/mod_xml_rpc/Makefile.am index cf9299ee94..58ecf6d21c 100644 --- a/src/mod/xml_int/mod_xml_rpc/Makefile.am +++ b/src/mod/xml_int/mod_xml_rpc/Makefile.am @@ -78,6 +78,7 @@ BUILT_SOURCES=$(XMLRPC_DIR)/version.h $(XMLRPC_DIR)/lib/expat/xmltok/nametab.h $(XMLRPC_DIR)/lib/expat/xmltok/xmltok.o: $(XMLRPC_DIR)/lib/expat/xmltok/nametab.h $(XMLRPC_DIR)/lib/expat/xmltok/nametab.h: + cd $(XMLRPC_DIR)/lib/expat/gennmtab && $(MAKE) dep cd $(XMLRPC_DIR)/lib/expat/gennmtab && $(MAKE) cd $(XMLRPC_DIR)/lib/expat/xmltok && ../gennmtab/gennmtab > nametab.h diff --git a/src/switch_core_hash.c b/src/switch_core_hash.c index 56aee60620..80be156114 100644 --- a/src/switch_core_hash.c +++ b/src/switch_core_hash.c @@ -38,7 +38,11 @@ SWITCH_DECLARE(switch_status_t) switch_core_hash_init_case(switch_hash_t **hash, switch_bool_t case_sensitive) { - return switch_create_hashtable(hash, 16, case_sensitive ? switch_hash_default : switch_hash_default_ci, switch_hash_equalkeys); + if (case_sensitive) { + return switch_create_hashtable(hash, 16, switch_hash_default, switch_hash_equalkeys); + } else { + return switch_create_hashtable(hash, 16, switch_hash_default_ci, switch_hash_equalkeys_ci); + } } diff --git a/src/switch_core_media.c b/src/switch_core_media.c index e7c19aed67..778bd2ff8a 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -2797,7 +2797,7 @@ static void check_ice(switch_media_handle_t *smh, switch_media_type_t type, sdp_ } if (engine->ice_in.cands[engine->ice_in.chosen[1]][1].ready) { - if (!strcmp(engine->ice_in.cands[engine->ice_in.chosen[1]][1].con_addr, engine->ice_in.cands[engine->ice_in.chosen[0]][0].con_addr) + if (engine->rtcp_mux > 0 && !strcmp(engine->ice_in.cands[engine->ice_in.chosen[1]][1].con_addr, engine->ice_in.cands[engine->ice_in.chosen[0]][0].con_addr) && engine->ice_in.cands[engine->ice_in.chosen[1]][1].con_port == engine->ice_in.cands[engine->ice_in.chosen[0]][0].con_port) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(smh->session), SWITCH_LOG_INFO, "Skipping %s RTCP ICE (Same as RTP)\n", type2str(type)); } else { @@ -5058,7 +5058,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_sessi } if (a_engine->ice_in.cands[a_engine->ice_in.chosen[1]][1].ready) { - if (!strcmp(a_engine->ice_in.cands[a_engine->ice_in.chosen[1]][1].con_addr, a_engine->ice_in.cands[a_engine->ice_in.chosen[0]][0].con_addr) + if (a_engine->rtcp_mux > 0 && !strcmp(a_engine->ice_in.cands[a_engine->ice_in.chosen[1]][1].con_addr, a_engine->ice_in.cands[a_engine->ice_in.chosen[0]][0].con_addr) && a_engine->ice_in.cands[a_engine->ice_in.chosen[1]][1].con_port == a_engine->ice_in.cands[a_engine->ice_in.chosen[0]][0].con_port) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "Skipping RTCP ICE (Same as RTP)\n"); } else { @@ -5475,7 +5475,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_sessi if (v_engine->ice_in.cands[v_engine->ice_in.chosen[1]][1].ready) { - if (!strcmp(v_engine->ice_in.cands[v_engine->ice_in.chosen[1]][1].con_addr, v_engine->ice_in.cands[v_engine->ice_in.chosen[0]][0].con_addr) + if (v_engine->rtcp_mux > 0 && !strcmp(v_engine->ice_in.cands[v_engine->ice_in.chosen[1]][1].con_addr, v_engine->ice_in.cands[v_engine->ice_in.chosen[0]][0].con_addr) && v_engine->ice_in.cands[v_engine->ice_in.chosen[1]][1].con_port == v_engine->ice_in.cands[v_engine->ice_in.chosen[0]][0].con_port) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "Skipping VIDEO RTCP ICE (Same as VIDEO RTP)\n"); } else { diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index 6687f296f2..054cfad2f5 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -3158,7 +3158,7 @@ switch_status_t switch_core_sqldb_start(switch_memory_pool_t *pool, switch_bool_ switch_cache_db_test_reactive(sql_manager.dbh, "select hostname from aliases", "DROP TABLE aliases", create_alias_sql); switch_cache_db_test_reactive(sql_manager.dbh, "select hostname from complete", "DROP TABLE complete", create_complete_sql); switch_cache_db_test_reactive(sql_manager.dbh, "select hostname from nat", "DROP TABLE nat", create_nat_sql); - switch_cache_db_test_reactive(sql_manager.dbh, "delete from registrations where reg_user='' or network_proto='tcp' or network_proto='tls'", + switch_cache_db_test_reactive(sql_manager.dbh, "delete from registrations where reg_user=''", "DROP TABLE registrations", create_registrations_sql); switch_cache_db_test_reactive(sql_manager.dbh, "select metadata from registrations", NULL, "ALTER TABLE registrations ADD COLUMN metadata VARCHAR(256)"); @@ -3185,11 +3185,11 @@ switch_status_t switch_core_sqldb_start(switch_memory_pool_t *pool, switch_bool_ switch_cache_db_test_reactive(sql_manager.dbh, "select * from basic_calls where sent_callee_name=''", "DROP VIEW basic_calls", basic_calls_sql); switch_cache_db_test_reactive(sql_manager.dbh, "select call_uuid from calls", "DROP TABLE calls", create_calls_sql); if (runtime.odbc_dbtype == DBTYPE_DEFAULT) { - switch_cache_db_test_reactive(sql_manager.dbh, "delete from registrations where reg_user='' or network_proto='tcp' or network_proto='tls'", + switch_cache_db_test_reactive(sql_manager.dbh, "delete from registrations where reg_user=''", "DROP TABLE registrations", create_registrations_sql); } else { char *tmp = switch_string_replace(create_registrations_sql, "url TEXT", "url VARCHAR(max)"); - switch_cache_db_test_reactive(sql_manager.dbh, "delete from registrations where reg_user='' or network_proto='tcp' or network_proto='tls'", + switch_cache_db_test_reactive(sql_manager.dbh, "delete from registrations where reg_user=''", "DROP TABLE registrations", tmp); free(tmp); } diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 3fac018e19..aac2399471 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -660,10 +660,7 @@ static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_ rtp_session->dtmf_data.in_digit_ts = 0; rtp_session->dtmf_data.in_digit_sanity = 0; rtp_session->dtmf_data.in_digit_queued = 0; - - if (!switch_rtp_test_flag(rtp_session, SWITCH_RTP_FLAG_USE_TIMER)) { - *do_cng = 1; - } + *do_cng = 1; } else { if (!switch_rtp_ready(rtp_session)) { return RESULT_GOTO_END; @@ -708,9 +705,7 @@ static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_ return RESULT_GOTO_RECVFROM; } } else { - if (switch_rtp_test_flag(rtp_session, SWITCH_RTP_FLAG_USE_TIMER)) { - *do_cng = 1; - } + *do_cng = 1; return RESULT_GOTO_TIMERCHECK; } }