fix merge conflicts
This commit is contained in:
commit
4983c3d098
|
@ -144,7 +144,7 @@
|
||||||
|
|
||||||
<param name="rtp-enable-zrtp" value="true"/>
|
<param name="rtp-enable-zrtp" value="true"/>
|
||||||
|
|
||||||
<!-- <param name="core-db-dsn" value="pgsql;hostaddr=127.0.0.1 dbname=freeswitch user=freeswitch password='' options='-c client_min_messages=NOTICE' application_name='freeswitch'" /> -->
|
<!-- <param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch user=freeswitch password='' options='-c client_min_messages=NOTICE' application_name='freeswitch'" /> -->
|
||||||
<!-- <param name="core-db-dsn" value="dsn:username:password" /> -->
|
<!-- <param name="core-db-dsn" value="dsn:username:password" /> -->
|
||||||
<!--
|
<!--
|
||||||
Allow to specify the sqlite db at a different location (In this example, move it to ramdrive for
|
Allow to specify the sqlite db at a different location (In this example, move it to ramdrive for
|
||||||
|
|
|
@ -214,7 +214,7 @@
|
||||||
<!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
|
<!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
|
||||||
|
|
||||||
<!-- Or, if you have PGSQL support, you can use that -->
|
<!-- Or, if you have PGSQL support, you can use that -->
|
||||||
<!--<param name="odbc-dsn" value="pgsql;hostaddr=127.0.0.1 dbname=freeswitch user=freeswitch password='' options='-c client_min_messages=NOTICE' application_name='freeswitch'" />-->
|
<!--<param name="odbc-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch user=freeswitch password='' options='-c client_min_messages=NOTICE' application_name='freeswitch'" />-->
|
||||||
|
|
||||||
<!--Uncomment to set all inbound calls to no media mode-->
|
<!--Uncomment to set all inbound calls to no media mode-->
|
||||||
<!--<param name="inbound-bypass-media" value="true"/>-->
|
<!--<param name="inbound-bypass-media" value="true"/>-->
|
||||||
|
|
|
@ -164,7 +164,7 @@ if test "x${ax_cv_c_compiler_vendor}" = "xsun" ; then
|
||||||
SOLINK="-Bdynamic -dy -G"
|
SOLINK="-Bdynamic -dy -G"
|
||||||
elif test "x${ax_cv_c_compiler_vendor}" = "xgnu" ; then
|
elif test "x${ax_cv_c_compiler_vendor}" = "xgnu" ; then
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*darwin12.*|*darwin10.*)
|
*darwin12.*|*darwin11.*|*darwin10.*)
|
||||||
SOLINK="-dynamic -force-flat-namespace"
|
SOLINK="-dynamic -force-flat-namespace"
|
||||||
;;
|
;;
|
||||||
*darwin*)
|
*darwin*)
|
||||||
|
@ -248,7 +248,7 @@ elif test "x${ax_cv_c_compiler_vendor}" = "xgnu" ; then
|
||||||
APR_ADDTO(SWITCH_AM_CFLAGS, -Werror)
|
APR_ADDTO(SWITCH_AM_CFLAGS, -Werror)
|
||||||
if test "${enable_64}" = "yes"; then
|
if test "${enable_64}" = "yes"; then
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*darwin12.*|*darwin10.*|*darwin9.*|*darwin8.*)
|
*darwin12.*|*darwin11.*|*darwin10.*|*darwin9.*|*darwin8.*)
|
||||||
APR_ADDTO(CFLAGS, -arch x86_64)
|
APR_ADDTO(CFLAGS, -arch x86_64)
|
||||||
APR_ADDTO(LDFLAGS, -arch x86_64)
|
APR_ADDTO(LDFLAGS, -arch x86_64)
|
||||||
APR_ADDTO(CXXFLAGS, -arch x86_64)
|
APR_ADDTO(CXXFLAGS, -arch x86_64)
|
||||||
|
@ -454,7 +454,7 @@ PLATFORM_CORE_LDFLAGS=
|
||||||
PLATFORM_CORE_LIBS=
|
PLATFORM_CORE_LIBS=
|
||||||
# tweak platform specific flags
|
# tweak platform specific flags
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*darwin12.*)
|
*darwin12.*|*darwin11.*)
|
||||||
APR_ADDTO(SWITCH_AM_CFLAGS, -DMACOSX)
|
APR_ADDTO(SWITCH_AM_CFLAGS, -DMACOSX)
|
||||||
APR_ADDTO(CFLAGS, -pipe -no-cpp-precomp -Wno-deprecated-declarations)
|
APR_ADDTO(CFLAGS, -pipe -no-cpp-precomp -Wno-deprecated-declarations)
|
||||||
APR_ADDTO(LDFLAGS, -pipe -bind_at_load)
|
APR_ADDTO(LDFLAGS, -pipe -bind_at_load)
|
||||||
|
|
|
@ -916,6 +916,8 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *
|
||||||
int rval = 0;
|
int rval = 0;
|
||||||
const char *hval;
|
const char *hval;
|
||||||
struct addrinfo hints = { 0 }, *result;
|
struct addrinfo hints = { 0 }, *result;
|
||||||
|
struct sockaddr_in *sockaddr_in;
|
||||||
|
struct sockaddr_in6 *sockaddr_in6;
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
int fd_flags = 0;
|
int fd_flags = 0;
|
||||||
#else
|
#else
|
||||||
|
@ -936,27 +938,36 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *
|
||||||
if (!handle->packet_buf) {
|
if (!handle->packet_buf) {
|
||||||
esl_buffer_create(&handle->packet_buf, BUF_CHUNK, BUF_START, 0);
|
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;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
|
||||||
if (getaddrinfo(host, NULL, &hints, &result)) {
|
if (getaddrinfo(host, NULL, &hints, &result)) {
|
||||||
strncpy(handle->err, "Cannot resolve host", sizeof(handle->err));
|
strncpy(handle->err, "Cannot resolve host", sizeof(handle->err));
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&handle->sockaddr, result->ai_addr, sizeof(handle->sockaddr));
|
memcpy(&handle->sockaddr, result->ai_addr, sizeof(handle->sockaddr));
|
||||||
handle->sockaddr.sin_family = AF_INET;
|
switch(handle->sockaddr.ss_family) {
|
||||||
handle->sockaddr.sin_port = htons(port);
|
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);
|
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) {
|
if (timeout) {
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
|
@ -288,7 +288,7 @@ typedef enum {
|
||||||
/*! \brief A handle that will hold the socket information and
|
/*! \brief A handle that will hold the socket information and
|
||||||
different events received. */
|
different events received. */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
struct sockaddr_in sockaddr;
|
struct sockaddr_storage sockaddr;
|
||||||
struct hostent hostent;
|
struct hostent hostent;
|
||||||
char hostbuf[256];
|
char hostbuf[256];
|
||||||
esl_socket_t sock;
|
esl_socket_t sock;
|
||||||
|
|
|
@ -1318,6 +1318,9 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
|
||||||
|
|
||||||
if (!zstr(outbound_profile->caller_id_number)) {
|
if (!zstr(outbound_profile->caller_id_number)) {
|
||||||
callerid_num = switch_sanitize_number(switch_core_strdup(outbound_profile->pool, 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)) {
|
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");
|
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-CallerNumber");
|
||||||
if (sipvar) {
|
if (sipvar) {
|
||||||
|
if ( *sipvar == '+' ) {
|
||||||
|
sipvar++;
|
||||||
|
}
|
||||||
ftdm_set_string(caller_data.cid_num.digits, 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;
|
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_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));
|
memset(&hunting, 0, sizeof(hunting));
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Fri Oct 26 14:14:41 CDT 2012
|
Fri Nov 2 13:36:06 CDT 2012
|
||||||
|
|
|
@ -1217,6 +1217,7 @@ int nua_base_client_check_restart(nua_client_request_t *cr,
|
||||||
status == 500 || status == 503 ||
|
status == 500 || status == 503 ||
|
||||||
status == 600 || status == 603) &&
|
status == 600 || status == 603) &&
|
||||||
sip->sip_retry_after &&
|
sip->sip_retry_after &&
|
||||||
|
NH_PGET(nh, retry_after_enable) &&
|
||||||
sip->sip_retry_after->af_delta < 3200) {
|
sip->sip_retry_after->af_delta < 3200) {
|
||||||
su_timer_t *timer;
|
su_timer_t *timer;
|
||||||
char phrase[18]; /* Retry After XXXX\0 */
|
char phrase[18]; /* Retry After XXXX\0 */
|
||||||
|
|
|
@ -157,6 +157,7 @@ int nua_stack_set_defaults(nua_handle_t *nh,
|
||||||
NHP_SET(nhp, callee_caps, 0);
|
NHP_SET(nhp, callee_caps, 0);
|
||||||
NHP_SET(nhp, service_route_enable, 1);
|
NHP_SET(nhp, service_route_enable, 1);
|
||||||
NHP_SET(nhp, path_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_expires, 300);
|
||||||
NHP_SET(nhp, refer_with_id, 1);
|
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_ONLY183_100REL() \n
|
||||||
* NUTAG_OUTBOUND() \n
|
* NUTAG_OUTBOUND() \n
|
||||||
* NUTAG_PATH_ENABLE() \n
|
* NUTAG_PATH_ENABLE() \n
|
||||||
|
* NUTAG_RETRY_AFTER_ENABLE() \n
|
||||||
* NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) \n
|
* NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) \n
|
||||||
* NUTAG_REFER_EXPIRES() \n
|
* NUTAG_REFER_EXPIRES() \n
|
||||||
* NUTAG_REFER_WITH_ID() \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_ONLY183_100REL() \n
|
||||||
* NUTAG_OUTBOUND() \n
|
* NUTAG_OUTBOUND() \n
|
||||||
* NUTAG_PATH_ENABLE() \n
|
* NUTAG_PATH_ENABLE() \n
|
||||||
|
* NUTAG_RETRY_AFTER_ENABLE() \n
|
||||||
* NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) \n
|
* NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) \n
|
||||||
* NUTAG_REFER_EXPIRES() \n
|
* NUTAG_REFER_EXPIRES() \n
|
||||||
* NUTAG_REFER_WITH_ID() \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) {
|
else if (tag == nutag_path_enable) {
|
||||||
NHP_SET(nhp, path_enable, value != 0);
|
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) */
|
/* NUTAG_AUTH_CACHE(auth_cache) */
|
||||||
else if (tag == nutag_auth_cache) {
|
else if (tag == nutag_auth_cache) {
|
||||||
if (value >= 0 && value < (tag_value_t)_nua_auth_cache_invalid)
|
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_ONLY183_100REL() \n
|
||||||
* NUTAG_OUTBOUND() \n
|
* NUTAG_OUTBOUND() \n
|
||||||
* NUTAG_PATH_ENABLE() \n
|
* NUTAG_PATH_ENABLE() \n
|
||||||
|
* NUTAG_RETRY_AFTER_ENABLE() \n
|
||||||
* NUTAG_REFER_EXPIRES() \n
|
* NUTAG_REFER_EXPIRES() \n
|
||||||
* NUTAG_REFER_WITH_ID() \n
|
* NUTAG_REFER_WITH_ID() \n
|
||||||
* NUTAG_REFRESH_WITHOUT_SDP() \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_MEDIA_FEATURES, media_features),
|
||||||
TIF(NUTAG_SERVICE_ROUTE_ENABLE, service_route_enable),
|
TIF(NUTAG_SERVICE_ROUTE_ENABLE, service_route_enable),
|
||||||
TIF(NUTAG_PATH_ENABLE, path_enable),
|
TIF(NUTAG_PATH_ENABLE, path_enable),
|
||||||
|
TIF(NUTAG_RETRY_AFTER_ENABLE, retry_after_enable),
|
||||||
TIF(NUTAG_AUTH_CACHE, auth_cache),
|
TIF(NUTAG_AUTH_CACHE, auth_cache),
|
||||||
TIF(NUTAG_REFER_EXPIRES, refer_expires),
|
TIF(NUTAG_REFER_EXPIRES, refer_expires),
|
||||||
TIF(NUTAG_REFER_WITH_ID, refer_with_id),
|
TIF(NUTAG_REFER_WITH_ID, refer_with_id),
|
||||||
|
|
|
@ -111,6 +111,10 @@ struct nua_handle_preferences
|
||||||
unsigned nhp_refer_with_id:1;
|
unsigned nhp_refer_with_id:1;
|
||||||
|
|
||||||
unsigned nhp_timer_autorequire:1;
|
unsigned nhp_timer_autorequire:1;
|
||||||
|
|
||||||
|
/** Enable Retry-After */
|
||||||
|
unsigned nhp_retry_after_enable:1;
|
||||||
|
|
||||||
unsigned:0;
|
unsigned:0;
|
||||||
|
|
||||||
/* Default lifetime for implicit subscriptions created by REFER */
|
/* Default lifetime for implicit subscriptions created by REFER */
|
||||||
|
@ -210,6 +214,7 @@ struct nua_handle_preferences
|
||||||
unsigned nhb_initial_route:1;
|
unsigned nhb_initial_route:1;
|
||||||
unsigned nhb_proxy:1;
|
unsigned nhb_proxy:1;
|
||||||
unsigned nhb_timer_autorequire:1;
|
unsigned nhb_timer_autorequire:1;
|
||||||
|
unsigned nhb_retry_after_enable:1;
|
||||||
unsigned :0;
|
unsigned :0;
|
||||||
} set_bits;
|
} set_bits;
|
||||||
unsigned set_unsigned[2];
|
unsigned set_unsigned[2];
|
||||||
|
|
|
@ -126,6 +126,7 @@
|
||||||
* - NUTAG_M_USERNAME()
|
* - NUTAG_M_USERNAME()
|
||||||
* - NUTAG_OUTBOUND()
|
* - NUTAG_OUTBOUND()
|
||||||
* - NUTAG_PATH_ENABLE()
|
* - NUTAG_PATH_ENABLE()
|
||||||
|
* - NUTAG_RETRY_AFTER_ENABLE()
|
||||||
* - NUTAG_SERVICE_ROUTE_ENABLE()
|
* - NUTAG_SERVICE_ROUTE_ENABLE()
|
||||||
* Specifications:
|
* Specifications:
|
||||||
* - @RFC3261 section 10, @RFC3327, @RFC3608, @RFC3680, @RFC3840,
|
* - @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().
|
* 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)
|
/**@def NUTAG_SERVICE_ROUTE_ENABLE(x)
|
||||||
|
|
|
@ -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))
|
#define NUTAG_PATH_ENABLE_REF(x) nutag_path_enable_ref, tag_bool_vr(&(x))
|
||||||
SOFIAPUBVAR tag_typedef_t nutag_path_enable_ref;
|
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)
|
#define NUTAG_SERVICE_ROUTE_ENABLE(x) nutag_service_route_enable, tag_bool_v(x)
|
||||||
SOFIAPUBVAR tag_typedef_t nutag_service_route_enable;
|
SOFIAPUBVAR tag_typedef_t nutag_service_route_enable;
|
||||||
#define NUTAG_SERVICE_ROUTE_ENABLE_REF(x) \
|
#define NUTAG_SERVICE_ROUTE_ENABLE_REF(x) \
|
||||||
|
|
|
@ -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++) {
|
for (x = 0; x < i->out_queue->array_len; x++) {
|
||||||
if (!i->out_queue->array[x].was_read) {
|
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].ts;
|
||||||
i->cur_ts = i->out_queue->array[x].seq;
|
i->cur_seq = i->out_queue->array[x].seq;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i->cur_ts == 0) {
|
if (i->cur_ts == 0) {
|
||||||
|
@ -806,15 +806,22 @@ stfu_frame_t *stfu_n_read_a_frame(stfu_instance_t *i)
|
||||||
return rframe;
|
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;
|
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};
|
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_queue_t *queue = NULL;
|
||||||
stfu_frame_t *frame = NULL;
|
stfu_frame_t *frame = NULL;
|
||||||
|
|
||||||
uint32_t target_ts = 0;
|
uint32_t target_ts = 0;
|
||||||
|
|
||||||
|
seq = seq;
|
||||||
if (!next_frame) return 0;
|
if (!next_frame) return 0;
|
||||||
|
|
||||||
target_ts = timestamp + (distance - 1) * jb->samples_per_packet;
|
target_ts = timestamp + (distance - 1) * jb->samples_per_packet;
|
||||||
|
|
|
@ -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_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_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);
|
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);
|
void stfu_n_reset(stfu_instance_t *i);
|
||||||
stfu_status_t stfu_n_sync(stfu_instance_t *i, uint32_t packets);
|
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);
|
void stfu_n_call_me(stfu_instance_t *i, stfu_n_call_me_t callback, void *udata);
|
||||||
|
|
|
@ -4967,6 +4967,451 @@ SWITCH_STANDARD_APP(mutex_function)
|
||||||
|
|
||||||
/* /// mutex /// */
|
/* /// 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 "<var1=val1,var2=val2><chan1>[:_:<chanN>]"
|
||||||
|
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 SPEAK_DESC "Speak text to a channel via the tts interface"
|
||||||
#define DISPLACE_DESC "Displace audio from a file to the channels input"
|
#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_CHAT(chat_interface, "api", api_chat_send);
|
||||||
|
|
||||||
SWITCH_ADD_API(api_interface, "strepoch", "Convert a date string into epoch time", strepoch_api_function, "<string>");
|
SWITCH_ADD_API(api_interface, "strepoch", "Convert a date string into epoch time", strepoch_api_function, "<string>");
|
||||||
|
SWITCH_ADD_API(api_interface, "page", "Send a file as a page", page_api_function, "(var1=val1,var2=val2)<var1=val1,var2=val2><chan1>[:_:<chanN>]");
|
||||||
SWITCH_ADD_API(api_interface, "strmicroepoch", "Convert a date string into micoepoch time", strmicroepoch_api_function, "<string>");
|
SWITCH_ADD_API(api_interface, "strmicroepoch", "Convert a date string into micoepoch time", strmicroepoch_api_function, "<string>");
|
||||||
SWITCH_ADD_API(api_interface, "chat", "chat", chat_api_function, "<proto>|<from>|<to>|<message>|[<content-type>]");
|
SWITCH_ADD_API(api_interface, "chat", "chat", chat_api_function, "<proto>|<from>|<to>|<message>|[<content-type>]");
|
||||||
SWITCH_ADD_API(api_interface, "strftime", "strftime", strftime_api_function, "<format_string>");
|
SWITCH_ADD_API(api_interface, "strftime", "strftime", strftime_api_function, "<format_string>");
|
||||||
|
@ -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, "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, "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, "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, "<exten> [<dialplan> <context>]",
|
SWITCH_ADD_APP(app_interface, "transfer", "Transfer a channel", TRANSFER_LONG_DESC, transfer_function, "<exten> [<dialplan> <context>]",
|
||||||
SAF_SUPPORT_NOMEDIA);
|
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,
|
SWITCH_ADD_APP(app_interface, "check_acl", "Check an ip against an ACL list", "Check an ip against an ACL list", check_acl_function,
|
||||||
|
|
|
@ -2582,6 +2582,7 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
|
||||||
char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1];
|
char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1];
|
||||||
const char *filename;
|
const char *filename;
|
||||||
switch_xml_t x_param, x_params;
|
switch_xml_t x_param, x_params;
|
||||||
|
const char *vm_cc = NULL, *vm_cc_tmp = NULL;
|
||||||
char *vm_email = NULL;
|
char *vm_email = NULL;
|
||||||
char *vm_email_from = NULL;
|
char *vm_email_from = NULL;
|
||||||
char *vm_notify_email = 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 *var = switch_xml_attr_soft(x_param, "name");
|
||||||
const char *val = switch_xml_attr_soft(x_param, "value");
|
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);
|
vm_email = switch_core_strdup(pool, val);
|
||||||
} else if (!strcasecmp(var, "vm-notify-mailto")) {
|
} else if (!strcasecmp(var, "vm-notify-mailto")) {
|
||||||
vm_notify_email = switch_core_strdup(pool, val);
|
vm_notify_email = switch_core_strdup(pool, val);
|
||||||
|
@ -2922,18 +2925,34 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
|
||||||
|
|
||||||
if (session) {
|
if (session) {
|
||||||
switch_channel_t *channel = switch_core_session_get_channel(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_i<vm_cc_num; vm_cc_i++) {
|
||||||
|
const char *vm_cc_current = vm_cc_list[vm_cc_i];
|
||||||
char *cmd = switch_core_session_sprintf(session, "%s %s %s '%s' %s@%s %s",
|
char *cmd = switch_core_session_sprintf(session, "%s %s %s '%s' %s@%s %s",
|
||||||
vm_cc, file_path, caller_id_number, caller_id_name, myid, domain_name, read_flags);
|
vm_cc_current, file_path, caller_id_number,
|
||||||
|
caller_id_name, myid, domain_name, read_flags);
|
||||||
|
|
||||||
if (voicemail_inject(cmd, session) == SWITCH_STATUS_SUCCESS) {
|
if (voicemail_inject(cmd, session) == SWITCH_STATUS_SUCCESS) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_NOTICE, "Sent Carbon Copy to %s\n", vm_cc);
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_NOTICE, "Sent Carbon Copy to %s\n", vm_cc_current);
|
||||||
} else {
|
} else {
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Failed to Carbon Copy to %s\n", vm_cc);
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Failed to Carbon Copy to %s\n", vm_cc_current);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch_safe_free(vm_cc_dup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,11 @@ OPUS=opus-1.0.1
|
||||||
OPUS_DIR=$(switch_srcdir)/libs/$(OPUS)
|
OPUS_DIR=$(switch_srcdir)/libs/$(OPUS)
|
||||||
OPUS_BUILDDIR=$(switch_builddir)/libs/$(OPUS)
|
OPUS_BUILDDIR=$(switch_builddir)/libs/$(OPUS)
|
||||||
LOCAL_CFLAGS=-I$(OPUS_DIR)/include -g -O2
|
LOCAL_CFLAGS=-I$(OPUS_DIR)/include -g -O2
|
||||||
|
LOCAL_LDFLAGS=-lm -lz
|
||||||
|
|
||||||
OPUS_LA=$(OPUS_BUILDDIR)/.libs/libopus.la
|
OPUS_LA=$(OPUS_BUILDDIR)/.libs/libopus.la
|
||||||
|
|
||||||
LOCAL_LIBADD=$(OPUS_LA) -lm -lz
|
LOCAL_LIBADD=$(OPUS_LA)
|
||||||
|
|
||||||
include $(BASE)/build/modmake.rules
|
include $(BASE)/build/modmake.rules
|
||||||
|
|
||||||
|
|
|
@ -182,7 +182,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_opus_load)
|
||||||
{
|
{
|
||||||
switch_codec_interface_t *codec_interface;
|
switch_codec_interface_t *codec_interface;
|
||||||
int samples = 480;
|
int samples = 480;
|
||||||
int bytes = 80;
|
int bytes = 960;
|
||||||
int mss = 10000;
|
int mss = 10000;
|
||||||
int x = 0;
|
int x = 0;
|
||||||
int rate = 48000;
|
int rate = 48000;
|
||||||
|
|
|
@ -31,7 +31,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "switch.h"
|
#include "switch.h"
|
||||||
|
#ifndef WIN32
|
||||||
#include "stfu.h"
|
#include "stfu.h"
|
||||||
|
#else
|
||||||
|
#include "../../../libs/stfu/stfu.h"
|
||||||
|
#endif
|
||||||
#include "SKP_Silk_SDK_API.h"
|
#include "SKP_Silk_SDK_API.h"
|
||||||
|
|
||||||
SWITCH_MODULE_LOAD_FUNCTION(mod_silk_load);
|
SWITCH_MODULE_LOAD_FUNCTION(mod_silk_load);
|
||||||
|
@ -52,10 +56,10 @@ struct silk_codec_settings {
|
||||||
typedef struct silk_codec_settings silk_codec_settings_t;
|
typedef struct silk_codec_settings silk_codec_settings_t;
|
||||||
|
|
||||||
static silk_codec_settings_t default_codec_settings = {
|
static silk_codec_settings_t default_codec_settings = {
|
||||||
/*.useinbandfec */ 0,
|
/*.useinbandfec */ 1,
|
||||||
/*.usedtx */ 0,
|
/*.usedtx */ 0,
|
||||||
/*.maxaveragebitrate */ 0,
|
/*.maxaveragebitrate */ 0,
|
||||||
/*.plpct */ 10, // 10% for now
|
/*.plpct */ 20, // 20% for now
|
||||||
};
|
};
|
||||||
|
|
||||||
struct silk_context {
|
struct silk_context {
|
||||||
|
@ -331,6 +335,7 @@ static switch_status_t switch_silk_decode(switch_codec_t *codec,
|
||||||
SKP_int16 reclen;
|
SKP_int16 reclen;
|
||||||
int32_t found_frame;
|
int32_t found_frame;
|
||||||
switch_bool_t did_lbrr = SWITCH_FALSE;
|
switch_bool_t did_lbrr = SWITCH_FALSE;
|
||||||
|
int i;
|
||||||
|
|
||||||
*decoded_data_len = 0;
|
*decoded_data_len = 0;
|
||||||
|
|
||||||
|
@ -339,7 +344,7 @@ static switch_status_t switch_silk_decode(switch_codec_t *codec,
|
||||||
jb = switch_core_session_get_jb(session, SWITCH_MEDIA_TYPE_AUDIO);
|
jb = switch_core_session_get_jb(session, SWITCH_MEDIA_TYPE_AUDIO);
|
||||||
}
|
}
|
||||||
if (jb && codec && codec->cur_frame) {
|
if (jb && codec && codec->cur_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);
|
found_frame = stfu_n_copy_next_frame(jb, codec->cur_frame->timestamp, codec->cur_frame->seq, i, &next_frame);
|
||||||
if (found_frame) {
|
if (found_frame) {
|
||||||
SKP_Silk_SDK_search_for_LBRR(next_frame.data, next_frame.dlen, i, (SKP_uint8*) &recbuff, &reclen);
|
SKP_Silk_SDK_search_for_LBRR(next_frame.data, next_frame.dlen, i, (SKP_uint8*) &recbuff, &reclen);
|
||||||
|
|
|
@ -2408,6 +2408,7 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
|
||||||
profile, /* Additional data to pass to callback */
|
profile, /* Additional data to pass to callback */
|
||||||
TAG_IF( ! sofia_test_pflag(profile, PFLAG_TLS) || ! profile->tls_only, NUTAG_URL(profile->bindurl)),
|
TAG_IF( ! sofia_test_pflag(profile, PFLAG_TLS) || ! profile->tls_only, NUTAG_URL(profile->bindurl)),
|
||||||
NTATAG_USER_VIA(1),
|
NTATAG_USER_VIA(1),
|
||||||
|
NUTAG_RETRY_AFTER_ENABLE(0),
|
||||||
TAG_IF(!strchr(profile->sipip, ':'),
|
TAG_IF(!strchr(profile->sipip, ':'),
|
||||||
SOATAG_AF(SOA_AF_IP4_ONLY)),
|
SOATAG_AF(SOA_AF_IP4_ONLY)),
|
||||||
TAG_IF(strchr(profile->sipip, ':'),
|
TAG_IF(strchr(profile->sipip, ':'),
|
||||||
|
|
|
@ -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 *arg1 = (char *) 0 ;
|
||||||
char *arg2 = (char *) 0 ;
|
char *arg2 = (char *) 0 ;
|
||||||
switch_call_cause_t arg3 ;
|
switch_call_cause_t arg3 ;
|
||||||
|
switch_hup_type_t arg4 ;
|
||||||
|
uint32_t result;
|
||||||
|
|
||||||
arg1 = (char *)jarg1;
|
arg1 = (char *)jarg1;
|
||||||
arg2 = (char *)jarg2;
|
arg2 = (char *)jarg2;
|
||||||
arg3 = (switch_call_cause_t)jarg3;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1606,8 +1606,9 @@ public class freeswitch {
|
||||||
freeswitchPINVOKE.switch_core_session_hupall((int)cause);
|
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) {
|
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) {
|
||||||
freeswitchPINVOKE.switch_core_session_hupall_matching_var(var_name, var_val, (int)cause);
|
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) {
|
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")]
|
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_hupall")]
|
||||||
public static extern void switch_core_session_hupall(int jarg1);
|
public static extern void switch_core_session_hupall(int jarg1);
|
||||||
|
|
||||||
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_hupall_matching_var")]
|
[DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_hupall_matching_var_ans")]
|
||||||
public static extern void switch_core_session_hupall_matching_var(string jarg1, string jarg2, int jarg3);
|
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")]
|
[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);
|
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 {
|
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;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_xml_radius_load);
|
||||||
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_radius_shutdown);
|
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_radius_shutdown);
|
||||||
SWITCH_MODULE_DEFINITION(mod_xml_radius, mod_xml_radius_load, mod_xml_radius_shutdown, NULL);
|
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_status_t mod_xml_radius_new_handle(rc_handle **new_handle, switch_xml_t xml) {
|
||||||
switch_xml_t server, param;
|
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) */
|
/* 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)
|
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_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);
|
switch_core_add_state_handler(&state_handlers);
|
||||||
|
|
||||||
|
|
|
@ -74,9 +74,12 @@
|
||||||
<param name="seqfile" value="/var/run/radius.seq"/>
|
<param name="seqfile" value="/var/run/radius.seq"/>
|
||||||
</connection>
|
</connection>
|
||||||
<fields>
|
<fields>
|
||||||
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_host" format="src-gw-ip=%s"/>
|
<param vendor="Cisco" name="h323-conf-id" variable_secondary="uuid" variable="originating_leg_uuid" format="%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="uuid" format="h323-call-id=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_network_ip" format="src-gw-ip=%s"/>
|
||||||
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" format="src-gw-name=%s"/>
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" format="src-gw-name=%s"/>
|
||||||
<param vendor="Cisco" name="h323-conf-id" variable="Core-UUID" format="%s"/>
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" format="src-number-in=%s" />
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_to_user" format="dst-number-in=%s" />
|
||||||
<param name="Called-Station-Id" variable="sip_to_user" format="%s"/>
|
<param name="Called-Station-Id" variable="sip_to_user" format="%s"/>
|
||||||
<param name="Calling-Station-Id" variable="sip_from_user" format="%s"/>
|
<param name="Calling-Station-Id" variable="sip_from_user" format="%s"/>
|
||||||
</fields>
|
</fields>
|
||||||
|
@ -103,21 +106,27 @@
|
||||||
<param name="seqfile" value="/var/run/radius.seq"/>
|
<param name="seqfile" value="/var/run/radius.seq"/>
|
||||||
</connection>
|
</connection>
|
||||||
<fields>
|
<fields>
|
||||||
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_host" format="src-gw-ip=%s"/>
|
|
||||||
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" format="src-gw-name=%s"/>
|
|
||||||
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_to_host" format="dst-gw-ip=%s"/>
|
|
||||||
<param vendor="Cisco" name="h323-conf-id" variable_secondary="uuid" variable="originating_leg_uuid" format="%s"/>
|
|
||||||
<param vendor="Cisco" name="h323-setup-time"/>
|
|
||||||
<param vendor="Cisco" name="h323-connect-time"/>
|
|
||||||
<param vendor="Cisco" name="h323-call-origin" variable="h323-call-origin" default="answer" format="%s"/>
|
<param vendor="Cisco" name="h323-call-origin" variable="h323-call-origin" default="answer" format="%s"/>
|
||||||
<param name="Called-Station-Id" variable="sip_to_user" format="%s"/>
|
<param vendor="Cisco" name="h323-conf-id" variable_secondary="uuid" variable="originating_leg_uuid" format="%s"/>
|
||||||
<param name="Calling-Station-Id" variable="sip_from_user" format="%s"/>
|
<param vendor="Cisco" name="Cisco-AVPair" variable="uuid" format="h323-call-id=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_contact_host" format="src-gw-ip=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" variable_secondary="ani" format="src-gw-name=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" variable_secondary="ani" format="src-number-in=%s" />
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" variable_secondary="ani" format="src-number-out=%s" />
|
||||||
|
<param name="Calling-Station-Id" variable="sip_from_user" variable_secondary="ani" format="%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_to_host" format="dst-gw-ip=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="destination_number" format="dst-gw-name=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="destination_number" format="dst-number-in=%s" />
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="destination_number" format="dst-number-out=%s" />
|
||||||
|
<param name="Called-Station-Id" variable="destination_number" format="%s"/>
|
||||||
|
<param vendor="Cisco" name="h323-setup-time"/>
|
||||||
</fields>
|
</fields>
|
||||||
<!-- <conditions>
|
<conditions>
|
||||||
<condition>
|
<condition>
|
||||||
<param var="direction" regex="^outbound$"/>
|
<!-- anti="true" will cause any leg that matches to not be logged -->
|
||||||
</condition>
|
<param var="sip_to_host" regex="^8\.8\.8\.8" anti="true"/>
|
||||||
</conditions> -->
|
</condition>
|
||||||
|
</conditions>
|
||||||
</acct_start>
|
</acct_start>
|
||||||
<acct_end>
|
<acct_end>
|
||||||
<connection name="testing">
|
<connection name="testing">
|
||||||
|
@ -129,25 +138,30 @@
|
||||||
<param name="seqfile" value="/var/run/radius.seq"/>
|
<param name="seqfile" value="/var/run/radius.seq"/>
|
||||||
</connection>
|
</connection>
|
||||||
<fields>
|
<fields>
|
||||||
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_host" format="src-gw-ip=%s"/>
|
<param vendor="Cisco" name="h323-call-origin" variable="h323-call-origin" default="answer" format="%s"/>
|
||||||
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" format="src-gw-name=%s"/>
|
|
||||||
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_to_host" format="dst-gw-ip=%s"/>
|
|
||||||
<param vendor="Cisco" name="h323-conf-id" variable_secondary="uuid" variable="originating_leg_uuid" format="%s"/>
|
<param vendor="Cisco" name="h323-conf-id" variable_secondary="uuid" variable="originating_leg_uuid" format="%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="uuid" format="h323-call-id=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_contact_host" format="src-gw-ip=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" variable_secondary="ani" format="src-gw-name=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" variable_secondary="ani" format="src-number-in=%s" />
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" variable_secondary="ani" format="src-number-out=%s" />
|
||||||
|
<param name="Calling-Station-Id" variable="sip_from_user" variable_secondary="ani" format="%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_to_host" format="dst-gw-ip=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_to_user" variable_secondary="dialed_extension" format="dst-gw-name=%s"/>
|
||||||
|
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_to_user" variable_secondary="dialed_extension" format="dst-number-in=%s" />
|
||||||
|
<param name="Called-Station-Id" variable="destination_number" format="%s"/>
|
||||||
<param vendor="Cisco" name="h323-setup-time"/>
|
<param vendor="Cisco" name="h323-setup-time"/>
|
||||||
<param vendor="Cisco" name="h323-connect-time"/>
|
<param vendor="Cisco" name="h323-connect-time"/>
|
||||||
<param vendor="Cisco" name="h323-disconnect-time"/>
|
<param vendor="Cisco" name="h323-disconnect-time"/>
|
||||||
<param vendor="Cisco" name="h323-disconnect-cause"/>
|
<param vendor="Cisco" name="h323-disconnect-cause"/>
|
||||||
<param vendor="Cisco" name="h323-call-origin" variable="h323-call-origin" format="%s" default="answer"/>
|
|
||||||
<param name="Called-Station-Id" variable="sip_to_user" format="%s"/>
|
|
||||||
<param name="Acct-Session-Time" variable="billsec" format="%s"/>
|
<param name="Acct-Session-Time" variable="billsec" format="%s"/>
|
||||||
<param name="Calling-Station-Id" variable="sip_from_user" format="%s"/>
|
<param vendor="Cisco" name="Cisco-AVPair" variable_secondary="progressmsec" variable="progress_mediamsec" format="pdd-time=%s"/>
|
||||||
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_from_user" format="src-number-out=%s"/>
|
<param vendor="Cisco" name="Cisco-AVPair" variable="destination_number" format="dst-number-out=%s"/>
|
||||||
<param vendor="Cisco" name="Cisco-AVPair" variable="sip_to_user" format="dst-number-out=%s"/>
|
|
||||||
</fields>
|
</fields>
|
||||||
<!-- <conditions>
|
<conditions>
|
||||||
<condition>
|
<condition>
|
||||||
<param var="direction" regex="^outbound$"/>
|
<param var="sip_to_host" regex="^8\.8\.8\.8" anti="true"/>
|
||||||
</condition>
|
</condition>
|
||||||
</conditions> -->
|
</conditions>
|
||||||
</acct_end>
|
</acct_end>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
|
@ -330,13 +330,13 @@ SWITCH_DECLARE(switch_status_t) _switch_cache_db_get_db_handle_dsn(switch_cache_
|
||||||
if (!strncasecmp(dsn, "pgsql://", 8)) {
|
if (!strncasecmp(dsn, "pgsql://", 8)) {
|
||||||
type = SCDB_TYPE_PGSQL;
|
type = SCDB_TYPE_PGSQL;
|
||||||
connection_options.pgsql_options.dsn = (char *)(dsn + 8);
|
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;
|
type = SCDB_TYPE_ODBC;
|
||||||
|
|
||||||
if (i) {
|
if (i) {
|
||||||
switch_set_string(tmp, dsn);
|
switch_set_string(tmp, dsn);
|
||||||
} else {
|
} else {
|
||||||
switch_set_string(tmp, dsn+8);
|
switch_set_string(tmp, dsn+7);
|
||||||
}
|
}
|
||||||
|
|
||||||
connection_options.odbc_options.dsn = tmp;
|
connection_options.odbc_options.dsn = tmp;
|
||||||
|
|
|
@ -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);
|
const char *backendlist = switch_channel_get_variable(channel, LIMIT_BACKEND_VARIABLE);
|
||||||
|
|
||||||
if (zstr(backendlist)) {
|
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;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
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;"
|
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"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
|
@ -142,7 +142,7 @@
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
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;"
|
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"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
|
@ -235,7 +235,7 @@
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
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;"
|
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"
|
RuntimeLibrary="2"
|
||||||
UsePrecompiledHeader="2"
|
UsePrecompiledHeader="2"
|
||||||
PrecompiledHeaderThrough="switch.h"
|
PrecompiledHeaderThrough="switch.h"
|
||||||
|
@ -325,7 +325,7 @@
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
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;"
|
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"
|
RuntimeLibrary="2"
|
||||||
UsePrecompiledHeader="2"
|
UsePrecompiledHeader="2"
|
||||||
PrecompiledHeaderThrough="switch.h"
|
PrecompiledHeaderThrough="switch.h"
|
||||||
|
@ -855,11 +855,11 @@
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\src\switch_pgsql.c"
|
RelativePath="..\..\src\switch_pcm.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\src\switch_pcm.c"
|
RelativePath="..\..\src\switch_pgsql.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
|
|
@ -89,7 +89,7 @@
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<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\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<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\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;ENABLE_ZRTP;TPL_NOLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;ENABLE_ZRTP;TPL_NOLIB;STFU_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MinimalRebuild>true</MinimalRebuild>
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
@ -147,7 +147,7 @@ if not exist "$(OutDir)htdocs" xcopy "$(SolutionDir)htdocs\*.*" "$(OutDir)htdocs
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<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\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<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\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;ENABLE_ZRTP;TPL_NOLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;PCRE_STATIC;STATICLIB;ENABLE_ZRTP;TPL_NOLIB;STFU_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MinimalRebuild>true</MinimalRebuild>
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
@ -199,7 +199,7 @@ if not exist "$(OutDir)htdocs" xcopy "$(SolutionDir)htdocs\*.*" "$(OutDir)htdocs
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<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\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<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\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;ENABLE_ZRTP;TPL_NOLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;ENABLE_ZRTP;TPL_NOLIB;STFU_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>switch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>switch.h</PrecompiledHeaderFile>
|
||||||
|
@ -248,7 +248,7 @@ if not exist "$(OutDir)htdocs" xcopy "$(SolutionDir)htdocs\*.*" "$(OutDir)htdocs
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<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\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<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\libzrtp\include;..\..\libs\libzrtp\third_party\bgaes;..\..\libs\libzrtp\third_party\bnlib;..\..\libs\libtpl-1.5\src;..\..\libs\libtpl-1.5\src\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;ENABLE_ZRTP;TPL_NOLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;FREESWITCHCORE_EXPORTS;STATICLIB;CRASH_PROT;PCRE_STATIC;ENABLE_ZRTP;TPL_NOLIB;STFU_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>switch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>switch.h</PrecompiledHeaderFile>
|
||||||
|
@ -836,4 +836,4 @@ if not exist "$(OutDir)htdocs" xcopy "$(SolutionDir)htdocs\*.*" "$(OutDir)htdocs
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
Loading…
Reference in New Issue