diff --git a/conf/vanilla/autoload_configs/switch.conf.xml b/conf/vanilla/autoload_configs/switch.conf.xml index fc0ac21b82..ddf41f8996 100644 --- a/conf/vanilla/autoload_configs/switch.conf.xml +++ b/conf/vanilla/autoload_configs/switch.conf.xml @@ -144,7 +144,7 @@ - + - + diff --git a/configure.in b/configure.in index b2f62e53ed..da3a5af258 100644 --- a/configure.in +++ b/configure.in @@ -164,7 +164,7 @@ if test "x${ax_cv_c_compiler_vendor}" = "xsun" ; then SOLINK="-Bdynamic -dy -G" elif test "x${ax_cv_c_compiler_vendor}" = "xgnu" ; then case "$host" in - *darwin12.*|*darwin10.*) + *darwin12.*|*darwin11.*|*darwin10.*) SOLINK="-dynamic -force-flat-namespace" ;; *darwin*) @@ -248,7 +248,7 @@ elif test "x${ax_cv_c_compiler_vendor}" = "xgnu" ; then APR_ADDTO(SWITCH_AM_CFLAGS, -Werror) if test "${enable_64}" = "yes"; then case "$host" in - *darwin12.*|*darwin10.*|*darwin9.*|*darwin8.*) + *darwin12.*|*darwin11.*|*darwin10.*|*darwin9.*|*darwin8.*) APR_ADDTO(CFLAGS, -arch x86_64) APR_ADDTO(LDFLAGS, -arch x86_64) APR_ADDTO(CXXFLAGS, -arch x86_64) @@ -454,7 +454,7 @@ PLATFORM_CORE_LDFLAGS= PLATFORM_CORE_LIBS= # tweak platform specific flags case "$host" in - *darwin12.*) + *darwin12.*|*darwin11.*) APR_ADDTO(SWITCH_AM_CFLAGS, -DMACOSX) APR_ADDTO(CFLAGS, -pipe -no-cpp-precomp -Wno-deprecated-declarations) APR_ADDTO(LDFLAGS, -pipe -bind_at_load) diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index b092991988..3972e7a7b4 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -916,6 +916,8 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * int rval = 0; const char *hval; struct addrinfo hints = { 0 }, *result; + struct sockaddr_in *sockaddr_in; + struct sockaddr_in6 *sockaddr_in6; #ifndef WIN32 int fd_flags = 0; #else @@ -936,27 +938,36 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * if (!handle->packet_buf) { esl_buffer_create(&handle->packet_buf, BUF_CHUNK, BUF_START, 0); } - - handle->sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); - - if (handle->sock == ESL_SOCK_INVALID) { - snprintf(handle->err, sizeof(handle->err), "Socket Error"); - return ESL_FAIL; - } - - hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; - + if (getaddrinfo(host, NULL, &hints, &result)) { strncpy(handle->err, "Cannot resolve host", sizeof(handle->err)); goto fail; } memcpy(&handle->sockaddr, result->ai_addr, sizeof(handle->sockaddr)); - handle->sockaddr.sin_family = AF_INET; - handle->sockaddr.sin_port = htons(port); + switch(handle->sockaddr.ss_family) { + case AF_INET: + sockaddr_in = (struct sockaddr_in*)&(handle->sockaddr); + sockaddr_in->sin_port = htons(port); + break; + case AF_INET6: + sockaddr_in6 = (struct sockaddr_in6*)&(handle->sockaddr); + sockaddr_in6->sin6_port = htons(port); + break; + default: + strncpy(handle->err, "Host resolves to unsupported address family", sizeof(handle->err)); + goto fail; + } freeaddrinfo(result); + + handle->sock = socket(handle->sockaddr.ss_family, SOCK_STREAM, IPPROTO_TCP); + + if (handle->sock == ESL_SOCK_INVALID) { + snprintf(handle->err, sizeof(handle->err), "Socket Error"); + return ESL_FAIL; + } if (timeout) { #ifdef WIN32 diff --git a/libs/esl/src/include/esl.h b/libs/esl/src/include/esl.h index 5e66fe437a..09e129ab78 100644 --- a/libs/esl/src/include/esl.h +++ b/libs/esl/src/include/esl.h @@ -288,7 +288,7 @@ typedef enum { /*! \brief A handle that will hold the socket information and different events received. */ typedef struct { - struct sockaddr_in sockaddr; + struct sockaddr_storage sockaddr; struct hostent hostent; char hostbuf[256]; esl_socket_t sock; diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c index 06dc587a4b..7ed8be290a 100755 --- a/libs/freetdm/mod_freetdm/mod_freetdm.c +++ b/libs/freetdm/mod_freetdm/mod_freetdm.c @@ -1318,6 +1318,9 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi if (!zstr(outbound_profile->caller_id_number)) { callerid_num = switch_sanitize_number(switch_core_strdup(outbound_profile->pool, outbound_profile->caller_id_number)); + if ( callerid_num && *callerid_num == '+' ) { + callerid_num++; + } } if (!zstr(callerid_num) && !strcmp(callerid_num, SWITCH_DEFAULT_CLID_NUMBER)) { @@ -1394,6 +1397,9 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-CallerNumber"); if (sipvar) { + if ( *sipvar == '+' ) { + sipvar++; + } ftdm_set_string(caller_data.cid_num.digits, sipvar); } @@ -1653,7 +1659,7 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi caller_data.rdnis.plan = outbound_profile->rdnis_numplan; ftdm_set_string(caller_data.cid_name, outbound_profile->caller_id_name); - ftdm_set_string(caller_data.cid_num.digits, switch_str_nil(outbound_profile->caller_id_number)); + ftdm_set_string(caller_data.cid_num.digits, switch_str_nil(callerid_num)); memset(&hunting, 0, sizeof(hunting)); diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index e5cf1e495d..09f61c0ed4 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Fri Oct 26 14:14:41 CDT 2012 +Fri Nov 2 13:36:06 CDT 2012 diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua_client.c b/libs/sofia-sip/libsofia-sip-ua/nua/nua_client.c index e7ec9fb890..a9fed48ffe 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua_client.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua_client.c @@ -1217,6 +1217,7 @@ int nua_base_client_check_restart(nua_client_request_t *cr, status == 500 || status == 503 || status == 600 || status == 603) && sip->sip_retry_after && + NH_PGET(nh, retry_after_enable) && sip->sip_retry_after->af_delta < 3200) { su_timer_t *timer; char phrase[18]; /* Retry After XXXX\0 */ diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c b/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c index 0f6a491dff..c63455fc91 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c @@ -157,6 +157,7 @@ int nua_stack_set_defaults(nua_handle_t *nh, NHP_SET(nhp, callee_caps, 0); NHP_SET(nhp, service_route_enable, 1); NHP_SET(nhp, path_enable, 1); + NHP_SET(nhp, retry_after_enable, 1); NHP_SET(nhp, refer_expires, 300); NHP_SET(nhp, refer_with_id, 1); @@ -295,6 +296,7 @@ int nua_stack_init_instance(nua_handle_t *nh, tagi_t const *tags) * NUTAG_ONLY183_100REL() \n * NUTAG_OUTBOUND() \n * NUTAG_PATH_ENABLE() \n + * NUTAG_RETRY_AFTER_ENABLE() \n * NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) \n * NUTAG_REFER_EXPIRES() \n * NUTAG_REFER_WITH_ID() \n @@ -417,6 +419,7 @@ int nua_stack_init_instance(nua_handle_t *nh, tagi_t const *tags) * NUTAG_ONLY183_100REL() \n * NUTAG_OUTBOUND() \n * NUTAG_PATH_ENABLE() \n + * NUTAG_RETRY_AFTER_ENABLE() \n * NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) \n * NUTAG_REFER_EXPIRES() \n * NUTAG_REFER_WITH_ID() \n @@ -801,6 +804,10 @@ static int nhp_set_tags(su_home_t *home, else if (tag == nutag_path_enable) { NHP_SET(nhp, path_enable, value != 0); } + /* NUTAG_RETRY_AFTER_ENABLE(retry_after_enable) */ + else if (tag == nutag_retry_after_enable) { + NHP_SET(nhp, retry_after_enable, value != 0); + } /* NUTAG_AUTH_CACHE(auth_cache) */ else if (tag == nutag_auth_cache) { if (value >= 0 && value < (tag_value_t)_nua_auth_cache_invalid) @@ -1494,6 +1501,7 @@ int nua_stack_set_smime_params(nua_t *nua, tagi_t const *tags) * NUTAG_ONLY183_100REL() \n * NUTAG_OUTBOUND() \n * NUTAG_PATH_ENABLE() \n + * NUTAG_RETRY_AFTER_ENABLE() \n * NUTAG_REFER_EXPIRES() \n * NUTAG_REFER_WITH_ID() \n * NUTAG_REFRESH_WITHOUT_SDP() \n @@ -1669,6 +1677,7 @@ int nua_stack_get_params(nua_t *nua, nua_handle_t *nh, nua_event_t e, TIF(NUTAG_MEDIA_FEATURES, media_features), TIF(NUTAG_SERVICE_ROUTE_ENABLE, service_route_enable), TIF(NUTAG_PATH_ENABLE, path_enable), + TIF(NUTAG_RETRY_AFTER_ENABLE, retry_after_enable), TIF(NUTAG_AUTH_CACHE, auth_cache), TIF(NUTAG_REFER_EXPIRES, refer_expires), TIF(NUTAG_REFER_WITH_ID, refer_with_id), diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h b/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h index 9fe4a98652..5c26e4ef13 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h @@ -111,6 +111,10 @@ struct nua_handle_preferences unsigned nhp_refer_with_id:1; unsigned nhp_timer_autorequire:1; + + /** Enable Retry-After */ + unsigned nhp_retry_after_enable:1; + unsigned:0; /* Default lifetime for implicit subscriptions created by REFER */ @@ -210,6 +214,7 @@ struct nua_handle_preferences unsigned nhb_initial_route:1; unsigned nhb_proxy:1; unsigned nhb_timer_autorequire:1; + unsigned nhb_retry_after_enable:1; unsigned :0; } set_bits; unsigned set_unsigned[2]; diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c b/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c index 491d485731..9e0c8d85ca 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c @@ -126,6 +126,7 @@ * - NUTAG_M_USERNAME() * - NUTAG_OUTBOUND() * - NUTAG_PATH_ENABLE() + * - NUTAG_RETRY_AFTER_ENABLE() * - NUTAG_SERVICE_ROUTE_ENABLE() * Specifications: * - @RFC3261 section 10, @RFC3327, @RFC3608, @RFC3680, @RFC3840, @@ -2663,6 +2664,29 @@ tag_typedef_t nutag_path_enable = BOOLTAG_TYPEDEF(path_enable); * Reference tag for NUTAG_PATH_ENABLE(). */ +/**@def NUTAG_RETRY_AFTER_ENABLE(x) + * + * If true, support RFC 3261 Retry-After + * + * @par Used with + * - nua_create(), nua_set_params(), nua_get_params() + * - nua_handle(), nua_set_hparams(), nua_get_hparams() + * - nua_register() + * + * @par Parameter type + * int (boolean: nonzero is true, zero is false) + * + * @par Values + * - 0 (false) - Do not honor Retry-After + * - 1 (true) - honor Retry-After + * + */ +tag_typedef_t nutag_retry_after_enable = BOOLTAG_TYPEDEF(retry_after_enable); + +/**@def NUTAG_RETRY_AFTER_ENABLE_REF(x) + * Reference tag for NUTAG_RETRY_AFTER_ENABLE(). + */ + /**@def NUTAG_SERVICE_ROUTE_ENABLE(x) diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua_tag.h b/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua_tag.h index 813e0d757a..be909d6911 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua_tag.h +++ b/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua_tag.h @@ -550,6 +550,11 @@ SOFIAPUBVAR tag_typedef_t nutag_path_enable; #define NUTAG_PATH_ENABLE_REF(x) nutag_path_enable_ref, tag_bool_vr(&(x)) SOFIAPUBVAR tag_typedef_t nutag_path_enable_ref; +#define NUTAG_RETRY_AFTER_ENABLE(x) nutag_retry_after_enable, tag_bool_v(x) +SOFIAPUBVAR tag_typedef_t nutag_retry_after_enable; +#define NUTAG_RETRY_AFTER_ENABLE_REF(x) nutag_retry_after_enable_ref, tag_bool_vr(&(x)) +SOFIAPUBVAR tag_typedef_t nutag_retry_after_enable_ref; + #define NUTAG_SERVICE_ROUTE_ENABLE(x) nutag_service_route_enable, tag_bool_v(x) SOFIAPUBVAR tag_typedef_t nutag_service_route_enable; #define NUTAG_SERVICE_ROUTE_ENABLE_REF(x) \ diff --git a/libs/stfu/stfu.c b/libs/stfu/stfu.c index f02219cd9e..9a2ecbcb72 100644 --- a/libs/stfu/stfu.c +++ b/libs/stfu/stfu.c @@ -652,7 +652,7 @@ stfu_frame_t *stfu_n_read_a_frame(stfu_instance_t *i) for (x = 0; x < i->out_queue->array_len; x++) { if (!i->out_queue->array[x].was_read) { i->cur_ts = i->out_queue->array[x].ts; - i->cur_ts = i->out_queue->array[x].seq; + i->cur_seq = i->out_queue->array[x].seq; break; } if (i->cur_ts == 0) { @@ -806,15 +806,22 @@ stfu_frame_t *stfu_n_read_a_frame(stfu_instance_t *i) return rframe; } -int32_t stfu_n_copy_next_frame(stfu_instance_t *jb, uint32_t timestamp, uint16_t seq, uint16_t distance, stfu_frame_t *next_frame) +STFU_DECLARE(int32_t) stfu_n_copy_next_frame(stfu_instance_t *jb, uint32_t timestamp, uint16_t seq, uint16_t distance, stfu_frame_t *next_frame) { uint32_t i = 0, j = 0; +#ifdef WIN32 +#pragma warning (disable:4204) +#endif stfu_queue_t *queues[] = { jb->out_queue, jb->in_queue, jb->old_queue}; +#ifdef WIN32 +#pragma warning (default:4204) +#endif stfu_queue_t *queue = NULL; stfu_frame_t *frame = NULL; uint32_t target_ts = 0; + seq = seq; if (!next_frame) return 0; target_ts = timestamp + (distance - 1) * jb->samples_per_packet; diff --git a/libs/stfu/stfu.h b/libs/stfu/stfu.h index bc3dd519ba..e1a0d439a3 100644 --- a/libs/stfu/stfu.h +++ b/libs/stfu/stfu.h @@ -191,7 +191,7 @@ stfu_instance_t *stfu_n_init(uint32_t qlen, uint32_t max_qlen, uint32_t samples_ stfu_status_t stfu_n_resize(stfu_instance_t *i, uint32_t qlen); stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, uint16_t seq, uint32_t pt, void *data, size_t datalen, uint32_t timer_ts, int last); stfu_frame_t *stfu_n_read_a_frame(stfu_instance_t *i); -int32_t stfu_n_copy_next_frame(stfu_instance_t *jb, uint32_t timestamp, uint16_t seq, uint16_t distance, stfu_frame_t *next_frame); +STFU_DECLARE(int32_t) stfu_n_copy_next_frame(stfu_instance_t *jb, uint32_t timestamp, uint16_t seq, uint16_t distance, stfu_frame_t *next_frame); void stfu_n_reset(stfu_instance_t *i); stfu_status_t stfu_n_sync(stfu_instance_t *i, uint32_t packets); void stfu_n_call_me(stfu_instance_t *i, stfu_n_call_me_t callback, void *udata); diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index 5e6a732841..b3ed2a7c1b 100755 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -4967,6 +4967,451 @@ SWITCH_STANDARD_APP(mutex_function) /* /// mutex /// */ +typedef struct page_data_s { + uint32_t *counter; + const char *dial_str; + const char *dp; + const char *context; + const char *exten; + const char *path; + switch_event_t *var_event; + switch_memory_pool_t *pool; + switch_mutex_t *mutex; +} page_data_t; + +static switch_status_t page_hanguphook(switch_core_session_t *session) +{ + switch_channel_t *channel = switch_core_session_get_channel(session); + switch_channel_state_t state = switch_channel_get_state(channel); + + if (state == CS_HANGUP) { + page_data_t *pd; + + if ((pd = (page_data_t *) switch_channel_get_private(channel, "__PAGE_DATA"))) { + uint32_t *counter = pd->counter; + + switch_mutex_lock(pd->mutex); + (*counter)--; + switch_mutex_unlock(pd->mutex); + + + } + + switch_core_event_hook_remove_state_change(session, page_hanguphook); + } + + return SWITCH_STATUS_SUCCESS; +} + +void *SWITCH_THREAD_FUNC page_thread(switch_thread_t *thread, void *obj) +{ + page_data_t *mypd, *pd = (page_data_t *) obj; + switch_core_session_t *session; + switch_call_cause_t cause = SWITCH_CAUSE_NONE; + uint32_t *counter = pd->counter; + switch_memory_pool_t *pool = pd->pool; + + + if (switch_ivr_originate(NULL, &session, &cause, pd->dial_str, 60, NULL, NULL, NULL, NULL, pd->var_event, SOF_NONE, NULL) == SWITCH_STATUS_SUCCESS) { + switch_channel_t *channel = switch_core_session_get_channel(session); + + switch_channel_set_variable(channel, "page_file", pd->path); + + mypd = switch_core_session_alloc(session, sizeof(*mypd)); + mypd->counter = pd->counter; + mypd->mutex = pd->mutex; + switch_core_event_hook_add_state_change(session, page_hanguphook); + switch_channel_set_private(channel, "__PAGE_DATA", mypd); + switch_ivr_session_transfer(session, pd->exten, pd->dp, pd->context); + switch_core_session_rwunlock(session); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "originate failed: %s [%s]\n", switch_channel_cause2str(cause), pd->dial_str); + switch_mutex_lock(pd->mutex); + (*counter)--; + switch_mutex_unlock(pd->mutex); + } + + switch_event_safe_destroy(&pd->var_event); + + if (pool) { + switch_core_destroy_memory_pool(&pool); + } + + return NULL; +} + +static void launch_call(const char *dial_str, + const char *path, const char *exten, const char *context, const char *dp, + switch_mutex_t *mutex, uint32_t *counter, switch_event_t **var_event) +{ + switch_thread_data_t *td; + switch_memory_pool_t *pool; + page_data_t *pd; + + switch_core_new_memory_pool(&pool); + + pd = switch_core_alloc(pool, sizeof(*pd)); + pd->pool = pool; + pd->exten = switch_core_strdup(pool, exten); + pd->context = switch_core_strdup(pool, context); + pd->dp = switch_core_strdup(pool, dp); + pd->dial_str = switch_core_strdup(pool, dial_str); + pd->path = switch_core_strdup(pool, path); + pd->mutex = mutex; + + if (var_event && *var_event) { + switch_event_dup(&pd->var_event, *var_event); + switch_event_destroy(var_event); + } + + switch_mutex_lock(pd->mutex); + (*counter)++; + switch_mutex_unlock(pd->mutex); + + pd->counter = counter; + + td = switch_core_alloc(pool, sizeof(*td)); + td->func = page_thread; + td->obj = pd; + + switch_thread_pool_launch_thread(&td); + +} + +typedef struct call_monitor_s { + switch_memory_pool_t *pool; + const char *path; + char *data; + const char *context; + const char *exten; + const char *dp; + uint32_t chunk_size; + int nuke; +} call_monitor_t; + + + +void *SWITCH_THREAD_FUNC call_monitor_thread(switch_thread_t *thread, void *obj) +{ + call_monitor_t *cm = (call_monitor_t *) obj; + uint32_t sent = 0; + switch_mutex_t *mutex; + uint32_t counter = 0; + switch_memory_pool_t *pool = cm->pool; + int size; + char *argv[512] = { 0 }; + int busy = 0; + switch_event_t *var_event = NULL; + char *data; + + switch_mutex_init(&mutex, SWITCH_MUTEX_NESTED, cm->pool); + + if (switch_file_exists(cm->path, cm->pool) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "File %s does not exist!\n", cm->path); + goto end; + } + + data = cm->data; + + while (data && *data && *data == ' ') { + data++; + } + + while (*data == '<') { + char *parsed = NULL; + + if (switch_event_create_brackets(data, '<', '>', ',', &var_event, &parsed, SWITCH_FALSE) != SWITCH_STATUS_SUCCESS || !parsed) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Parse Error!\n"); + goto end; + } + + data = parsed; + } + + while (data && *data && *data == ' ') { + data++; + } + + if (!(size = switch_separate_string_string(data, SWITCH_ENT_ORIGINATE_DELIM, argv, (sizeof(argv) / sizeof(argv[0]))))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No channels specified.\n"); + goto end; + } + + + if (cm->chunk_size > size) { + cm->chunk_size = size; + } + + while (sent < size) { + do { + switch_mutex_lock(mutex); + busy = (counter >= cm->chunk_size); + switch_mutex_unlock(mutex); + + if (busy) { + switch_yield(100000); + } + + } while (busy); + + launch_call(argv[sent++], cm->path, cm->exten, cm->context, cm->dp, mutex, &counter, &var_event); + } + + + end: + + while(counter) { + switch_mutex_lock(mutex); + switch_mutex_unlock(mutex); + switch_yield(100000); + } + + if (cm->nuke && !zstr(cm->path)) { + unlink(cm->path); + } + + if (pool) { + switch_core_destroy_memory_pool(&pool); + } + + return NULL; +} + +static void launch_call_monitor(const char *path, int del, const char *data, uint32_t chunk_size, const char *exten, const char *context, const char *dp) +{ + switch_thread_data_t *td; + switch_memory_pool_t *pool; + call_monitor_t *cm; + + switch_core_new_memory_pool(&pool); + + cm = switch_core_alloc(pool, sizeof(*cm)); + + if (del) { + cm->nuke = 1; + } + + cm->pool = pool; + cm->path = switch_core_strdup(pool, path); + cm->data = switch_core_strdup(pool, data); + cm->exten = switch_core_strdup(pool, exten); + cm->context = switch_core_strdup(pool, context); + cm->dp = switch_core_strdup(pool, dp); + cm->chunk_size = chunk_size; + + td = switch_core_alloc(pool, sizeof(*td)); + td->func = call_monitor_thread; + td->obj = cm; + + switch_thread_pool_launch_thread(&td); + +} + + +#define PAGE_SYNTAX "[:_:]" +SWITCH_STANDARD_APP(page_function) +{ + switch_channel_t *channel = switch_core_session_get_channel(session); + uint32_t limit = 0; + const char *path = NULL; + switch_input_args_t args = { 0 }; + switch_file_handle_t fh = { 0 }; + uint32_t chunk_size = 10; + const char *l = NULL; + const char *tmp; + int del = 0, rate; + const char *exten; + const char *context = NULL; + const char *dp = "inline"; + const char *pdata = data; + + if (zstr(pdata)) { + pdata = switch_channel_get_variable(channel, "page_data"); + } + + if (zstr(pdata)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "No channels specified.\n"); + return; + } + + + exten = switch_channel_get_variable(channel, "page_exten"); + context = switch_channel_get_variable(channel, "page_context"); + + if ((l = switch_channel_get_variable(channel, "page_dp"))) { + dp = l; + } + + + l = switch_channel_get_variable(channel, "page_record_limit"); + + if (l) { + if (*l == '+') { + l++; + } + if (l) { + limit = switch_atoui(l); + } + } + + if ((l = switch_channel_get_variable(channel, "page_record_thresh"))) { + fh.thresh = switch_atoui(l); + } + + if ((l = switch_channel_get_variable(channel, "page_chunk_size"))) { + uint32_t tmp = switch_atoui(l); + + if (tmp > 0) { + chunk_size = tmp; + } + } + + if ((l = switch_channel_get_variable(channel, "page_record_silence_hits"))) { + fh.silence_hits = switch_atoui(l); + } + + if ((tmp = switch_channel_get_variable(channel, "record_rate"))) { + rate = atoi(tmp); + if (rate > 0) { + fh.samplerate = rate; + } + } + + args.input_callback = on_dtmf; + + switch_channel_set_variable(channel, SWITCH_PLAYBACK_TERMINATOR_USED, ""); + + + if (!(path = switch_channel_get_variable(channel, "page_path"))) { + const char *beep; + + path = switch_core_session_sprintf(session, "%s%s%s.wav", SWITCH_GLOBAL_dirs.temp_dir, SWITCH_PATH_SEPARATOR, switch_core_session_get_uuid(session)); + del = 1; + + if (!(beep = switch_channel_get_variable(channel, "page_beep"))) { + beep = "tone_stream://%(500,0, 620)"; + } + + switch_ivr_play_file(session, NULL, beep, NULL); + + + switch_ivr_record_file(session, &fh, path, &args, limit); + } + + if (zstr(exten)) { + exten = switch_core_session_sprintf(session, "playback:%s", path); + } + + if (switch_file_exists(path, switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) { + launch_call_monitor(path, del, pdata, chunk_size, exten, context, dp); + } else { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "File %s does not exist\n", path); + } + +} + + +SWITCH_STANDARD_API(page_api_function) +{ + char *odata = NULL, *data = NULL; + switch_event_t *var_event = NULL; + const char *exten; + char *oexten = NULL; + const char *context = NULL; + const char *dp = "inline"; + const char *pdata = data; + const char *l; + uint32_t chunk_size = 10; + const char *path; + + + if (zstr(cmd)) { + stream->write_function(stream, "-ERR no data"); + goto end; + } + + odata = strdup(cmd); + data = odata; + + while (data && *data && *data == ' ') { + data++; + } + + while (*data == '(') { + char *parsed = NULL; + + if (switch_event_create_brackets(data, '(', ')', ',', &var_event, &parsed, SWITCH_FALSE) != SWITCH_STATUS_SUCCESS || !parsed) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Parse Error!\n"); + goto end; + } + + data = parsed; + } + + while (data && *data && *data == ' ') { + data++; + } + + if (!var_event) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Parse Error!\n"); + goto end; + } + + pdata = data; + + if (zstr(pdata)) { + pdata = switch_event_get_header(var_event, "page_data"); + } + + if (zstr(pdata)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No channels specified.\n"); + goto end; + } + + + exten = switch_event_get_header(var_event, "page_exten"); + context = switch_event_get_header(var_event, "page_context"); + + if ((l = switch_event_get_header(var_event, "page_dp"))) { + dp = l; + } + + + if ((l = switch_event_get_header(var_event, "page_chunk_size"))) { + uint32_t tmp = switch_atoui(l); + + if (tmp > 0) { + chunk_size = tmp; + } + } + + if (!(path = switch_event_get_header(var_event, "page_path"))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No file specified.\n"); + goto end; + } + + if (zstr(exten)) { + oexten = switch_mprintf("playback:%s", path); + exten = oexten; + } + + if (switch_file_exists(path, NULL) == SWITCH_STATUS_SUCCESS) { + launch_call_monitor(path, 0, pdata, chunk_size, exten, context, dp); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "File %s does not exist\n", path); + } + + + end: + + + switch_safe_free(odata); + switch_safe_free(oexten); + + return SWITCH_STATUS_SUCCESS; +} + + #define SPEAK_DESC "Speak text to a channel via the tts interface" #define DISPLACE_DESC "Displace audio from a file to the channels input" @@ -5044,6 +5489,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load) SWITCH_ADD_CHAT(chat_interface, "api", api_chat_send); SWITCH_ADD_API(api_interface, "strepoch", "Convert a date string into epoch time", strepoch_api_function, ""); + SWITCH_ADD_API(api_interface, "page", "Send a file as a page", page_api_function, "(var1=val1,var2=val2)[:_:]"); SWITCH_ADD_API(api_interface, "strmicroepoch", "Convert a date string into micoepoch time", strmicroepoch_api_function, ""); SWITCH_ADD_API(api_interface, "chat", "chat", chat_api_function, "||||[]"); SWITCH_ADD_API(api_interface, "strftime", "strftime", strftime_api_function, ""); @@ -5073,6 +5519,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load) SWITCH_ADD_APP(app_interface, "hold", "Send a hold message", "Send a hold message", hold_function, HOLD_SYNTAX, SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "unhold", "Send a un-hold message", "Send a un-hold message", unhold_function, UNHOLD_SYNTAX, SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "mutex", "block on a call flow only allowing one at a time", "", mutex_function, MUTEX_SYNTAX, SAF_NONE); + SWITCH_ADD_APP(app_interface, "page", "", "", page_function, PAGE_SYNTAX, SAF_NONE); SWITCH_ADD_APP(app_interface, "transfer", "Transfer a channel", TRANSFER_LONG_DESC, transfer_function, " [ ]", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "check_acl", "Check an ip against an ACL list", "Check an ip against an ACL list", check_acl_function, diff --git a/src/mod/applications/mod_voicemail/mod_voicemail.c b/src/mod/applications/mod_voicemail/mod_voicemail.c index e6ce3aecf0..195ac3170f 100644 --- a/src/mod/applications/mod_voicemail/mod_voicemail.c +++ b/src/mod/applications/mod_voicemail/mod_voicemail.c @@ -2582,6 +2582,7 @@ static switch_status_t deliver_vm(vm_profile_t *profile, char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1]; const char *filename; switch_xml_t x_param, x_params; + const char *vm_cc = NULL, *vm_cc_tmp = NULL; char *vm_email = NULL; char *vm_email_from = NULL; char *vm_notify_email = NULL; @@ -2641,7 +2642,9 @@ static switch_status_t deliver_vm(vm_profile_t *profile, const char *var = switch_xml_attr_soft(x_param, "name"); const char *val = switch_xml_attr_soft(x_param, "value"); - if (!strcasecmp(var, "vm-mailto")) { + if (!strcasecmp(var, "vm-cc")) { + vm_cc = switch_core_strdup(pool, val); + } else if (!strcasecmp(var, "vm-mailto")) { vm_email = switch_core_strdup(pool, val); } else if (!strcasecmp(var, "vm-notify-mailto")) { vm_notify_email = switch_core_strdup(pool, val); @@ -2922,18 +2925,34 @@ static switch_status_t deliver_vm(vm_profile_t *profile, if (session) { switch_channel_t *channel = switch_core_session_get_channel(session); - const char *vm_cc; + if (channel && (vm_cc_tmp = switch_channel_get_variable(channel, "vm_cc"))) { + vm_cc = vm_cc_tmp; + } + } - if ((vm_cc = switch_channel_get_variable(channel, "vm_cc"))) { + if (vm_cc) { + char *vm_cc_dup; + int vm_cc_num = 0; + char *vm_cc_list[256] = { 0 }; + int vm_cc_i; + + vm_cc_dup = strdup(vm_cc); + vm_cc_num = switch_separate_string(vm_cc_dup, ',', vm_cc_list, (sizeof(vm_cc_list) / sizeof(vm_cc_list[0]))); + + for (vm_cc_i=0; vm_cc_icur_frame) { - for (int i = 1; i <= MAX_LBRR_DELAY; i++) { + for (i = 1; i <= MAX_LBRR_DELAY; i++) { found_frame = stfu_n_copy_next_frame(jb, codec->cur_frame->timestamp, codec->cur_frame->seq, i, &next_frame); if (found_frame) { SKP_Silk_SDK_search_for_LBRR(next_frame.data, next_frame.dlen, i, (SKP_uint8*) &recbuff, &reclen); diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 4a074088fc..ebc8f2aa6b 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -2408,6 +2408,7 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void profile, /* Additional data to pass to callback */ TAG_IF( ! sofia_test_pflag(profile, PFLAG_TLS) || ! profile->tls_only, NUTAG_URL(profile->bindurl)), NTATAG_USER_VIA(1), + NUTAG_RETRY_AFTER_ENABLE(0), TAG_IF(!strchr(profile->sipip, ':'), SOATAG_AF(SOA_AF_IP4_ONLY)), TAG_IF(strchr(profile->sipip, ':'), diff --git a/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx b/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx index 8d09ec6b03..d37e098099 100644 --- a/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx +++ b/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx @@ -8269,15 +8269,21 @@ SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_hupall(int jarg1) { } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_hupall_matching_var(char * jarg1, char * jarg2, int jarg3) { +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_session_hupall_matching_var_ans(char * jarg1, char * jarg2, int jarg3, int jarg4) { + unsigned long jresult ; char *arg1 = (char *) 0 ; char *arg2 = (char *) 0 ; switch_call_cause_t arg3 ; + switch_hup_type_t arg4 ; + uint32_t result; arg1 = (char *)jarg1; arg2 = (char *)jarg2; arg3 = (switch_call_cause_t)jarg3; - switch_core_session_hupall_matching_var((char const *)arg1,(char const *)arg2,arg3); + arg4 = (switch_hup_type_t)jarg4; + result = (uint32_t)switch_core_session_hupall_matching_var_ans((char const *)arg1,(char const *)arg2,arg3,arg4); + jresult = (unsigned long)result; + return jresult; } diff --git a/src/mod/languages/mod_managed/managed/swig.2010.cs b/src/mod/languages/mod_managed/managed/swig.2010.cs index 25a99cdf69..24aac8ed9e 100644 --- a/src/mod/languages/mod_managed/managed/swig.2010.cs +++ b/src/mod/languages/mod_managed/managed/swig.2010.cs @@ -1606,8 +1606,9 @@ public class freeswitch { freeswitchPINVOKE.switch_core_session_hupall((int)cause); } - public static void switch_core_session_hupall_matching_var(string var_name, string var_val, switch_call_cause_t cause) { - freeswitchPINVOKE.switch_core_session_hupall_matching_var(var_name, var_val, (int)cause); + public static uint switch_core_session_hupall_matching_var_ans(string var_name, string var_val, switch_call_cause_t cause, switch_hup_type_t type) { + uint ret = freeswitchPINVOKE.switch_core_session_hupall_matching_var_ans(var_name, var_val, (int)cause, (int)type); + return ret; } public static switch_console_callback_match switch_core_session_findall_matching_var(string var_name, string var_val) { @@ -8694,8 +8695,8 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_hupall")] public static extern void switch_core_session_hupall(int jarg1); - [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_hupall_matching_var")] - public static extern void switch_core_session_hupall_matching_var(string jarg1, string jarg2, int jarg3); + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_hupall_matching_var_ans")] + public static extern uint switch_core_session_hupall_matching_var_ans(string jarg1, string jarg2, int jarg3, int jarg4); [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_findall_matching_var")] public static extern IntPtr switch_core_session_findall_matching_var(string jarg1, string jarg2); @@ -28851,6 +28852,23 @@ public class switch_hold_record_t : IDisposable { namespace FreeSWITCH.Native { +public enum switch_hup_type_t { + SHT_NONE = 0, + SHT_UNANSWERED = (1 << 0), + SHT_ANSWERED = (1 << 1) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.1 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + using System; using System.Runtime.InteropServices; diff --git a/src/mod/xml_int/mod_xml_radius/mod_xml_radius.c b/src/mod/xml_int/mod_xml_radius/mod_xml_radius.c index 0b99166f98..d858f46535 100644 --- a/src/mod/xml_int/mod_xml_radius/mod_xml_radius.c +++ b/src/mod/xml_int/mod_xml_radius/mod_xml_radius.c @@ -45,7 +45,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_xml_radius_load); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_radius_shutdown); SWITCH_MODULE_DEFINITION(mod_xml_radius, mod_xml_radius_load, mod_xml_radius_shutdown, NULL); -static int GLOBAL_DEBUG = 0; +int GLOBAL_DEBUG = 0; switch_status_t mod_xml_radius_new_handle(rc_handle **new_handle, switch_xml_t xml) { switch_xml_t server, param; @@ -531,6 +531,21 @@ switch_status_t mod_xml_radius_add_params(switch_core_session_t *session, switch } +/* static switch_status_t name (_In_opt_z_ const char *cmd, _In_opt_ switch_core_session_t *session, _In_ switch_stream_handle_t *stream) */ +SWITCH_STANDARD_API(mod_xml_radius_debug_api) +{ + if ( !strncmp(cmd, "on", 2) ) { + GLOBAL_DEBUG = 1; + } else if ( !strncmp(cmd, "off", 3)){ + GLOBAL_DEBUG = 0; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Valid options are [yes|no]\n" ); + } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "debug is %s\n", (GLOBAL_DEBUG ? "on" : "off") ); + return SWITCH_STATUS_SUCCESS; +} + /* static switch_status_t name (_In_opt_z_ const char *cmd, _In_opt_ switch_core_session_t *session, _In_ switch_stream_handle_t *stream) */ SWITCH_STANDARD_API(mod_xml_radius_connect_test) { @@ -1132,6 +1147,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_xml_radius_load) } SWITCH_ADD_API(mod_xml_radius_api_interface, "xml_radius_connect_test", "mod_xml_radius connection test", mod_xml_radius_connect_test, NULL); + SWITCH_ADD_API(mod_xml_radius_api_interface, "xml_radius_debug", "mod_xml_radius toggle debug", mod_xml_radius_debug_api, NULL); switch_core_add_state_handler(&state_handlers); diff --git a/src/mod/xml_int/mod_xml_radius/xml_radius.conf.xml b/src/mod/xml_int/mod_xml_radius/xml_radius.conf.xml index 6349d05210..16e5df5fb6 100644 --- a/src/mod/xml_int/mod_xml_radius/xml_radius.conf.xml +++ b/src/mod/xml_int/mod_xml_radius/xml_radius.conf.xml @@ -74,9 +74,12 @@ - + + + - + + @@ -103,21 +106,27 @@ - - - - - - - - + + + + + + + + + + + + + - + + + + + + @@ -129,25 +138,30 @@ - - - + + + + + + + + + + + - - - - - + + - + + + + + diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index ac32d7d146..7fa478815e 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -330,13 +330,13 @@ SWITCH_DECLARE(switch_status_t) _switch_cache_db_get_db_handle_dsn(switch_cache_ if (!strncasecmp(dsn, "pgsql://", 8)) { type = SCDB_TYPE_PGSQL; connection_options.pgsql_options.dsn = (char *)(dsn + 8); - } else if ((!(i = strncasecmp(dsn, "odbc://", 8))) || strchr(dsn, ':')) { + } else if ((!(i = strncasecmp(dsn, "odbc://", 7))) || strchr(dsn, ':')) { type = SCDB_TYPE_ODBC; if (i) { switch_set_string(tmp, dsn); } else { - switch_set_string(tmp, dsn+8); + switch_set_string(tmp, dsn+7); } connection_options.odbc_options.dsn = tmp; diff --git a/src/switch_limit.c b/src/switch_limit.c index 6e792ca53d..c1c2789f8b 100644 --- a/src/switch_limit.c +++ b/src/switch_limit.c @@ -83,7 +83,7 @@ static switch_status_t limit_state_handler(switch_core_session_t *session) const char *backendlist = switch_channel_get_variable(channel, LIMIT_BACKEND_VARIABLE); if (zstr(backendlist)) { - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Unset limit backendlist!\n"); + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Unset limit backendlist!\n"); return SWITCH_STATUS_SUCCESS; } diff --git a/w32/Library/FreeSwitchCore.2008.vcproj b/w32/Library/FreeSwitchCore.2008.vcproj index 624e125542..16635f2b93 100644 --- a/w32/Library/FreeSwitchCore.2008.vcproj +++ b/w32/Library/FreeSwitchCore.2008.vcproj @@ -48,7 +48,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\src\include;..\..\libs\include;..\..\libs\srtp\include;..\..\libs\srtp\crypto\include;..\..\libs\libteletone\src;..\..\libs\win32\sqlite;..\..\libs\pcre;..\..\libs\stfu;..\..\libs\speex\include;..\..\libs\spandsp\src\msvc;..\..\libs\spandsp\src;..\..\libs\tiff-4.0.2\libtiff;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;TPL_NOLIB;" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;TPL_NOLIB;STFU_EXPORTS" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" @@ -142,7 +142,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\src\include;..\..\libs\include;..\..\libs\srtp\include;..\..\libs\srtp\crypto\include;..\..\libs\libteletone\src;..\..\libs\win32\sqlite;..\..\libs\pcre;..\..\libs\stfu;..\..\libs\speex\include;..\..\libs\spandsp\src\msvc;..\..\libs\spandsp\src;..\..\libs\tiff-4.0.2\libtiff;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;TPL_NOLIB;" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;TPL_NOLIB;STFU_EXPORTS" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" @@ -235,7 +235,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\src\include;..\..\libs\include;..\..\libs\srtp\include;..\..\libs\srtp\crypto\include;..\..\libs\libteletone\src;..\..\libs\win32\sqlite;..\..\libs\pcre;..\..\libs\stfu;..\..\libs\speex\include;..\..\libs\spandsp\src\msvc;..\..\libs\spandsp\src;..\..\libs\tiff-4.0.2\libtiff;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;TPL_NOLIB;" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;TPL_NOLIB;STFU_EXPORTS" RuntimeLibrary="2" UsePrecompiledHeader="2" PrecompiledHeaderThrough="switch.h" @@ -325,7 +325,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\src\include;..\..\libs\include;..\..\libs\srtp\include;..\..\libs\srtp\crypto\include;..\..\libs\libteletone\src;..\..\libs\win32\sqlite;..\..\libs\pcre;..\..\libs\stfu;..\..\libs\speex\include;..\..\libs\spandsp\src\msvc;..\..\libs\spandsp\src;..\..\libs\tiff-4.0.2\libtiff;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;TPL_NOLIB;" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;TPL_NOLIB;STFU_EXPORTS" RuntimeLibrary="2" UsePrecompiledHeader="2" PrecompiledHeaderThrough="switch.h" @@ -855,11 +855,11 @@ > Disabled ..\..\src\include;..\..\libs\include;..\..\libs\srtp\include;..\..\libs\srtp\crypto\include;..\..\libs\libteletone\src;..\..\libs\win32\sqlite;..\..\libs\pcre;..\..\libs\stfu;..\..\libs\speex\include;..\..\libs\spandsp\src\msvc;..\..\libs\spandsp\src;..\..\libs\tiff-4.0.2\libtiff;..\..\libs\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;ENABLE_ZRTP;TPL_NOLIB;%(PreprocessorDefinitions) + WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;ENABLE_ZRTP;TPL_NOLIB;STFU_EXPORTS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL @@ -147,7 +147,7 @@ if not exist "$(OutDir)htdocs" xcopy "$(SolutionDir)htdocs\*.*" "$(OutDir)htdocs Disabled ..\..\src\include;..\..\libs\include;..\..\libs\srtp\include;..\..\libs\srtp\crypto\include;..\..\libs\libteletone\src;..\..\libs\win32\sqlite;..\..\libs\pcre;..\..\libs\stfu;..\..\libs\speex\include;..\..\libs\spandsp\src\msvc;..\..\libs\spandsp\src;..\..\libs\tiff-4.0.2\libtiff;..\..\libs\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;ENABLE_ZRTP;TPL_NOLIB;%(PreprocessorDefinitions) + WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;ENABLE_ZRTP;TPL_NOLIB;STFU_EXPORTS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL @@ -199,7 +199,7 @@ if not exist "$(OutDir)htdocs" xcopy "$(SolutionDir)htdocs\*.*" "$(OutDir)htdocs MaxSpeed ..\..\src\include;..\..\libs\include;..\..\libs\srtp\include;..\..\libs\srtp\crypto\include;..\..\libs\libteletone\src;..\..\libs\win32\sqlite;..\..\libs\pcre;..\..\libs\stfu;..\..\libs\speex\include;..\..\libs\spandsp\src\msvc;..\..\libs\spandsp\src;..\..\libs\tiff-4.0.2\libtiff;..\..\libs\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;ENABLE_ZRTP;TPL_NOLIB;%(PreprocessorDefinitions) + WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;ENABLE_ZRTP;TPL_NOLIB;STFU_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Use switch.h @@ -248,7 +248,7 @@ if not exist "$(OutDir)htdocs" xcopy "$(SolutionDir)htdocs\*.*" "$(OutDir)htdocs MaxSpeed ..\..\src\include;..\..\libs\include;..\..\libs\srtp\include;..\..\libs\srtp\crypto\include;..\..\libs\libteletone\src;..\..\libs\win32\sqlite;..\..\libs\pcre;..\..\libs\stfu;..\..\libs\speex\include;..\..\libs\spandsp\src\msvc;..\..\libs\spandsp\src;..\..\libs\tiff-4.0.2\libtiff;..\..\libs\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;ENABLE_ZRTP;TPL_NOLIB;%(PreprocessorDefinitions) + WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;ENABLE_ZRTP;TPL_NOLIB;STFU_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL Use switch.h @@ -836,4 +836,4 @@ if not exist "$(OutDir)htdocs" xcopy "$(SolutionDir)htdocs\*.*" "$(OutDir)htdocs - + \ No newline at end of file