From 8bf9133fee5a8144e2cd8e74151e14b2d352f625 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sun, 3 Apr 2011 17:53:06 -0500 Subject: [PATCH 01/29] FS-3224 this is comfort noise. i guess its not comforting, i'll remove it. --- src/mod/applications/mod_dptools/mod_dptools.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index f2da2c5d7d..0f40c8ba33 100755 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -3629,7 +3629,8 @@ static switch_status_t file_string_file_read(switch_file_handle_t *handle, void } context->samples -= *len; - switch_generate_sln_silence((int16_t *) data, *len, 400); + //switch_generate_sln_silence((int16_t *) data, *len, 400); + memset(data, 255, *len *2); status = SWITCH_STATUS_SUCCESS; } else { status = switch_core_file_read(&context->fh, data, len); From 6eba56d2cbea207ce05f57eaf5895123e5ec87de Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sun, 3 Apr 2011 17:55:07 -0500 Subject: [PATCH 02/29] FS-3224 --resolve --- src/mod/applications/mod_dptools/mod_dptools.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index 0f40c8ba33..c51c5422a5 100755 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -3629,7 +3629,6 @@ static switch_status_t file_string_file_read(switch_file_handle_t *handle, void } context->samples -= *len; - //switch_generate_sln_silence((int16_t *) data, *len, 400); memset(data, 255, *len *2); status = SWITCH_STATUS_SUCCESS; } else { From 6fb73a4c319ebe8e5c2f484036ca79e565ba82a2 Mon Sep 17 00:00:00 2001 From: Buklov Boris Date: Mon, 4 Apr 2011 17:56:58 +0400 Subject: [PATCH 03/29] fix and add support multy currency dollar or other --- docs/phrase/phrase_ru.xml | 5 ++- src/mod/say/mod_say_ru/mod_say_ru.c | 68 ++++++++++++++++++----------- src/mod/say/mod_say_ru/mod_say_ru.h | 27 +++++++++++- 3 files changed, 71 insertions(+), 29 deletions(-) diff --git a/docs/phrase/phrase_ru.xml b/docs/phrase/phrase_ru.xml index fdbccddfa4..fb873dd9da 100644 --- a/docs/phrase/phrase_ru.xml +++ b/docs/phrase/phrase_ru.xml @@ -316,6 +316,7 @@ + @@ -326,9 +327,9 @@ - + - + diff --git a/src/mod/say/mod_say_ru/mod_say_ru.c b/src/mod/say/mod_say_ru/mod_say_ru.c index b1bff61205..5e628ccf47 100644 --- a/src/mod/say/mod_say_ru/mod_say_ru.c +++ b/src/mod/say/mod_say_ru/mod_say_ru.c @@ -58,6 +58,10 @@ struct say_t matrix[7][8] = { {m_00, m_01, m_02, m_03, m_04, m_05, m_06, m_07}, {m_60, m_61, m_62, m_63, m_64, m_65, m_66, m_67} }; + +struct say_cur_t matrix_currency[3] = {c_0, c_1, c_2}; + + SWITCH_MODULE_LOAD_FUNCTION(mod_say_ru_load); SWITCH_MODULE_DEFINITION(mod_say_ru, mod_say_ru_load, NULL, NULL); @@ -253,8 +257,7 @@ static switch_status_t ru_say_money(switch_say_file_handle_t *sh, char *tosay, s int iruble = 0; int ikopecks = 0; int ikopeck = 0; - - //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, " ru_say_money %s\n", tosay); +// switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, " ru_say_money %s say_opt->currency=%d\n", tosay,say_opt->currency); if (strlen(tosay) > 15 || !(tosay = switch_strip_nonnumerics(tosay, sbuf, sizeof(sbuf)-1))) { //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Parse Error!\n"); @@ -278,40 +281,48 @@ static switch_status_t ru_say_money(switch_say_file_handle_t *sh, char *tosay, s rubles++; } - ru_say_count(sh, rubles, male, nominativus); + + ru_say_count(sh, rubles, matrix_currency[say_opt->currency].first_gender,matrix_currency[say_opt->currency].first_cases); if (rubles) { irubles = atoi(rubles) % 100; iruble = atoi(rubles) % 10; } - - if (irubles == 1 || (irubles > 20 && iruble == 1)) { /* рубль */ - switch_say_file(sh, "currency/ruble"); - } else if ((irubles > 1 && irubles < 5) || (irubles > 20 && iruble > 1 && iruble < 5)) { /*рубля */ - switch_say_file(sh, "currency/ruble-a"); - } else { /*рублей */ - switch_say_file(sh, "currency/rubles"); + if (iruble<5) { + if ((irubles>10)&&(irubles<15)) { + switch_say_file(sh, "currency/%s",matrix_currency->first[5]); + } + else { + switch_say_file(sh, "currency/%s",matrix_currency->first[iruble]); + } } - + else { + switch_say_file(sh, "currency/%s",matrix_currency->first[5]); + } + + /* Say kopecks */ - //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, " %s\n", kopecks); - ru_say_count(sh, kopecks, female, nominativus); + ru_say_count(sh, kopecks, matrix_currency[say_opt->currency].second_gender,matrix_currency[say_opt->currency].second_cases); if (kopecks) { ikopecks = atoi(kopecks) % 100; ikopeck = atoi(kopecks) % 10; } - if (ikopecks == 1 || (ikopecks > 20 && ikopeck == 1)) { - /* копейка */ - switch_say_file(sh, "currency/kopeck"); - } else if ((ikopecks > 1 && ikopecks < 5) || (ikopecks > 20 && ikopeck > 1 && ikopeck < 5)) { - /* копейки */ - switch_say_file(sh, "currency/kopeck-i"); - } else { - /* копеек */ - switch_say_file(sh, "currency/kopecks"); + if (ikopeck<5) { + if ((ikopecks>10)&&(ikopecks<15)) { + switch_say_file(sh, "currency/%s",matrix_currency->second[5]); + } + else { + switch_say_file(sh, "currency/%s",matrix_currency->second[ikopeck]); + } } + else { + switch_say_file(sh, "currency/%s",matrix_currency->second[5]); + } + + + return SWITCH_STATUS_SUCCESS; } @@ -628,7 +639,9 @@ static switch_status_t run_callback(switch_new_say_callback_ru_t say_cb, char *t const char *gender=NULL; const char *currency=NULL; say_opt_t say_opt; - + say_opt.cases=0; + say_opt.gender=0; + say_opt.currency=0; if (session) { switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_get_variables(channel, &var_event); @@ -692,12 +705,15 @@ static switch_status_t run_callback(switch_new_say_callback_ru_t say_cb, char *t } if (currency) { - //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "ru_say!!! %s!\n", currency); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "ru_say!!! %s!\n", currency); - if (strcmp(currency,"rubl") || strcmp(currency,"рубль")) { + if ((strcmp(currency,"ruble")==0) || (strcmp(currency,"рубль")==0)) { say_opt.currency=(currency_t)0; +// switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "rul!!! \n"); + } - if (strcmp(gender,"dollar") || strcmp(gender,"доллар")) { + if ((strcmp(currency,"dollar")==0) || (strcmp(currency,"доллар")==0)) { +// switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "dollar!!! !\n"); say_opt.currency=(currency_t)1; } } diff --git a/src/mod/say/mod_say_ru/mod_say_ru.h b/src/mod/say/mod_say_ru/mod_say_ru.h index d7769ad246..92ed89a1fb 100644 --- a/src/mod/say/mod_say_ru/mod_say_ru.h +++ b/src/mod/say/mod_say_ru/mod_say_ru.h @@ -49,10 +49,12 @@ typedef enum { typedef enum { ruble, - dollar + dollar, + euro } currency_t; + typedef struct { say_gender_t gender; cases_t cases; @@ -66,6 +68,29 @@ struct say_t { char *million[14]; int all; }; +struct say_cur_t { + char *first[6]; + say_gender_t first_gender; + cases_t first_cases; + char *second[6]; + say_gender_t second_gender; + cases_t second_cases; + +}; + +// описываем как произносить валяюты от 0 до 5 дальше идёт номер рода и падежа (с нуля) +//рубли +#define c_0 {{"rubles","ruble","ruble-a","ruble-a","ruble-a","rubles"},male,nominativus,\ + {"kopecks","kopeck","kopeck-i","kopeck-i","kopeck-i","kopecks"},female,nominativus} + +#define c_1 {{"dollars","dollar","dollara","dollara","dollara","dollars"},male,nominativus,\ + {"centov","cent","centa","centa","centa","centov"},male,nominativus} + +#define c_2 {{"rubles","ruble","ruble-a","ruble-a","ruble-a","rubles"},male,nominativus,\ + {"kopecks","kopeck","kopeck-i","kopeck-i","kopeck-i","kopecks"},female,nominativus} + + + typedef switch_status_t (*switch_new_say_callback_ru_t) (switch_say_file_handle_t *sh, char *tosay, switch_say_args_t *say_args,say_opt_t *say_opt); From 7eae7f375b31d928da9ffee6cd55a30eb90aaa03 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 4 Apr 2011 11:39:39 -0500 Subject: [PATCH 04/29] FS-2877 After further review I can concede the point that we should always say partial considering how we do things. With this commit we should at least be sending separate partial updates for each existing dialog to everyone with a subscription. If we need to introduce more data, consolidate them etc. We need to do it in small chunks and keep things sane. --- src/mod/endpoints/mod_sofia/sofia_presence.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index a9a762e00e..cbc45024e1 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -1506,9 +1506,9 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char * stream.write_function(&stream, "\n" "\n", - version, - zstr(uuid) ? "partial" : "full", clean_id); + "version=\"%s\" state=\"partial\" entity=\"%s\">\n", version, clean_id); + + } //if (strcasecmp(event_status, "Registered")) { From 4b706dac51aec34deabca8a938b977d6d5265405 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 4 Apr 2011 11:55:05 -0500 Subject: [PATCH 05/29] FS-3227 --resolve this looks like sane changes. My only complaint was the formatting. Watch for whitespace indentation by looking at the code in emacs or vi where it should be tabed properly. --- src/mod/endpoints/mod_sofia/mod_sofia.c | 3 +++ src/mod/endpoints/mod_sofia/sofia.c | 11 +++++++++++ src/mod/endpoints/mod_sofia/sofia_glue.c | 2 ++ src/switch_ivr_bridge.c | 6 ++++-- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 9af3963dee..bcc8f75692 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -1655,6 +1655,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi const char *ip = NULL, *port = NULL; switch_channel_set_flag(channel, CF_PROXY_MODE); + if (tech_pvt->rm_encoding) { + tech_pvt->rm_encoding = NULL; + } sofia_glue_tech_set_local_sdp(tech_pvt, NULL, SWITCH_FALSE); if ((uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE)) diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index b9aec74563..582b06d933 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -5710,6 +5710,11 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t switch_core_event_hook_add_state_change(a_session, xfer_hanguphook); switch_channel_set_variable(a_channel, "att_xfer_kill_uuid", switch_core_session_get_uuid(b_session)); + if (profile->media_options & MEDIA_OPT_BYPASS_AFTER_ATT_XFER) { + switch_channel_set_flag(a_channel, CF_BYPASS_MEDIA_AFTER_BRIDGE); + } + + if ((tmp = switch_channel_get_hold_music(a_channel))) { moh = tmp; } @@ -5769,6 +5774,12 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t switch_core_session_rwunlock(tmp); } + if ((profile->media_options & MEDIA_OPT_BYPASS_AFTER_ATT_XFER) && (tmp = switch_core_session_locate(br_a))) { + switch_channel_t *tchannel = switch_core_session_get_channel(tmp); + switch_channel_set_flag(tchannel, CF_BYPASS_MEDIA_AFTER_BRIDGE); + switch_core_session_rwunlock(tmp); + } + switch_ivr_uuid_bridge(br_b, br_a); switch_channel_set_variable(channel_b, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "ATTENDED_TRANSFER"); nua_notify(tech_pvt->nh, NUTAG_NEWSUB(1), SIPTAG_CONTENT_TYPE_STR("message/sipfrag;version=2.0"), diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 701b730fcc..66bf8ea644 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -729,6 +729,8 @@ void sofia_glue_tech_prepare_codecs(private_object_t *tech_pvt) return; } + tech_pvt->payload_space = 0; + switch_assert(tech_pvt->session != NULL); if ((abs = switch_channel_get_variable(tech_pvt->channel, "absolute_codec_string"))) { diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c index dbe3b811fe..f1a6bdba22 100644 --- a/src/switch_ivr_bridge.c +++ b/src/switch_ivr_bridge.c @@ -357,11 +357,11 @@ static void *audio_bridge_thread(switch_thread_t *thread, void *obj) } - if ((bypass_media_after_bridge || switch_channel_test_flag(chan_a, CF_BYPASS_MEDIA_AFTER_BRIDGE)) && switch_channel_test_flag(chan_a, CF_ANSWERED) + if ((bypass_media_after_bridge || switch_channel_test_flag(chan_b, CF_BYPASS_MEDIA_AFTER_BRIDGE)) && switch_channel_test_flag(chan_a, CF_ANSWERED) && switch_channel_test_flag(chan_b, CF_ANSWERED)) { switch_ivr_nomedia(switch_core_session_get_uuid(session_a), SMF_REBRIDGE); bypass_media_after_bridge = 0; - switch_channel_clear_flag(chan_a, CF_BYPASS_MEDIA_AFTER_BRIDGE); + switch_channel_clear_flag(chan_b, CF_BYPASS_MEDIA_AFTER_BRIDGE); goto end_of_bridge_loop; } } @@ -1367,6 +1367,8 @@ static void cleanup_proxy_mode_a(switch_core_session_t *session) const char *sbv = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE); if (!zstr(sbv) && (sbsession = switch_core_session_locate(sbv))) { switch_channel_t *sbchannel = switch_core_session_get_channel(sbsession); + /* Clear this now, otherwise will cause the one we're interested in to hang up too...*/ + switch_channel_set_variable(sbchannel, SWITCH_SIGNAL_BRIDGE_VARIABLE, NULL); switch_channel_hangup(sbchannel, SWITCH_CAUSE_ATTENDED_TRANSFER); switch_core_session_rwunlock(sbsession); } From 07b9186da6041d4ab1ff166f50275f2cb7a49b8d Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 4 Apr 2011 14:14:38 -0500 Subject: [PATCH 06/29] FS-3226 --resolve SO, If the RFC told you to jump off a cliff......? --- src/mod/endpoints/mod_sofia/sofia.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 582b06d933..2bf27d5ba8 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -76,14 +76,15 @@ void sofia_handle_sip_r_notify(switch_core_session_t *session, int status, char const *phrase, nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, sofia_private_t *sofia_private, sip_t const *sip, tagi_t tags[]) { -#if 0 + if (status >= 300 && sip && sip->sip_call_id) { char *sql; sql = switch_mprintf("delete from sip_subscriptions where call_id='%q'", sip->sip_call_id->i_id); switch_assert(sql != NULL); sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE); + nua_handle_destroy(nh); } -#endif + } #define url_set_chanvars(session, url, varprefix) _url_set_chanvars(session, url, #varprefix "_user", #varprefix "_host", #varprefix "_port", #varprefix "_uri", #varprefix "_params") From b42fdd1cf3bc707a991c33f5edad09594f528bd6 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 4 Apr 2011 16:51:30 -0500 Subject: [PATCH 07/29] fix regression from 27c6d1111c8eb9929cedf707632b33405019e03a --- src/switch_channel.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/switch_channel.c b/src/switch_channel.c index 2dd7d987da..6830bd0bc6 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -2661,11 +2661,10 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_ switch_mutex_unlock(channel->profile_mutex); } - if (switch_channel_execute_on(channel, SWITCH_CHANNEL_EXECUTE_ON_PRE_ANSWER_VARIABLE) != SWITCH_STATUS_SUCCESS) { - if (!switch_channel_test_flag(channel, CF_EARLY_MEDIA)) { - switch_channel_execute_on(channel, SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE); - } - } + switch_channel_execute_on(channel, SWITCH_CHANNEL_EXECUTE_ON_PRE_ANSWER_VARIABLE); + switch_channel_execute_on(channel, SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE); + + if ((var = switch_channel_get_variable(channel, SWITCH_PASSTHRU_PTIME_MISMATCH_VARIABLE))) { switch_channel_set_flag(channel, CF_PASSTHRU_PTIME_MISMATCH); @@ -2861,10 +2860,10 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_answered(switch_chan channel->name); - if (switch_channel_execute_on(channel, SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE) != SWITCH_STATUS_SUCCESS) { - if (!switch_channel_test_flag(channel, CF_EARLY_MEDIA)) { - switch_channel_execute_on(channel, SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE); - } + switch_channel_execute_on(channel, SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE); + + if (!switch_channel_test_flag(channel, CF_EARLY_MEDIA)) { + switch_channel_execute_on(channel, SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE); } if ((var = switch_channel_get_variable(channel, SWITCH_CHANNEL_API_ON_ANSWER_VARIABLE)) && !zstr(var)) { From 6a70fa4c4dc85c0e3a88013a7b5ae05a4a5a323e Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 4 Apr 2011 17:43:05 -0500 Subject: [PATCH 08/29] fix another regression from 27c6d1111c8eb9929cedf707632b33405019e03a this probably broke the mad boss extension --- src/switch_channel.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/switch_channel.c b/src/switch_channel.c index 6830bd0bc6..bc8daabbc6 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -2771,17 +2771,27 @@ SWITCH_DECLARE(switch_status_t) switch_channel_execute_on(switch_channel_t *chan if (!strncasecmp(var, variable_prefix, strlen(variable_prefix))) { char *arg = NULL; + char *p; + int bg = 0; x++; app = switch_core_session_strdup(channel->session, val); - - if (strstr(app, "::")) { + + for(p = app; p && *p; p++) { + if (*p == ' ') { + *p++ = '\0'; + arg = p; + break; + } else if (*p == ':' && (*(p+1) == ':')) { + bg++; + break; + } + } + + + if (bg) { switch_core_session_execute_application_async(channel->session, app, arg); } else { - if ((arg = strchr(app, ' '))) { - *arg++ = '\0'; - } - switch_core_session_execute_application(channel->session, app, arg); } } From 38c3a67a7eb185073310710e4e82ebdd2833dc8a Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 4 Apr 2011 18:50:46 -0500 Subject: [PATCH 09/29] FS-3229 --resolve --- src/include/switch_types.h | 1 + .../applications/mod_dptools/mod_dptools.c | 15 ++++++--- src/switch_ivr_async.c | 32 ++++++++++--------- 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 2ab4a18b85..988d2da641 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -136,6 +136,7 @@ SWITCH_BEGIN_EXTERN_C #define SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE "execute_on_media" #define SWITCH_CHANNEL_API_ON_ANSWER_VARIABLE "api_on_answer" #define SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE "execute_on_ring" +#define SWITCH_CHANNEL_EXECUTE_ON_TONE_DETECT_VARIABLE "execute_on_tone_detect" #define SWITCH_CALL_TIMEOUT_VARIABLE "call_timeout" #define SWITCH_HOLDING_UUID_VARIABLE "holding_uuid" #define SWITCH_SOFT_HOLDING_UUID_VARIABLE "soft_holding_uuid" diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index c51c5422a5..5d51ffdb60 100755 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -1552,7 +1552,8 @@ SWITCH_STANDARD_APP(tone_detect_session_function) int argc; char *mydata = NULL; time_t to = 0; - int hits = 1; + int hits = 0; + const char *hp = NULL; if (zstr(data) || !(mydata = switch_core_session_strdup(session, data))) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "INVALID ARGS!\n"); @@ -1582,10 +1583,16 @@ SWITCH_STANDARD_APP(tone_detect_session_function) } } - if (argv[6]) { - hits = atoi(argv[6]); + if (argv[4] && argv[5]) { + hp = argv[6]; + } else if (argv[4] && !argv[6]) { + hp = argv[4]; + } + + if (hp) { + hits = atoi(hp); if (hits < 0) { - hits = 1; + hits = 0; } } diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 3afbfb6397..9fb2eea95c 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -2392,7 +2392,6 @@ static switch_status_t tone_on_dtmf(switch_core_session_t *session, const switch { switch_channel_t *channel = switch_core_session_get_channel(session); switch_tone_container_t *cont = switch_channel_get_private(channel, "_tone_detect_"); - switch_event_t *event; int i; if (!cont || !cont->detect_fax || dtmf->digit != 'f') { @@ -2403,13 +2402,10 @@ static switch_status_t tone_on_dtmf(switch_core_session_t *session, const switch if (cont->list[i].callback) { cont->list[i].callback(cont->session, cont->list[i].app, cont->list[i].data); - } else if (cont->list[i].app) { - if (switch_event_create(&event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "execute"); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-name", cont->list[i].app); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-arg", cont->list[i].data); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "lead-frames", "%d", 5); - switch_core_session_queue_private_event(cont->session, &event, SWITCH_FALSE); + } else { + switch_channel_execute_on(switch_core_session_get_channel(cont->session), SWITCH_CHANNEL_EXECUTE_ON_TONE_DETECT_VARIABLE); + if (cont->list[i].app) { + switch_core_session_execute_application_async(cont->session, cont->list[i].app, cont->list[i].data); } } @@ -2491,13 +2487,10 @@ static switch_bool_t tone_detect_callback(switch_media_bug_t *bug, void *user_da cont->list[i].sleep = 0; cont->list[i].expires = 0; } - } else if (cont->list[i].app) { - if (switch_event_create(&event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "execute"); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-name", cont->list[i].app); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-arg", cont->list[i].data); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "lead-frames", "%d", 5); - switch_core_session_queue_private_event(cont->session, &event, SWITCH_FALSE); + } else { + switch_channel_execute_on(switch_core_session_get_channel(cont->session), SWITCH_CHANNEL_EXECUTE_ON_TONE_DETECT_VARIABLE); + if (cont->list[i].app) { + switch_core_session_execute_application_async(cont->session, cont->list[i].app, cont->list[i].data); } } @@ -2605,6 +2598,15 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_tone_detect_session(switch_core_sessi return SWITCH_STATUS_MEMERR; } + if ((var = switch_channel_get_variable(channel, "tone_detect_hits"))) { + int tmp = atoi(var); + if (tmp > 0) { + hits = tmp; + } + } + + if (!hits) hits = 1; + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Adding tone spec %s index %d hits %d\n", tone_spec, cont->index, hits); i = 0; From ee1a840cefe9e991901238296249aa3ee69ea2d5 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Mon, 4 Apr 2011 20:55:56 -0500 Subject: [PATCH 10/29] FS-3228 --resolve --- src/mod/applications/mod_enum/mod_enum.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mod/applications/mod_enum/mod_enum.c b/src/mod/applications/mod_enum/mod_enum.c index d1bb286857..043dbab16f 100644 --- a/src/mod/applications/mod_enum/mod_enum.c +++ b/src/mod/applications/mod_enum/mod_enum.c @@ -164,6 +164,7 @@ static switch_status_t load_config(void) if(buf[data_sz - 1] != 0) { buf[data_sz] = 0; } + switch_replace_char(buf, ' ', 0, SWITCH_FALSE); /* only use the first entry ex "192.168.1.1 192.168.1.2" */ globals.server = buf; } } From e8f10ea3624da4fd4ab445ea365e3161e094181b Mon Sep 17 00:00:00 2001 From: Michael S Collins Date: Mon, 4 Apr 2011 21:53:11 -0700 Subject: [PATCH 11/29] Add pa devlist to portaudio webapi --- src/mod/endpoints/mod_portaudio/mod_portaudio.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mod/endpoints/mod_portaudio/mod_portaudio.c b/src/mod/endpoints/mod_portaudio/mod_portaudio.c index c710fc352a..8564a771e5 100644 --- a/src/mod/endpoints/mod_portaudio/mod_portaudio.c +++ b/src/mod/endpoints/mod_portaudio/mod_portaudio.c @@ -2415,7 +2415,7 @@ SWITCH_STANDARD_API(pa_cmd) } else if (!strcmp(action, "call")) { switch_snprintf(cmd_buf, sizeof(cmd_buf), "call %s", wcmd); cmd = cmd_buf; - } else if (!strcmp(action, "hangup") || !strcmp(action, "list") || !strcmp(action, "answer")) { + } else if (!strcmp(action, "hangup") || !strcmp(action, "list") || !strcmp(action, "devlist") || !strcmp(action, "answer")) { cmd = action; } } @@ -2543,6 +2543,7 @@ SWITCH_STANDARD_API(pa_cmd) " " " " " " + "
" " " " " " " From 9b099f474b8a677095d301a467c6f5446fde3512 Mon Sep 17 00:00:00 2001 From: Michal Bielicki - cypromis Date: Tue, 5 Apr 2011 13:05:22 +0200 Subject: [PATCH 12/29] Added copyright headers for sponsored work --- .../mod_cdr_pg_csv/mod_cdr_pg_csv.c | 2 ++ .../mod_cdr_sqlite/mod_cdr_sqlite.c | 2 ++ .../event_handlers/mod_snmp/FREESWITCH-MIB | 33 +++++++++++++++++++ src/mod/event_handlers/mod_snmp/mod_snmp.c | 2 ++ src/mod/event_handlers/mod_snmp/subagent.c | 2 ++ src/mod/event_handlers/mod_snmp/subagent.h | 33 +++++++++++++++++++ 6 files changed, 74 insertions(+) diff --git a/src/mod/event_handlers/mod_cdr_pg_csv/mod_cdr_pg_csv.c b/src/mod/event_handlers/mod_cdr_pg_csv/mod_cdr_pg_csv.c index 51194f4b14..0b96db82a1 100644 --- a/src/mod/event_handlers/mod_cdr_pg_csv/mod_cdr_pg_csv.c +++ b/src/mod/event_handlers/mod_cdr_pg_csv/mod_cdr_pg_csv.c @@ -20,6 +20,8 @@ * Anthony Minessale II * Portions created by the Initial Developer are Copyright (C) * the Initial Developer. All Rights Reserved. + * Portions created by Seventh Signal Ltd. & Co. KG and its employees are Copyright (C) + * Seventh Signal Ltd. & Co. KG, All Rights Reserverd. * * Contributor(s): * Michal Bielicki diff --git a/src/mod/event_handlers/mod_cdr_sqlite/mod_cdr_sqlite.c b/src/mod/event_handlers/mod_cdr_sqlite/mod_cdr_sqlite.c index 9a286d454f..abdb8101f6 100644 --- a/src/mod/event_handlers/mod_cdr_sqlite/mod_cdr_sqlite.c +++ b/src/mod/event_handlers/mod_cdr_sqlite/mod_cdr_sqlite.c @@ -20,6 +20,8 @@ * Anthony Minessale II * Portions created by the Initial Developer are Copyright (C) * the Initial Developer. All Rights Reserved. + * Portions created by Seventh Signal Ltd. & Co. KG and its employees are Copyright (C) + * Seventh Signal Ltd. & Co. KG, All Rights Reserverd. * * Contributor(s): * Daniel Swarbrick diff --git a/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB b/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB index 84485269f9..e2fc1998fd 100644 --- a/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB +++ b/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB @@ -1,3 +1,36 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2005-2011, Anthony Minessale II + * + * Version: MPL 1.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * + * The Initial Developer of the Original Code is + * Anthony Minessale II + * Portions created by the Initial Developer are Copyright (C) + * the Initial Developer. All Rights Reserved. + * Portions created by Seventh Signal Ltd. & Co. KG and its employees are Copyright (C) + * Seventh Signal Ltd. & Co. KG, All Rights Reserverd. + * + * Contributor(s): + * Daniel Swarbrick + * Stefan Knoblich + * + * MIB Definition for mod_snmp + * + */ + FREESWITCH-MIB DEFINITIONS ::= BEGIN IMPORTS diff --git a/src/mod/event_handlers/mod_snmp/mod_snmp.c b/src/mod/event_handlers/mod_snmp/mod_snmp.c index d415d4fe1c..059646bc19 100644 --- a/src/mod/event_handlers/mod_snmp/mod_snmp.c +++ b/src/mod/event_handlers/mod_snmp/mod_snmp.c @@ -20,6 +20,8 @@ * Anthony Minessale II * Portions created by the Initial Developer are Copyright (C) * the Initial Developer. All Rights Reserved. + * Portions created by Seventh Signal Ltd. & Co. KG and its employees are Copyright (C) + * Seventh Signal Ltd. & Co. KG, All Rights Reserverd. * * Contributor(s): * Daniel Swarbrick diff --git a/src/mod/event_handlers/mod_snmp/subagent.c b/src/mod/event_handlers/mod_snmp/subagent.c index 871fb5ad75..8d58667687 100644 --- a/src/mod/event_handlers/mod_snmp/subagent.c +++ b/src/mod/event_handlers/mod_snmp/subagent.c @@ -20,6 +20,8 @@ * Anthony Minessale II * Portions created by the Initial Developer are Copyright (C) * the Initial Developer. All Rights Reserved. + * Portions created by Seventh Signal Ltd. & Co. KG and its employees are Copyright (C) + * Seventh Signal Ltd. & Co. KG, All Rights Reserverd. * * Contributor(s): * Daniel Swarbrick diff --git a/src/mod/event_handlers/mod_snmp/subagent.h b/src/mod/event_handlers/mod_snmp/subagent.h index 5da87a6c4e..ba3c523d49 100644 --- a/src/mod/event_handlers/mod_snmp/subagent.h +++ b/src/mod/event_handlers/mod_snmp/subagent.h @@ -1,3 +1,36 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2005-2011, Anthony Minessale II + * + * Version: MPL 1.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * + * The Initial Developer of the Original Code is + * Anthony Minessale II + * Portions created by the Initial Developer are Copyright (C) + * the Initial Developer. All Rights Reserved. + * Portions created by Seventh Signal Ltd. & Co. KG and its employees are Copyright (C) + * Seventh Signal Ltd. & Co. KG, All Rights Reserverd. + * + * Contributor(s): + * Daniel Swarbrick + * Stefan Knoblich + * + * subagent.h -- SNMP Agent Definitions + * + */ + #ifndef subagent_H #define subagent_H From 31cebd4fb336806d6fe0a8434c4d22fd792df99c Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 5 Apr 2011 10:35:52 -0500 Subject: [PATCH 13/29] --resolve FS-3219 --- .../mod_conference/mod_conference.c | 144 ++++++++++++++++-- 1 file changed, 132 insertions(+), 12 deletions(-) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 7de7f4fdea..16451b66a9 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -156,7 +156,9 @@ typedef enum { CFLAG_VID_FLOOR = (1 << 8), CFLAG_WASTE_BANDWIDTH = (1 << 9), CFLAG_OUTCALL = (1 << 10), - CFLAG_INHASH = (1 << 11) + CFLAG_INHASH = (1 << 11), + CFLAG_EXIT_SOUND = (1 << 12), + CFLAG_ENTER_SOUND = (1 << 13) } conf_flag_t; typedef enum { @@ -717,12 +719,14 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe if (!switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ) && !zstr(conference->enter_sound)) { const char * enter_sound = switch_channel_get_variable(channel, "conference_enter_sound"); - if (!zstr(enter_sound)) { - conference_play_file(conference, (char *)enter_sound, CONF_DEFAULT_LEADIN, - switch_core_session_get_channel(member->session), !switch_test_flag(conference, CFLAG_WAIT_MOD) ? 0 : 1); - } else { - conference_play_file(conference, conference->enter_sound, CONF_DEFAULT_LEADIN, switch_core_session_get_channel(member->session), - !switch_test_flag(conference, CFLAG_WAIT_MOD) ? 0 : 1); + if (switch_test_flag(conference, CFLAG_ENTER_SOUND)) { + if (!zstr(enter_sound)) { + conference_play_file(conference, (char *)enter_sound, CONF_DEFAULT_LEADIN, + switch_core_session_get_channel(member->session), !switch_test_flag(conference, CFLAG_WAIT_MOD) ? 0 : 1); + } else { + conference_play_file(conference, conference->enter_sound, CONF_DEFAULT_LEADIN, switch_core_session_get_channel(member->session), + !switch_test_flag(conference, CFLAG_WAIT_MOD) ? 0 : 1); + } } } } @@ -906,7 +910,7 @@ static switch_status_t conference_del_member(conference_obj_t *conference, confe || (switch_test_flag(conference, CFLAG_DYNAMIC) && conference->count == 0)) { switch_set_flag(conference, CFLAG_DESTRUCT); } else { - if (conference->exit_sound) { + if (conference->exit_sound && switch_test_flag(conference, CFLAG_EXIT_SOUND)) { conference_play_file(conference, conference->exit_sound, 0, switch_core_session_get_channel(member->session), 0); } if (conference->count == 1 && conference->alone_sound && !switch_test_flag(conference, CFLAG_WAIT_MOD)) { @@ -4023,7 +4027,7 @@ static void conference_xlist(conference_obj_t *conference, switch_xml_t x_confer switch_snprintf(i, sizeof(i), "%u", conference->rate); switch_xml_set_attr_d(x_conference, "rate", ival); switch_xml_set_attr_d(x_conference, "uuid", conference->uuid_str); - + if (switch_test_flag(conference, CFLAG_LOCKED)) { switch_xml_set_attr_d(x_conference, "locked", "true"); } @@ -4056,6 +4060,14 @@ static void conference_xlist(conference_obj_t *conference, switch_xml_t x_confer switch_xml_set_attr_d(x_conference, "dynamic", "true"); } + if (switch_test_flag(conference, CFLAG_EXIT_SOUND)) { + switch_xml_set_attr_d(x_conference, "exit_sound", "true"); + } + + if (switch_test_flag(conference, CFLAG_ENTER_SOUND)) { + switch_xml_set_attr_d(x_conference, "enter_sound", "true"); + } + if (conference->record_count > 0) { switch_xml_set_attr_d(x_conference, "recording", "true"); } @@ -4516,6 +4528,107 @@ static switch_status_t conf_api_sub_unlock(conference_obj_t *conference, switch_ return 0; } +static switch_status_t conf_api_sub_exit_sound(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv) +{ + switch_event_t *event; + + switch_assert(conference != NULL); + switch_assert(stream != NULL); + + if (argc <= 2) { + stream->write_function(stream, "Not enough args\n"); + return SWITCH_STATUS_GENERR; + } + + if ( !strcasecmp(argv[2], "on") ) { + switch_set_flag_locked(conference, CFLAG_EXIT_SOUND); + stream->write_function(stream, "OK %s exit sounds on (%s)\n", argv[0], conference->exit_sound); + if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { + conference_add_event_data(conference, event); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "exit-sounds-on"); + switch_event_fire(&event); + } + } else if ( !strcasecmp(argv[2], "off") || !strcasecmp(argv[2], "none") ) { + switch_clear_flag_locked(conference, CFLAG_EXIT_SOUND); + stream->write_function(stream, "OK %s exit sounds off (%s)\n", argv[0], conference->exit_sound); + if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { + conference_add_event_data(conference, event); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "exit-sounds-off"); + switch_event_fire(&event); + } + } else if ( !strcasecmp(argv[2], "file") ) { + if (! argv[3]) { + stream->write_function(stream, "No filename specified\n"); + } else { + /* TODO: if possible, verify file exists before setting it */ + stream->write_function(stream,"Old exit sound: [%s]\n", conference->exit_sound); + conference->exit_sound = switch_core_strdup(conference->pool, argv[3]); + stream->write_function(stream, "OK %s exit sound file set to %s\n", argv[0], conference->exit_sound); + if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { + conference_add_event_data(conference, event); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "exit-sound-file-changed"); + switch_event_fire(&event); + } + } + } else { + stream->write_function(stream, "Bad args\n"); + return SWITCH_STATUS_GENERR; + } + + return 0; +} + + +static switch_status_t conf_api_sub_enter_sound(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv) +{ + switch_event_t *event; + + switch_assert(conference != NULL); + switch_assert(stream != NULL); + + if (argc <= 2) { + stream->write_function(stream, "Not enough args\n"); + return SWITCH_STATUS_GENERR; + } + + if ( !strcasecmp(argv[2], "on") ) { + switch_set_flag_locked(conference, CFLAG_ENTER_SOUND); + stream->write_function(stream, "OK %s enter sounds on (%s)\n", argv[0], conference->enter_sound); + if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { + conference_add_event_data(conference, event); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "enter-sounds-on"); + switch_event_fire(&event); + } + } else if ( !strcasecmp(argv[2], "off") || !strcasecmp(argv[2], "none") ) { + switch_clear_flag_locked(conference, CFLAG_ENTER_SOUND); + stream->write_function(stream, "OK %s enter sounds off (%s)\n", argv[0], conference->enter_sound); + if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { + conference_add_event_data(conference, event); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "enter-sounds-off"); + switch_event_fire(&event); + } + } else if ( !strcasecmp(argv[2], "file") ) { + if (! argv[3]) { + stream->write_function(stream, "No filename specified\n"); + } else { + /* TODO: verify file exists before setting it */ + conference->enter_sound = switch_core_strdup(conference->pool, argv[3]); + stream->write_function(stream, "OK %s enter sound file set to %s\n", argv[0], conference->enter_sound); + if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { + conference_add_event_data(conference, event); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "enter-sound-file-changed"); + switch_event_fire(&event); + } + } + } else { + stream->write_function(stream, "Bad args\n"); + return SWITCH_STATUS_GENERR; + } + + return 0; +} + + static switch_status_t conf_api_sub_dial(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv) { switch_call_cause_t cause; @@ -4720,7 +4833,9 @@ typedef enum { CONF_API_COMMAND_BGDIAL, CONF_API_COMMAND_TRANSFER, CONF_API_COMMAND_RECORD, - CONF_API_COMMAND_NORECORD + CONF_API_COMMAND_NORECORD, + CONF_API_COMMAND_EXIT_SOUND, + CONF_API_COMMAND_ENTER_SOUND, } api_command_type_t; /* API Interface Function sub-commands */ @@ -4750,6 +4865,8 @@ static api_command_t conf_api_sub_commands[] = { {"transfer", (void_fn_t) & conf_api_sub_transfer, CONF_API_SUB_ARGS_SPLIT, "transfer", " [...]"}, {"record", (void_fn_t) & conf_api_sub_record, CONF_API_SUB_ARGS_SPLIT, "record", ""}, {"norecord", (void_fn_t) & conf_api_sub_norecord, CONF_API_SUB_ARGS_SPLIT, "norecord", "<[filename|all]>"}, + {"exit_sound", (void_fn_t) & conf_api_sub_exit_sound, CONF_API_SUB_ARGS_SPLIT, "exit_sound", "on|off|none|file "}, + {"enter_sound", (void_fn_t) & conf_api_sub_enter_sound, CONF_API_SUB_ARGS_SPLIT, "enter_sound", "on|off|none|file "}, {"pin", (void_fn_t) & conf_api_sub_pin, CONF_API_SUB_ARGS_SPLIT, "pin", ""}, {"nopin", (void_fn_t) & conf_api_sub_pin, CONF_API_SUB_ARGS_SPLIT, "nopin", ""}, }; @@ -5330,7 +5447,7 @@ static void set_cflags(const char *flags, uint32_t *f) } else if (!strcasecmp(argv[i], "waste-bandwidth")) { *f |= CFLAG_WASTE_BANDWIDTH; } - } + } free(dup); } @@ -6620,7 +6737,10 @@ static conference_obj_t *conference_new(char *name, conf_xml_cfg_t cfg, switch_c switch_uuid_format(uuid_str, &uuid); conference->uuid_str = switch_core_strdup(conference->pool, uuid_str); - + /* Set enter sound and exit sound flags so that default is on */ + switch_set_flag(conference, CFLAG_ENTER_SOUND); + switch_set_flag(conference, CFLAG_EXIT_SOUND); + /* Activate the conference mutex for exclusivity */ switch_mutex_init(&conference->mutex, SWITCH_MUTEX_NESTED, conference->pool); switch_mutex_init(&conference->flag_mutex, SWITCH_MUTEX_NESTED, conference->pool); From 0632d22cc887506d2ff46933412b707d382ebb19 Mon Sep 17 00:00:00 2001 From: Daniel Swarbrick Date: Tue, 5 Apr 2011 23:02:50 +0200 Subject: [PATCH 14/29] SNMP MIBs have their own comment style --- .../event_handlers/mod_snmp/FREESWITCH-MIB | 62 +++++++++---------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB b/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB index e2fc1998fd..68d83fe433 100644 --- a/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB +++ b/src/mod/event_handlers/mod_snmp/FREESWITCH-MIB @@ -1,35 +1,33 @@ -/* - * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * Copyright (C) 2005-2011, Anthony Minessale II - * - * Version: MPL 1.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * - * The Initial Developer of the Original Code is - * Anthony Minessale II - * Portions created by the Initial Developer are Copyright (C) - * the Initial Developer. All Rights Reserved. - * Portions created by Seventh Signal Ltd. & Co. KG and its employees are Copyright (C) - * Seventh Signal Ltd. & Co. KG, All Rights Reserverd. - * - * Contributor(s): - * Daniel Swarbrick - * Stefan Knoblich - * - * MIB Definition for mod_snmp - * - */ + +-- FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application +-- Copyright (C) 2005-2011, Anthony Minessale II +-- +-- Version: MPL 1.1 +-- +-- The contents of this file are subject to the Mozilla Public License Version +-- 1.1 (the "License"); you may not use this file except in compliance with +-- the License. You may obtain a copy of the License at +-- http://www.mozilla.org/MPL/ +-- +-- Software distributed under the License is distributed on an "AS IS" basis, +-- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +-- for the specific language governing rights and limitations under the +-- License. +-- +-- The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application +-- +-- The Initial Developer of the Original Code is +-- Anthony Minessale II +-- Portions created by the Initial Developer are Copyright (C) +-- the Initial Developer. All Rights Reserved. +-- Portions created by Seventh Signal Ltd. & Co. KG and its employees are Copyright (C) +-- Seventh Signal Ltd. & Co. KG, All Rights Reserverd. +-- +-- Contributor(s): +-- Daniel Swarbrick +-- Stefan Knoblich +-- +-- MIB Definition for mod_snmp FREESWITCH-MIB DEFINITIONS ::= BEGIN From 8c98328433fb64125e37c97024c1662196eedad7 Mon Sep 17 00:00:00 2001 From: Daniel Swarbrick Date: Wed, 6 Apr 2011 15:36:35 +0200 Subject: [PATCH 15/29] Allow longer input regexes to be used in phrases --- src/switch_ivr_play_say.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/switch_ivr_play_say.c b/src/switch_ivr_play_say.c index 5980ea41c7..6c769ecfd8 100644 --- a/src/switch_ivr_play_say.c +++ b/src/switch_ivr_play_say.c @@ -193,7 +193,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro_event(switch_core_sessio if (pattern) { switch_regex_t *re = NULL; - int proceed = 0, ovector[30]; + int proceed = 0, ovector[100]; char *substituted = NULL; uint32_t len = 0; char *odata = NULL; From 5310735c5f257c52be63efb1dd12221c4c330460 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Thu, 7 Apr 2011 15:47:30 -0500 Subject: [PATCH 16/29] FS-3232 --resolve using relative path in windows script --- src/switch_core.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/switch_core.c b/src/switch_core.c index 85e795c408..0ee4708a3d 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -480,9 +480,13 @@ SWITCH_DECLARE(void) switch_core_set_globals(void) DWORD dwBufSize = BUFSIZE; char base_dir[1024]; char *lastbacklash; + GetModuleFileName(NULL, base_dir, BUFSIZE); lastbacklash = strrchr(base_dir, '\\'); base_dir[(lastbacklash - base_dir)] = '\0'; + /* set base_dir as cwd, to be able to use relative paths in scripting languages (e.g. mod_lua) when FS is running as a service or while debugging FS using visual studio */ + SetCurrentDirectory(base_dir); + #else char base_dir[1024] = SWITCH_PREFIX_DIR; #endif From 3de9b51a8632b0e41af03a1dbdfb2e5ed8e135fb Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Fri, 8 Apr 2011 14:53:59 +0200 Subject: [PATCH 17/29] ftmod_isdn: Fix warnings No guarantee this module still works, but it compiles again. Signed-off-by: Stefan Knoblich --- libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c b/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c index a7b84ea5d8..4abddf16e1 100644 --- a/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c +++ b/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c @@ -979,7 +979,6 @@ static L3INT ftdm_isdn_931_34(void *pvt, struct Q931_Call *call, Q931mes_Generic { Q931ie_CallingNum *callingnum = Q931GetIEPtr(gen->CallingNum, gen->buf); Q931ie_CalledNum *callednum = Q931GetIEPtr(gen->CalledNum, gen->buf); - uint32_t cplen = mlen; int overlap_dial = 0; int fail_cause = 0; int fail = 1; @@ -2128,7 +2127,7 @@ static int ftdm_isdn_q921_log(void *pvt, Q921LogLevel_t level, char *msg, L2INT return 0; } -static L3INT ftdm_isdn_q931_log(void *pvt, Q931LogLevel_t level, char *msg, L3INT size) +static L3INT ftdm_isdn_q931_log(void *pvt, Q931LogLevel_t level, const char *msg, L3INT size) { ftdm_span_t *span = (ftdm_span_t *) pvt; From 1604f08e33c8acf24aab21194684cb5685284f90 Mon Sep 17 00:00:00 2001 From: Brian West Date: Fri, 8 Apr 2011 13:46:02 -0500 Subject: [PATCH 18/29] rebind sighandlers --- src/include/switch_core.h | 1 + src/switch_core.c | 49 ++++++++++++++++++++---------------- src/switch_loadable_module.c | 2 ++ 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/include/switch_core.h b/src/include/switch_core.h index 684cc4f777..5a2b8992b2 100644 --- a/src/include/switch_core.h +++ b/src/include/switch_core.h @@ -2205,6 +2205,7 @@ SWITCH_DECLARE(switch_bool_t) switch_cache_db_test_reactive(switch_cache_db_hand SWITCH_DECLARE(switch_status_t) switch_cache_db_persistant_execute(switch_cache_db_handle_t *dbh, const char *sql, uint32_t retries); SWITCH_DECLARE(switch_status_t) switch_cache_db_persistant_execute_trans(switch_cache_db_handle_t *dbh, char *sql, uint32_t retries); +SWITCH_DECLARE(void) switch_core_set_signal_handlers(void); SWITCH_DECLARE(uint32_t) switch_core_debug_level(void); SWITCH_DECLARE(void) switch_cache_db_flush_handles(void); SWITCH_DECLARE(const char *) switch_core_banner(void); diff --git a/src/switch_core.c b/src/switch_core.c index 0ee4708a3d..623f1067a4 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1772,27 +1772,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_init_and_modload(switch_core_flag_t runtime.runlevel++; - /* set signal handlers */ - signal(SIGINT, SIG_IGN); -#ifdef SIGPIPE - signal(SIGPIPE, handle_SIGPIPE); -#endif -#ifdef SIGQUIT - signal(SIGQUIT, handle_SIGQUIT); -#endif -#ifdef SIGPOLL - signal(SIGPOLL, handle_SIGPOLL); -#endif -#ifdef SIGIO - signal(SIGIO, handle_SIGIO); -#endif -#ifdef TRAP_BUS - signal(SIGBUS, handle_SIGBUS); -#endif -#ifdef SIGUSR1 - signal(SIGUSR1, handle_SIGHUP); -#endif - signal(SIGHUP, handle_SIGHUP); + switch_core_set_signal_handlers(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Bringing up environment.\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Loading Modules.\n"); @@ -1806,6 +1786,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_init_and_modload(switch_core_flag_t switch_load_core_config("post_load_switch.conf"); + switch_core_set_signal_handlers(); + if (switch_event_create(&event, SWITCH_EVENT_STARTUP) == SWITCH_STATUS_SUCCESS) { switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Event-Info", "System Ready"); switch_event_fire(&event); @@ -1869,6 +1851,31 @@ static void win_shutdown(void) } #endif +SWITCH_DECLARE(void) switch_core_set_signal_handlers(void) +{ + /* set signal handlers */ + signal(SIGINT, SIG_IGN); +#ifdef SIGPIPE + signal(SIGPIPE, handle_SIGPIPE); +#endif +#ifdef SIGQUIT + signal(SIGQUIT, handle_SIGQUIT); +#endif +#ifdef SIGPOLL + signal(SIGPOLL, handle_SIGPOLL); +#endif +#ifdef SIGIO + signal(SIGIO, handle_SIGIO); +#endif +#ifdef TRAP_BUS + signal(SIGBUS, handle_SIGBUS); +#endif +#ifdef SIGUSR1 + signal(SIGUSR1, handle_SIGHUP); +#endif + signal(SIGHUP, handle_SIGHUP); +} + SWITCH_DECLARE(uint32_t) switch_core_debug_level(void) { return runtime.debug_level; diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index 9804e53238..627aa46707 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -945,6 +945,8 @@ static switch_status_t switch_loadable_module_load_file(char *path, char *filena *new_module = module; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Successfully Loaded [%s]\n", module_interface->module_name); + switch_core_set_signal_handlers(); + return SWITCH_STATUS_SUCCESS; } From a909940385c51ac668af03b683f95ce9543a5218 Mon Sep 17 00:00:00 2001 From: Marc Olivier Chouinard Date: Fri, 8 Apr 2011 15:13:11 -0400 Subject: [PATCH 19/29] conf: Only english is built by default.y --- conf/autoload_configs/modules.conf.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/autoload_configs/modules.conf.xml b/conf/autoload_configs/modules.conf.xml index 14a5bc8084..96079cd227 100644 --- a/conf/autoload_configs/modules.conf.xml +++ b/conf/autoload_configs/modules.conf.xml @@ -113,7 +113,7 @@ - + From bcd6c3a1881e7517ca54f4e4ee3533e5b4588b70 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 8 Apr 2011 14:04:01 -0500 Subject: [PATCH 20/29] FS-3137 --resolve less of a memory leak more of a pool swelling, replaced a pool strdup that could recur with a strdup/free to avoid it --- .../mod_conference/mod_conference.c | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 16451b66a9..07a24355cf 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -1996,22 +1996,20 @@ static void conference_loop_fn_exec_app(conference_member_t *member, caller_cont switch_event_fire(&event); } - if ((mydata = switch_core_session_strdup(member->session, action->expanded_data))) { - if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) { - if (argc > 0) { - app = argv[0]; - } - if (argc > 1) { - arg = argv[1]; - } + mydata = strdup(action->expanded_data); + switch_assert(mydata); - } else { - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, "Empty execute app string [%s]\n", - (char *) action->expanded_data); - goto done; + if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) { + if (argc > 0) { + app = argv[0]; } + if (argc > 1) { + arg = argv[1]; + } + } else { - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, "Unable to allocate memory to duplicate execute_app data.\n"); + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, "Empty execute app string [%s]\n", + (char *) action->expanded_data); goto done; } @@ -2029,8 +2027,11 @@ static void conference_loop_fn_exec_app(conference_member_t *member, caller_cont switch_core_session_execute_application(member->session, app, arg); switch_core_session_set_read_codec(member->session, &member->read_codec); switch_channel_clear_app_flag(channel, CF_APP_TAGGED); + done: + switch_safe_free(mydata); + return; } From 758949cda71c9c840ae8914cd5000ab08e9ac0bf Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 8 Apr 2011 14:23:16 -0500 Subject: [PATCH 21/29] move sig messages up to DEBUG1 --- src/switch_core.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/switch_core.c b/src/switch_core.c index 623f1067a4..d3a696bef5 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1444,7 +1444,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_init(switch_core_flag_t flags, switc static void handle_SIGQUIT(int sig) { if (sig); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Sig Quit!\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Sig Quit!\n"); return; } #endif @@ -1453,7 +1453,7 @@ static void handle_SIGQUIT(int sig) static void handle_SIGPIPE(int sig) { if (sig); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Sig Pipe!\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Sig Pipe!\n"); return; } #endif @@ -1462,7 +1462,7 @@ static void handle_SIGPIPE(int sig) static void handle_SIGPOLL(int sig) { if (sig); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Sig Poll!\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Sig Poll!\n"); return; } #endif @@ -1471,7 +1471,7 @@ static void handle_SIGPOLL(int sig) static void handle_SIGIO(int sig) { if (sig); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Sig I/O!\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Sig I/O!\n"); return; } #endif @@ -1479,7 +1479,7 @@ static void handle_SIGIO(int sig) #ifdef TRAP_BUS static void handle_SIGBUS(int sig) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Sig BUS!\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Sig BUS!\n"); return; } #endif From 84b1f7483f32f29e30dadb2891671b608bdb57e3 Mon Sep 17 00:00:00 2001 From: Buklov Boris Date: Fri, 8 Apr 2011 23:55:33 +0400 Subject: [PATCH 22/29] fix SST_SHORT_DATE_TIME thanks sibsvt@gmail.com --- src/mod/say/mod_say_ru/mod_say_ru.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mod/say/mod_say_ru/mod_say_ru.c b/src/mod/say/mod_say_ru/mod_say_ru.c index 5e628ccf47..51a0cc4e2b 100644 --- a/src/mod/say/mod_say_ru/mod_say_ru.c +++ b/src/mod/say/mod_say_ru/mod_say_ru.c @@ -451,6 +451,7 @@ static switch_status_t ru_say_time(switch_say_file_handle_t *sh, char *tosay, sw break; case SST_SHORT_DATE_TIME: say_time = 1; + tm.tm_sec = 0; // В коротком варианте секунды не проговариваем if (tm.tm_year != tm_now.tm_year) { say_date = 1; break; @@ -619,7 +620,7 @@ static switch_new_say_callback_ru_t choose_callback(switch_say_args_t *say_args) say_cb = ru_say_money; break; default: - //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown Say type=[%d]\n", say_args->type); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown Say type=[%d]\n", say_args->type); break; } From f44c90e04f7214c8873e03f505e41d460c7cd114 Mon Sep 17 00:00:00 2001 From: Raymond Chandler Date: Fri, 8 Apr 2011 17:03:50 -0400 Subject: [PATCH 23/29] more logging, cleanup, etc --- src/mod/applications/mod_lcr/mod_lcr.c | 43 +++++++++++++++++--------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/src/mod/applications/mod_lcr/mod_lcr.c b/src/mod/applications/mod_lcr/mod_lcr.c index 17bbb443b1..93f9c9617d 100644 --- a/src/mod/applications/mod_lcr/mod_lcr.c +++ b/src/mod/applications/mod_lcr/mod_lcr.c @@ -133,6 +133,7 @@ struct callback_obj { profile_t *profile; switch_core_session_t *session; switch_event_t *event; + float sell_rate; }; typedef struct callback_obj callback_t; @@ -666,8 +667,11 @@ static int route_add_callback(void *pArg, int argc, char **argv, char **columnNa r = 0; goto end; } - + for (current = cbt->head; current; current = current->next) { + if (cbt->sell_rate && cbt->sell_rate > current->rate) { + continue; + } key = switch_core_sprintf(pool, "%s:%s", additional->gw_prefix, additional->gw_suffix); if (switch_core_hash_find(cbt->dedup_hash, key)) { @@ -760,10 +764,14 @@ static switch_status_t is_intrastatelata(callback_t *cb_struct) */ if (!cb_struct->lookup_number || strlen(cb_struct->lookup_number) != 11 || *cb_struct->lookup_number != '1' || !switch_is_number(cb_struct->lookup_number)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(cb_struct->session), SWITCH_LOG_DEBUG, + "%s doesn't appear to be a NANP number\n", cb_struct->lookup_number); /* dest doesn't appear to be NANP number */ return SWITCH_STATUS_GENERR; } if (!cb_struct->cid || strlen(cb_struct->cid) != 11 || *cb_struct->cid != '1' || !switch_is_number(cb_struct->cid)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(cb_struct->session), SWITCH_LOG_DEBUG, + "%s doesn't appear to be a NANP number\n", cb_struct->cid); /* cid not NANP */ return SWITCH_STATUS_GENERR; } @@ -821,6 +829,7 @@ static switch_status_t lcr_do_lookup(callback_t *cb_struct) digits_expanded = expand_digits(cb_struct->pool, digits_copy, cb_struct->profile->quote_in_list); + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(cb_struct->session), SWITCH_LOG_DEBUG, "Has NPA NXX: [%u == %u]\n", profile->profile_has_npanxx, SWITCH_TRUE); if (profile->profile_has_npanxx == SWITCH_TRUE) { is_intrastatelata(cb_struct); } @@ -843,6 +852,10 @@ static switch_status_t lcr_do_lookup(callback_t *cb_struct) if (cb_struct->session) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(cb_struct->session), SWITCH_LOG_DEBUG, "we have a session\n"); if ((channel = switch_core_session_get_channel(cb_struct->session))) { + const char *sell_rate = switch_channel_get_variable(channel, "sell_rate"); + if (!zstr(sell_rate)) { + cb_struct->sell_rate = atof(sell_rate); + } switch_channel_set_variable_var_check(channel, "lcr_rate_field", rate_field, SWITCH_FALSE); switch_channel_set_variable_var_check(channel, "lcr_user_rate_field", user_rate_field, SWITCH_FALSE); switch_channel_set_variable_var_check(channel, "lcr_query_digits", digits_copy, SWITCH_FALSE); @@ -1062,13 +1075,17 @@ static switch_status_t lcr_load_config() if (zstr(custom_sql)) { /* use default sql */ sql_stream.write_function(&sql_stream, - "SELECT l.digits AS lcr_digits, c.carrier_name AS lcr_carrier_name, l.${lcr_rate_field} AS lcr_rate_field, cg.prefix AS lcr_gw_prefix, cg.suffix AS lcr_gw_suffix, l.lead_strip AS lcr_lead_strip, l.trail_strip AS lcr_trail_strip, l.prefix AS lcr_prefix, l.suffix AS lcr_suffix " + "SELECT l.digits AS lcr_digits, c.carrier_name AS lcr_carrier_name, l.${lcr_rate_field} AS lcr_rate_field, \ + cg.prefix AS lcr_gw_prefix, cg.suffix AS lcr_gw_suffix, l.lead_strip AS lcr_lead_strip, \ + l.trail_strip AS lcr_trail_strip, l.prefix AS lcr_prefix, l.suffix AS lcr_suffix " ); if (db_check("SELECT codec from carrier_gateway limit 1") == SWITCH_TRUE) { sql_stream.write_function(&sql_stream, ", cg.codec AS lcr_codec "); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "codec field defined.\n"); } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "codec field not defined, please update your lcr carrier_gateway database schema.\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, + "codec field not defined, please update your lcr carrier_gateway database schema.\n" + ); } if (db_check("SELECT cid from lcr limit 1") == SWITCH_TRUE) { sql_stream.write_function(&sql_stream, ", l.cid AS lcr_cid "); @@ -1076,12 +1093,15 @@ static switch_status_t lcr_load_config() } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "cid field not defined, please update your lcr database schema.\n"); } - sql_stream.write_function(&sql_stream, "FROM lcr l JOIN carriers c ON l.carrier_id=c.id JOIN carrier_gateway cg ON c.id=cg.carrier_id WHERE c.enabled = '1' AND cg.enabled = '1' AND l.enabled = '1' AND digits IN ("); + sql_stream.write_function(&sql_stream, "FROM lcr l JOIN carriers c ON l.carrier_id=c.id \ + JOIN carrier_gateway cg ON c.id=cg.carrier_id WHERE \ + c.enabled = '1' AND cg.enabled = '1' AND l.enabled = '1' AND digits IN ("); sql_stream.write_function(&sql_stream, "${lcr_query_expanded_digits}"); sql_stream.write_function(&sql_stream, ") AND CURRENT_TIMESTAMP BETWEEN date_start AND date_end "); if (profile->id > 0) { sql_stream.write_function(&sql_stream, "AND lcr_profile=%d ", profile->id); } + sql_stream.write_function(&sql_stream, "ORDER BY digits DESC%s", profile->order_by); if (db_random) { @@ -1880,16 +1900,11 @@ SWITCH_STANDARD_API(dialplan_lcr_admin_function) stream->write_function(stream, " has intrastate:\t%s\n", profile->profile_has_intrastate ? "true" : "false"); stream->write_function(stream, " has intralata:\t%s\n", profile->profile_has_intralata ? "true" : "false"); stream->write_function(stream, " has npanxx:\t%s\n", profile->profile_has_npanxx ? "true" : "false"); - stream->write_function(stream, " Reorder rate:\t%s\n", - profile->reorder_by_rate ? "enabled" : "disabled"); - stream->write_function(stream, " Info in headers:\t%s\n", - profile->info_in_headers ? "enabled" : "disabled"); - stream->write_function(stream, " Quote IN() List:\t%s\n", - profile->quote_in_list ? "enabled" : "disabled"); - stream->write_function(stream, " Sip Redirection Mode:\t%s\n", - profile->enable_sip_redir ? "enabled" : "disabled"); - stream->write_function(stream, " Import fields:\t%s\n", - profile->export_fields_str ? profile->export_fields_str : "(null)"); + stream->write_function(stream, " Reorder rate:\t%s\n", profile->reorder_by_rate ? "enabled" : "disabled"); + stream->write_function(stream, " Info in headers:\t%s\n", profile->info_in_headers ? "enabled" : "disabled"); + stream->write_function(stream, " Quote IN() List:\t%s\n", profile->quote_in_list ? "enabled" : "disabled"); + stream->write_function(stream, " Sip Redirection Mode:\t%s\n", profile->enable_sip_redir ? "enabled" : "disabled"); + stream->write_function(stream, " Import fields:\t%s\n", profile->export_fields_str ? profile->export_fields_str : "(null)"); stream->write_function(stream, " Limit type:\t%s\n", profile->limit_type); stream->write_function(stream, "\n"); } From f564d3838596a0541719282e42ad0194693797e9 Mon Sep 17 00:00:00 2001 From: Michael S Collins Date: Fri, 8 Apr 2011 16:33:17 -0700 Subject: [PATCH 24/29] Add digit_timeout to ESL::IVR's playAndGetDigits method --- libs/esl/perl/ESL/IVR.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/esl/perl/ESL/IVR.pm b/libs/esl/perl/ESL/IVR.pm index f7919c1b94..5dc6088236 100644 --- a/libs/esl/perl/ESL/IVR.pm +++ b/libs/esl/perl/ESL/IVR.pm @@ -73,13 +73,13 @@ sub setVar($;) { sub playAndGetDigits($;) { my $self = shift; - my ($min, $max, $tries, $to, $term, $file, $invalid_file, $var, $regex) = @_; + my ($min, $max, $tries, $to, $term, $file, $invalid_file, $var, $regex, $digit_timeout) = @_; if (!$self->{_esl}->connected()) { return undef; } - $self->execute("play_and_get_digits", "$min $max $tries $to $term $file $invalid_file $var $regex"); + $self->execute("play_and_get_digits", "$min $max $tries $to $term $file $invalid_file $var $regex $digit_timeout"); return $self->getVar($var); From 04cf1770910a6ef2539a7c511d607d278001dff3 Mon Sep 17 00:00:00 2001 From: Michael S Collins Date: Sun, 10 Apr 2011 08:21:47 -0700 Subject: [PATCH 25/29] Update phrase_en.xml to reflect newest prompts --- docs/phrase/phrase_en.xml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/phrase/phrase_en.xml b/docs/phrase/phrase_en.xml index 56a8094d22..34901054e9 100644 --- a/docs/phrase/phrase_en.xml +++ b/docs/phrase/phrase_en.xml @@ -268,7 +268,9 @@ - + + + @@ -425,16 +427,17 @@ - - - - - + + + + + + From bd03d578d1563efd7da841b7f499682d33fff2e7 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Sun, 10 Apr 2011 22:58:09 +0200 Subject: [PATCH 26/29] Skinny: add CP-7921G and reindent --- src/mod/endpoints/mod_skinny/skinny_tables.c | 185 ++++++++++--------- src/mod/endpoints/mod_skinny/skinny_tables.h | 2 +- 2 files changed, 94 insertions(+), 93 deletions(-) diff --git a/src/mod/endpoints/mod_skinny/skinny_tables.c b/src/mod/endpoints/mod_skinny/skinny_tables.c index e8e56568b3..0752a9531e 100644 --- a/src/mod/endpoints/mod_skinny/skinny_tables.c +++ b/src/mod/endpoints/mod_skinny/skinny_tables.c @@ -109,145 +109,146 @@ SKINNY_DECLARE_ID2STR(skinny_message_type2str, SKINNY_MESSAGE_TYPES, "UnknownMes SKINNY_DECLARE_STR2ID(skinny_str2message_type, SKINNY_MESSAGE_TYPES, -1) struct skinny_table SKINNY_DEVICE_TYPES[] = { - {"Cisco 30 SP+", 1}, - {"Cisco 12 SP+", 2}, - {"Cisco 12 SP", 3}, - {"Cisco 12", 4}, - {"Cisco 30 VIP", 5}, - {"Cisco IP Phone 7910", 6}, - {"Cisco IP Phone 7960", 7}, - {"Cisco IP Phone 7940", 8}, - {"Cisco IP Phone 7935", 9}, - {"Cisco ATA 186", 12}, + {"Cisco 30 SP+", 1}, + {"Cisco 12 SP+", 2}, + {"Cisco 12 SP", 3}, + {"Cisco 12", 4}, + {"Cisco 30 VIP", 5}, + {"Cisco IP Phone 7910", 6}, + {"Cisco IP Phone 7960", 7}, + {"Cisco IP Phone 7940", 8}, + {"Cisco IP Phone 7935", 9}, + {"Cisco ATA 186", 12}, + {"Cisco IP Phone CP-7921G", 365}, {"Cisco IP Phone CP-7962G", 404}, {"Cisco IP Phone CP-7965G", 436}, - {"Cisco IP Phone CP-7961G", 30018}, - {"Cisco IP Phone 7936", 30019}, - {NULL, 0} + {"Cisco IP Phone CP-7961G", 30018}, + {"Cisco IP Phone 7936", 30019}, + {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_device_type2str, SKINNY_DEVICE_TYPES, "UnknownDeviceType") SKINNY_DECLARE_STR2ID(skinny_str2device_type, SKINNY_DEVICE_TYPES, -1) struct skinny_table SKINNY_RING_TYPES[] = { - {"RingOff", SKINNY_RING_OFF}, - {"RingInside", SKINNY_RING_INSIDE}, - {"RingOutside", SKINNY_RING_OUTSIDE}, - {"RingFeature", SKINNY_RING_FEATURE}, - {NULL, 0} + {"RingOff", SKINNY_RING_OFF}, + {"RingInside", SKINNY_RING_INSIDE}, + {"RingOutside", SKINNY_RING_OUTSIDE}, + {"RingFeature", SKINNY_RING_FEATURE}, + {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_ring_type2str, SKINNY_RING_TYPES, "RingTypeUnknown") SKINNY_DECLARE_STR2ID(skinny_str2ring_type, SKINNY_RING_TYPES, -1) struct skinny_table SKINNY_RING_MODES[] = { - {"RingForever", SKINNY_RING_FOREVER}, - {"RingOnce", SKINNY_RING_ONCE}, - {NULL, 0} + {"RingForever", SKINNY_RING_FOREVER}, + {"RingOnce", SKINNY_RING_ONCE}, + {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_ring_mode2str, SKINNY_RING_MODES, "RingModeUnknown") SKINNY_DECLARE_STR2ID(skinny_str2ring_mode, SKINNY_RING_MODES, -1) struct skinny_table SKINNY_BUTTONS[] = { - {"Unknown", SKINNY_BUTTON_UNKNOWN}, - {"LastNumberRedial", SKINNY_BUTTON_LAST_NUMBER_REDIAL}, - {"SpeedDial", SKINNY_BUTTON_SPEED_DIAL}, - {"Hold", SKINNY_BUTTON_HOLD}, - {"Transfer", SKINNY_BUTTON_TRANSFER}, - {"Line", SKINNY_BUTTON_LINE}, - {"Voicemail", SKINNY_BUTTON_VOICEMAIL}, - {"Privacy", SKINNY_BUTTON_PRIVACY}, - {"ServiceUrl", SKINNY_BUTTON_SERVICE_URL}, - {"Undefined", SKINNY_BUTTON_UNDEFINED}, - {NULL, 0} + {"Unknown", SKINNY_BUTTON_UNKNOWN}, + {"LastNumberRedial", SKINNY_BUTTON_LAST_NUMBER_REDIAL}, + {"SpeedDial", SKINNY_BUTTON_SPEED_DIAL}, + {"Hold", SKINNY_BUTTON_HOLD}, + {"Transfer", SKINNY_BUTTON_TRANSFER}, + {"Line", SKINNY_BUTTON_LINE}, + {"Voicemail", SKINNY_BUTTON_VOICEMAIL}, + {"Privacy", SKINNY_BUTTON_PRIVACY}, + {"ServiceUrl", SKINNY_BUTTON_SERVICE_URL}, + {"Undefined", SKINNY_BUTTON_UNDEFINED}, + {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_button2str, SKINNY_BUTTONS, "Unknown") SKINNY_DECLARE_STR2ID(skinny_str2button, SKINNY_BUTTONS, -1) struct skinny_table SKINNY_SOFT_KEY_EVENTS[] = { - {"SoftkeyRedial", SOFTKEY_REDIAL}, - {"SoftkeyNewcall", SOFTKEY_NEWCALL}, - {"SoftkeyHold", SOFTKEY_HOLD}, - {"SoftkeyTransfer", SOFTKEY_TRANSFER}, - {"SoftkeyCfwdall", SOFTKEY_CFWDALL}, - {"SoftkeyCfwdbusy", SOFTKEY_CFWDBUSY}, - {"SoftkeyCfwdnoanswer", SOFTKEY_CFWDNOANSWER}, - {"SoftkeyBackspace", SOFTKEY_BACKSPACE}, - {"SoftkeyEndcall", SOFTKEY_ENDCALL}, - {"SoftkeyResume", SOFTKEY_RESUME}, - {"SoftkeyAnswer", SOFTKEY_ANSWER }, - {"SoftkeyInfo", SOFTKEY_INFO}, - {"SoftkeyConfrm", SOFTKEY_CONFRM}, - {"SoftkeyPark", SOFTKEY_PARK}, - {"SoftkeyJoin", SOFTKEY_JOIN}, - {"SoftkeyMeetmeconfrm", SOFTKEY_MEETMECONFRM}, - {"SoftkeyCallpickup", SOFTKEY_CALLPICKUP}, - {"SoftkeyGrpcallpickup", SOFTKEY_GRPCALLPICKUP}, - {"SoftkeyDnd", SOFTKEY_DND}, - {"SoftkeyIdivert", SOFTKEY_IDIVERT}, - {NULL, 0} + {"SoftkeyRedial", SOFTKEY_REDIAL}, + {"SoftkeyNewcall", SOFTKEY_NEWCALL}, + {"SoftkeyHold", SOFTKEY_HOLD}, + {"SoftkeyTransfer", SOFTKEY_TRANSFER}, + {"SoftkeyCfwdall", SOFTKEY_CFWDALL}, + {"SoftkeyCfwdbusy", SOFTKEY_CFWDBUSY}, + {"SoftkeyCfwdnoanswer", SOFTKEY_CFWDNOANSWER}, + {"SoftkeyBackspace", SOFTKEY_BACKSPACE}, + {"SoftkeyEndcall", SOFTKEY_ENDCALL}, + {"SoftkeyResume", SOFTKEY_RESUME}, + {"SoftkeyAnswer", SOFTKEY_ANSWER }, + {"SoftkeyInfo", SOFTKEY_INFO}, + {"SoftkeyConfrm", SOFTKEY_CONFRM}, + {"SoftkeyPark", SOFTKEY_PARK}, + {"SoftkeyJoin", SOFTKEY_JOIN}, + {"SoftkeyMeetmeconfrm", SOFTKEY_MEETMECONFRM}, + {"SoftkeyCallpickup", SOFTKEY_CALLPICKUP}, + {"SoftkeyGrpcallpickup", SOFTKEY_GRPCALLPICKUP}, + {"SoftkeyDnd", SOFTKEY_DND}, + {"SoftkeyIdivert", SOFTKEY_IDIVERT}, + {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_soft_key_event2str, SKINNY_SOFT_KEY_EVENTS, "SoftkeyUnknown") SKINNY_DECLARE_STR2ID(skinny_str2soft_key_event, SKINNY_SOFT_KEY_EVENTS, 0) struct skinny_table SKINNY_LAMP_MODES[] = { - {"Off", SKINNY_LAMP_OFF}, - {"On", SKINNY_LAMP_ON}, - {"Wink", SKINNY_LAMP_WINK}, - {"Flash", SKINNY_LAMP_FLASH}, - {"Blink", SKINNY_LAMP_BLINK}, - {NULL, 0} + {"Off", SKINNY_LAMP_OFF}, + {"On", SKINNY_LAMP_ON}, + {"Wink", SKINNY_LAMP_WINK}, + {"Flash", SKINNY_LAMP_FLASH}, + {"Blink", SKINNY_LAMP_BLINK}, + {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_lamp_mode2str, SKINNY_LAMP_MODES, "Unknown") SKINNY_DECLARE_STR2ID(skinny_str2lamp_mode, SKINNY_LAMP_MODES, -1) struct skinny_table SKINNY_SPEAKER_MODES[] = { - {"SpeakerOn", SKINNY_SPEAKER_ON}, - {"SpeakerOff", SKINNY_SPEAKER_OFF}, - {NULL, 0} + {"SpeakerOn", SKINNY_SPEAKER_ON}, + {"SpeakerOff", SKINNY_SPEAKER_OFF}, + {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_speaker_mode2str, SKINNY_SPEAKER_MODES, "Unknown") SKINNY_DECLARE_STR2ID(skinny_str2speaker_mode, SKINNY_SPEAKER_MODES, -1) struct skinny_table SKINNY_KEY_SETS[] = { - {"KeySetOnHook", SKINNY_KEY_SET_ON_HOOK}, - {"KeySetConnected", SKINNY_KEY_SET_CONNECTED}, - {"KeySetOnHold", SKINNY_KEY_SET_ON_HOLD}, - {"KeySetRingIn", SKINNY_KEY_SET_RING_IN}, - {"KeySetOffHook", SKINNY_KEY_SET_OFF_HOOK}, - {"KeySetConnectedWithTransfer", SKINNY_KEY_SET_CONNECTED_WITH_TRANSFER}, - {"KeySetDigitsAfterDialingFirstDigit", SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT}, - {"KeySetConnectedWithConference", SKINNY_KEY_SET_CONNECTED_WITH_CONFERENCE}, - {"KeySetRingOut", SKINNY_KEY_SET_RING_OUT}, - {"KeySetOffHookWithFeatures", SKINNY_KEY_SET_OFF_HOOK_WITH_FEATURES}, - {"KeySetInUseHint", SKINNY_KEY_SET_IN_USE_HINT}, - {NULL, 0} + {"KeySetOnHook", SKINNY_KEY_SET_ON_HOOK}, + {"KeySetConnected", SKINNY_KEY_SET_CONNECTED}, + {"KeySetOnHold", SKINNY_KEY_SET_ON_HOLD}, + {"KeySetRingIn", SKINNY_KEY_SET_RING_IN}, + {"KeySetOffHook", SKINNY_KEY_SET_OFF_HOOK}, + {"KeySetConnectedWithTransfer", SKINNY_KEY_SET_CONNECTED_WITH_TRANSFER}, + {"KeySetDigitsAfterDialingFirstDigit", SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT}, + {"KeySetConnectedWithConference", SKINNY_KEY_SET_CONNECTED_WITH_CONFERENCE}, + {"KeySetRingOut", SKINNY_KEY_SET_RING_OUT}, + {"KeySetOffHookWithFeatures", SKINNY_KEY_SET_OFF_HOOK_WITH_FEATURES}, + {"KeySetInUseHint", SKINNY_KEY_SET_IN_USE_HINT}, + {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_soft_key_set2str, SKINNY_KEY_SETS, "UNKNOWN_SOFT_KEY_SET") SKINNY_DECLARE_STR2ID(skinny_str2soft_key_set, SKINNY_KEY_SETS, -1) struct skinny_table SKINNY_CALL_STATES[] = { - {"OffHook", SKINNY_OFF_HOOK}, - {"OnHook", SKINNY_ON_HOOK}, - {"RingOut", SKINNY_RING_OUT}, - {"RingIn", SKINNY_RING_IN}, - {"Connected", SKINNY_CONNECTED}, - {"Busy", SKINNY_BUSY}, - {"LineInUse", SKINNY_LINE_IN_USE}, - {"Hold", SKINNY_HOLD}, - {"CallWaiting", SKINNY_CALL_WAITING}, - {"CallTransfer", SKINNY_CALL_TRANSFER}, - {"CallPark", SKINNY_CALL_PARK}, - {"Proceed", SKINNY_PROCEED}, - {"InUseRemotely", SKINNY_IN_USE_REMOTELY}, - {"InvalidNumber", SKINNY_INVALID_NUMBER}, - {NULL, 0} + {"OffHook", SKINNY_OFF_HOOK}, + {"OnHook", SKINNY_ON_HOOK}, + {"RingOut", SKINNY_RING_OUT}, + {"RingIn", SKINNY_RING_IN}, + {"Connected", SKINNY_CONNECTED}, + {"Busy", SKINNY_BUSY}, + {"LineInUse", SKINNY_LINE_IN_USE}, + {"Hold", SKINNY_HOLD}, + {"CallWaiting", SKINNY_CALL_WAITING}, + {"CallTransfer", SKINNY_CALL_TRANSFER}, + {"CallPark", SKINNY_CALL_PARK}, + {"Proceed", SKINNY_PROCEED}, + {"InUseRemotely", SKINNY_IN_USE_REMOTELY}, + {"InvalidNumber", SKINNY_INVALID_NUMBER}, + {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_call_state2str, SKINNY_CALL_STATES, "CallStateUnknown") SKINNY_DECLARE_STR2ID(skinny_str2call_state, SKINNY_CALL_STATES, -1) struct skinny_table SKINNY_DEVICE_RESET_TYPES[] = { - {"DeviceReset", SKINNY_DEVICE_RESET}, - {"DeviceRestart", SKINNY_DEVICE_RESTART}, - {NULL, 0} + {"DeviceReset", SKINNY_DEVICE_RESET}, + {"DeviceRestart", SKINNY_DEVICE_RESTART}, + {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_device_reset_type2str, SKINNY_DEVICE_RESET_TYPES, "DeviceResetTypeUnknown") SKINNY_DECLARE_STR2ID(skinny_str2device_reset_type, SKINNY_DEVICE_RESET_TYPES, -1) diff --git a/src/mod/endpoints/mod_skinny/skinny_tables.h b/src/mod/endpoints/mod_skinny/skinny_tables.h index 00ddf0c74d..84f2b6c297 100644 --- a/src/mod/endpoints/mod_skinny/skinny_tables.h +++ b/src/mod/endpoints/mod_skinny/skinny_tables.h @@ -92,7 +92,7 @@ const char *skinny_message_type2str(uint32_t id); uint32_t skinny_str2message_type(const char *str); #define SKINNY_PUSH_MESSAGE_TYPES SKINNY_DECLARE_PUSH_MATCH(SKINNY_MESSAGE_TYPES) -extern struct skinny_table SKINNY_DEVICE_TYPES[15]; +extern struct skinny_table SKINNY_DEVICE_TYPES[16]; const char *skinny_device_type2str(uint32_t id); uint32_t skinny_str2device_type(const char *str); #define SKINNY_PUSH_DEVICE_TYPES SKINNY_DECLARE_PUSH_MATCH(SKINNY_DEVICE_TYPES) From 8c814c82cfbad1eb92e56394b27153865807d565 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Sun, 10 Apr 2011 23:08:46 +0200 Subject: [PATCH 27/29] Skinny: put tables the other way (more standard) Done with: sed -i 's/{\(".*"\|NULL\), \(.*\)}/{\2, \1}/' src/mod/endpoints/mod_skinny/skinny_tables.c --- src/mod/endpoints/mod_skinny/skinny_tables.c | 328 +++++++++---------- src/mod/endpoints/mod_skinny/skinny_tables.h | 2 +- 2 files changed, 165 insertions(+), 165 deletions(-) diff --git a/src/mod/endpoints/mod_skinny/skinny_tables.c b/src/mod/endpoints/mod_skinny/skinny_tables.c index 0752a9531e..04237ad3ea 100644 --- a/src/mod/endpoints/mod_skinny/skinny_tables.c +++ b/src/mod/endpoints/mod_skinny/skinny_tables.c @@ -35,220 +35,220 @@ /* Translation tables */ struct skinny_table SKINNY_MESSAGE_TYPES[] = { - {"KeepAliveMessage", KEEP_ALIVE_MESSAGE}, - {"RegisterMessage", REGISTER_MESSAGE}, - {"PortMessage", PORT_MESSAGE}, - {"KeypadButtonMessage", KEYPAD_BUTTON_MESSAGE}, - {"EnblocCallMessage", ENBLOC_CALL_MESSAGE}, - {"StimulusMessage", STIMULUS_MESSAGE}, - {"OffHookMessage", OFF_HOOK_MESSAGE}, - {"OnHookMessage", ON_HOOK_MESSAGE}, - {"ForwardStatReqMessage", FORWARD_STAT_REQ_MESSAGE}, - {"SpeedDialStatReqMessage", SPEED_DIAL_STAT_REQ_MESSAGE}, - {"LineStatReqMessage", LINE_STAT_REQ_MESSAGE}, - {"ConfigStatReqMessage", CONFIG_STAT_REQ_MESSAGE}, - {"TimeDateReqMessage", TIME_DATE_REQ_MESSAGE}, - {"ButtonTemplateReqMessage", BUTTON_TEMPLATE_REQ_MESSAGE}, - {"VersionReqMessage", VERSION_REQ_MESSAGE}, - {"CapabilitiesReqMessage", CAPABILITIES_RES_MESSAGE}, - {"AlarmMessage", ALARM_MESSAGE}, - {"OpenReceiveChannelAckMessage", OPEN_RECEIVE_CHANNEL_ACK_MESSAGE}, - {"SoftKeySetReqMessage", SOFT_KEY_SET_REQ_MESSAGE}, - {"SoftKeyEventMessage", SOFT_KEY_EVENT_MESSAGE}, - {"UnregisterMessage", UNREGISTER_MESSAGE}, - {"SoftKeyTemplateReqMessage", SOFT_KEY_TEMPLATE_REQ_MESSAGE}, - {"HeadsetStatusMessage", HEADSET_STATUS_MESSAGE}, - {"RegisterAvailableLinesMessage", REGISTER_AVAILABLE_LINES_MESSAGE}, - {"DeviceToUserDataMessage", DEVICE_TO_USER_DATA_MESSAGE}, - {"DeviceToUserDataResponseMessage", DEVICE_TO_USER_DATA_RESPONSE_MESSAGE}, - {"ServiceUrlStatReqMessage", SERVICE_URL_STAT_REQ_MESSAGE}, - {"FeatureStatReqMessage", FEATURE_STAT_REQ_MESSAGE}, - {"DeviceToUserDataVersion1Message", DEVICE_TO_USER_DATA_VERSION1_MESSAGE}, - {"DeviceToUserDataResponseVersion1Message", DEVICE_TO_USER_DATA_RESPONSE_VERSION1_MESSAGE}, - {"RegisterAckMessage", REGISTER_ACK_MESSAGE}, - {"StartToneMessage", START_TONE_MESSAGE}, - {"StopToneMessage", STOP_TONE_MESSAGE}, - {"SetRingerMessage", SET_RINGER_MESSAGE}, - {"SetLampMessage", SET_LAMP_MESSAGE}, - {"SetSpeakerModeMessage", SET_SPEAKER_MODE_MESSAGE}, - {"StartMediaTransmissionMessage", START_MEDIA_TRANSMISSION_MESSAGE}, - {"StopMediaTransmissionMessage", STOP_MEDIA_TRANSMISSION_MESSAGE}, - {"CallInfoMessage", CALL_INFO_MESSAGE}, - {"ForwardStatMessage", FORWARD_STAT_MESSAGE}, - {"SpeedDialStatResMessage", SPEED_DIAL_STAT_RES_MESSAGE}, - {"LineStatResMessage", LINE_STAT_RES_MESSAGE}, - {"ConfigStatResMessage", CONFIG_STAT_RES_MESSAGE}, - {"DefineTimeDateMessage", DEFINE_TIME_DATE_MESSAGE}, - {"ButtonTemplateResMessage", BUTTON_TEMPLATE_RES_MESSAGE}, - {"VersionMessage", VERSION_MESSAGE}, - {"CapabilitiesReqMessage", CAPABILITIES_REQ_MESSAGE}, - {"RegisterRejectMessage", REGISTER_REJECT_MESSAGE}, - {"ResetMessage", RESET_MESSAGE}, - {"KeepAliveAckMessage", KEEP_ALIVE_ACK_MESSAGE}, - {"OpenReceiveChannelMessage", OPEN_RECEIVE_CHANNEL_MESSAGE}, - {"CloseReceiveChannelMessage", CLOSE_RECEIVE_CHANNEL_MESSAGE}, - {"SoftKeyTemplateResMessage", SOFT_KEY_TEMPLATE_RES_MESSAGE}, - {"SoftKeySetResMessage", SOFT_KEY_SET_RES_MESSAGE}, - {"SelectSoftKeysMessage", SELECT_SOFT_KEYS_MESSAGE}, - {"CallStateMessage", CALL_STATE_MESSAGE}, - {"DisplayPromptStatusMessage", DISPLAY_PROMPT_STATUS_MESSAGE}, - {"ClearPromptStatusMessage", CLEAR_PROMPT_STATUS_MESSAGE}, - {"ActivateCallPlaneMessage", ACTIVATE_CALL_PLANE_MESSAGE}, - {"UnregisterAckMessage", UNREGISTER_ACK_MESSAGE}, - {"BackSpaceReqMessage", BACK_SPACE_REQ_MESSAGE}, - {"DialedNumberMessage", DIALED_NUMBER_MESSAGE}, - {"UserToDeviceDataMessage", USER_TO_DEVICE_DATA_MESSAGE}, - {"FeatureResMessage", FEATURE_STAT_RES_MESSAGE}, - {"DisplayPriNotifyMessage", DISPLAY_PRI_NOTIFY_MESSAGE}, - {"ServiceUrlStatMessage", SERVICE_URL_STAT_RES_MESSAGE}, - {"UserToDeviceDataVersion1Message", USER_TO_DEVICE_DATA_VERSION1_MESSAGE}, - {"XMLAlarmMessage", XML_ALARM_MESSAGE}, - {NULL, 0} + {KEEP_ALIVE_MESSAGE, "KeepAliveMessage"}, + {REGISTER_MESSAGE, "RegisterMessage"}, + {PORT_MESSAGE, "PortMessage"}, + {KEYPAD_BUTTON_MESSAGE, "KeypadButtonMessage"}, + {ENBLOC_CALL_MESSAGE, "EnblocCallMessage"}, + {STIMULUS_MESSAGE, "StimulusMessage"}, + {OFF_HOOK_MESSAGE, "OffHookMessage"}, + {ON_HOOK_MESSAGE, "OnHookMessage"}, + { FORWARD_STAT_REQ_MESSAGE, "ForwardStatReqMessage"}, + {SPEED_DIAL_STAT_REQ_MESSAGE, "SpeedDialStatReqMessage"}, + {LINE_STAT_REQ_MESSAGE, "LineStatReqMessage"}, + {CONFIG_STAT_REQ_MESSAGE, "ConfigStatReqMessage"}, + {TIME_DATE_REQ_MESSAGE, "TimeDateReqMessage"}, + {BUTTON_TEMPLATE_REQ_MESSAGE, "ButtonTemplateReqMessage"}, + {VERSION_REQ_MESSAGE, "VersionReqMessage"}, + {CAPABILITIES_RES_MESSAGE, "CapabilitiesReqMessage"}, + {ALARM_MESSAGE, "AlarmMessage"}, + {OPEN_RECEIVE_CHANNEL_ACK_MESSAGE, "OpenReceiveChannelAckMessage"}, + {SOFT_KEY_SET_REQ_MESSAGE, "SoftKeySetReqMessage"}, + {SOFT_KEY_EVENT_MESSAGE, "SoftKeyEventMessage"}, + {UNREGISTER_MESSAGE, "UnregisterMessage"}, + {SOFT_KEY_TEMPLATE_REQ_MESSAGE, "SoftKeyTemplateReqMessage"}, + {HEADSET_STATUS_MESSAGE, "HeadsetStatusMessage"}, + {REGISTER_AVAILABLE_LINES_MESSAGE, "RegisterAvailableLinesMessage"}, + {DEVICE_TO_USER_DATA_MESSAGE, "DeviceToUserDataMessage"}, + {DEVICE_TO_USER_DATA_RESPONSE_MESSAGE, "DeviceToUserDataResponseMessage"}, + {SERVICE_URL_STAT_REQ_MESSAGE, "ServiceUrlStatReqMessage"}, + {FEATURE_STAT_REQ_MESSAGE, "FeatureStatReqMessage"}, + {DEVICE_TO_USER_DATA_VERSION1_MESSAGE, "DeviceToUserDataVersion1Message"}, + {DEVICE_TO_USER_DATA_RESPONSE_VERSION1_MESSAGE, "DeviceToUserDataResponseVersion1Message"}, + {REGISTER_ACK_MESSAGE, "RegisterAckMessage"}, + {START_TONE_MESSAGE, "StartToneMessage"}, + {STOP_TONE_MESSAGE, "StopToneMessage"}, + {SET_RINGER_MESSAGE, "SetRingerMessage"}, + {SET_LAMP_MESSAGE, "SetLampMessage"}, + {SET_SPEAKER_MODE_MESSAGE, "SetSpeakerModeMessage"}, + {START_MEDIA_TRANSMISSION_MESSAGE, "StartMediaTransmissionMessage"}, + {STOP_MEDIA_TRANSMISSION_MESSAGE, "StopMediaTransmissionMessage"}, + {CALL_INFO_MESSAGE, "CallInfoMessage"}, + {FORWARD_STAT_MESSAGE, "ForwardStatMessage"}, + {SPEED_DIAL_STAT_RES_MESSAGE, "SpeedDialStatResMessage"}, + {LINE_STAT_RES_MESSAGE, "LineStatResMessage"}, + {CONFIG_STAT_RES_MESSAGE, "ConfigStatResMessage"}, + {DEFINE_TIME_DATE_MESSAGE, "DefineTimeDateMessage"}, + {BUTTON_TEMPLATE_RES_MESSAGE, "ButtonTemplateResMessage"}, + {VERSION_MESSAGE, "VersionMessage"}, + {CAPABILITIES_REQ_MESSAGE, "CapabilitiesReqMessage"}, + {REGISTER_REJECT_MESSAGE, "RegisterRejectMessage"}, + {RESET_MESSAGE, "ResetMessage"}, + {KEEP_ALIVE_ACK_MESSAGE, "KeepAliveAckMessage"}, + {OPEN_RECEIVE_CHANNEL_MESSAGE, "OpenReceiveChannelMessage"}, + {CLOSE_RECEIVE_CHANNEL_MESSAGE, "CloseReceiveChannelMessage"}, + {SOFT_KEY_TEMPLATE_RES_MESSAGE, "SoftKeyTemplateResMessage"}, + {SOFT_KEY_SET_RES_MESSAGE, "SoftKeySetResMessage"}, + {SELECT_SOFT_KEYS_MESSAGE, "SelectSoftKeysMessage"}, + {CALL_STATE_MESSAGE, "CallStateMessage"}, + {DISPLAY_PROMPT_STATUS_MESSAGE, "DisplayPromptStatusMessage"}, + {CLEAR_PROMPT_STATUS_MESSAGE, "ClearPromptStatusMessage"}, + {ACTIVATE_CALL_PLANE_MESSAGE, "ActivateCallPlaneMessage"}, + {UNREGISTER_ACK_MESSAGE, "UnregisterAckMessage"}, + {BACK_SPACE_REQ_MESSAGE, "BackSpaceReqMessage"}, + {DIALED_NUMBER_MESSAGE, "DialedNumberMessage"}, + {USER_TO_DEVICE_DATA_MESSAGE, "UserToDeviceDataMessage"}, + {FEATURE_STAT_RES_MESSAGE, "FeatureResMessage"}, + {DISPLAY_PRI_NOTIFY_MESSAGE, "DisplayPriNotifyMessage"}, + {SERVICE_URL_STAT_RES_MESSAGE, "ServiceUrlStatMessage"}, + {USER_TO_DEVICE_DATA_VERSION1_MESSAGE, "UserToDeviceDataVersion1Message"}, + {XML_ALARM_MESSAGE, "XMLAlarmMessage"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_message_type2str, SKINNY_MESSAGE_TYPES, "UnknownMessage") SKINNY_DECLARE_STR2ID(skinny_str2message_type, SKINNY_MESSAGE_TYPES, -1) struct skinny_table SKINNY_DEVICE_TYPES[] = { - {"Cisco 30 SP+", 1}, - {"Cisco 12 SP+", 2}, - {"Cisco 12 SP", 3}, - {"Cisco 12", 4}, - {"Cisco 30 VIP", 5}, - {"Cisco IP Phone 7910", 6}, - {"Cisco IP Phone 7960", 7}, - {"Cisco IP Phone 7940", 8}, - {"Cisco IP Phone 7935", 9}, - {"Cisco ATA 186", 12}, - {"Cisco IP Phone CP-7921G", 365}, - {"Cisco IP Phone CP-7962G", 404}, - {"Cisco IP Phone CP-7965G", 436}, - {"Cisco IP Phone CP-7961G", 30018}, - {"Cisco IP Phone 7936", 30019}, - {NULL, 0} + {1, "Cisco 30 SP+"}, + {2, "Cisco 12 SP+"}, + {3, "Cisco 12 SP"}, + {4, "Cisco 12"}, + {5, "Cisco 30 VIP"}, + {6, "Cisco IP Phone 7910"}, + {7, "Cisco IP Phone 7960"}, + {8, "Cisco IP Phone 7940"}, + {9, "Cisco IP Phone 7935"}, + {12, "Cisco ATA 186"}, + {365, "Cisco IP Phone CP-7921G"}, + {404, "Cisco IP Phone CP-7962G"}, + {436, "Cisco IP Phone CP-7965G"}, + {30018, "Cisco IP Phone CP-7961G"}, + {30019, "Cisco IP Phone 7936"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_device_type2str, SKINNY_DEVICE_TYPES, "UnknownDeviceType") SKINNY_DECLARE_STR2ID(skinny_str2device_type, SKINNY_DEVICE_TYPES, -1) struct skinny_table SKINNY_RING_TYPES[] = { - {"RingOff", SKINNY_RING_OFF}, - {"RingInside", SKINNY_RING_INSIDE}, - {"RingOutside", SKINNY_RING_OUTSIDE}, - {"RingFeature", SKINNY_RING_FEATURE}, - {NULL, 0} + {SKINNY_RING_OFF, "RingOff"}, + {SKINNY_RING_INSIDE, "RingInside"}, + {SKINNY_RING_OUTSIDE, "RingOutside"}, + {SKINNY_RING_FEATURE, "RingFeature"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_ring_type2str, SKINNY_RING_TYPES, "RingTypeUnknown") SKINNY_DECLARE_STR2ID(skinny_str2ring_type, SKINNY_RING_TYPES, -1) struct skinny_table SKINNY_RING_MODES[] = { - {"RingForever", SKINNY_RING_FOREVER}, - {"RingOnce", SKINNY_RING_ONCE}, - {NULL, 0} + {SKINNY_RING_FOREVER, "RingForever"}, + {SKINNY_RING_ONCE, "RingOnce"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_ring_mode2str, SKINNY_RING_MODES, "RingModeUnknown") SKINNY_DECLARE_STR2ID(skinny_str2ring_mode, SKINNY_RING_MODES, -1) struct skinny_table SKINNY_BUTTONS[] = { - {"Unknown", SKINNY_BUTTON_UNKNOWN}, - {"LastNumberRedial", SKINNY_BUTTON_LAST_NUMBER_REDIAL}, - {"SpeedDial", SKINNY_BUTTON_SPEED_DIAL}, - {"Hold", SKINNY_BUTTON_HOLD}, - {"Transfer", SKINNY_BUTTON_TRANSFER}, - {"Line", SKINNY_BUTTON_LINE}, - {"Voicemail", SKINNY_BUTTON_VOICEMAIL}, - {"Privacy", SKINNY_BUTTON_PRIVACY}, - {"ServiceUrl", SKINNY_BUTTON_SERVICE_URL}, - {"Undefined", SKINNY_BUTTON_UNDEFINED}, - {NULL, 0} + {SKINNY_BUTTON_UNKNOWN, "Unknown"}, + {SKINNY_BUTTON_LAST_NUMBER_REDIAL, "LastNumberRedial"}, + {SKINNY_BUTTON_SPEED_DIAL, "SpeedDial"}, + {SKINNY_BUTTON_HOLD, "Hold"}, + {SKINNY_BUTTON_TRANSFER, "Transfer"}, + {SKINNY_BUTTON_LINE, "Line"}, + {SKINNY_BUTTON_VOICEMAIL, "Voicemail"}, + {SKINNY_BUTTON_PRIVACY, "Privacy"}, + {SKINNY_BUTTON_SERVICE_URL, "ServiceUrl"}, + {SKINNY_BUTTON_UNDEFINED, "Undefined"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_button2str, SKINNY_BUTTONS, "Unknown") SKINNY_DECLARE_STR2ID(skinny_str2button, SKINNY_BUTTONS, -1) struct skinny_table SKINNY_SOFT_KEY_EVENTS[] = { - {"SoftkeyRedial", SOFTKEY_REDIAL}, - {"SoftkeyNewcall", SOFTKEY_NEWCALL}, - {"SoftkeyHold", SOFTKEY_HOLD}, - {"SoftkeyTransfer", SOFTKEY_TRANSFER}, - {"SoftkeyCfwdall", SOFTKEY_CFWDALL}, - {"SoftkeyCfwdbusy", SOFTKEY_CFWDBUSY}, - {"SoftkeyCfwdnoanswer", SOFTKEY_CFWDNOANSWER}, - {"SoftkeyBackspace", SOFTKEY_BACKSPACE}, - {"SoftkeyEndcall", SOFTKEY_ENDCALL}, - {"SoftkeyResume", SOFTKEY_RESUME}, - {"SoftkeyAnswer", SOFTKEY_ANSWER }, - {"SoftkeyInfo", SOFTKEY_INFO}, - {"SoftkeyConfrm", SOFTKEY_CONFRM}, - {"SoftkeyPark", SOFTKEY_PARK}, - {"SoftkeyJoin", SOFTKEY_JOIN}, - {"SoftkeyMeetmeconfrm", SOFTKEY_MEETMECONFRM}, - {"SoftkeyCallpickup", SOFTKEY_CALLPICKUP}, - {"SoftkeyGrpcallpickup", SOFTKEY_GRPCALLPICKUP}, - {"SoftkeyDnd", SOFTKEY_DND}, - {"SoftkeyIdivert", SOFTKEY_IDIVERT}, - {NULL, 0} + {SOFTKEY_REDIAL, "SoftkeyRedial"}, + {SOFTKEY_NEWCALL, "SoftkeyNewcall"}, + {SOFTKEY_HOLD, "SoftkeyHold"}, + {SOFTKEY_TRANSFER, "SoftkeyTransfer"}, + {SOFTKEY_CFWDALL, "SoftkeyCfwdall"}, + {SOFTKEY_CFWDBUSY, "SoftkeyCfwdbusy"}, + {SOFTKEY_CFWDNOANSWER, "SoftkeyCfwdnoanswer"}, + {SOFTKEY_BACKSPACE, "SoftkeyBackspace"}, + {SOFTKEY_ENDCALL, "SoftkeyEndcall"}, + {SOFTKEY_RESUME, "SoftkeyResume"}, + {SOFTKEY_ANSWER , "SoftkeyAnswer"}, + {SOFTKEY_INFO, "SoftkeyInfo"}, + {SOFTKEY_CONFRM, "SoftkeyConfrm"}, + {SOFTKEY_PARK, "SoftkeyPark"}, + {SOFTKEY_JOIN, "SoftkeyJoin"}, + {SOFTKEY_MEETMECONFRM, "SoftkeyMeetmeconfrm"}, + {SOFTKEY_CALLPICKUP, "SoftkeyCallpickup"}, + {SOFTKEY_GRPCALLPICKUP, "SoftkeyGrpcallpickup"}, + {SOFTKEY_DND, "SoftkeyDnd"}, + {SOFTKEY_IDIVERT, "SoftkeyIdivert"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_soft_key_event2str, SKINNY_SOFT_KEY_EVENTS, "SoftkeyUnknown") SKINNY_DECLARE_STR2ID(skinny_str2soft_key_event, SKINNY_SOFT_KEY_EVENTS, 0) struct skinny_table SKINNY_LAMP_MODES[] = { - {"Off", SKINNY_LAMP_OFF}, - {"On", SKINNY_LAMP_ON}, - {"Wink", SKINNY_LAMP_WINK}, - {"Flash", SKINNY_LAMP_FLASH}, - {"Blink", SKINNY_LAMP_BLINK}, - {NULL, 0} + {SKINNY_LAMP_OFF, "Off"}, + {SKINNY_LAMP_ON, "On"}, + {SKINNY_LAMP_WINK, "Wink"}, + {SKINNY_LAMP_FLASH, "Flash"}, + {SKINNY_LAMP_BLINK, "Blink"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_lamp_mode2str, SKINNY_LAMP_MODES, "Unknown") SKINNY_DECLARE_STR2ID(skinny_str2lamp_mode, SKINNY_LAMP_MODES, -1) struct skinny_table SKINNY_SPEAKER_MODES[] = { - {"SpeakerOn", SKINNY_SPEAKER_ON}, - {"SpeakerOff", SKINNY_SPEAKER_OFF}, - {NULL, 0} + {SKINNY_SPEAKER_ON, "SpeakerOn"}, + {SKINNY_SPEAKER_OFF, "SpeakerOff"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_speaker_mode2str, SKINNY_SPEAKER_MODES, "Unknown") SKINNY_DECLARE_STR2ID(skinny_str2speaker_mode, SKINNY_SPEAKER_MODES, -1) struct skinny_table SKINNY_KEY_SETS[] = { - {"KeySetOnHook", SKINNY_KEY_SET_ON_HOOK}, - {"KeySetConnected", SKINNY_KEY_SET_CONNECTED}, - {"KeySetOnHold", SKINNY_KEY_SET_ON_HOLD}, - {"KeySetRingIn", SKINNY_KEY_SET_RING_IN}, - {"KeySetOffHook", SKINNY_KEY_SET_OFF_HOOK}, - {"KeySetConnectedWithTransfer", SKINNY_KEY_SET_CONNECTED_WITH_TRANSFER}, - {"KeySetDigitsAfterDialingFirstDigit", SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT}, - {"KeySetConnectedWithConference", SKINNY_KEY_SET_CONNECTED_WITH_CONFERENCE}, - {"KeySetRingOut", SKINNY_KEY_SET_RING_OUT}, - {"KeySetOffHookWithFeatures", SKINNY_KEY_SET_OFF_HOOK_WITH_FEATURES}, - {"KeySetInUseHint", SKINNY_KEY_SET_IN_USE_HINT}, - {NULL, 0} + {SKINNY_KEY_SET_ON_HOOK, "KeySetOnHook"}, + {SKINNY_KEY_SET_CONNECTED, "KeySetConnected"}, + {SKINNY_KEY_SET_ON_HOLD, "KeySetOnHold"}, + {SKINNY_KEY_SET_RING_IN, "KeySetRingIn"}, + {SKINNY_KEY_SET_OFF_HOOK, "KeySetOffHook"}, + {SKINNY_KEY_SET_CONNECTED_WITH_TRANSFER, "KeySetConnectedWithTransfer"}, + {SKINNY_KEY_SET_DIGITS_AFTER_DIALING_FIRST_DIGIT, "KeySetDigitsAfterDialingFirstDigit"}, + {SKINNY_KEY_SET_CONNECTED_WITH_CONFERENCE, "KeySetConnectedWithConference"}, + {SKINNY_KEY_SET_RING_OUT, "KeySetRingOut"}, + {SKINNY_KEY_SET_OFF_HOOK_WITH_FEATURES, "KeySetOffHookWithFeatures"}, + {SKINNY_KEY_SET_IN_USE_HINT, "KeySetInUseHint"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_soft_key_set2str, SKINNY_KEY_SETS, "UNKNOWN_SOFT_KEY_SET") SKINNY_DECLARE_STR2ID(skinny_str2soft_key_set, SKINNY_KEY_SETS, -1) struct skinny_table SKINNY_CALL_STATES[] = { - {"OffHook", SKINNY_OFF_HOOK}, - {"OnHook", SKINNY_ON_HOOK}, - {"RingOut", SKINNY_RING_OUT}, - {"RingIn", SKINNY_RING_IN}, - {"Connected", SKINNY_CONNECTED}, - {"Busy", SKINNY_BUSY}, - {"LineInUse", SKINNY_LINE_IN_USE}, - {"Hold", SKINNY_HOLD}, - {"CallWaiting", SKINNY_CALL_WAITING}, - {"CallTransfer", SKINNY_CALL_TRANSFER}, - {"CallPark", SKINNY_CALL_PARK}, - {"Proceed", SKINNY_PROCEED}, - {"InUseRemotely", SKINNY_IN_USE_REMOTELY}, - {"InvalidNumber", SKINNY_INVALID_NUMBER}, - {NULL, 0} + {SKINNY_OFF_HOOK, "OffHook"}, + {SKINNY_ON_HOOK, "OnHook"}, + {SKINNY_RING_OUT, "RingOut"}, + {SKINNY_RING_IN, "RingIn"}, + {SKINNY_CONNECTED, "Connected"}, + {SKINNY_BUSY, "Busy"}, + {SKINNY_LINE_IN_USE, "LineInUse"}, + {SKINNY_HOLD, "Hold"}, + {SKINNY_CALL_WAITING, "CallWaiting"}, + {SKINNY_CALL_TRANSFER, "CallTransfer"}, + {SKINNY_CALL_PARK, "CallPark"}, + {SKINNY_PROCEED, "Proceed"}, + {SKINNY_IN_USE_REMOTELY, "InUseRemotely"}, + {SKINNY_INVALID_NUMBER, "InvalidNumber"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_call_state2str, SKINNY_CALL_STATES, "CallStateUnknown") SKINNY_DECLARE_STR2ID(skinny_str2call_state, SKINNY_CALL_STATES, -1) struct skinny_table SKINNY_DEVICE_RESET_TYPES[] = { - {"DeviceReset", SKINNY_DEVICE_RESET}, - {"DeviceRestart", SKINNY_DEVICE_RESTART}, - {NULL, 0} + {SKINNY_DEVICE_RESET, "DeviceReset"}, + {SKINNY_DEVICE_RESTART, "DeviceRestart"}, + {0, NULL} }; SKINNY_DECLARE_ID2STR(skinny_device_reset_type2str, SKINNY_DEVICE_RESET_TYPES, "DeviceResetTypeUnknown") SKINNY_DECLARE_STR2ID(skinny_str2device_reset_type, SKINNY_DEVICE_RESET_TYPES, -1) diff --git a/src/mod/endpoints/mod_skinny/skinny_tables.h b/src/mod/endpoints/mod_skinny/skinny_tables.h index 84f2b6c297..abfdfc2aa0 100644 --- a/src/mod/endpoints/mod_skinny/skinny_tables.h +++ b/src/mod/endpoints/mod_skinny/skinny_tables.h @@ -36,8 +36,8 @@ /* SKINNY TABLES */ /*****************************************************************************/ struct skinny_table { - const char *name; uint32_t id; + const char *name; }; #define SKINNY_DECLARE_ID2STR(func, TABLE, DEFAULT_STR) \ From 496fd5df0fb0fa20e586b2a2f4e2a9750021882e Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Sun, 10 Apr 2011 23:16:56 +0200 Subject: [PATCH 28/29] Skinny: more verbose log when pre-register message received --- src/mod/endpoints/mod_skinny/skinny_server.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index dac75facd7..2c338d6ce5 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -2041,8 +2041,8 @@ switch_status_t skinny_handle_request(listener_t *listener, skinny_message_t *re listener->device_name, listener->device_instance); } if(zstr(listener->device_name) && request->type != REGISTER_MESSAGE && request->type != ALARM_MESSAGE && request->type != XML_ALARM_MESSAGE) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Device should send a register message first.\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, + "Device should send a register message first. Received %s (type=%x,length=%d).\n", skinny_message_type2str(request->type), request->type, request->length); return SWITCH_STATUS_FALSE; } switch(request->type) { @@ -2110,7 +2110,7 @@ switch_status_t skinny_handle_request(listener_t *listener, skinny_message_t *re return skinny_handle_xml_alarm(listener, request); default: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Unhandled request %s (type=%x,length=%d).\n", skinny_message_type2str(request->type), request->type, request->length); + "Unhandled %s (type=%x,length=%d).\n", skinny_message_type2str(request->type), request->type, request->length); return SWITCH_STATUS_SUCCESS; } } From 02b9a3d5443647ea6afafd919b801a5230648bd0 Mon Sep 17 00:00:00 2001 From: Buklov Boris Date: Mon, 11 Apr 2011 17:48:19 +0400 Subject: [PATCH 29/29] fix SST_SHORT_DATE_TIME --- src/mod/say/mod_say_ru/mod_say_ru.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mod/say/mod_say_ru/mod_say_ru.c b/src/mod/say/mod_say_ru/mod_say_ru.c index 51a0cc4e2b..15d95438be 100644 --- a/src/mod/say/mod_say_ru/mod_say_ru.c +++ b/src/mod/say/mod_say_ru/mod_say_ru.c @@ -605,7 +605,7 @@ static switch_new_say_callback_ru_t choose_callback(switch_say_args_t *say_args) case SST_CURRENT_TIME: say_cb = ru_say_time; break; - + case SST_SHORT_DATE_TIME: case SST_CURRENT_DATE_TIME: say_cb = ru_say_time; break;