From 42f534fa6ac5de9e21e54fdd95d12b3d060e537d Mon Sep 17 00:00:00 2001 From: Brian West Date: Tue, 12 Oct 2010 11:41:28 -0500 Subject: [PATCH 001/230] FS-2773 --- src/mod/endpoints/mod_sofia/sofia_reg.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index 285dc8ae3a..81cd534834 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -1471,10 +1471,12 @@ void sofia_reg_handle_sip_i_register(nua_t *nua, sofia_profile_t *profile, nua_h } } - if (!is_nat && sip && sip->sip_via && sip->sip_via->v_port && - atoi(sip->sip_via->v_port) == 5060 && network_port != 5060 ) { - is_nat = "via port"; - } + /* FS-2773: This causes issues with Cisco phones. + * if (!is_nat && sip && sip->sip_via && sip->sip_via->v_port && + * atoi(sip->sip_via->v_port) == 5060 && network_port != 5060 ) { + * is_nat = "via port"; + * } + */ if (!is_nat && profile->nat_acl_count) { uint32_t x = 0; From c1d41dd989539b8dfdaa19aaf21adf73eaf8b15a Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 12 Oct 2010 12:28:04 -0500 Subject: [PATCH 002/230] only pause recording media bugs in fifo --- src/include/switch_types.h | 3 ++- .../mod_spandsp/mod_spandsp_dsp.c | 2 +- src/switch_core_io.c | 18 +++++++++++++++--- src/switch_ivr_async.c | 19 +++++++++++-------- 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/include/switch_types.h b/src/include/switch_types.h index b1fc627354..d027549bce 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -1266,7 +1266,8 @@ typedef enum { SMBF_STEREO = (1 << 5), SMBF_ANSWER_REQ = (1 << 6), SMBF_THREAD_LOCK = (1 << 7), - SMBF_PRUNE = (1 << 8) + SMBF_PRUNE = (1 << 8), + SMBF_NO_PAUSE = (1 << 9) } switch_media_bug_flag_enum_t; typedef uint32_t switch_media_bug_flag_t; diff --git a/src/mod/applications/mod_spandsp/mod_spandsp_dsp.c b/src/mod/applications/mod_spandsp/mod_spandsp_dsp.c index aa7d05cf9e..005924194f 100644 --- a/src/mod/applications/mod_spandsp/mod_spandsp_dsp.c +++ b/src/mod/applications/mod_spandsp/mod_spandsp_dsp.c @@ -140,7 +140,7 @@ switch_status_t spandsp_inband_dtmf_session(switch_core_session_t *session) } if ((status = switch_core_media_bug_add(session, "spandsp_dtmf_detect", NULL, - inband_dtmf_callback, pvt, 0, SMBF_READ_REPLACE, &bug)) != SWITCH_STATUS_SUCCESS) { + inband_dtmf_callback, pvt, 0, SMBF_READ_REPLACE | SMBF_NO_PAUSE, &bug)) != SWITCH_STATUS_SUCCESS) { return status; } diff --git a/src/switch_core_io.c b/src/switch_core_io.c index 4e6d2fc6a2..7e63e88db7 100644 --- a/src/switch_core_io.c +++ b/src/switch_core_io.c @@ -367,13 +367,17 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi } } - if (session->bugs && !switch_channel_test_flag(session->channel, CF_PAUSE_BUGS)) { + if (session->bugs) { switch_media_bug_t *bp; switch_bool_t ok = SWITCH_TRUE; int prune = 0; switch_thread_rwlock_rdlock(session->bug_rwlock); for (bp = session->bugs; bp; bp = bp->next) { + if (switch_channel_test_flag(session->channel, CF_PAUSE_BUGS) && !switch_core_media_bug_test_flag(bp, SMBF_NO_PAUSE)) { + continue; + } + if (!switch_channel_test_flag(session->channel, CF_ANSWERED) && switch_core_media_bug_test_flag(bp, SMBF_ANSWER_REQ)) { continue; } @@ -528,12 +532,16 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi if (flag & SFF_CNG) { switch_set_flag((*frame), SFF_CNG); } - if (session->bugs && !switch_channel_test_flag(session->channel, CF_PAUSE_BUGS)) { + if (session->bugs) { switch_media_bug_t *bp; switch_bool_t ok = SWITCH_TRUE; int prune = 0; switch_thread_rwlock_rdlock(session->bug_rwlock); for (bp = session->bugs; bp; bp = bp->next) { + if (switch_channel_test_flag(session->channel, CF_PAUSE_BUGS) && !switch_core_media_bug_test_flag(bp, SMBF_NO_PAUSE)) { + continue; + } + if (!switch_channel_test_flag(session->channel, CF_ANSWERED) && switch_core_media_bug_test_flag(bp, SMBF_ANSWER_REQ)) { continue; } @@ -814,7 +822,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess - if (session->bugs && !switch_channel_test_flag(session->channel, CF_PAUSE_BUGS)) { + if (session->bugs) { switch_media_bug_t *bp; int prune = 0; @@ -825,6 +833,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess continue; } + if (switch_channel_test_flag(session->channel, CF_PAUSE_BUGS) && !switch_core_media_bug_test_flag(bp, SMBF_NO_PAUSE)) { + continue; + } + if (!switch_channel_test_flag(session->channel, CF_ANSWERED) && switch_core_media_bug_test_flag(bp, SMBF_ANSWER_REQ)) { continue; } diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 9bfa27eae7..7cda473565 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -827,10 +827,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_displace_session(switch_core_session_ if (flags && strchr(flags, 'r')) { status = switch_core_media_bug_add(session, "displace", file, - read_displace_callback, dh, to, SMBF_WRITE_REPLACE | SMBF_READ_REPLACE, &bug); + read_displace_callback, dh, to, SMBF_WRITE_REPLACE | SMBF_READ_REPLACE | SMBF_NO_PAUSE, &bug); } else { status = switch_core_media_bug_add(session, "displace", file, - write_displace_callback, dh, to, SMBF_WRITE_REPLACE | SMBF_READ_REPLACE, &bug); + write_displace_callback, dh, to, SMBF_WRITE_REPLACE | SMBF_READ_REPLACE | SMBF_NO_PAUSE, &bug); } if (status != SWITCH_STATUS_SUCCESS) { @@ -1166,7 +1166,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_eavesdrop_session(switch_core_session if (switch_core_media_bug_add(tsession, "eavesdrop", uuid, eavesdrop_callback, ep, 0, - SMBF_READ_STREAM | SMBF_WRITE_STREAM | SMBF_READ_REPLACE | SMBF_WRITE_REPLACE | SMBF_READ_PING | SMBF_THREAD_LOCK, + SMBF_READ_STREAM | SMBF_WRITE_STREAM | SMBF_READ_REPLACE | SMBF_WRITE_REPLACE | + SMBF_READ_PING | SMBF_THREAD_LOCK | SMBF_NO_PAUSE, &bug) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Cannot attach bug\n"); goto end; @@ -1622,7 +1623,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_preprocess_session(switch_core_sessio switch_media_bug_t *bug; switch_status_t status; time_t to = 0; - switch_media_bug_flag_t flags = 0; + switch_media_bug_flag_t flags = SMBF_NO_PAUSE; switch_codec_implementation_t read_impl = { 0 }; pp_cb_t *cb; int update = 0; @@ -1885,7 +1886,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_audio(switch_core_session_t * switch_status_t status; switch_session_audio_t *pvt; switch_codec_implementation_t read_impl = { 0 }; - int existing = 0, c_read = 0, c_write = 0, flags = 0; + int existing = 0, c_read = 0, c_write = 0, flags = SMBF_NO_PAUSE; if (switch_channel_pre_answer(channel) != SWITCH_STATUS_SUCCESS) { return SWITCH_STATUS_FALSE; @@ -2035,7 +2036,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_inband_dtmf_session(switch_core_sessi } if ((status = switch_core_media_bug_add(session, "inband_dtmf", NULL, - inband_dtmf_callback, pvt, 0, SMBF_READ_REPLACE, &bug)) != SWITCH_STATUS_SUCCESS) { + inband_dtmf_callback, pvt, 0, SMBF_READ_REPLACE | SMBF_NO_PAUSE, &bug)) != SWITCH_STATUS_SUCCESS) { return status; } @@ -2236,7 +2237,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_inband_dtmf_generate_session(switch_c if ((status = switch_core_media_bug_add(session, "inband_dtmf_generate", NULL, inband_dtmf_generate_callback, pvt, 0, - pvt->read ? SMBF_READ_REPLACE : SMBF_WRITE_REPLACE, &bug)) != SWITCH_STATUS_SUCCESS) { + SMBF_NO_PAUSE | pvt->read ? SMBF_READ_REPLACE : SMBF_WRITE_REPLACE , &bug)) != SWITCH_STATUS_SUCCESS) { return status; } @@ -2540,6 +2541,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_tone_detect_session(switch_core_sessi } } + bflags |= SMBF_NO_PAUSE; + if (cont->bug_running) { status = SWITCH_STATUS_SUCCESS; switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s bug already running\n", switch_channel_get_name(channel)); @@ -3192,7 +3195,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech(switch_core_session_t * } if ((status = switch_core_media_bug_add(session, "detect_speech", key, - speech_callback, sth, 0, SMBF_READ_STREAM, &sth->bug)) != SWITCH_STATUS_SUCCESS) { + speech_callback, sth, 0, SMBF_READ_STREAM | SMBF_NO_PAUSE, &sth->bug)) != SWITCH_STATUS_SUCCESS) { switch_core_asr_close(ah, &flags); return status; } From 89b1760159ab644277baf14068032ba6f57d7c01 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 12 Oct 2010 12:35:44 -0400 Subject: [PATCH 003/230] Add fs_encode tool --- Makefile.am | 10 +- src/fs_encode.c | 226 +++++++++++++++++++++++++++++++++++ src/switch_loadable_module.c | 4 +- 3 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 src/fs_encode.c diff --git a/Makefile.am b/Makefile.am index b11e3ff988..be6440dc73 100644 --- a/Makefile.am +++ b/Makefile.am @@ -267,7 +267,7 @@ src/include/switch_swigable_cpp.h: $(switch_srcdir)/src/include/switch_cpp.h ## ## Applications ## -bin_PROGRAMS = freeswitch fs_cli fs_ivrd tone2wav +bin_PROGRAMS = freeswitch fs_cli fs_ivrd tone2wav fs_encode ## ## fs_cli () @@ -281,6 +281,14 @@ fs_cli_CFLAGS += -DHAVE_EDITLINE -I$(switch_srcdir)/libs/libedit/src fs_cli_LDADD = libs/libedit/src/.libs/libedit.a endif +## +## fs_encode +## +fs_encode_SOURCES = src/fs_encode.c +fs_encode_CFLAGS = $(AM_CFLAGS) +fs_encode_lDFlAGS = $(AM_LDFLAGS) $(CORE_LIBS) +fs_encode_LDADD = libfreeswitch.la + ## ## tone2wav () ## diff --git a/src/fs_encode.c b/src/fs_encode.c new file mode 100644 index 0000000000..03468e804d --- /dev/null +++ b/src/fs_encode.c @@ -0,0 +1,226 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2005-2010, 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. + * + * Contributor(s): + * + * Mathieu Rene + * + * fs_encode.c -- Encode a native file + * + */ + +#ifndef _XOPEN_SOURCE +#define _XOPEN_SOURCE 600 +#endif + +#ifndef WIN32 +#ifdef HAVE_SETRLIMIT +#include +#endif +#endif + +#include +#include + + +/* Picky compiler */ +#ifdef __ICC +#pragma warning (disable:167) +#endif + +int main(int argc, char *argv[]) +{ + int r = 1; + switch_bool_t verbose = SWITCH_FALSE; + const char *err = NULL; + int i; + char *extra_modules[100] = { 0 }; + int extra_modules_count = 0; + int cmd_fail = 0; + const char *fmtp = ""; + int ptime = 20; + const char *input, *output, *format = NULL; + int channels = 1; + int rate = 8000; + switch_file_handle_t fh_input = { 0 }, fh_output = { 0 }; + switch_codec_t codec = { 0 }; + char buf[1024]; + switch_size_t len = sizeof(buf)/2; + switch_memory_pool_t *pool; + + for (i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + switch(argv[i][1]) { + case 'l': + i++; + /* Load extra modules */ + if (strchr(argv[i], ',')) { + extra_modules_count = switch_split(argv[i], ',', extra_modules); + } else { + extra_modules_count = 1; + extra_modules[0] = argv[i]; + } + break; + case 'f': + fmtp = argv[++i]; + break; + case 'p': + ptime = atoi(argv[++i]); + break; + case 'r': + rate = atoi(argv[++i]); + break; + case 'v': + verbose = SWITCH_TRUE; + break; + default: + printf("Command line option not recognized: %s\n", argv[i]); + cmd_fail = 1; + } + } else { + break; + } + } + + if (argc - i < 2 || cmd_fail) { + goto usage; + } + + input = argv[i++]; + output = argv[i++]; + if (zstr(input) || zstr(output) || !(format = strchr(output, '.'))) { + goto usage; + } + + format++; + + if (switch_core_init(SCF_MINIMAL, verbose, &err) != SWITCH_STATUS_SUCCESS) { + printf("Cannot init core [%s]\n", err); + r = 1; + goto end; + } + + switch_loadable_module_init(SWITCH_FALSE); + + for (i = 0; i < extra_modules_count; i++) { + if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) extra_modules[i], SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { + printf("Cannot init %s [%s]\n", extra_modules[i], err); + r = 1; + goto end; + } + } + + if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_sndfile", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { + printf("Cannot init mod_sndfile [%s]\n", err); + r = 1; + goto end; + } + + if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_native_file", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { + printf("Cannot init mod_native_file [%s]\n", err); + r = 1; + goto end; + } + + switch_core_new_memory_pool(&pool); + if (verbose) { + fprintf(stderr, "Opening file %s\n", input); + } + if (switch_core_file_open(&fh_input, input, channels, rate, SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, NULL) != SWITCH_STATUS_SUCCESS) { + fprintf(stderr, "Couldn't open %s\n", input); + r = 1; + goto end; + } + + + if (verbose) { + fprintf(stderr, "Opening file %s\n", output); + } + if (switch_core_file_open(&fh_output, output, channels, rate, SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_NATIVE, NULL) != SWITCH_STATUS_SUCCESS) { + fprintf(stderr, "Couldn't open %s\n", output); + r = 1; + goto end; + } + + if (switch_test_flag(&fh_input, SWITCH_FILE_NATIVE)) { + fprintf(stderr, "Input as native file is not implemented\n"); + goto end; + } + + if (switch_core_codec_init(&codec, format, fmtp, rate, ptime, channels, SWITCH_CODEC_FLAG_ENCODE, NULL, pool) != SWITCH_STATUS_SUCCESS) { + fprintf(stderr, "Couldn't initialize codec for %s@%dh@%di\n", format, rate, ptime); + goto end; + } + + while (switch_core_file_read(&fh_input, buf, &len) == SWITCH_STATUS_SUCCESS) { + char encode_buf[1024]; + uint32_t encoded_len = sizeof(buf); + uint32_t encoded_rate = rate; + unsigned int flags = 0; + + if (switch_core_codec_encode(&codec, NULL, buf, len*2, rate, encode_buf, &encoded_len, &encoded_rate, &flags) != SWITCH_STATUS_SUCCESS) { + fprintf(stderr, "Codec encoder error\n"); + goto end; + } + + len = encoded_len; + if (switch_core_file_write(&fh_output, encode_buf, &len) != SWITCH_STATUS_SUCCESS) { + fprintf(stderr, "Write error\n"); + goto end; + } + + len = sizeof(buf)/2; + } + + r = 0; + +end: + switch_core_file_close(&fh_input); + switch_core_file_close(&fh_output); + + if (pool) { + switch_core_destroy_memory_pool(&pool); + } + switch_core_destroy(); + return r; +usage: + printf("Usage: %s [options] input output\n\n", argv[0]); + printf("The output must end in the format, eg: myfile.SPEEX\n"); + printf("\t\t -l module[,module]\t Load additional modules (coma-separated)\n"); + printf("\t\t -f format\t fmtp to pass to the codec\n"); + printf("\t\t -p ptime\t ptime to use while encoding\n"); + printf("\t\t -r rate\t sampling rate\n"); + printf("\t\t -v\t verbose\n"); + return 1; +} + +/* For Emacs: + * Local Variables: + * mode:c + * indent-tabs-mode:t + * tab-width:4 + * c-basic-offset:4 + * End: + * For VIM: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: + */ diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index 7e08f71472..5645ea5fec 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -1270,11 +1270,11 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_init(switch_bool_t autolo switch_core_hash_init_nocase(&loadable_modules.dialplan_hash, loadable_modules.pool); switch_mutex_init(&loadable_modules.mutex, SWITCH_MUTEX_NESTED, loadable_modules.pool); - if (!autoload) return SWITCH_STATUS_SUCCESS; - switch_loadable_module_load_module("", "CORE_SOFTTIMER_MODULE", SWITCH_FALSE, &err); switch_loadable_module_load_module("", "CORE_PCM_MODULE", SWITCH_FALSE, &err); + if (!autoload) return SWITCH_STATUS_SUCCESS; + if ((xml = switch_xml_open_cfg(cf, &cfg, NULL))) { switch_xml_t mods, ld; if ((mods = switch_xml_child(cfg, "modules"))) { From 19e86f7c24ca3c302e261f3f683f8f98d9bf3d9a Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 12 Oct 2010 14:21:08 -0400 Subject: [PATCH 004/230] fix Makefile.am typo in last commit --- Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index be6440dc73..944511dac9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -282,11 +282,11 @@ fs_cli_LDADD = libs/libedit/src/.libs/libedit.a endif ## -## fs_encode +## fs_encode () ## fs_encode_SOURCES = src/fs_encode.c fs_encode_CFLAGS = $(AM_CFLAGS) -fs_encode_lDFlAGS = $(AM_LDFLAGS) $(CORE_LIBS) +fs_encode_LDFLAGS = $(AM_LDFLAGS) $(CORE_LIBS) fs_encode_LDADD = libfreeswitch.la ## From c25476b5687402312533d40f546775bd2919de8a Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 12 Oct 2010 14:23:55 -0400 Subject: [PATCH 005/230] fs_encode: check for file.file_interface before closing --- src/fs_encode.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/fs_encode.c b/src/fs_encode.c index 03468e804d..0f5b034a6e 100644 --- a/src/fs_encode.c +++ b/src/fs_encode.c @@ -195,8 +195,14 @@ int main(int argc, char *argv[]) r = 0; end: - switch_core_file_close(&fh_input); - switch_core_file_close(&fh_output); + + if (fh_input.file_interface) { + switch_core_file_close(&fh_input); + } + + if (fh_output.file_interface) { + switch_core_file_close(&fh_output); + } if (pool) { switch_core_destroy_memory_pool(&pool); From b9a8bcd5c3d2fa0be826cac19c24d4a13a9bb0bc Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 12 Oct 2010 14:31:28 -0400 Subject: [PATCH 006/230] fs_encode: add bitrate argument --- src/fs_encode.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/fs_encode.c b/src/fs_encode.c index 0f5b034a6e..abfd23f22a 100644 --- a/src/fs_encode.c +++ b/src/fs_encode.c @@ -67,6 +67,7 @@ int main(int argc, char *argv[]) char buf[1024]; switch_size_t len = sizeof(buf)/2; switch_memory_pool_t *pool; + int bitrate = 0; for (i = 1; i < argc; i++) { if (argv[i][0] == '-') { @@ -90,6 +91,9 @@ int main(int argc, char *argv[]) case 'r': rate = atoi(argv[++i]); break; + case 'b': + bitrate = atoi(argv[++i]); + break; case 'v': verbose = SWITCH_TRUE; break; @@ -116,7 +120,6 @@ int main(int argc, char *argv[]) if (switch_core_init(SCF_MINIMAL, verbose, &err) != SWITCH_STATUS_SUCCESS) { printf("Cannot init core [%s]\n", err); - r = 1; goto end; } @@ -125,20 +128,17 @@ int main(int argc, char *argv[]) for (i = 0; i < extra_modules_count; i++) { if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) extra_modules[i], SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { printf("Cannot init %s [%s]\n", extra_modules[i], err); - r = 1; goto end; } } if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_sndfile", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { printf("Cannot init mod_sndfile [%s]\n", err); - r = 1; goto end; } if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_native_file", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { printf("Cannot init mod_native_file [%s]\n", err); - r = 1; goto end; } @@ -148,7 +148,6 @@ int main(int argc, char *argv[]) } if (switch_core_file_open(&fh_input, input, channels, rate, SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, NULL) != SWITCH_STATUS_SUCCESS) { fprintf(stderr, "Couldn't open %s\n", input); - r = 1; goto end; } @@ -158,7 +157,6 @@ int main(int argc, char *argv[]) } if (switch_core_file_open(&fh_output, output, channels, rate, SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_NATIVE, NULL) != SWITCH_STATUS_SUCCESS) { fprintf(stderr, "Couldn't open %s\n", output); - r = 1; goto end; } @@ -167,7 +165,7 @@ int main(int argc, char *argv[]) goto end; } - if (switch_core_codec_init(&codec, format, fmtp, rate, ptime, channels, SWITCH_CODEC_FLAG_ENCODE, NULL, pool) != SWITCH_STATUS_SUCCESS) { + if (switch_core_codec_init_with_bitrate(&codec, format, fmtp, rate, ptime, channels, bitrate, SWITCH_CODEC_FLAG_ENCODE, NULL, pool) != SWITCH_STATUS_SUCCESS) { fprintf(stderr, "Couldn't initialize codec for %s@%dh@%di\n", format, rate, ptime); goto end; } @@ -213,10 +211,11 @@ usage: printf("Usage: %s [options] input output\n\n", argv[0]); printf("The output must end in the format, eg: myfile.SPEEX\n"); printf("\t\t -l module[,module]\t Load additional modules (coma-separated)\n"); - printf("\t\t -f format\t fmtp to pass to the codec\n"); - printf("\t\t -p ptime\t ptime to use while encoding\n"); - printf("\t\t -r rate\t sampling rate\n"); - printf("\t\t -v\t verbose\n"); + printf("\t\t -f format\t\t fmtp to pass to the codec\n"); + printf("\t\t -p ptime\t\t ptime to use while encoding\n"); + printf("\t\t -r rate\t\t sampling rate\n"); + printf("\t\t -b bitrate\t\t codec bitrate (if supported)\n"); + printf("\t\t -v\t\t\t verbose\n"); return 1; } From 69555111d740458207f72f33a25478f249de6c59 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Tue, 12 Oct 2010 14:08:17 -0500 Subject: [PATCH 007/230] start of msbuild enabled automated installers for Win32/X64 --- Freeswitch.2010.sln | 509 ++++++++++++++++++++++++++++++++ Setup/Setup.wixproj | 695 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1204 insertions(+) create mode 100644 Setup/Setup.wixproj diff --git a/Freeswitch.2010.sln b/Freeswitch.2010.sln index 4729745778..a7af2ca13c 100644 --- a/Freeswitch.2010.sln +++ b/Freeswitch.2010.sln @@ -705,1734 +705,2243 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_h323", "src\mod\endpoin EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_distributor", "src\mod\applications\mod_distributor\mod_distributor.2010.vcxproj", "{5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}" EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup", "Setup\Setup.wixproj", "{47213370-B933-487D-9F45-BCA26D7E2B6F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution All|Win32 = All|Win32 All|x64 = All|x64 + All|x86 = All|x86 Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Win32 = Release|Win32 Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|Win32.ActiveCfg = Release|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64.ActiveCfg = Release|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64.Build.0 = Release|x64 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x86.ActiveCfg = Release|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Win32.ActiveCfg = Debug|Win32 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Win32.Build.0 = Debug|Win32 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64.ActiveCfg = Debug|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64.Build.0 = Debug|x64 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x86.ActiveCfg = Debug|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Win32.ActiveCfg = Release|Win32 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Win32.Build.0 = Release|Win32 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.ActiveCfg = Release|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.Build.0 = Release|x64 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x86.ActiveCfg = Release|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|Win32.ActiveCfg = Release|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64.ActiveCfg = Release|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64.Build.0 = Release|x64 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x86.ActiveCfg = Release|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.ActiveCfg = Debug|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.Build.0 = Debug|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64.ActiveCfg = Debug|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64.Build.0 = Debug|x64 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x86.ActiveCfg = Debug|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.ActiveCfg = Release|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.Build.0 = Release|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.ActiveCfg = Release|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.Build.0 = Release|x64 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x86.ActiveCfg = Release|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|Win32.ActiveCfg = Release Passthrough|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64.ActiveCfg = Release Passthrough|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64.Build.0 = Release Passthrough|x64 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x86.ActiveCfg = Release|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.Build.0 = Debug Passthrough|Win32 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.ActiveCfg = Debug Passthrough|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.Build.0 = Debug Passthrough|x64 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x86.ActiveCfg = Debug|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.ActiveCfg = Release Passthrough|Win32 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.Build.0 = Release Passthrough|Win32 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.ActiveCfg = Release Passthrough|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.Build.0 = Release Passthrough|x64 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x86.ActiveCfg = Release|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|Win32.ActiveCfg = Release|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64.ActiveCfg = Release|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64.Build.0 = Release|x64 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x86.ActiveCfg = Release|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.ActiveCfg = Debug|Win32 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.Build.0 = Debug|Win32 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64.ActiveCfg = Debug|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64.Build.0 = Debug|x64 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x86.ActiveCfg = Debug|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.ActiveCfg = Release|Win32 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.Build.0 = Release|Win32 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.ActiveCfg = Release|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.Build.0 = Release|x64 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x86.ActiveCfg = Release|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|Win32.ActiveCfg = Release|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64.ActiveCfg = Release|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64.Build.0 = Release|x64 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x86.ActiveCfg = Release|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.ActiveCfg = Debug|Win32 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.Build.0 = Debug|Win32 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64.ActiveCfg = Debug|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64.Build.0 = Debug|x64 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x86.ActiveCfg = Debug|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.ActiveCfg = Release|Win32 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.Build.0 = Release|Win32 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.ActiveCfg = Release|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.Build.0 = Release|x64 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x86.ActiveCfg = Release|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|Win32.ActiveCfg = Release|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64.ActiveCfg = Release|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64.Build.0 = Release|x64 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x86.ActiveCfg = Release|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.ActiveCfg = Debug|Win32 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.Build.0 = Debug|Win32 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64.ActiveCfg = Debug|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64.Build.0 = Debug|x64 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x86.ActiveCfg = Debug|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.ActiveCfg = Release|Win32 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.Build.0 = Release|Win32 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.ActiveCfg = Release|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.Build.0 = Release|x64 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x86.ActiveCfg = Release|x64 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|Win32.ActiveCfg = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|x64.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|x86.ActiveCfg = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Win32.ActiveCfg = Debug|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|x64.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|x86.ActiveCfg = Debug|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Win32.ActiveCfg = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x64.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x86.ActiveCfg = Release|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|Win32.ActiveCfg = Release|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64.ActiveCfg = Release|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64.Build.0 = Release|x64 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x86.ActiveCfg = Release|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.ActiveCfg = Debug|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.Build.0 = Debug|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64.ActiveCfg = Debug|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64.Build.0 = Debug|x64 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x86.ActiveCfg = Debug|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.ActiveCfg = Release|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.Build.0 = Release|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.ActiveCfg = Release|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.Build.0 = Release|x64 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x86.ActiveCfg = Release|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|Win32.ActiveCfg = Release MS-LDAP|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64.ActiveCfg = Release MS-LDAP|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64.Build.0 = Release MS-LDAP|x64 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x86.ActiveCfg = Release|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Win32.ActiveCfg = Debug MS-LDAP|Win32 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Win32.Build.0 = Debug MS-LDAP|Win32 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.ActiveCfg = Debug MS-LDAP|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.Build.0 = Debug MS-LDAP|x64 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x86.ActiveCfg = Debug|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Win32.ActiveCfg = Release MS-LDAP|Win32 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Win32.Build.0 = Release MS-LDAP|Win32 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.ActiveCfg = Release MS-LDAP|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.Build.0 = Release MS-LDAP|x64 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x86.ActiveCfg = Release|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|Win32.ActiveCfg = Release|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64.ActiveCfg = Release|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64.Build.0 = Release|x64 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x86.ActiveCfg = Release|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Win32.ActiveCfg = Debug|Win32 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Win32.Build.0 = Debug|Win32 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64.ActiveCfg = Debug|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64.Build.0 = Debug|x64 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x86.ActiveCfg = Debug|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Win32.ActiveCfg = Release|Win32 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Win32.Build.0 = Release|Win32 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.ActiveCfg = Release|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.Build.0 = Release|x64 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x86.ActiveCfg = Release|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.All|Win32.ActiveCfg = Release|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64.ActiveCfg = Release|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64.Build.0 = Release|x64 + {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x86.ActiveCfg = Release|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Win32.ActiveCfg = Debug|Win32 {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Win32.Build.0 = Debug|Win32 {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64.ActiveCfg = Debug|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64.Build.0 = Debug|x64 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x86.ActiveCfg = Debug|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Win32.ActiveCfg = Release|Win32 {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Win32.Build.0 = Release|Win32 {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.ActiveCfg = Release|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.Build.0 = Release|x64 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x86.ActiveCfg = Release|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.All|Win32.ActiveCfg = Release|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64.ActiveCfg = Release|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64.Build.0 = Release|x64 + {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x86.ActiveCfg = Release|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.ActiveCfg = Debug|Win32 {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.Build.0 = Debug|Win32 {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64.ActiveCfg = Debug|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64.Build.0 = Debug|x64 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x86.ActiveCfg = Debug|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.ActiveCfg = Release|Win32 {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.Build.0 = Release|Win32 {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.ActiveCfg = Release|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.Build.0 = Release|x64 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x86.ActiveCfg = Release|x64 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|Win32.ActiveCfg = Release|x64 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64.ActiveCfg = Release|x64 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64.Build.0 = Release|x64 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x86.ActiveCfg = Release|x64 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.ActiveCfg = Debug|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.Build.0 = Debug|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64.ActiveCfg = Debug|x64 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x86.ActiveCfg = Debug|x64 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.ActiveCfg = Release|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.Build.0 = Release|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.ActiveCfg = Release|x64 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x86.ActiveCfg = Release|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.All|Win32.ActiveCfg = Release|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.ActiveCfg = Release|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.Build.0 = Release|x64 + {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x86.ActiveCfg = Release|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Win32.ActiveCfg = Debug|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64.ActiveCfg = Debug|x64 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x86.ActiveCfg = Debug|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Win32.ActiveCfg = Release|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|x64 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x86.ActiveCfg = Release|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|Win32.ActiveCfg = Release|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64.ActiveCfg = Release|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64.Build.0 = Release|x64 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x86.ActiveCfg = Release|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.ActiveCfg = Debug|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.Build.0 = Debug|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64.ActiveCfg = Debug|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64.Build.0 = Debug|x64 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x86.ActiveCfg = Debug|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.ActiveCfg = Release|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.Build.0 = Release|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.ActiveCfg = Release|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.Build.0 = Release|x64 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x86.ActiveCfg = Release|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|Win32.ActiveCfg = Release|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64.ActiveCfg = Release|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64.Build.0 = Release|x64 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x86.ActiveCfg = Release|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.ActiveCfg = Debug|Win32 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.Build.0 = Debug|Win32 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64.ActiveCfg = Debug|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64.Build.0 = Debug|x64 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x86.ActiveCfg = Debug|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.ActiveCfg = Release|Win32 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.Build.0 = Release|Win32 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.ActiveCfg = Release|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.Build.0 = Release|x64 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x86.ActiveCfg = Release|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|Win32.ActiveCfg = Release|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64.ActiveCfg = Release|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64.Build.0 = Release|x64 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x86.ActiveCfg = Release|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.ActiveCfg = Debug|Win32 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.Build.0 = Debug|Win32 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64.ActiveCfg = Debug|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64.Build.0 = Debug|x64 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x86.ActiveCfg = Debug|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.ActiveCfg = Release|Win32 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.Build.0 = Release|Win32 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.ActiveCfg = Release|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.Build.0 = Release|x64 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x86.ActiveCfg = Release|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.All|Win32.ActiveCfg = Release|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64.ActiveCfg = Release|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64.Build.0 = Release|x64 + {1C453396-D912-4213-89FD-9B489162B7B5}.All|x86.ActiveCfg = Release|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.ActiveCfg = Debug|Win32 {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.Build.0 = Debug|Win32 {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64.ActiveCfg = Debug|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64.Build.0 = Debug|x64 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x86.ActiveCfg = Debug|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.ActiveCfg = Release|Win32 {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.Build.0 = Release|Win32 {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.ActiveCfg = Release|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.Build.0 = Release|x64 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x86.ActiveCfg = Release|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|Win32.ActiveCfg = Release|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64.ActiveCfg = Release|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64.Build.0 = Release|x64 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x86.ActiveCfg = Release|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.ActiveCfg = Debug|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.Build.0 = Debug|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64.ActiveCfg = Debug|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64.Build.0 = Debug|x64 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x86.ActiveCfg = Debug|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.ActiveCfg = Release|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.Build.0 = Release|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.ActiveCfg = Release|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.Build.0 = Release|x64 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x86.ActiveCfg = Release|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|Win32.ActiveCfg = Release|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.ActiveCfg = Release|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.Build.0 = Release|x64 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x86.ActiveCfg = Release|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.ActiveCfg = Debug|Win32 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.Build.0 = Debug|Win32 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.ActiveCfg = Debug|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.Build.0 = Debug|x64 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x86.ActiveCfg = Debug|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.ActiveCfg = Release|Win32 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.Build.0 = Release|Win32 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.ActiveCfg = Release|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.Build.0 = Release|x64 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x86.ActiveCfg = Release|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.All|Win32.ActiveCfg = Release|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.ActiveCfg = Release|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.Build.0 = Release|x64 + {C24FB505-05D7-4319-8485-7540B44C8603}.All|x86.ActiveCfg = Release|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.ActiveCfg = Debug|Win32 {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.Build.0 = Debug|Win32 {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64.ActiveCfg = Debug|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64.Build.0 = Debug|x64 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x86.ActiveCfg = Debug|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.ActiveCfg = Release|Win32 {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.Build.0 = Release|Win32 {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.ActiveCfg = Release|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.Build.0 = Release|x64 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x86.ActiveCfg = Release|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|Win32.ActiveCfg = Release|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64.ActiveCfg = Release|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64.Build.0 = Release|x64 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x86.ActiveCfg = Release|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.ActiveCfg = Debug|Win32 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.Build.0 = Debug|Win32 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64.ActiveCfg = Debug|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64.Build.0 = Debug|x64 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x86.ActiveCfg = Debug|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.ActiveCfg = Release|Win32 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.Build.0 = Release|Win32 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.ActiveCfg = Release|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.Build.0 = Release|x64 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x86.ActiveCfg = Release|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.All|Win32.ActiveCfg = Release|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64.ActiveCfg = Release|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64.Build.0 = Release|x64 + {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x86.ActiveCfg = Release|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Win32.ActiveCfg = Debug|Win32 {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Win32.Build.0 = Debug|Win32 {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64.ActiveCfg = Debug|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64.Build.0 = Debug|x64 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x86.ActiveCfg = Debug|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.ActiveCfg = Release|Win32 {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.Build.0 = Release|Win32 {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.ActiveCfg = Release|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.Build.0 = Release|x64 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x86.ActiveCfg = Release|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.All|Win32.ActiveCfg = Release DLL|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64.ActiveCfg = Release DLL|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64.Build.0 = Release DLL|x64 + {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x86.ActiveCfg = Release|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.ActiveCfg = Debug|Win32 {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.Build.0 = Debug|Win32 {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.ActiveCfg = Debug|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.Build.0 = Debug|x64 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x86.ActiveCfg = Debug|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.ActiveCfg = Release|Win32 {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.Build.0 = Release|Win32 {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.ActiveCfg = Release|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.Build.0 = Release|x64 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x86.ActiveCfg = Release|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|Win32.ActiveCfg = Release Dll|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64.ActiveCfg = Release Dll|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64.Build.0 = Release Dll|x64 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x86.ActiveCfg = Release|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.ActiveCfg = Debug|Win32 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.Build.0 = Debug|Win32 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64.ActiveCfg = Debug|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64.Build.0 = Debug|x64 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x86.ActiveCfg = Debug|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.ActiveCfg = Release|Win32 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.Build.0 = Release|Win32 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.ActiveCfg = Release|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.Build.0 = Release|x64 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x86.ActiveCfg = Release|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|Win32.ActiveCfg = Release DLL|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64.ActiveCfg = Release DLL|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64.Build.0 = Release DLL|x64 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x86.ActiveCfg = Release|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.ActiveCfg = Debug|Win32 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.Build.0 = Debug|Win32 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.ActiveCfg = Debug|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.Build.0 = Debug|x64 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x86.ActiveCfg = Debug|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.ActiveCfg = Release|Win32 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.Build.0 = Release|Win32 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.ActiveCfg = Release|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.Build.0 = Release|x64 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x86.ActiveCfg = Release|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|Win32.ActiveCfg = Release DLL|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64.ActiveCfg = Release DLL|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64.Build.0 = Release DLL|x64 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x86.ActiveCfg = Release|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.ActiveCfg = Debug|Win32 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.Build.0 = Debug|Win32 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64.ActiveCfg = Debug|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64.Build.0 = Debug|x64 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x86.ActiveCfg = Debug|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.ActiveCfg = Release|Win32 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.Build.0 = Release|Win32 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.ActiveCfg = Release|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.Build.0 = Release|x64 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x86.ActiveCfg = Release|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|Win32.ActiveCfg = Release|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64.ActiveCfg = Release|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64.Build.0 = Release|x64 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x86.ActiveCfg = Release|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.ActiveCfg = Debug|Win32 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.Build.0 = Debug|Win32 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64.ActiveCfg = Debug|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64.Build.0 = Debug|x64 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x86.ActiveCfg = Debug|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.ActiveCfg = Release|Win32 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.Build.0 = Release|Win32 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.ActiveCfg = Release|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.Build.0 = Release|x64 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x86.ActiveCfg = Release|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|Win32.ActiveCfg = Release|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64.ActiveCfg = Release|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64.Build.0 = Release|x64 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x86.ActiveCfg = Release|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.ActiveCfg = Debug|Win32 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.Build.0 = Debug|Win32 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.ActiveCfg = Debug|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.Build.0 = Debug|x64 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x86.ActiveCfg = Debug|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.ActiveCfg = Release|Win32 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.Build.0 = Release|Win32 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.ActiveCfg = Release|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.Build.0 = Release|x64 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x86.ActiveCfg = Release|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|Win32.ActiveCfg = Release|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64.ActiveCfg = Release|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64.Build.0 = Release|x64 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x86.ActiveCfg = Release|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.ActiveCfg = Debug|Win32 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.Build.0 = Debug|Win32 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.ActiveCfg = Debug|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.Build.0 = Debug|x64 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x86.ActiveCfg = Debug|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.ActiveCfg = Release|Win32 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.Build.0 = Release|Win32 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.ActiveCfg = Release|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.Build.0 = Release|x64 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x86.ActiveCfg = Release|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|Win32.ActiveCfg = Release|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64.ActiveCfg = Release|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64.Build.0 = Release|x64 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x86.ActiveCfg = Release|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.ActiveCfg = Debug|Win32 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.Build.0 = Debug|Win32 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.ActiveCfg = Debug|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.Build.0 = Debug|x64 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x86.ActiveCfg = Debug|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.ActiveCfg = Release|Win32 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.Build.0 = Release|Win32 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.ActiveCfg = Release|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.Build.0 = Release|x64 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x86.ActiveCfg = Release|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|Win32.ActiveCfg = Release|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.ActiveCfg = Release|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.Build.0 = Release|x64 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x86.ActiveCfg = Release|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.ActiveCfg = Debug|Win32 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.Build.0 = Debug|Win32 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.ActiveCfg = Debug|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.Build.0 = Debug|x64 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x86.ActiveCfg = Debug|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.ActiveCfg = Release|Win32 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.Build.0 = Release|Win32 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.ActiveCfg = Release|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.Build.0 = Release|x64 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x86.ActiveCfg = Release|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|Win32.ActiveCfg = Debug|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64.ActiveCfg = Debug|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64.Build.0 = Debug|x64 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x86.ActiveCfg = Release|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.ActiveCfg = Debug|Win32 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.Build.0 = Debug|Win32 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64.ActiveCfg = Debug|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64.Build.0 = Debug|x64 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x86.ActiveCfg = Debug|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.ActiveCfg = Release|Win32 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.Build.0 = Release|Win32 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.ActiveCfg = Release|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.Build.0 = Release|x64 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x86.ActiveCfg = Release|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|Win32.ActiveCfg = Debug|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.ActiveCfg = Debug|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.Build.0 = Debug|x64 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x86.ActiveCfg = Release|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.ActiveCfg = Debug|Win32 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.Build.0 = Debug|Win32 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64.ActiveCfg = Debug|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64.Build.0 = Debug|x64 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x86.ActiveCfg = Debug|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.ActiveCfg = Release|Win32 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.Build.0 = Release|Win32 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.ActiveCfg = Release|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.Build.0 = Release|x64 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x86.ActiveCfg = Release|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|Win32.ActiveCfg = Debug|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64.ActiveCfg = Debug|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64.Build.0 = Debug|x64 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x86.ActiveCfg = Release|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Win32.ActiveCfg = Debug|Win32 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Win32.Build.0 = Debug|Win32 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64.ActiveCfg = Debug|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64.Build.0 = Debug|x64 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x86.ActiveCfg = Debug|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Win32.ActiveCfg = Release|Win32 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Win32.Build.0 = Release|Win32 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.ActiveCfg = Release|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.Build.0 = Release|x64 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x86.ActiveCfg = Release|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|Win32.ActiveCfg = Release|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64.ActiveCfg = Release|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64.Build.0 = Release|x64 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x86.ActiveCfg = Release|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Win32.ActiveCfg = Debug|Win32 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Win32.Build.0 = Debug|Win32 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64.ActiveCfg = Debug|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64.Build.0 = Debug|x64 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x86.ActiveCfg = Debug|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Win32.ActiveCfg = Release|Win32 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Win32.Build.0 = Release|Win32 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.ActiveCfg = Release|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.Build.0 = Release|x64 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x86.ActiveCfg = Release|x64 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|Win32.ActiveCfg = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|Win32.Build.0 = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x64.ActiveCfg = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x64.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x86.ActiveCfg = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Win32.ActiveCfg = Debug|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Win32.Build.0 = Debug|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x64.ActiveCfg = Debug|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x64.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x86.ActiveCfg = Debug|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Win32.ActiveCfg = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Win32.Build.0 = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x64.ActiveCfg = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x64.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x86.ActiveCfg = Release|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|Win32.ActiveCfg = Release DLL|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64.ActiveCfg = Release DLL|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64.Build.0 = Release DLL|x64 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x86.ActiveCfg = Release|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Win32.ActiveCfg = Debug DLL|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Win32.Build.0 = Debug DLL|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64.ActiveCfg = Debug DLL|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64.Build.0 = Debug DLL|x64 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x86.ActiveCfg = Debug|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Win32.ActiveCfg = Release DLL|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Win32.Build.0 = Release DLL|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.ActiveCfg = Release DLL|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.Build.0 = Release DLL|x64 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x86.ActiveCfg = Release|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|Win32.ActiveCfg = Release Passthrough|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64.ActiveCfg = Release Passthrough|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64.Build.0 = Release Passthrough|x64 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x86.ActiveCfg = Release|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Win32.Build.0 = Debug Passthrough|Win32 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.ActiveCfg = Debug Passthrough|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.Build.0 = Debug Passthrough|x64 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x86.ActiveCfg = Debug|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Win32.ActiveCfg = Release Passthrough|Win32 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Win32.Build.0 = Release Passthrough|Win32 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.ActiveCfg = Release Passthrough|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.Build.0 = Release Passthrough|x64 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x86.ActiveCfg = Release|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|Win32.ActiveCfg = Release|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x64.ActiveCfg = Release|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x64.Build.0 = Release|x64 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x86.ActiveCfg = Release|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Win32.ActiveCfg = Debug|Win32 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Win32.Build.0 = Debug|Win32 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64.ActiveCfg = Debug|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64.Build.0 = Debug|x64 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x86.ActiveCfg = Debug|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Win32.ActiveCfg = Release|Win32 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Win32.Build.0 = Release|Win32 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.ActiveCfg = Release|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.Build.0 = Release|x64 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x86.ActiveCfg = Release|x64 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|Win32.ActiveCfg = Release|x64 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64.ActiveCfg = Release|x64 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64.Build.0 = Release|x64 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x86.ActiveCfg = Release|x64 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.ActiveCfg = Debug|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.Build.0 = Debug|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64.ActiveCfg = Debug|x64 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x86.ActiveCfg = Debug|x64 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.ActiveCfg = Release|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.Build.0 = Release|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.ActiveCfg = Release|x64 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x86.ActiveCfg = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|Win32.ActiveCfg = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.ActiveCfg = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.Build.0 = Release|x64 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x86.ActiveCfg = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.ActiveCfg = Debug|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.Build.0 = Debug|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64.ActiveCfg = Debug|x64 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x86.ActiveCfg = Debug|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.ActiveCfg = Release|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.Build.0 = Release|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.ActiveCfg = Release|x64 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x86.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|Win32.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.Build.0 = Release|x64 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x86.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Win32.ActiveCfg = Debug|Win32 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Win32.Build.0 = Debug|Win32 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64.ActiveCfg = Debug|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64.Build.0 = Debug|x64 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x86.ActiveCfg = Debug|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Win32.ActiveCfg = Release|Win32 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Win32.Build.0 = Release|Win32 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.Build.0 = Release|x64 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x86.ActiveCfg = Release|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|Win32.ActiveCfg = Release|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64.ActiveCfg = Release|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64.Build.0 = Release|x64 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x86.ActiveCfg = Release|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Win32.ActiveCfg = Debug|Win32 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Win32.Build.0 = Debug|Win32 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64.ActiveCfg = Debug|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64.Build.0 = Debug|x64 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x86.ActiveCfg = Debug|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Win32.ActiveCfg = Release|Win32 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Win32.Build.0 = Release|Win32 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.ActiveCfg = Release|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.Build.0 = Release|x64 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x86.ActiveCfg = Release|x64 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|Win32.ActiveCfg = Release|x64 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64.ActiveCfg = Release|x64 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64.Build.0 = Release|x64 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x86.ActiveCfg = Release|x64 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.ActiveCfg = Debug|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.Build.0 = Debug|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64.ActiveCfg = Debug|x64 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x86.ActiveCfg = Debug|x64 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.ActiveCfg = Release|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.Build.0 = Release|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.ActiveCfg = Release|x64 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x86.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|Win32.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.Build.0 = Release|x64 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x86.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Win32.ActiveCfg = Debug|Win32 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Win32.Build.0 = Debug|Win32 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64.ActiveCfg = Debug|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64.Build.0 = Debug|x64 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x86.ActiveCfg = Debug|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Win32.ActiveCfg = Release|Win32 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Win32.Build.0 = Release|Win32 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.Build.0 = Release|x64 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x86.ActiveCfg = Release|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|Win32.ActiveCfg = Release|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64.ActiveCfg = Release|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64.Build.0 = Release|x64 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x86.ActiveCfg = Release|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Win32.ActiveCfg = Debug|Win32 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Win32.Build.0 = Debug|Win32 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64.ActiveCfg = Debug|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64.Build.0 = Debug|x64 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x86.ActiveCfg = Debug|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Win32.ActiveCfg = Release|Win32 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Win32.Build.0 = Release|Win32 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.ActiveCfg = Release|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.Build.0 = Release|x64 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x86.ActiveCfg = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|Win32.ActiveCfg = Release DirectSound|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64.ActiveCfg = Release DirectSound|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x86.ActiveCfg = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.Build.0 = Debug|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.Build.0 = Debug|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x86.ActiveCfg = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.Build.0 = Release|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x86.ActiveCfg = Release|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|Win32.ActiveCfg = Release|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64.ActiveCfg = Release|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64.Build.0 = Release|x64 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x86.ActiveCfg = Release|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Win32.ActiveCfg = Debug|Win32 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Win32.Build.0 = Debug|Win32 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64.ActiveCfg = Debug|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64.Build.0 = Debug|x64 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x86.ActiveCfg = Debug|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Win32.ActiveCfg = Release|Win32 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Win32.Build.0 = Release|Win32 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.ActiveCfg = Release|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.Build.0 = Release|x64 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x86.ActiveCfg = Release|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|Win32.ActiveCfg = Release Passthrough|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64.ActiveCfg = Release Passthrough|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64.Build.0 = Release Passthrough|x64 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x86.ActiveCfg = Release|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Win32.Build.0 = Debug Passthrough|Win32 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.ActiveCfg = Debug Passthrough|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.Build.0 = Debug Passthrough|x64 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x86.ActiveCfg = Debug|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Win32.ActiveCfg = Release Passthrough|Win32 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Win32.Build.0 = Release Passthrough|Win32 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.ActiveCfg = Release Passthrough|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.Build.0 = Release Passthrough|x64 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x86.ActiveCfg = Release|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|Win32.ActiveCfg = Release|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64.ActiveCfg = Release|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64.Build.0 = Release|x64 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x86.ActiveCfg = Release|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Win32.ActiveCfg = Debug|Win32 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Win32.Build.0 = Debug|Win32 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64.ActiveCfg = Debug|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64.Build.0 = Debug|x64 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x86.ActiveCfg = Debug|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Win32.ActiveCfg = Release|Win32 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Win32.Build.0 = Release|Win32 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.ActiveCfg = Release|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.Build.0 = Release|x64 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x86.ActiveCfg = Release|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|Win32.ActiveCfg = Release|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64.ActiveCfg = Release|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64.Build.0 = Release|x64 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x86.ActiveCfg = Release|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Win32.ActiveCfg = Debug|Win32 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Win32.Build.0 = Debug|Win32 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64.ActiveCfg = Debug|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64.Build.0 = Debug|x64 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x86.ActiveCfg = Debug|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Win32.ActiveCfg = Release|Win32 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Win32.Build.0 = Release|Win32 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.ActiveCfg = Release|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.Build.0 = Release|x64 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x86.ActiveCfg = Release|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|Win32.ActiveCfg = Release|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64.ActiveCfg = Release|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64.Build.0 = Release|x64 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x86.ActiveCfg = Release|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Win32.ActiveCfg = Debug|Win32 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Win32.Build.0 = Debug|Win32 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64.ActiveCfg = Debug|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64.Build.0 = Debug|x64 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x86.ActiveCfg = Debug|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Win32.ActiveCfg = Release|Win32 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Win32.Build.0 = Release|Win32 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.ActiveCfg = Release|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.Build.0 = Release|x64 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x86.ActiveCfg = Release|x64 {028C7278-05D7-4E18-82FE-BE231B844F41}.All|Win32.ActiveCfg = Release|x64 {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64.ActiveCfg = Release|x64 {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64.Build.0 = Release|x64 + {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x86.ActiveCfg = Release|x64 {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.ActiveCfg = Debug|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.Build.0 = Debug|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64.ActiveCfg = Debug|x64 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x86.ActiveCfg = Debug|x64 {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.ActiveCfg = Release|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.Build.0 = Release|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.ActiveCfg = Release|x64 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x86.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|Win32.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.Build.0 = Release|x64 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x86.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Win32.ActiveCfg = Debug|Win32 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Win32.Build.0 = Debug|Win32 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64.ActiveCfg = Debug|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64.Build.0 = Debug|x64 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x86.ActiveCfg = Debug|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Win32.ActiveCfg = Release|Win32 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Win32.Build.0 = Release|Win32 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.Build.0 = Release|x64 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x86.ActiveCfg = Release|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|Win32.ActiveCfg = Release|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64.ActiveCfg = Release|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64.Build.0 = Release|x64 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x86.ActiveCfg = Release|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Win32.ActiveCfg = Debug|Win32 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Win32.Build.0 = Debug|Win32 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64.ActiveCfg = Debug|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64.Build.0 = Debug|x64 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x86.ActiveCfg = Debug|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Win32.ActiveCfg = Release|Win32 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Win32.Build.0 = Release|Win32 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.ActiveCfg = Release|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.Build.0 = Release|x64 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x86.ActiveCfg = Release|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|Win32.ActiveCfg = Release|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64.ActiveCfg = Release|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64.Build.0 = Release|x64 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x86.ActiveCfg = Release|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Win32.ActiveCfg = Debug|Win32 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Win32.Build.0 = Debug|Win32 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64.ActiveCfg = Debug|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64.Build.0 = Debug|x64 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x86.ActiveCfg = Debug|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Win32.ActiveCfg = Release|Win32 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Win32.Build.0 = Release|Win32 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.ActiveCfg = Release|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.Build.0 = Release|x64 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x86.ActiveCfg = Release|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|Win32.ActiveCfg = Release|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64.ActiveCfg = Release|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64.Build.0 = Release|x64 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x86.ActiveCfg = Release|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Win32.ActiveCfg = Debug|Win32 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Win32.Build.0 = Debug|Win32 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64.ActiveCfg = Debug|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64.Build.0 = Debug|x64 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x86.ActiveCfg = Debug|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Win32.ActiveCfg = Release|Win32 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Win32.Build.0 = Release|Win32 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.ActiveCfg = Release|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.Build.0 = Release|x64 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x86.ActiveCfg = Release|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|Win32.ActiveCfg = Release|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64.ActiveCfg = Release|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64.Build.0 = Release|x64 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x86.ActiveCfg = Release|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Win32.ActiveCfg = Debug|Win32 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Win32.Build.0 = Debug|Win32 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64.ActiveCfg = Debug|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64.Build.0 = Debug|x64 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x86.ActiveCfg = Debug|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Win32.ActiveCfg = Release|Win32 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Win32.Build.0 = Release|Win32 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.ActiveCfg = Release|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.Build.0 = Release|x64 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x86.ActiveCfg = Release|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|Win32.ActiveCfg = Release|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64.ActiveCfg = Release|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64.Build.0 = Release|x64 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x86.ActiveCfg = Release|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Win32.ActiveCfg = Debug|Win32 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Win32.Build.0 = Debug|Win32 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64.ActiveCfg = Debug|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64.Build.0 = Debug|x64 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x86.ActiveCfg = Debug|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Win32.ActiveCfg = Release|Win32 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Win32.Build.0 = Release|Win32 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.ActiveCfg = Release|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.Build.0 = Release|x64 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x86.ActiveCfg = Release|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|Win32.ActiveCfg = Release|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64.ActiveCfg = Release|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64.Build.0 = Release|x64 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x86.ActiveCfg = Release|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Win32.ActiveCfg = Debug|Win32 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Win32.Build.0 = Debug|Win32 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64.ActiveCfg = Debug|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64.Build.0 = Debug|x64 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x86.ActiveCfg = Debug|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Win32.ActiveCfg = Release|Win32 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Win32.Build.0 = Release|Win32 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.ActiveCfg = Release|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.Build.0 = Release|x64 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x86.ActiveCfg = Release|x64 {F6A33240-8F29-48BD-98F0-826995911799}.All|Win32.ActiveCfg = Release|x64 {F6A33240-8F29-48BD-98F0-826995911799}.All|x64.ActiveCfg = Release|x64 {F6A33240-8F29-48BD-98F0-826995911799}.All|x64.Build.0 = Release|x64 + {F6A33240-8F29-48BD-98F0-826995911799}.All|x86.ActiveCfg = Release|x64 {F6A33240-8F29-48BD-98F0-826995911799}.Debug|Win32.ActiveCfg = Debug|Win32 {F6A33240-8F29-48BD-98F0-826995911799}.Debug|Win32.Build.0 = Debug|Win32 {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64.ActiveCfg = Debug|x64 {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64.Build.0 = Debug|x64 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x86.ActiveCfg = Debug|x64 {F6A33240-8F29-48BD-98F0-826995911799}.Release|Win32.ActiveCfg = Release|Win32 {F6A33240-8F29-48BD-98F0-826995911799}.Release|Win32.Build.0 = Release|Win32 {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.ActiveCfg = Release|x64 {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.Build.0 = Release|x64 + {F6A33240-8F29-48BD-98F0-826995911799}.Release|x86.ActiveCfg = Release|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|Win32.ActiveCfg = Release|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64.ActiveCfg = Release|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64.Build.0 = Release|x64 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x86.ActiveCfg = Release|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Win32.ActiveCfg = Debug|Win32 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Win32.Build.0 = Debug|Win32 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64.ActiveCfg = Debug|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64.Build.0 = Debug|x64 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x86.ActiveCfg = Debug|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Win32.ActiveCfg = Release|Win32 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Win32.Build.0 = Release|Win32 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.ActiveCfg = Release|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.Build.0 = Release|x64 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x86.ActiveCfg = Release|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|Win32.ActiveCfg = Release|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64.ActiveCfg = Release|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64.Build.0 = Release|x64 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x86.ActiveCfg = Release|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Win32.ActiveCfg = Debug|Win32 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Win32.Build.0 = Debug|Win32 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64.ActiveCfg = Debug|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64.Build.0 = Debug|x64 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x86.ActiveCfg = Debug|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.ActiveCfg = Release|Win32 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.Build.0 = Release|Win32 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.ActiveCfg = Release|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.Build.0 = Release|x64 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x86.ActiveCfg = Release|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|Win32.ActiveCfg = Release|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64.ActiveCfg = Release|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64.Build.0 = Release|x64 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x86.ActiveCfg = Release|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.ActiveCfg = Debug|Win32 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.Build.0 = Debug|Win32 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.ActiveCfg = Debug|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.Build.0 = Debug|x64 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x86.ActiveCfg = Debug|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.ActiveCfg = Release|Win32 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.Build.0 = Release|Win32 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.ActiveCfg = Release|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.Build.0 = Release|x64 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x86.ActiveCfg = Release|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|Win32.ActiveCfg = Release|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64.ActiveCfg = Release|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64.Build.0 = Release|x64 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x86.ActiveCfg = Release|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Win32.ActiveCfg = Debug|Win32 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Win32.Build.0 = Debug|Win32 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64.ActiveCfg = Debug|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64.Build.0 = Debug|x64 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x86.ActiveCfg = Debug|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Win32.ActiveCfg = Release|Win32 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Win32.Build.0 = Release|Win32 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.ActiveCfg = Release|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.Build.0 = Release|x64 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x86.ActiveCfg = Release|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|Win32.ActiveCfg = Release|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x64.ActiveCfg = Release|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x64.Build.0 = Release|x64 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x86.ActiveCfg = Release|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Win32.ActiveCfg = Debug|Win32 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Win32.Build.0 = Debug|Win32 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x64.ActiveCfg = Debug|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x64.Build.0 = Debug|x64 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x86.ActiveCfg = Debug|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Win32.ActiveCfg = Release|Win32 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Win32.Build.0 = Release|Win32 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64.ActiveCfg = Release|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64.Build.0 = Release|x64 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x86.ActiveCfg = Release|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|Win32.ActiveCfg = Release|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x64.ActiveCfg = Release|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x64.Build.0 = Release|x64 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x86.ActiveCfg = Release|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Win32.ActiveCfg = Debug|Win32 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Win32.Build.0 = Debug|Win32 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x64.ActiveCfg = Debug|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x64.Build.0 = Debug|x64 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x86.ActiveCfg = Debug|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Win32.ActiveCfg = Release|Win32 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Win32.Build.0 = Release|Win32 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64.ActiveCfg = Release|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64.Build.0 = Release|x64 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x86.ActiveCfg = Release|x64 {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|Win32.ActiveCfg = Release|x64 {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x64.ActiveCfg = Release|x64 {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x64.Build.0 = Release|x64 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x86.ActiveCfg = Release|x64 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Win32.ActiveCfg = Debug|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Win32.Build.0 = Debug|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x64.ActiveCfg = Debug|x64 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x86.ActiveCfg = Debug|x64 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Win32.ActiveCfg = Release|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Win32.Build.0 = Release|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64.ActiveCfg = Release|x64 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x86.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|Win32.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.Build.0 = Release|x64 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x86.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Win32.ActiveCfg = Debug|Win32 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Win32.Build.0 = Debug|Win32 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64.ActiveCfg = Debug|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64.Build.0 = Debug|x64 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x86.ActiveCfg = Debug|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Win32.ActiveCfg = Release|Win32 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Win32.Build.0 = Release|Win32 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.Build.0 = Release|x64 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x86.ActiveCfg = Release|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|Win32.ActiveCfg = Release|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64.ActiveCfg = Release|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64.Build.0 = Release|x64 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x86.ActiveCfg = Release|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Win32.ActiveCfg = Debug|Win32 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Win32.Build.0 = Debug|Win32 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64.ActiveCfg = Debug|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64.Build.0 = Debug|x64 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x86.ActiveCfg = Debug|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Win32.ActiveCfg = Release|Win32 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Win32.Build.0 = Release|Win32 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.ActiveCfg = Release|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.Build.0 = Release|x64 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x86.ActiveCfg = Release|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|Win32.ActiveCfg = Release|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64.ActiveCfg = Release|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64.Build.0 = Release|x64 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x86.ActiveCfg = Release|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Win32.ActiveCfg = Debug|Win32 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Win32.Build.0 = Debug|Win32 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64.ActiveCfg = Debug|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64.Build.0 = Debug|x64 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x86.ActiveCfg = Debug|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Win32.ActiveCfg = Release|Win32 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Win32.Build.0 = Release|Win32 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.ActiveCfg = Release|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.Build.0 = Release|x64 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x86.ActiveCfg = Release|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|Win32.ActiveCfg = Debug|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64.ActiveCfg = Debug|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64.Build.0 = Debug|x64 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x86.ActiveCfg = Release|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Win32.ActiveCfg = Debug|Win32 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Win32.Build.0 = Debug|Win32 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64.ActiveCfg = Debug|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64.Build.0 = Debug|x64 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x86.ActiveCfg = Debug|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Win32.ActiveCfg = Release|Win32 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Win32.Build.0 = Release|Win32 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.ActiveCfg = Release|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.Build.0 = Release|x64 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x86.ActiveCfg = Release|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.All|Win32.ActiveCfg = Release|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64.ActiveCfg = Release|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64.Build.0 = Release|x64 + {B535402E-38D2-4D54-8360-423ACBD17192}.All|x86.ActiveCfg = Release|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Win32.ActiveCfg = Debug|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Win32.Build.0 = Debug|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64.ActiveCfg = Debug|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64.Build.0 = Debug|x64 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x86.ActiveCfg = Debug|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.ActiveCfg = Release|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.Build.0 = Release|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.ActiveCfg = Release|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.Build.0 = Release|x64 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x86.ActiveCfg = Release|x64 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|Win32.ActiveCfg = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|Win32.Build.0 = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x64.ActiveCfg = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x64.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x86.ActiveCfg = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Win32.ActiveCfg = Debug|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Win32.Build.0 = Debug|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x64.ActiveCfg = Debug|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x64.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x86.ActiveCfg = Debug|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Win32.ActiveCfg = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Win32.Build.0 = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x64.ActiveCfg = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x64.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x86.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.All|Win32.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.All|Win32.Build.0 = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.All|x64.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.All|x64.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.All|x86.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Win32.ActiveCfg = Debug|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Win32.Build.0 = Debug|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x64.ActiveCfg = Debug|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x64.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x86.ActiveCfg = Debug|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Release|Win32.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Release|Win32.Build.0 = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Release|x64.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Release|x64.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release|x86.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|Win32.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|Win32.Build.0 = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x64.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x64.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x86.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Win32.ActiveCfg = Debug|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Win32.Build.0 = Debug|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x64.ActiveCfg = Debug|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x64.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x86.ActiveCfg = Debug|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Win32.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Win32.Build.0 = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x64.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x64.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x86.ActiveCfg = Release|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|Win32.ActiveCfg = Debug|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x64.ActiveCfg = Debug|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x64.Build.0 = Debug|x64 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x86.ActiveCfg = Release|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.ActiveCfg = Debug|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.Build.0 = Debug|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64.ActiveCfg = Debug|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64.Build.0 = Debug|x64 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x86.ActiveCfg = Debug|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.ActiveCfg = Release|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.Build.0 = Release|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.ActiveCfg = Release|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.Build.0 = Release|x64 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x86.ActiveCfg = Release|x64 {94001A0E-A837-445C-8004-F918F10D0226}.All|Win32.ActiveCfg = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.All|x64.ActiveCfg = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.All|x64.Build.0 = Debug|x64 + {94001A0E-A837-445C-8004-F918F10D0226}.All|x86.ActiveCfg = Release|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.ActiveCfg = Debug|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.Build.0 = Debug|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.ActiveCfg = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.Build.0 = Debug|x64 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x86.ActiveCfg = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.ActiveCfg = Release|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.Build.0 = Release|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.ActiveCfg = Release|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.Build.0 = Release|x64 + {94001A0E-A837-445C-8004-F918F10D0226}.Release|x86.ActiveCfg = Release|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|Win32.ActiveCfg = Release|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x64.ActiveCfg = Release|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x64.Build.0 = Release|x64 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x86.ActiveCfg = Release|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Win32.ActiveCfg = Debug|Win32 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Win32.Build.0 = Debug|Win32 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64.ActiveCfg = Debug|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64.Build.0 = Debug|x64 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x86.ActiveCfg = Debug|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Win32.ActiveCfg = Release|Win32 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Win32.Build.0 = Release|Win32 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.ActiveCfg = Release|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.Build.0 = Release|x64 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x86.ActiveCfg = Release|x64 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|Win32.ActiveCfg = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|Win32.Build.0 = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x64.ActiveCfg = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x64.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x86.ActiveCfg = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Win32.ActiveCfg = Debug|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Win32.Build.0 = Debug|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x64.ActiveCfg = Debug|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x64.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x86.ActiveCfg = Debug|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Win32.ActiveCfg = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Win32.Build.0 = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x64.ActiveCfg = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x64.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x86.ActiveCfg = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|Win32.ActiveCfg = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|x64.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|x86.ActiveCfg = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Win32.ActiveCfg = Debug|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|x64.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|x86.ActiveCfg = Debug|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Win32.ActiveCfg = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x64.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x86.ActiveCfg = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|Win32.ActiveCfg = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|Win32.Build.0 = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.ActiveCfg = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x86.ActiveCfg = Release|x64 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.ActiveCfg = Debug|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.Build.0 = Debug|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|x64 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.Build.0 = Debug|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x86.ActiveCfg = Debug|x64 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.ActiveCfg = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.Build.0 = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|x64 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.Build.0 = Release|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x86.ActiveCfg = Release|x64 {7EB71250-F002-4ED8-92CA-CA218114537A}.All|Win32.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.All|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.All|x86.ActiveCfg = Release|x64 {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Win32.ActiveCfg = Debug|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|x64 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x86.ActiveCfg = Debug|x64 {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|x64 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x86.ActiveCfg = Release|x64 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|Win32.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x86.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Win32.ActiveCfg = Debug|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|x64.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|x86.ActiveCfg = Debug|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Win32.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x86.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.All|Win32.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.All|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.All|x86.ActiveCfg = Release|x64 {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Win32.ActiveCfg = Debug|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|x64 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x86.ActiveCfg = Debug|x64 {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|x64 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x86.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|Win32.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.Build.0 = Release|x64 + {0AD1177E-1FD8-4643-9391-431467A11084}.All|x86.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Win32.ActiveCfg = Debug|Win32 {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Win32.Build.0 = Debug|Win32 {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64.ActiveCfg = Debug|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64.Build.0 = Debug|x64 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x86.ActiveCfg = Debug|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Win32.ActiveCfg = Release|Win32 {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Win32.Build.0 = Release|Win32 {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.Build.0 = Release|x64 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x86.ActiveCfg = Release|x64 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|Win32.ActiveCfg = Release Static|x64 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x64.ActiveCfg = Release Static|x64 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x64.Build.0 = Release Static|x64 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x86.ActiveCfg = Release|x64 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.ActiveCfg = Debug|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64.ActiveCfg = Debug|x64 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x86.ActiveCfg = Debug|x64 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.ActiveCfg = Release|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.ActiveCfg = Release|x64 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x86.ActiveCfg = Release|x64 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x64.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x86.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Win32.Build.0 = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x64.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x86.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x64.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x86.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x64.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x86.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.Build.0 = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x86.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x64.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x86.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x64.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x86.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Win32.Build.0 = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x64.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x86.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x64.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x86.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x64.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x86.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Win32.Build.0 = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x64.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x86.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x64.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x86.ActiveCfg = Release|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|Win32.ActiveCfg = Debug|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x64.ActiveCfg = Debug|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x64.Build.0 = Debug|x64 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x86.ActiveCfg = Release|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Win32.ActiveCfg = Debug|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Win32.Build.0 = Debug|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64.ActiveCfg = Debug|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64.Build.0 = Debug|x64 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x86.ActiveCfg = Debug|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Win32.ActiveCfg = Release|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Win32.Build.0 = Release|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.ActiveCfg = Release|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.Build.0 = Release|x64 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x86.ActiveCfg = Release|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|Win32.ActiveCfg = Debug|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x64.ActiveCfg = Debug|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x64.Build.0 = Debug|x64 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x86.ActiveCfg = Release|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Win32.ActiveCfg = Debug|Win32 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Win32.Build.0 = Debug|Win32 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64.ActiveCfg = Debug|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64.Build.0 = Debug|x64 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x86.ActiveCfg = Debug|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Win32.ActiveCfg = Release|Win32 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Win32.Build.0 = Release|Win32 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.ActiveCfg = Release|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.Build.0 = Release|x64 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x86.ActiveCfg = Release|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.All|Win32.ActiveCfg = Release|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x64.ActiveCfg = Release|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x64.Build.0 = Release|x64 + {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x86.ActiveCfg = Release|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Win32.ActiveCfg = Debug|Win32 {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Win32.Build.0 = Debug|Win32 {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64.ActiveCfg = Debug|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64.Build.0 = Debug|x64 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x86.ActiveCfg = Debug|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Win32.ActiveCfg = Release|Win32 {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Win32.Build.0 = Release|Win32 {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.ActiveCfg = Release|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.Build.0 = Release|x64 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x86.ActiveCfg = Release|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|Win32.ActiveCfg = Debug|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x64.ActiveCfg = Debug|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x64.Build.0 = Debug|x64 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x86.ActiveCfg = Release|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Win32.ActiveCfg = Debug|Win32 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Win32.Build.0 = Debug|Win32 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64.ActiveCfg = Debug|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64.Build.0 = Debug|x64 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x86.ActiveCfg = Debug|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Win32.ActiveCfg = Release|Win32 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Win32.Build.0 = Release|Win32 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.ActiveCfg = Release|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.Build.0 = Release|x64 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x86.ActiveCfg = Release|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|Win32.ActiveCfg = Release|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x64.ActiveCfg = Release|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x64.Build.0 = Release|x64 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x86.ActiveCfg = Release|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Win32.ActiveCfg = Debug|Win32 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Win32.Build.0 = Debug|Win32 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64.ActiveCfg = Debug|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64.Build.0 = Debug|x64 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x86.ActiveCfg = Debug|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Win32.ActiveCfg = Release|Win32 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Win32.Build.0 = Release|Win32 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.ActiveCfg = Release|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.Build.0 = Release|x64 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x86.ActiveCfg = Release|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|Win32.ActiveCfg = Release|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x64.ActiveCfg = Release|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x64.Build.0 = Release|x64 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x86.ActiveCfg = Release|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Win32.ActiveCfg = Debug|Win32 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Win32.Build.0 = Debug|Win32 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x64.ActiveCfg = Debug|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x64.Build.0 = Debug|x64 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x86.ActiveCfg = Debug|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Win32.ActiveCfg = Release|Win32 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Win32.Build.0 = Release|Win32 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64.ActiveCfg = Release|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64.Build.0 = Release|x64 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x86.ActiveCfg = Release|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|Win32.ActiveCfg = Release_Mono|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x64.ActiveCfg = Release_Mono|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x64.Build.0 = Release_Mono|x64 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x86.ActiveCfg = Release_Mono|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Win32.ActiveCfg = Debug_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Win32.Build.0 = Debug_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64.ActiveCfg = Debug_CLR|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64.Build.0 = Debug_CLR|x64 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x86.ActiveCfg = Debug_Mono|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.ActiveCfg = Release_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.Build.0 = Release_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.ActiveCfg = Release_CLR|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.Build.0 = Release_CLR|x64 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x86.ActiveCfg = Release_Mono|x64 {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|Win32.ActiveCfg = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|x64.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|x86.ActiveCfg = Release|x64 {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Win32.ActiveCfg = Debug|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Win32.Build.0 = Debug|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.ActiveCfg = Debug|x64 {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.Build.0 = Debug|x64 + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x86.ActiveCfg = Debug|x64 {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.ActiveCfg = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.Build.0 = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.ActiveCfg = Release|x64 {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.Build.0 = Release|x64 + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x86.ActiveCfg = Release|x64 {E796E337-DE78-4303-8614-9A590862EE95}.All|Win32.ActiveCfg = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.All|Win32.Build.0 = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.All|x64.ActiveCfg = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.All|x64.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.All|x86.ActiveCfg = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.ActiveCfg = Debug|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.Build.0 = Debug|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Debug|x64.ActiveCfg = Debug|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Debug|x64.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug|x86.ActiveCfg = Debug|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Release|Win32.ActiveCfg = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Release|Win32.Build.0 = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Release|x64.ActiveCfg = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Release|x64.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release|x86.ActiveCfg = Release|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.All|Win32.ActiveCfg = Release|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.All|x64.ActiveCfg = Release|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.All|x64.Build.0 = Release|x64 + {419C8F80-D858-4B48-A25C-AF4007608137}.All|x86.ActiveCfg = Release|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Win32.ActiveCfg = Debug|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Win32.Build.0 = Debug|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x64.ActiveCfg = Debug|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x64.Build.0 = Debug|x64 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x86.ActiveCfg = Debug|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.Release|Win32.ActiveCfg = Release|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.Release|Win32.Build.0 = Release|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64.ActiveCfg = Release|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64.Build.0 = Release|x64 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x86.ActiveCfg = Release|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|Win32.ActiveCfg = Release|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x64.ActiveCfg = Release|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x64.Build.0 = Release|x64 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x86.ActiveCfg = Release|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Win32.ActiveCfg = Debug|Win32 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Win32.Build.0 = Debug|Win32 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x64.ActiveCfg = Debug|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x64.Build.0 = Debug|x64 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x86.ActiveCfg = Debug|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Win32.ActiveCfg = Release|Win32 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Win32.Build.0 = Release|Win32 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64.ActiveCfg = Release|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64.Build.0 = Release|x64 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x86.ActiveCfg = Release|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|Win32.ActiveCfg = Release|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x64.ActiveCfg = Release|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x64.Build.0 = Release|x64 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x86.ActiveCfg = Release|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Win32.ActiveCfg = Debug|Win32 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Win32.Build.0 = Debug|Win32 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x64.ActiveCfg = Debug|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x64.Build.0 = Debug|x64 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x86.ActiveCfg = Debug|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Win32.ActiveCfg = Release|Win32 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Win32.Build.0 = Release|Win32 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64.ActiveCfg = Release|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64.Build.0 = Release|x64 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x86.ActiveCfg = Release|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|Win32.ActiveCfg = Release|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x64.ActiveCfg = Release|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x64.Build.0 = Release|x64 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x86.ActiveCfg = Release|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|Win32.ActiveCfg = Debug|Win32 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|Win32.Build.0 = Debug|Win32 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x64.ActiveCfg = Debug|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x64.Build.0 = Debug|x64 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x86.ActiveCfg = Debug|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|Win32.ActiveCfg = Release|Win32 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|Win32.Build.0 = Release|Win32 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64.ActiveCfg = Release|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64.Build.0 = Release|x64 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x86.ActiveCfg = Release|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.All|Win32.ActiveCfg = Release|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x64.ActiveCfg = Release|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x64.Build.0 = Release|x64 + {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x86.ActiveCfg = Release|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|Win32.ActiveCfg = Debug|Win32 {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|Win32.Build.0 = Debug|Win32 {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x64.ActiveCfg = Debug|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x64.Build.0 = Debug|x64 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x86.ActiveCfg = Debug|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|Win32.ActiveCfg = Release|Win32 {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|Win32.Build.0 = Release|Win32 {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64.ActiveCfg = Release|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64.Build.0 = Release|x64 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x86.ActiveCfg = Release|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|Win32.ActiveCfg = Release|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x64.ActiveCfg = Release|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x64.Build.0 = Release|x64 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x86.ActiveCfg = Release|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|Win32.ActiveCfg = Debug|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|Win32.Build.0 = Debug|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x64.ActiveCfg = Debug|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x64.Build.0 = Debug|x64 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x86.ActiveCfg = Debug|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.ActiveCfg = Release|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.Build.0 = Release|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.ActiveCfg = Release|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.Build.0 = Release|x64 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x86.ActiveCfg = Release|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|Win32.ActiveCfg = Release|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x64.ActiveCfg = Release|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x64.Build.0 = Release|x64 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x86.ActiveCfg = Release|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.ActiveCfg = Debug|Win32 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.Build.0 = Debug|Win32 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.ActiveCfg = Debug|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.Build.0 = Debug|x64 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x86.ActiveCfg = Debug|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.ActiveCfg = Release|Win32 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.Build.0 = Release|Win32 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.ActiveCfg = Release|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.Build.0 = Release|x64 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x86.ActiveCfg = Release|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|Win32.ActiveCfg = Release|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x64.ActiveCfg = Release|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x64.Build.0 = Release|x64 + {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x86.ActiveCfg = Release|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|Win32.ActiveCfg = Debug|Win32 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|Win32.Build.0 = Debug|Win32 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x64.ActiveCfg = Debug|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x64.Build.0 = Debug|x64 + {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x86.ActiveCfg = Debug|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|Win32.ActiveCfg = Release|Win32 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|Win32.Build.0 = Release|Win32 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x64.ActiveCfg = Release|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x64.Build.0 = Release|x64 + {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x86.ActiveCfg = Release|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|Win32.ActiveCfg = Release|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x64.ActiveCfg = Release|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x64.Build.0 = Release|x64 + {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x86.ActiveCfg = Release|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|Win32.ActiveCfg = Debug|Win32 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|Win32.Build.0 = Debug|Win32 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x64.ActiveCfg = Debug|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x64.Build.0 = Debug|x64 + {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x86.ActiveCfg = Debug|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|Win32.ActiveCfg = Release|Win32 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|Win32.Build.0 = Release|Win32 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x64.ActiveCfg = Release|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x64.Build.0 = Release|x64 + {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x86.ActiveCfg = Release|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|Win32.ActiveCfg = Release|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64.ActiveCfg = Release|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64.Build.0 = Release|x64 + {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x86.ActiveCfg = Release|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.ActiveCfg = Debug|Win32 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.Build.0 = Debug|Win32 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x64.ActiveCfg = Debug|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x64.Build.0 = Debug|x64 + {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x86.ActiveCfg = Debug|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.ActiveCfg = Release|Win32 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.Build.0 = Release|Win32 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x64.ActiveCfg = Release|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x64.Build.0 = Release|x64 + {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x86.ActiveCfg = Release|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|Win32.ActiveCfg = Release|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64.ActiveCfg = Release|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64.Build.0 = Release|x64 + {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x86.ActiveCfg = Release|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.ActiveCfg = Debug|Win32 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.Build.0 = Debug|Win32 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x64.ActiveCfg = Debug|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x64.Build.0 = Debug|x64 + {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x86.ActiveCfg = Debug|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.ActiveCfg = Release|Win32 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.Build.0 = Release|Win32 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x64.ActiveCfg = Release|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x64.Build.0 = Release|x64 + {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x86.ActiveCfg = Release|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|Win32.ActiveCfg = Release_WM5_PPC_ARM|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64.ActiveCfg = Release_WM5_PPC_ARM|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64.Build.0 = Release_WM5_PPC_ARM|x64 + {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x86.ActiveCfg = Release_WM5_PPC_ARM|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.ActiveCfg = Debug|Win32 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.Build.0 = Debug|Win32 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64.ActiveCfg = Debug|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64.Build.0 = Debug|x64 + {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x86.ActiveCfg = Debug|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.ActiveCfg = Release|Win32 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.Build.0 = Release|Win32 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64.ActiveCfg = Release|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64.Build.0 = Release|x64 + {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x86.ActiveCfg = Release|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|Win32.ActiveCfg = Release_Static_SSE|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x64.ActiveCfg = Release_Static_SSE|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x64.Build.0 = Release_Static_SSE|x64 + {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x86.ActiveCfg = Release|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|Win32.ActiveCfg = Debug|Win32 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|Win32.Build.0 = Debug|Win32 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x64.ActiveCfg = Debug|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x64.Build.0 = Debug|x64 + {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x86.ActiveCfg = Debug|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|Win32.ActiveCfg = Release|Win32 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|Win32.Build.0 = Release|Win32 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x64.ActiveCfg = Release|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x64.Build.0 = Release|x64 + {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x86.ActiveCfg = Release|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|Win32.ActiveCfg = Release|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x64.ActiveCfg = Release|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x64.Build.0 = Release|x64 + {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x86.ActiveCfg = Release|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|Win32.ActiveCfg = Debug|Win32 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|Win32.Build.0 = Debug|Win32 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x64.ActiveCfg = Debug|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x64.Build.0 = Debug|x64 + {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x86.ActiveCfg = Debug|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|Win32.ActiveCfg = Release|Win32 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|Win32.Build.0 = Release|Win32 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x64.ActiveCfg = Release|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x64.Build.0 = Release|x64 + {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x86.ActiveCfg = Release|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.All|Win32.ActiveCfg = Release|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64.ActiveCfg = Release|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64.Build.0 = Release|x64 + {D0B36172-CD76-454A-9B89-990025266C2A}.All|x86.ActiveCfg = Release|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.ActiveCfg = Debug|Win32 {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.Build.0 = Debug|Win32 {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64.ActiveCfg = Debug|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64.Build.0 = Debug|x64 + {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x86.ActiveCfg = Debug|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.ActiveCfg = Release|Win32 {D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.Build.0 = Release|Win32 {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64.ActiveCfg = Release|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64.Build.0 = Release|x64 + {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x86.ActiveCfg = Release|x64 {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|Win32.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|Win32.Build.0 = Release|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|x64.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|x86.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|Win32.ActiveCfg = Debug|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|x64.ActiveCfg = Debug|Win32 + {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|x86.ActiveCfg = Debug|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|Win32.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|x64.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|x86.ActiveCfg = Release|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|Win32.ActiveCfg = Release|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|x64.ActiveCfg = Release|Win32 + {CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|x86.ActiveCfg = Release|x64 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Debug|Win32.ActiveCfg = Debug|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Debug|x64.ActiveCfg = Debug|x64 + {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Debug|x86.ActiveCfg = Debug|x64 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Release|Win32.ActiveCfg = Release|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Release|x64.ActiveCfg = Release|x64 + {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Release|x86.ActiveCfg = Release|x64 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.Build.0 = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|x64.ActiveCfg = All|Win32 + {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|x86.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.Build.0 = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x64.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x64.Build.0 = All|Win32 + {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x86.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.Build.0 = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x64.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x64.Build.0 = All|Win32 + {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x86.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.Build.0 = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|x64.ActiveCfg = All|Win32 + {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|x86.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.Build.0 = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x64.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x64.Build.0 = All|Win32 + {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x86.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.Build.0 = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x64.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x64.Build.0 = All|Win32 + {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x86.ActiveCfg = All|Win32 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|Win32.ActiveCfg = Release|x64 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x64.ActiveCfg = Release|x64 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x64.Build.0 = Release|x64 + {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x86.ActiveCfg = Release|x64 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Debug|Win32.ActiveCfg = Debug|Win32 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Debug|x64.ActiveCfg = Debug|x64 + {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Debug|x86.ActiveCfg = Debug|x64 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Release|Win32.ActiveCfg = Release|Win32 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Release|x64.ActiveCfg = Release|x64 + {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Release|x86.ActiveCfg = Release|x64 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|Win32.ActiveCfg = Release|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|Win32.Build.0 = Release|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x64.ActiveCfg = Release|Win32 + {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x86.ActiveCfg = Release|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|Win32.ActiveCfg = Debug|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x64.ActiveCfg = Debug|Win32 + {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x86.ActiveCfg = Debug|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|Win32.ActiveCfg = Release|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x64.ActiveCfg = Release|Win32 + {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x86.ActiveCfg = Release|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.All|Win32.ActiveCfg = Release|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.All|x64.ActiveCfg = Release|Win32 + {1F0A8A77-E661-418F-BB92-82172AE43803}.All|x86.ActiveCfg = Release|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|Win32.ActiveCfg = Debug|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|x64.ActiveCfg = Debug|Win32 + {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|x86.ActiveCfg = Debug|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|Win32.ActiveCfg = Release|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|x64.ActiveCfg = Release|Win32 + {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|x86.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|Win32.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|Win32.Build.0 = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x64.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x64.Build.0 = Release|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x86.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|Win32.ActiveCfg = Debug|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|Win32.Build.0 = Debug|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x64.ActiveCfg = Debug|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x64.Build.0 = Debug|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x86.ActiveCfg = Debug|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|Win32.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|Win32.Build.0 = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x64.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x64.Build.0 = Release|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x86.ActiveCfg = Release|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|Win32.ActiveCfg = Release|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|x64.ActiveCfg = Release|Win32 + {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|x86.ActiveCfg = Release|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|Win32.ActiveCfg = Debug|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|x64.ActiveCfg = Debug|Win32 + {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|x86.ActiveCfg = Debug|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|Win32.ActiveCfg = Release|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|x64.ActiveCfg = Release|Win32 + {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|x86.ActiveCfg = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|Win32.ActiveCfg = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|Win32.Build.0 = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.ActiveCfg = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.Build.0 = Release|Win32 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x86.ActiveCfg = Release|x64 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.ActiveCfg = Debug|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.Build.0 = Debug|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.ActiveCfg = Debug|x64 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.Build.0 = Debug|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x86.ActiveCfg = Debug|x64 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.ActiveCfg = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.Build.0 = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.ActiveCfg = Release|x64 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.Build.0 = Release|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x86.ActiveCfg = Release|x64 {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|Win32.ActiveCfg = Release|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x64.ActiveCfg = Release|Win32 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x86.ActiveCfg = Release|x64 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|Win32.ActiveCfg = Debug|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64.ActiveCfg = Debug|x64 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x86.ActiveCfg = Debug|x64 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|Win32.ActiveCfg = Release|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64.ActiveCfg = Release|x64 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x86.ActiveCfg = Release|x64 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|Win32.ActiveCfg = Release|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x64.ActiveCfg = Release|Win32 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x86.ActiveCfg = Release|x64 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|Win32.ActiveCfg = Debug|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64.ActiveCfg = Debug|x64 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x86.ActiveCfg = Debug|x64 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|Win32.ActiveCfg = Release|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64.ActiveCfg = Release|x64 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x86.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|Win32.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.Build.0 = Release|x64 + {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x86.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|Win32.ActiveCfg = Debug|Win32 {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|Win32.Build.0 = Debug|Win32 {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|x64.ActiveCfg = Debug|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|x64.Build.0 = Debug|x64 + {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|x86.ActiveCfg = Debug|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|Win32.ActiveCfg = Release|Win32 {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|Win32.Build.0 = Release|Win32 {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|x64.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|x64.Build.0 = Release|x64 + {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|x86.ActiveCfg = Release|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|Win32.ActiveCfg = Release|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x64.ActiveCfg = Release|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x64.Build.0 = Release|x64 + {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x86.ActiveCfg = Release|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|Win32.ActiveCfg = Debug|Win32 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|Win32.Build.0 = Debug|Win32 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|x64.ActiveCfg = Debug|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|x64.Build.0 = Debug|x64 + {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|x86.ActiveCfg = Debug|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|Win32.ActiveCfg = Release|Win32 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|Win32.Build.0 = Release|Win32 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|x64.ActiveCfg = Release|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|x64.Build.0 = Release|x64 + {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|x86.ActiveCfg = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|Win32.ActiveCfg = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|Win32.Build.0 = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x64.ActiveCfg = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x64.Build.0 = Release|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x86.ActiveCfg = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|Win32.ActiveCfg = Debug|Win32 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|Win32.Build.0 = Debug|Win32 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x64.ActiveCfg = Debug|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x64.Build.0 = Debug|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x86.ActiveCfg = Debug|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|Win32.ActiveCfg = Release|Win32 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|Win32.Build.0 = Release|Win32 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x64.ActiveCfg = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x64.Build.0 = Release|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x86.ActiveCfg = Release|x64 {432DB165-1EB2-4781-A9C0-71E62610B20A}.All|Win32.ActiveCfg = Release|x64 {432DB165-1EB2-4781-A9C0-71E62610B20A}.All|x64.ActiveCfg = Release|x64 + {432DB165-1EB2-4781-A9C0-71E62610B20A}.All|x86.ActiveCfg = Release|x64 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|Win32.ActiveCfg = Debug|Win32 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|Win32.Build.0 = Debug|Win32 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|x64.ActiveCfg = Debug|x64 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|x64.Build.0 = Debug|x64 + {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|x86.ActiveCfg = Debug|x64 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|Win32.ActiveCfg = Release|Win32 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|Win32.Build.0 = Release|Win32 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|x64.ActiveCfg = Release|x64 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|x64.Build.0 = Release|x64 + {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|x86.ActiveCfg = Release|x64 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|Win32.ActiveCfg = Release|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|Win32.Build.0 = Release|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x64.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x86.ActiveCfg = Release|x64 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.ActiveCfg = Debug|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.Build.0 = Debug|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64.ActiveCfg = Debug|x64 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64.Build.0 = Debug|x64 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x86.ActiveCfg = Debug|x64 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.ActiveCfg = Release|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.Build.0 = Release|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.ActiveCfg = Release|x64 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.Build.0 = Release|x64 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x86.ActiveCfg = Release|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|Win32.ActiveCfg = Release|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|x64.ActiveCfg = Release|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|x64.Build.0 = Release|x64 + {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|x86.ActiveCfg = Release|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|Win32.ActiveCfg = Debug|Win32 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|Win32.Build.0 = Debug|Win32 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|x64.ActiveCfg = Debug|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|x64.Build.0 = Debug|x64 + {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|x86.ActiveCfg = Debug|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|Win32.ActiveCfg = Release|Win32 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|Win32.Build.0 = Release|Win32 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|x64.ActiveCfg = Release|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|x64.Build.0 = Release|x64 + {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|x86.ActiveCfg = Release|x64 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|Win32.ActiveCfg = Release|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|Win32.Build.0 = Release|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|x64.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|x86.ActiveCfg = Release|x64 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|Win32.ActiveCfg = Debug|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|Win32.Build.0 = Debug|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|x64.ActiveCfg = Debug|x64 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|x64.Build.0 = Debug|x64 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|x86.ActiveCfg = Debug|x64 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|Win32.ActiveCfg = Release|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|Win32.Build.0 = Release|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|x64.ActiveCfg = Release|x64 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|x64.Build.0 = Release|x64 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|x86.ActiveCfg = Release|x64 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|Win32.ActiveCfg = Release|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|Win32.Build.0 = Release|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|x64.ActiveCfg = Release|Win32 + {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|x86.ActiveCfg = Release|x64 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|Win32.ActiveCfg = Debug|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|Win32.Build.0 = Debug|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|x64.ActiveCfg = Debug|x64 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|x64.Build.0 = Debug|x64 + {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|x86.ActiveCfg = Debug|x64 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|Win32.ActiveCfg = Release|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|Win32.Build.0 = Release|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|x64.ActiveCfg = Release|x64 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|x64.Build.0 = Release|x64 + {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|x86.ActiveCfg = Release|x64 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|Win32.ActiveCfg = Release|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|Win32.Build.0 = Release|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|x64.ActiveCfg = Release|Win32 + {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|x86.ActiveCfg = Release|x64 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|Win32.ActiveCfg = Debug|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|Win32.Build.0 = Debug|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|x64.ActiveCfg = Debug|x64 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|x64.Build.0 = Debug|x64 + {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|x86.ActiveCfg = Debug|x64 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|Win32.ActiveCfg = Release|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|Win32.Build.0 = Release|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|x64.ActiveCfg = Release|x64 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|x64.Build.0 = Release|x64 + {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|x86.ActiveCfg = Release|x64 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|Win32.ActiveCfg = Release|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|Win32.Build.0 = Release|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|x64.ActiveCfg = Release|Win32 + {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|x86.ActiveCfg = Release|x64 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|Win32.ActiveCfg = Debug|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|Win32.Build.0 = Debug|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|x64.ActiveCfg = Debug|x64 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|x64.Build.0 = Debug|x64 + {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|x86.ActiveCfg = Debug|x64 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|Win32.ActiveCfg = Release|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|Win32.Build.0 = Release|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|x64.ActiveCfg = Release|x64 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|x64.Build.0 = Release|x64 + {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|x86.ActiveCfg = Release|x64 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|Win32.ActiveCfg = Release|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|Win32.Build.0 = Release|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|x64.ActiveCfg = Release|Win32 + {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|x86.ActiveCfg = Release|x64 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|Win32.ActiveCfg = Debug|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|Win32.Build.0 = Debug|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|x64.ActiveCfg = Debug|x64 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|x64.Build.0 = Debug|x64 + {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|x86.ActiveCfg = Debug|x64 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|Win32.ActiveCfg = Release|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|Win32.Build.0 = Release|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|x64.ActiveCfg = Release|x64 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|x64.Build.0 = Release|x64 + {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|x86.ActiveCfg = Release|x64 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|Win32.ActiveCfg = Release|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|Win32.Build.0 = Release|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|x64.ActiveCfg = Release|Win32 + {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|x86.ActiveCfg = Release|x64 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|Win32.ActiveCfg = Debug|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|Win32.Build.0 = Debug|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|x64.ActiveCfg = Debug|x64 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|x64.Build.0 = Debug|x64 + {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|x86.ActiveCfg = Debug|x64 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|Win32.ActiveCfg = Release|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|Win32.Build.0 = Release|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|x64.ActiveCfg = Release|x64 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|x64.Build.0 = Release|x64 + {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|x86.ActiveCfg = Release|x64 {504B3154-7A4F-459D-9877-B951021C3F1F}.All|Win32.ActiveCfg = Release|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.All|Win32.Build.0 = Release|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.All|x64.ActiveCfg = Release|Win32 + {504B3154-7A4F-459D-9877-B951021C3F1F}.All|x86.ActiveCfg = Release|x64 {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|Win32.ActiveCfg = Debug|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|Win32.Build.0 = Debug|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|x64.ActiveCfg = Debug|x64 {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|x64.Build.0 = Debug|x64 + {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|x86.ActiveCfg = Debug|x64 {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|Win32.ActiveCfg = Release|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|Win32.Build.0 = Release|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|x64.ActiveCfg = Release|x64 {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|x64.Build.0 = Release|x64 + {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|x86.ActiveCfg = Release|x64 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|Win32.ActiveCfg = Release|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|Win32.Build.0 = Release|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|x64.ActiveCfg = Release|Win32 + {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|x86.ActiveCfg = Release|x64 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|Win32.ActiveCfg = Debug|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|Win32.Build.0 = Debug|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|x64.ActiveCfg = Debug|x64 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|x64.Build.0 = Debug|x64 + {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|x86.ActiveCfg = Debug|x64 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|Win32.ActiveCfg = Release|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|Win32.Build.0 = Release|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|x64.ActiveCfg = Release|x64 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|x64.Build.0 = Release|x64 + {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|x86.ActiveCfg = Release|x64 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|Win32.ActiveCfg = Release|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|Win32.Build.0 = Release|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|x64.ActiveCfg = Release|Win32 + {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|x86.ActiveCfg = Release|x64 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|Win32.ActiveCfg = Debug|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|Win32.Build.0 = Debug|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|x64.ActiveCfg = Debug|x64 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|x64.Build.0 = Debug|x64 + {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|x86.ActiveCfg = Debug|x64 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|Win32.ActiveCfg = Release|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|Win32.Build.0 = Release|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|x64.ActiveCfg = Release|x64 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|x64.Build.0 = Release|x64 + {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|x86.ActiveCfg = Release|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|Win32.ActiveCfg = Release|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|x64.ActiveCfg = Release|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|x64.Build.0 = Release|x64 + {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|x86.ActiveCfg = Release|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|Win32.ActiveCfg = Debug|Win32 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|Win32.Build.0 = Debug|Win32 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|x64.ActiveCfg = Debug|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|x64.Build.0 = Debug|x64 + {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|x86.ActiveCfg = Debug|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|Win32.ActiveCfg = Release|Win32 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|Win32.Build.0 = Release|Win32 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|x64.ActiveCfg = Release|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|x64.Build.0 = Release|x64 + {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|x86.ActiveCfg = Release|x64 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|Win32.ActiveCfg = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|Win32.Build.0 = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|x64.ActiveCfg = Release|Win32 + {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|x86.ActiveCfg = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|Win32.ActiveCfg = Debug|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|Win32.Build.0 = Debug|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|x64.ActiveCfg = Debug|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|x64.Build.0 = Debug|Win32 + {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|x86.ActiveCfg = Debug|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|Win32.ActiveCfg = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|Win32.Build.0 = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|x64.ActiveCfg = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|x64.Build.0 = Release|Win32 + {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|x86.ActiveCfg = Release|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|Win32.ActiveCfg = Release|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|x64.ActiveCfg = Release|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|x64.Build.0 = Release|x64 + {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|x86.ActiveCfg = Release|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|Win32.ActiveCfg = Debug|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|Win32.Build.0 = Debug|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|x64.ActiveCfg = Debug|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|x64.Build.0 = Debug|x64 + {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|x86.ActiveCfg = Debug|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|Win32.ActiveCfg = Release|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|Win32.Build.0 = Release|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|x64.ActiveCfg = Release|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|x64.Build.0 = Release|x64 + {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|x86.ActiveCfg = Release|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|Win32.ActiveCfg = Release Passthrough|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|x64.ActiveCfg = Release Passthrough|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|x64.Build.0 = Release Passthrough|x64 + {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|x86.ActiveCfg = Release Passthrough|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|Win32.ActiveCfg = Debug|Win32 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|Win32.Build.0 = Debug|Win32 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|x64.ActiveCfg = Debug|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|x64.Build.0 = Debug|x64 + {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|x86.ActiveCfg = Debug|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|Win32.ActiveCfg = Release|Win32 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|Win32.Build.0 = Release|Win32 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|x64.ActiveCfg = Release|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|x64.Build.0 = Release|x64 + {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|x86.ActiveCfg = Release|x64 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|Win32.ActiveCfg = Release|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|Win32.Build.0 = Release|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|x64.ActiveCfg = Release|Win32 + {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|x86.ActiveCfg = Release|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Debug|Win32.ActiveCfg = Debug|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Debug|x64.ActiveCfg = Debug|Win32 + {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Debug|x86.ActiveCfg = Debug|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Release|Win32.ActiveCfg = Release|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Release|x64.ActiveCfg = Release|Win32 + {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Release|x86.ActiveCfg = Release|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|Win32.ActiveCfg = Release|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|x64.ActiveCfg = Release|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|x64.Build.0 = Release|x64 + {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|x86.ActiveCfg = Release|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|Win32.ActiveCfg = Debug|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|Win32.Build.0 = Debug|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|x64.ActiveCfg = Debug|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|x64.Build.0 = Debug|x64 + {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|x86.ActiveCfg = Debug|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|Win32.ActiveCfg = Release|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|Win32.Build.0 = Release|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|x64.ActiveCfg = Release|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|x64.Build.0 = Release|x64 + {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|x86.ActiveCfg = Release|x64 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|Win32.ActiveCfg = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|Win32.Build.0 = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|x64.ActiveCfg = Release|Win32 + {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|x86.ActiveCfg = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|Win32.ActiveCfg = Debug|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|Win32.Build.0 = Debug|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|x64.ActiveCfg = Debug|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|x64.Build.0 = Debug|Win32 + {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|x86.ActiveCfg = Debug|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|Win32.ActiveCfg = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|Win32.Build.0 = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|x64.ActiveCfg = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|x64.Build.0 = Release|Win32 + {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|x86.ActiveCfg = Release|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|Win32.ActiveCfg = Release|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|x64.ActiveCfg = Release|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|x64.Build.0 = Release|x64 + {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|x86.ActiveCfg = Release|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|Win32.ActiveCfg = Debug|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|Win32.Build.0 = Debug|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|x64.ActiveCfg = Debug|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|x64.Build.0 = Debug|x64 + {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|x86.ActiveCfg = Debug|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|Win32.ActiveCfg = Release|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|Win32.Build.0 = Release|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|x64.ActiveCfg = Release|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|x64.Build.0 = Release|x64 + {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|x86.ActiveCfg = Release|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|Win32.ActiveCfg = Release|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|x64.ActiveCfg = Release|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|x64.Build.0 = Release|x64 + {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|x86.ActiveCfg = Release|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|Win32.ActiveCfg = Debug|Win32 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|Win32.Build.0 = Debug|Win32 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|x64.ActiveCfg = Debug|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|x64.Build.0 = Debug|x64 + {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|x86.ActiveCfg = Debug|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|Win32.ActiveCfg = Release|Win32 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|Win32.Build.0 = Release|Win32 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|x64.ActiveCfg = Release|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|x64.Build.0 = Release|x64 + {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|x86.ActiveCfg = Release|x64 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|Win32.ActiveCfg = Release|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|Win32.Build.0 = Release|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|x64.ActiveCfg = Release|Win32 + {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|x86.ActiveCfg = Release|x64 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|Win32.ActiveCfg = Debug|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|Win32.Build.0 = Debug|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|x64.ActiveCfg = Debug|x64 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|x64.Build.0 = Debug|x64 + {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|x86.ActiveCfg = Debug|x64 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|Win32.ActiveCfg = Release|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|Win32.Build.0 = Release|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|x64.ActiveCfg = Release|x64 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|x64.Build.0 = Release|x64 + {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|x86.ActiveCfg = Release|x64 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|Win32.ActiveCfg = Release|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|Win32.Build.0 = Release|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|x64.ActiveCfg = Release|Win32 + {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|x86.ActiveCfg = Release|x64 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|Win32.ActiveCfg = Debug|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|Win32.Build.0 = Debug|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|x64.ActiveCfg = Debug|x64 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|x64.Build.0 = Debug|x64 + {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|x86.ActiveCfg = Debug|x64 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|Win32.ActiveCfg = Release|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|Win32.Build.0 = Release|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|x64.ActiveCfg = Release|x64 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|x64.Build.0 = Release|x64 + {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|x86.ActiveCfg = Release|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|Win32.ActiveCfg = Release|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|x64.ActiveCfg = Release|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|x64.Build.0 = Release|x64 + {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|x86.ActiveCfg = Release|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|Win32.ActiveCfg = Debug|Win32 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|Win32.Build.0 = Debug|Win32 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|x64.ActiveCfg = Debug|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|x64.Build.0 = Debug|x64 + {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|x86.ActiveCfg = Debug|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|Win32.ActiveCfg = Release|Win32 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|Win32.Build.0 = Release|Win32 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|x64.ActiveCfg = Release|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|x64.Build.0 = Release|x64 + {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|x86.ActiveCfg = Release|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|Win32.ActiveCfg = Release|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|x64.ActiveCfg = Release|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|x64.Build.0 = Release|x64 + {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|x86.ActiveCfg = Release|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|Win32.ActiveCfg = Debug|Win32 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|Win32.Build.0 = Debug|Win32 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|x64.ActiveCfg = Debug|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|x64.Build.0 = Debug|x64 + {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|x86.ActiveCfg = Debug|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|Win32.ActiveCfg = Release|Win32 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|Win32.Build.0 = Release|Win32 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|x64.ActiveCfg = Release|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|x64.Build.0 = Release|x64 + {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|x86.ActiveCfg = Release|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|Win32.ActiveCfg = Release|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|x64.ActiveCfg = Release|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|x64.Build.0 = Release|x64 + {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|x86.ActiveCfg = Release|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|Win32.ActiveCfg = Debug|Win32 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|Win32.Build.0 = Debug|Win32 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|x64.ActiveCfg = Debug|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|x64.Build.0 = Debug|x64 + {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|x86.ActiveCfg = Debug|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|Win32.ActiveCfg = Release|Win32 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|Win32.Build.0 = Release|Win32 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|x64.ActiveCfg = Release|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|x64.Build.0 = Release|x64 + {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|x86.ActiveCfg = Release|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|Win32.ActiveCfg = Release|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|x64.ActiveCfg = Release|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|x64.Build.0 = Release|x64 + {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|x86.ActiveCfg = Release|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|Win32.ActiveCfg = Debug|Win32 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|Win32.Build.0 = Debug|Win32 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|x64.ActiveCfg = Debug|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|x64.Build.0 = Debug|x64 + {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|x86.ActiveCfg = Debug|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|Win32.ActiveCfg = Release|Win32 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|Win32.Build.0 = Release|Win32 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|x64.ActiveCfg = Release|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|x64.Build.0 = Release|x64 + {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|x86.ActiveCfg = Release|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|Win32.ActiveCfg = Release|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|x64.ActiveCfg = Release|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|x64.Build.0 = Release|x64 + {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|x86.ActiveCfg = Release|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|Win32.ActiveCfg = Debug|Win32 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|Win32.Build.0 = Debug|Win32 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|x64.ActiveCfg = Debug|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|x64.Build.0 = Debug|x64 + {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|x86.ActiveCfg = Debug|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|Win32.ActiveCfg = Release|Win32 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|Win32.Build.0 = Release|Win32 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|x64.ActiveCfg = Release|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|x64.Build.0 = Release|x64 + {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|x86.ActiveCfg = Release|x64 {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|Win32.ActiveCfg = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|Win32.Build.0 = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|x64.ActiveCfg = Release|Win32 + {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|x86.ActiveCfg = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|Win32.ActiveCfg = Debug|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|Win32.Build.0 = Debug|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|x64.ActiveCfg = Debug|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|x64.Build.0 = Debug|Win32 + {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|x86.ActiveCfg = Debug|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|Win32.ActiveCfg = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|Win32.Build.0 = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|x64.ActiveCfg = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|x64.Build.0 = Release|Win32 + {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|x86.ActiveCfg = Release|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|Win32.ActiveCfg = Release|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64.ActiveCfg = Release|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64.Build.0 = Release|x64 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x86.ActiveCfg = Release|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Win32.ActiveCfg = Debug|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Win32.Build.0 = Debug|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64.ActiveCfg = Debug|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64.Build.0 = Debug|x64 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x86.ActiveCfg = Debug|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Win32.ActiveCfg = Release|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Win32.Build.0 = Release|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.ActiveCfg = Release|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.Build.0 = Release|x64 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x86.ActiveCfg = Release|x64 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|Win32.ActiveCfg = Release|x64 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|x64.ActiveCfg = Release|x64 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|x64.Build.0 = Release|x64 + {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|x86.ActiveCfg = Release|x64 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Debug|Win32.ActiveCfg = Debug|Win32 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Debug|x64.ActiveCfg = Debug|x64 + {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Debug|x86.ActiveCfg = Debug|x64 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Release|Win32.ActiveCfg = Release|Win32 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Release|x64.ActiveCfg = Release|x64 + {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Release|x86.ActiveCfg = Release|x64 {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|Win32.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|Win32.Build.0 = Release|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|x64.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|x86.ActiveCfg = Release|x64 {05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|Win32.ActiveCfg = Debug|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|x64.ActiveCfg = Debug|x64 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|x86.ActiveCfg = Debug|x64 {05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|Win32.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|x64.ActiveCfg = Release|x64 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|x86.ActiveCfg = Release|x64 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|Win32.ActiveCfg = Release|x64 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|x64.ActiveCfg = Release|x64 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|x64.Build.0 = Release|x64 + {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|x86.ActiveCfg = Release|x64 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Debug|Win32.ActiveCfg = Debug|Win32 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Debug|x64.ActiveCfg = Debug|x64 + {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Debug|x86.ActiveCfg = Debug|x64 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Release|Win32.ActiveCfg = Release|Win32 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Release|x64.ActiveCfg = Release|x64 + {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Release|x86.ActiveCfg = Release|x64 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.All|Win32.ActiveCfg = Release|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.All|x64.ActiveCfg = Release|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.All|x86.ActiveCfg = Release|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.All|x86.Build.0 = Release|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|Win32.ActiveCfg = Debug|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|x64.ActiveCfg = Debug|x64 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|x86.ActiveCfg = Debug|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|x86.Build.0 = Debug|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|Win32.ActiveCfg = Release|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|x64.ActiveCfg = Release|x64 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|x86.ActiveCfg = Release|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Setup/Setup.wixproj b/Setup/Setup.wixproj new file mode 100644 index 0000000000..03fd60966a --- /dev/null +++ b/Setup/Setup.wixproj @@ -0,0 +1,695 @@ + + + + 3.5 + {47213370-b933-487d-9f45-bca26d7e2b6f} + 2.0 + FreeSWITCH + Package + $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets + $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets + + + bin\x86\Debug\ + obj\X86\$(Configuration)\ + Debug;FreeSWITCHConfFilesDir=..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\Win32\debug\sounds; + + + + + bin\x86\release\ + obj\X86\$(Configuration)\ + Debug;FreeSWITCHConfFilesDir=..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\Win32\release\sounds; + + + bin\x64\Debug\ + obj\X64\$(Configuration)\ + Debug;FreeSWITCHConfFilesDir=..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\x64\debug\sounds; + + + + + bin\x64\Release\ + obj\X64\$(Configuration)\ + Debug;FreeSWITCHConfFilesDir=..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\x64\release\sounds; + + + + + + + + + libbroadvoice + {cf70f278-3364-4395-a2e1-23501c9b8ad2} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + libteletone + {89385c74-5860-4174-9caf-a39e7c48909c} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + libspandsp + {1cbb0077-18c5-455f-801c-0a0ce7b0bbf5} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + libaprutil + {f057da7f-79e5-4b00-845c-ef446ef055e3} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + libapr + {f6c55d93-b927-4483-bb69-15aef3dd2dff} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + js + {204fa0de-305d-4414-ae2e-f195a23f390d} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + libeay32 + {d331904d-a00a-4694-a5a3-fcff64ab5dbe} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + openssl __Libraries\openssl\openssl_ + {25bd39b1-c8bf-4676-a738-9cabd9c6bc79} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + ssleay32 + {b4b62169-5ad4-4559-8707-3d933ac5db39} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + pocketsphinx + {94001a0e-a837-445c-8004-f918f10d0226} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + sphinxbase + {2f025ead-99bd-40f5-b2cc-f0a28cad7f2d} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + mod_avmd + {990baa76-89d3-4e38-8479-c7b28784efc8} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_commands + {30a5b29c-983e-4580-9fd0-d647ccdcc7eb} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_conference + {c24fb505-05d7-4319-8485-7540b44c8603} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_curl + {ef300386-a8df-4372-b6d8-fb9bffca9aed} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_db + {f6a33240-8f29-48bd-98f0-826995911799} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_dptools + {b5881a85-fe70-4f64-8607-2caae52669c6} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_enum + {71a967d5-0e99-4cef-a587-98836ee6f2ef} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_esf + {3850d93a-5f24-4922-bc1c-74d08c37c256} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_expr + {65a6273d-fcab-4c55-b09e-65100141a5d4} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_fifo + {75df7f29-2fbf-47f7-b5af-5b4952dc1abd} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_fsv + {e3246d17-e29b-4ab5-962a-c69b0c5837bb} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_lcr + {1a3793d1-05d1-4b57-9b0f-5af3e79dc439} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_nibblebill + {3c977801-fe88-48f2-83d3-fa2ebff6688e} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_rss + {b69247fa-ecd6-40ed-8e44-5ca6c3baf9a4} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_snom + {2a3d00c6-588d-4e86-81ac-9ef5ede86e03} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_spandsp + {1e21afe0-6fdb-41d2-942d-863607c24b91} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_valet_parking + {432db165-1eb2-4781-a9c0-71e62610b20a} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_vmd + {14e4a972-9cfb-436d-b0a5-4943f3f80d47} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_voicemail + {d7f1e3f2-a3f4-474c-8555-15122571af52} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_pocketsphinx + {2286da73-9fc5-45bc-a508-85994c3317ab} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_unimrcp + {d07c378a-f5f7-438f-adf3-4ac4fb1883cd} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_amr + {8deb383c-4091-4f42-a56f-c9e46d552d79} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_celt + {4d418176-3b33-47e6-a63e-01ba34add21c} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_g723_1 + {fea1eef7-876f-48de-88bf-c0e3e606d758} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_g729 + {1d95cd95-0de2-48c3-ac23-d5c7d1c9c0f0} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_ilbc + {d3ec0aff-76fc-4210-a825-9a17410660a3} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_silk + {afa983d6-4569-4f88-ba94-555ed00fd9a8} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_siren + {0b6c905b-142e-4999-b39d-92ff7951e921} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_speex + {5580d60e-0f77-4716-9cd4-b8e5986fa375} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_dialplan_directory + {a27cca23-1541-4337-81a4-f0a6413078a0} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_dialplan_xml + {07113b25-d3af-4e04-ba77-4cd1171f022c} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_loopback + {b3f424ec-3d8f-417c-b244-3919d5e1a577} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_PortAudio + {5fd31a25-5d83-4794-8bee-904dad84ce71} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_sofia + {0df3abd0-ddc0-4265-b778-07c66780979b} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_event_multicast + {784113ef-44d9-4949-835d-7065d3c7ad08} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_event_socket + {05515420-16de-4e63-be73-85be85ba5142} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_file_string + {70564d74-199a-4452-9c60-19ed5f242f0d} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_local_stream + {2ca40887-1622-46a1-a7f9-17fd7e7e545b} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_native_file + {9254c4b0-6f60-42b6-bb3a-36d63fc001c7} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_sndfile + {afac0568-7548-42d5-9f6a-8d3400a1e4f6} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_tone_stream + {6ff941ac-82c5-429f-aa4c-ad2fb9e5da52} + True + + + Binaries;Content;Satellites + MODLOCATION + + + lua51 + {d0b36172-cd76-454a-9b89-990025266c2a} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + mod_lua + {7b077e7f-1be7-4291-ab86-55e527b25cac} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_managed + {7b42bda1-72c0-4378-a9b6-5c530f8cd61e} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_console + {1c453396-d912-4213-89fd-9b489162b7b5} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_logfile + {d0bcac02-d94b-46b8-9b49-cddcc2bd7909} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_say_de + {5bc072db-3826-48ea-af34-fe32aa01e83b} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_say_en + {988cacf7-3fcb-4992-be69-77872ae67dc8} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_say_es + {fa429e98-8b03-45e6-a096-a4bc5e821de4} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_say_fr + {06e3a538-ab32-44f2-b477-755ff9cb5d37} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_say_it + {6d1bec70-4dcd-4fe9-adbd-4a43a67e4d05} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_say_nl + {a4b122cf-5196-476b-8c0e-d8bd59ac3c14} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_say_ru + {0382e8fd-cfdc-41c0-8b03-792c7c84fc31} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_say_zh + {b6a9fb7a-1cc4-442b-812d-ec33e4e4a36e} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_xml_cdr + {08dad348-9e0a-4a2e-97f1-f1e7e24a7836} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_xml_curl + {ab91a099-7690-4ecf-8994-e458f4ea1ed4} + True + + + Binaries;Content;Satellites + MODLOCATION + + + mod_xml_rpc + {cbec7225-0c21-4da8-978e-1f158f8ad950} + True + + + Binaries;Content;Satellites + MODLOCATION + + + FreeSwitchConsole + {1af3a893-f7be-43dd-b697-8ab2397c0d67} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + FreeSwitchCoreLib + {202d7a4e-760d-4d0e-afa1-d7459ced30ff} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + + + + + $(WixExtDir)\WixUIExtension.dll + WixUIExtension + + + + + + + + "$(WIX)bin\heat.exe" dir "..\..\..\..\conf" -cg FreeSWITCHConfFiles -gg -scom -sreg -sfrag -srd -dr CONFLOCATION -var var.FreeSWITCHConfFilesDir -out "$(ProjectDir)Fragments\FreeSWITCHConfFiles.wxs" +"$(WIX)bin\heat.exe" dir "..\..\..\..\Win32\Release\sounds" -cg FreeSWITCHSoundFiles8 -gg -scom -sreg -sfrag -srd -dr SOUNDLOCATION -var var.FreeSWITCHSoundFilesDir -out "$(ProjectDir)Fragments\FreeSWITCHSoundFiles8.wxs" + + + \ No newline at end of file From 3c4d7f1d48d15c815055eb343de1a9fb48a75a72 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 12 Oct 2010 15:48:24 -0400 Subject: [PATCH 008/230] fs_encode: encode by [ptime] ms so we don't end up with partial frames, destroy codec when done --- src/fs_encode.c | 21 ++++++++++++++++++--- src/switch_core_sqldb.c | 4 ++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/fs_encode.c b/src/fs_encode.c index abfd23f22a..6704077dfa 100644 --- a/src/fs_encode.c +++ b/src/fs_encode.c @@ -64,10 +64,11 @@ int main(int argc, char *argv[]) int rate = 8000; switch_file_handle_t fh_input = { 0 }, fh_output = { 0 }; switch_codec_t codec = { 0 }; - char buf[1024]; + char buf[2048]; switch_size_t len = sizeof(buf)/2; switch_memory_pool_t *pool; int bitrate = 0; + int blocksize; for (i = 1; i < argc; i++) { if (argv[i][0] == '-') { @@ -169,9 +170,16 @@ int main(int argc, char *argv[]) fprintf(stderr, "Couldn't initialize codec for %s@%dh@%di\n", format, rate, ptime); goto end; } + + blocksize = len = (rate*ptime)/1000; + switch_assert(sizeof(buf) >= len * 2); + + if (verbose) { + printf("Frame size is %d\n", blocksize); + } while (switch_core_file_read(&fh_input, buf, &len) == SWITCH_STATUS_SUCCESS) { - char encode_buf[1024]; + char encode_buf[2048]; uint32_t encoded_len = sizeof(buf); uint32_t encoded_rate = rate; unsigned int flags = 0; @@ -182,18 +190,25 @@ int main(int argc, char *argv[]) } len = encoded_len; + if (switch_core_file_write(&fh_output, encode_buf, &len) != SWITCH_STATUS_SUCCESS) { fprintf(stderr, "Write error\n"); goto end; } - len = sizeof(buf)/2; + if (len != encoded_len) { + printf("Short write: wrote %"SWITCH_SIZE_T_FMT"/%d bytes\n", len, encoded_len); + } + + len = blocksize; } r = 0; end: + switch_core_codec_destroy(&codec); + if (fh_input.file_interface) { switch_core_file_close(&fh_input); } diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index c467a23a62..7f995040e9 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -62,6 +62,10 @@ SWITCH_DECLARE(switch_status_t) _switch_core_db_handle(switch_cache_db_handle_t { switch_cache_db_connection_options_t options = { {0} }; switch_status_t r; + + if (!sql_manager.manage) { + return SWITCH_STATUS_FALSE; + } if (!zstr(runtime.odbc_dsn)) { options.odbc_options.dsn = runtime.odbc_dsn; From 18131a58a54d10b10b5cbc80ab983dcbcffb3021 Mon Sep 17 00:00:00 2001 From: Marc Olivier Chouinard Date: Tue, 12 Oct 2010 16:06:49 -0400 Subject: [PATCH 009/230] mod_conference: Fix deadlock --- src/mod/applications/mod_conference/mod_conference.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index ed62da107b..ac57dc0c15 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -2582,6 +2582,7 @@ static void conference_loop_output(conference_member_t *member) } if (switch_core_session_write_frame(member->session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) { switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + switch_mutex_unlock(member->audio_out_mutex); break; } } From 3eab7f5a8945cdd65c7e1a0c96cf1f80147a9bf2 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 12 Oct 2010 16:24:44 -0400 Subject: [PATCH 010/230] fs_encode: err/logging on stderr --- src/fs_encode.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/fs_encode.c b/src/fs_encode.c index 6704077dfa..15e6538ecf 100644 --- a/src/fs_encode.c +++ b/src/fs_encode.c @@ -120,7 +120,7 @@ int main(int argc, char *argv[]) format++; if (switch_core_init(SCF_MINIMAL, verbose, &err) != SWITCH_STATUS_SUCCESS) { - printf("Cannot init core [%s]\n", err); + fprintf(stderr, "Cannot init core [%s]\n", err); goto end; } @@ -128,24 +128,24 @@ int main(int argc, char *argv[]) for (i = 0; i < extra_modules_count; i++) { if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) extra_modules[i], SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { - printf("Cannot init %s [%s]\n", extra_modules[i], err); + fprintf(stderr, "Cannot init %s [%s]\n", extra_modules[i], err); goto end; } } if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_sndfile", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { - printf("Cannot init mod_sndfile [%s]\n", err); + fprintf(stderr, "Cannot init mod_sndfile [%s]\n", err); goto end; } if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_native_file", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { - printf("Cannot init mod_native_file [%s]\n", err); + fprintf(stderr, "Cannot init mod_native_file [%s]\n", err); goto end; } switch_core_new_memory_pool(&pool); if (verbose) { - fprintf(stderr, "Opening file %s\n", input); + fprintf(stderr, "Opening file %s\n", input); } if (switch_core_file_open(&fh_input, input, channels, rate, SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, NULL) != SWITCH_STATUS_SUCCESS) { fprintf(stderr, "Couldn't open %s\n", input); @@ -175,7 +175,7 @@ int main(int argc, char *argv[]) switch_assert(sizeof(buf) >= len * 2); if (verbose) { - printf("Frame size is %d\n", blocksize); + fprintf(stderr, "Frame size is %d\n", blocksize); } while (switch_core_file_read(&fh_input, buf, &len) == SWITCH_STATUS_SUCCESS) { From 70964c3a2c137f608cf0e756377c8471f7d5d82b Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Tue, 12 Oct 2010 09:31:05 -0400 Subject: [PATCH 011/230] mod_sangoma_codec: add some debug code --- .../mod_sangoma_codec/mod_sangoma_codec.c | 214 ++++++++++++++++-- 1 file changed, 194 insertions(+), 20 deletions(-) diff --git a/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c b/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c index c84dac4509..60ac3ef0be 100644 --- a/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c +++ b/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c @@ -108,6 +108,12 @@ static char g_codec_register_list[1024] = "all"; /* default codec list to NOT load, users may override */ static char g_codec_noregister_list[1024] = ""; +#define SANGOMA_RTP_QUEUE_SIZE 4 +struct sangoma_rtp_payload { + uint8_t data[SWITCH_RECOMMENDED_BUFFER_SIZE]; + int32_t datalen; +}; + struct codec_data { /* sngtc request and reply */ sngtc_codec_request_t request; @@ -132,6 +138,13 @@ struct codec_data { switch_time_t avgrxus; switch_time_t last_rx_time; + /* RTP queue. The bigger the queue, the bigger the possible delay */ + struct sangoma_rtp_payload rtp_queue[SANGOMA_RTP_QUEUE_SIZE]; + uint8_t queue_windex; + uint8_t queue_rindex; + uint8_t queue_size; + uint8_t queue_max_ever; + unsigned debug_timing:1; }; struct sangoma_transcoding_session { @@ -352,6 +365,12 @@ static switch_status_t switch_sangoma_init_ilbc(switch_codec_t *codec, switch_co return switch_sangoma_init(codec, flags, codec_settings); } +#define SAFE_INDEX_INC(array, index) \ + (index)++; \ + if ((index) == switch_arraylen((array))) { \ + (index) = 0; \ + } + static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec_t *other_codec, /* codec that was used by the other side */ void *decoded_data, /* decoded data that we must encode */ uint32_t decoded_data_len /* decoded data length */ , @@ -367,12 +386,17 @@ static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec switch_frame_t encoded_frame; switch_status_t sres; switch_time_t now_time, difftime; + switch_time_t prevread_time, afterread_time; unsigned char ebuf_ulaw[decoded_data_len / 2]; short *dbuf_linear; int i = 0; int res = 0; struct sangoma_transcoding_session *sess = codec->private_info; + if (sess->encoder.debug_timing) { + prevread_time = switch_micro_time_now(); + } + /* start assuming we will not encode anything */ *encoded_data_len = 0; @@ -392,6 +416,16 @@ static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec switch_mutex_unlock(g_sessions_lock); } + if (sess->encoder.debug_timing) { + now_time = switch_micro_time_now(); + if (sess->encoder.last_rx_time) { + difftime = now_time - sess->encoder.last_rx_time; + if (difftime > 25000 || difftime < 15000) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "%ldus since last read on encoding session %lu.\n", (long)difftime, sess->sessid); + } + } + } + /* transcode to ulaw first */ dbuf_linear = decoded_data; @@ -422,12 +456,22 @@ static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec /* do the reading */ memset(&encoded_frame, 0, sizeof(encoded_frame)); for ( ; ; ) { +#if 0 + prevread_time = switch_micro_time_now(); +#endif sres = switch_rtp_zerocopy_read_frame(sess->encoder.rxrtp, &encoded_frame, SWITCH_IO_FLAG_NOBLOCK); if (sres == SWITCH_STATUS_GENERR) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to read on Sangoma encoder RTP session: %d\n", sres); return SWITCH_STATUS_FALSE; } +#if 0 + afterread_time = switch_micro_time_now(); + difftime = afterread_time - prevread_time; + if (difftime > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%ldus to read on encoding session %lu.\n", (long)difftime, sess->sessid); + } +#endif if (0 == encoded_frame.datalen) { break; } @@ -439,19 +483,32 @@ static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec break; } - if (*encoded_data_len) { - sess->encoder.rxdiscarded++; + if (sess->encoder.queue_windex == sess->encoder.queue_rindex) { + if (sess->encoder.rtp_queue[sess->encoder.queue_rindex].datalen) { + /* if there is something where we want to write, we're dropping it */ + sess->encoder.rxdiscarded++; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Discarding encoded frame of %d bytes from RTP session %lu, windex = %d, rindex = %d\n", + sess->encoder.rtp_queue[sess->encoder.queue_rindex].datalen, sess->sessid, sess->encoder.queue_windex, sess->encoder.queue_rindex); + SAFE_INDEX_INC(sess->encoder.rtp_queue, sess->encoder.queue_rindex); + sess->encoder.queue_size--; + } } - memcpy(encoded_data, encoded_frame.data, encoded_frame.datalen); - *encoded_data_len = encoded_frame.datalen; + memcpy(sess->encoder.rtp_queue[sess->encoder.queue_windex].data, encoded_frame.data, encoded_frame.datalen); + sess->encoder.rtp_queue[sess->encoder.queue_windex].datalen = encoded_frame.datalen; + SAFE_INDEX_INC(sess->encoder.rtp_queue, sess->encoder.queue_windex); + + /* monitor the queue size */ + sess->encoder.queue_size++; + if (sess->encoder.queue_size > sess->encoder.queue_max_ever) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Encoder Rx queue for RTP session %lu is now %d, windex = %d, rindex = %d\n", sess->sessid, sess->encoder.queue_size, + sess->encoder.queue_windex, sess->encoder.queue_rindex); + sess->encoder.queue_max_ever = sess->encoder.queue_size; + } } - /* update encoding stats if we received a frame */ - if (*encoded_data_len) { - if (*encoded_data_len != codec->implementation->encoded_bytes_per_packet) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Returning odd encoded frame of %d bytes intead of %d bytes\n", *encoded_data_len, codec->implementation->encoded_bytes_per_packet); - } + /* update encoding stats if we have a frame to give */ + if (sess->encoder.rtp_queue[sess->encoder.queue_rindex].datalen) { sess->encoder.rx++; now_time = switch_micro_time_now(); if (!sess->encoder.last_rx_time) { @@ -469,10 +526,27 @@ static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec } } sess->encoder.lastrxseqno = encoded_frame.seq; + + /* pop the data from the queue */ + *encoded_data_len = sess->encoder.rtp_queue[sess->encoder.queue_rindex].datalen; + memcpy(encoded_data, sess->encoder.rtp_queue[sess->encoder.queue_rindex].data, *encoded_data_len); + sess->encoder.rtp_queue[sess->encoder.queue_rindex].datalen = 0; + SAFE_INDEX_INC(sess->encoder.rtp_queue, sess->encoder.queue_rindex); + sess->encoder.queue_size--; + if (*encoded_data_len != codec->implementation->encoded_bytes_per_packet) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Returning odd encoded frame of %d bytes intead of %d bytes\n", *encoded_data_len, codec->implementation->encoded_bytes_per_packet); + } } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "No output from sangoma encoder\n"); } + if (sess->encoder.debug_timing) { + afterread_time = switch_micro_time_now(); + difftime = afterread_time - prevread_time; + if (difftime > 5000) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "%ldus to execute encoding function in session %lu.\n", (long)difftime, sess->sessid); + } + } return SWITCH_STATUS_SUCCESS; } @@ -492,11 +566,16 @@ static switch_status_t switch_sangoma_decode(switch_codec_t *codec, /* codec ses switch_frame_t ulaw_frame; switch_status_t sres; switch_time_t now_time, difftime; + switch_time_t prevread_time, afterread_time; short *dbuf_linear; int i = 0; int res = 0; struct sangoma_transcoding_session *sess = codec->private_info; + if (sess->decoder.debug_timing) { + prevread_time = switch_micro_time_now(); + } + dbuf_linear = decoded_data; /* start assuming we will not decode anything */ @@ -524,6 +603,16 @@ static switch_status_t switch_sangoma_decode(switch_codec_t *codec, /* codec ses switch_mutex_unlock(g_sessions_lock); } + if (sess->decoder.debug_timing) { + now_time = switch_micro_time_now(); + if (sess->decoder.last_rx_time) { + difftime = now_time - sess->decoder.last_rx_time; + if (difftime > 25000 || difftime < 15000) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%ldms since last read on decoding session %lu.\n", (long)difftime, sess->sessid); + } + } + } + /* do the writing */ memset(&encoded_frame, 0, sizeof(encoded_frame)); encoded_frame.source = __FUNCTION__; @@ -548,12 +637,22 @@ static switch_status_t switch_sangoma_decode(switch_codec_t *codec, /* codec ses /* do the reading */ memset(&ulaw_frame, 0, sizeof(ulaw_frame)); for ( ; ; ) { +#if 0 + prevread_time = switch_micro_time_now(); +#endif sres = switch_rtp_zerocopy_read_frame(sess->decoder.rxrtp, &ulaw_frame, SWITCH_IO_FLAG_NOBLOCK); if (sres == SWITCH_STATUS_GENERR) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to read on Sangoma decoder RTP session: %d\n", sres); return SWITCH_STATUS_FALSE; } +#if 0 + afterread_time = switch_micro_time_now(); + difftime = afterread_time - prevread_time; + if (difftime > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%ldus to read on decoding session %lu.\n", (long)difftime, sess->sessid); + } +#endif if (0 == ulaw_frame.datalen) { break; } @@ -565,21 +664,31 @@ static switch_status_t switch_sangoma_decode(switch_codec_t *codec, /* codec ses break; } - if (*decoded_data_len) { - sess->decoder.rxdiscarded++; + if (sess->decoder.queue_windex == sess->decoder.queue_rindex) { + if (sess->decoder.rtp_queue[sess->decoder.queue_rindex].datalen) { + /* if there is something where we want to write, we're dropping it */ + sess->decoder.rxdiscarded++; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Discarding decoded frame of %d bytes from RTP session %lu, windex = %d, rindex = %d\n", + sess->decoder.rtp_queue[sess->decoder.queue_rindex].datalen, sess->sessid, sess->decoder.queue_windex, sess->decoder.queue_rindex); + SAFE_INDEX_INC(sess->decoder.rtp_queue, sess->decoder.queue_rindex); + sess->decoder.queue_size--; + } } - /* transcode to linear */ - for (i = 0; i < ulaw_frame.datalen; i++) { - dbuf_linear[i] = ulaw_to_linear(((char *)ulaw_frame.data)[i]); + memcpy(sess->decoder.rtp_queue[sess->decoder.queue_windex].data, ulaw_frame.data, ulaw_frame.datalen); + sess->decoder.rtp_queue[sess->decoder.queue_windex].datalen = ulaw_frame.datalen; + SAFE_INDEX_INC(sess->decoder.rtp_queue, sess->decoder.queue_windex); + + /* monitor the queue size */ + sess->decoder.queue_size++; + if (sess->decoder.queue_size > sess->decoder.queue_max_ever) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Encoder Rx queue for RTP session %lu is now %d, windex = %d, rindex = %d\n", sess->sessid, sess->decoder.queue_size, + sess->decoder.queue_windex, sess->decoder.queue_rindex); + sess->decoder.queue_max_ever = sess->decoder.queue_size; } - *decoded_data_len = i * 2; } - if (*decoded_data_len) { - if (*decoded_data_len != codec->implementation->decoded_bytes_per_packet) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Returning odd decoded frame of %d bytes intead of %d bytes\n", *decoded_data_len, codec->implementation->decoded_bytes_per_packet); - } + if (sess->decoder.rtp_queue[sess->decoder.queue_rindex].datalen) { /* update decoding stats */ sess->decoder.rx++; @@ -599,12 +708,33 @@ static switch_status_t switch_sangoma_decode(switch_codec_t *codec, /* codec ses } } sess->decoder.lastrxseqno = ulaw_frame.seq; + + /* pop the data from the queue and transcode it */ + for (i = 0; i < sess->decoder.rtp_queue[sess->decoder.queue_rindex].datalen; i++) { + dbuf_linear[i] = ulaw_to_linear(((char *)sess->decoder.rtp_queue[sess->decoder.queue_rindex].data)[i]); + } + *decoded_data_len = i * 2; + sess->decoder.rtp_queue[sess->decoder.queue_rindex].datalen = 0; + SAFE_INDEX_INC(sess->decoder.rtp_queue, sess->decoder.queue_rindex); + sess->decoder.queue_size--; + + if (*decoded_data_len != codec->implementation->decoded_bytes_per_packet) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Returning odd decoded frame of %d bytes intead of %d bytes\n", *decoded_data_len, codec->implementation->decoded_bytes_per_packet); + } } else { *decoded_data_len = codec->implementation->decoded_bytes_per_packet; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "No output from sangoma decoder, returning silent frame of %d bytes\n", *decoded_data_len); memset(dbuf_linear, 0, *decoded_data_len); } + if (sess->decoder.debug_timing) { + afterread_time = switch_micro_time_now(); + difftime = afterread_time - prevread_time; + if (difftime > 5000) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%ldus to execute decoding function in session %lu.\n", (long)difftime, sess->sessid); + } + } + return SWITCH_STATUS_SUCCESS; } @@ -652,7 +782,7 @@ static void sangoma_print_stats(switch_stream_handle_t *stream, switch_rtp_numbe stream->write_function(stream, "Flush packet count: %lu\n\n\n", stats->flush_packet_count); } -#define SANGOMA_SYNTAX "settings|sessions|stats " +#define SANGOMA_SYNTAX "settings|sessions|stats |debug |nodebug " SWITCH_STANDARD_API(sangoma_function) { char *argv[10] = { 0 }; @@ -788,6 +918,48 @@ SWITCH_STANDARD_API(sangoma_function) } else { stream->write_function(stream, "\n=== No Decoder ===\n\n"); } + } else if (!strcasecmp(argv[0], "debug")) { + struct sangoma_transcoding_session *sess; + unsigned long sessid = 0; + int ret = 0; + if (argc < 2) { + stream->write_function(stream, "%s", SANGOMA_SYNTAX); + goto done; + } + ret = sscanf(argv[1], "%lu", &sessid); + if (ret != 1) { + stream->write_function(stream, "%s", SANGOMA_SYNTAX); + goto done; + } + sess = sangoma_find_session(sessid); + if (!sess) { + stream->write_function(stream, "Failed to find session %lu\n", sessid); + goto done; + } + sess->encoder.debug_timing = 1; + sess->decoder.debug_timing = 1; + stream->write_function(stream, "Debug enabled for transcoding session: %lu\n", sessid); + } else if (!strcasecmp(argv[0], "nodebug")) { + struct sangoma_transcoding_session *sess; + unsigned long sessid = 0; + int ret = 0; + if (argc < 2) { + stream->write_function(stream, "%s", SANGOMA_SYNTAX); + goto done; + } + ret = sscanf(argv[1], "%lu", &sessid); + if (ret != 1) { + stream->write_function(stream, "%s", SANGOMA_SYNTAX); + goto done; + } + sess = sangoma_find_session(sessid); + if (!sess) { + stream->write_function(stream, "Failed to find session %lu\n", sessid); + goto done; + } + sess->encoder.debug_timing = 0; + sess->decoder.debug_timing = 0; + stream->write_function(stream, "Debug disabled for transcoding session: %lu\n", sessid); } else { stream->write_function(stream, "Unknown Command [%s]\n", argv[0]); } @@ -1103,6 +1275,8 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_sangoma_codec_load) switch_console_set_complete("add sangoma_codec settings"); switch_console_set_complete("add sangoma_codec sessions"); switch_console_set_complete("add sangoma_codec stats"); + switch_console_set_complete("add sangoma_codec debug"); + switch_console_set_complete("add sangoma_codec nodebug"); return SWITCH_STATUS_SUCCESS; } From 6e06ba09eb808f8a439b1bad3ef1d334537d6a2d Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Tue, 12 Oct 2010 11:58:40 -0400 Subject: [PATCH 012/230] mod_sangoma_codec: ignore cng frames --- .../mod_sangoma_codec/mod_sangoma_codec.c | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c b/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c index 60ac3ef0be..da8d7fe73d 100644 --- a/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c +++ b/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c @@ -476,8 +476,18 @@ static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec break; } - if (encoded_frame.payload != codec->implementation->ianacode - && encoded_frame.payload != IANACODE_CN) { + if (encoded_frame.payload == IANACODE_CN) { + /* confort noise is treated as silence by us */ + continue; + } + + if (encoded_frame.datalen != codec->implementation->encoded_bytes_per_packet) { + /* seen when silence suppression is enabled */ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Ignoring encoded frame of %d bytes intead of %d bytes\n", encoded_frame.datalen, codec->implementation->encoded_bytes_per_packet); + continue; + } + + if (encoded_frame.payload != codec->implementation->ianacode) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Read unexpected payload %d in Sangoma encoder RTP session, expecting %d\n", encoded_frame.payload, codec->implementation->ianacode); break; @@ -657,13 +667,18 @@ static switch_status_t switch_sangoma_decode(switch_codec_t *codec, /* codec ses break; } - if (ulaw_frame.payload != IANA_ULAW - && ulaw_frame.payload != IANACODE_CN) { + if (ulaw_frame.payload == IANACODE_CN) { + /* confort noise is treated as silence by us */ + continue; + } + + if (ulaw_frame.payload != IANA_ULAW) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Read unexpected payload %d in Sangoma decoder RTP session, expecting %d\n", ulaw_frame.payload, IANA_ULAW); break; } + if (sess->decoder.queue_windex == sess->decoder.queue_rindex) { if (sess->decoder.rtp_queue[sess->decoder.queue_rindex].datalen) { /* if there is something where we want to write, we're dropping it */ From cd124ad802326bcad36c2342b46b65e6290c50ae Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Tue, 12 Oct 2010 12:19:17 -0400 Subject: [PATCH 013/230] mod_sangoma_codec: more timing debug code --- .../mod_sangoma_codec/mod_sangoma_codec.c | 41 +++++++++---------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c b/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c index da8d7fe73d..697134b1c8 100644 --- a/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c +++ b/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c @@ -137,6 +137,7 @@ struct codec_data { /* avg Rx time */ switch_time_t avgrxus; switch_time_t last_rx_time; + switch_time_t last_func_call_time; /* RTP queue. The bigger the queue, the bigger the possible delay */ struct sangoma_rtp_payload rtp_queue[SANGOMA_RTP_QUEUE_SIZE]; @@ -386,7 +387,7 @@ static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec switch_frame_t encoded_frame; switch_status_t sres; switch_time_t now_time, difftime; - switch_time_t prevread_time, afterread_time; + switch_time_t func_start_time, func_end_time; unsigned char ebuf_ulaw[decoded_data_len / 2]; short *dbuf_linear; int i = 0; @@ -394,7 +395,7 @@ static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec struct sangoma_transcoding_session *sess = codec->private_info; if (sess->encoder.debug_timing) { - prevread_time = switch_micro_time_now(); + func_start_time = switch_micro_time_now(); } /* start assuming we will not encode anything */ @@ -416,13 +417,10 @@ static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec switch_mutex_unlock(g_sessions_lock); } - if (sess->encoder.debug_timing) { - now_time = switch_micro_time_now(); - if (sess->encoder.last_rx_time) { - difftime = now_time - sess->encoder.last_rx_time; - if (difftime > 25000 || difftime < 15000) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "%ldus since last read on encoding session %lu.\n", (long)difftime, sess->sessid); - } + if (sess->encoder.debug_timing && sess->encoder.last_func_call_time) { + difftime = func_start_time - sess->encoder.last_func_call_time; + if (difftime > 25000 || difftime < 15000) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "%ldus since last read on encoding session %lu\n", (long)difftime, sess->sessid); } } @@ -551,11 +549,12 @@ static switch_status_t switch_sangoma_encode(switch_codec_t *codec, switch_codec } if (sess->encoder.debug_timing) { - afterread_time = switch_micro_time_now(); - difftime = afterread_time - prevread_time; + func_end_time = switch_micro_time_now(); + difftime = func_end_time - func_start_time; if (difftime > 5000) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "%ldus to execute encoding function in session %lu.\n", (long)difftime, sess->sessid); } + sess->encoder.last_func_call_time = func_end_time; } return SWITCH_STATUS_SUCCESS; } @@ -576,14 +575,14 @@ static switch_status_t switch_sangoma_decode(switch_codec_t *codec, /* codec ses switch_frame_t ulaw_frame; switch_status_t sres; switch_time_t now_time, difftime; - switch_time_t prevread_time, afterread_time; + switch_time_t func_start_time, func_end_time; short *dbuf_linear; int i = 0; int res = 0; struct sangoma_transcoding_session *sess = codec->private_info; if (sess->decoder.debug_timing) { - prevread_time = switch_micro_time_now(); + func_start_time = switch_micro_time_now(); } dbuf_linear = decoded_data; @@ -613,13 +612,10 @@ static switch_status_t switch_sangoma_decode(switch_codec_t *codec, /* codec ses switch_mutex_unlock(g_sessions_lock); } - if (sess->decoder.debug_timing) { - now_time = switch_micro_time_now(); - if (sess->decoder.last_rx_time) { - difftime = now_time - sess->decoder.last_rx_time; - if (difftime > 25000 || difftime < 15000) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%ldms since last read on decoding session %lu.\n", (long)difftime, sess->sessid); - } + if (sess->decoder.debug_timing && sess->decoder.last_func_call_time) { + difftime = func_start_time - sess->decoder.last_func_call_time; + if (difftime > 25000 || difftime < 15000) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%ldms since last read on decoding session %lu.\n", (long)difftime, sess->sessid); } } @@ -743,11 +739,12 @@ static switch_status_t switch_sangoma_decode(switch_codec_t *codec, /* codec ses } if (sess->decoder.debug_timing) { - afterread_time = switch_micro_time_now(); - difftime = afterread_time - prevread_time; + func_end_time = switch_micro_time_now(); + difftime = func_end_time - func_start_time; if (difftime > 5000) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%ldus to execute decoding function in session %lu.\n", (long)difftime, sess->sessid); } + sess->decoder.last_func_call_time = func_end_time; } return SWITCH_STATUS_SUCCESS; From 4b86794dea0406ea09c6fc92911c48d87d7c1f4b Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 12 Oct 2010 16:52:16 -0400 Subject: [PATCH 014/230] typo --- src/fs_encode.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs_encode.c b/src/fs_encode.c index 15e6538ecf..9517802600 100644 --- a/src/fs_encode.c +++ b/src/fs_encode.c @@ -224,8 +224,8 @@ end: return r; usage: printf("Usage: %s [options] input output\n\n", argv[0]); - printf("The output must end in the format, eg: myfile.SPEEX\n"); - printf("\t\t -l module[,module]\t Load additional modules (coma-separated)\n"); + printf("The output must end in the format, e.g., myfile.SPEEX\n"); + printf("\t\t -l module[,module]\t Load additional modules (comma-separated)\n"); printf("\t\t -f format\t\t fmtp to pass to the codec\n"); printf("\t\t -p ptime\t\t ptime to use while encoding\n"); printf("\t\t -r rate\t\t sampling rate\n"); From 70d592aeba20e74a17480a548db3d217d94b5283 Mon Sep 17 00:00:00 2001 From: Marc Olivier Chouinard Date: Wed, 13 Oct 2010 01:40:18 -0400 Subject: [PATCH 015/230] mod_callcenter: Allow to get queue info via api --- .../applications/mod_callcenter/mod_callcenter.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/mod/applications/mod_callcenter/mod_callcenter.c b/src/mod/applications/mod_callcenter/mod_callcenter.c index ddd2cd5175..56c817ab33 100644 --- a/src/mod/applications/mod_callcenter/mod_callcenter.c +++ b/src/mod/applications/mod_callcenter/mod_callcenter.c @@ -2631,7 +2631,21 @@ SWITCH_STANDARD_API(cc_config_api_function) } } else if (action && !strcasecmp(action, "list")) { if (argc-initial_argc < 1) { - stream->write_function(stream, "%s", "-ERR Invalid!\n"); + switch_hash_index_t *hi; + stream->write_function(stream, "%s", "name|strategy|moh_sound|time_base_score|tier_rules_apply|tier_rule_wait_second|tier_rule_wait_multiply_level|tier_rule_no_agent_no_wait|discard_abandoned_after|abandoned_resume_allowed|max_wait_time|max_wait_time_with_no_agent|record_template\n"); + switch_mutex_lock(globals.mutex); + for (hi = switch_hash_first(NULL, globals.queue_hash); hi; hi = switch_hash_next(hi)) { + void *val = NULL; + const void *key; + switch_ssize_t keylen; + cc_queue_t *queue; + switch_hash_this(hi, &key, &keylen, &val); + queue = (cc_queue_t *) val; + stream->write_function(stream, "%s|%s|%s|%s|%s|%d|%s|%s|%d|%s|%d|%d|%s\n", queue->name, queue->strategy, queue->moh, queue->time_base_score, (queue->tier_rules_apply?"true":"false"), queue->tier_rule_wait_second, (queue->tier_rule_wait_multiply_level?"true":"false"), (queue->tier_rule_no_agent_no_wait?"true":"false"), queue->discard_abandoned_after, (queue->abandoned_resume_allowed?"true":"false"), queue->max_wait_time, queue->max_wait_time_with_no_agent, queue->record_template); + queue = NULL; + } + switch_mutex_unlock(globals.mutex); + stream->write_function(stream, "%s", "+OK\n"); goto done; } else { const char *queue_name = argv[0 + initial_argc]; From 890871ba4d564fb8940e927b0733e57e894808a7 Mon Sep 17 00:00:00 2001 From: Brian West Date: Wed, 13 Oct 2010 09:12:58 -0500 Subject: [PATCH 016/230] FS-2777: You know this is only an example of how to use FreeSWITCH, this config needs to be rewritten its turning into a beast --- conf/dialplan/default.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/conf/dialplan/default.xml b/conf/dialplan/default.xml index 8bdcfa0da2..42a3bcc31f 100644 --- a/conf/dialplan/default.xml +++ b/conf/dialplan/default.xml @@ -95,7 +95,7 @@ - + @@ -103,7 +103,7 @@ - + @@ -260,6 +260,8 @@ + + From 4e5911c2914392c2c2b5fa2d22773064bc9177fb Mon Sep 17 00:00:00 2001 From: Brian West Date: Wed, 13 Oct 2010 09:17:31 -0500 Subject: [PATCH 017/230] FS-2776: FS uses IPv6 under Proxy mode, and SIP Phone uses 6to4 tunneling IPv6 address, cause hearing nothing. --- src/switch_utils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/switch_utils.c b/src/switch_utils.c index b887904960..aa8f4139d2 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -1515,9 +1515,9 @@ SWITCH_DECLARE(char *) get_addr6(char *buf, switch_size_t len, struct sockaddr_i if (sa) { #if defined(NTDDI_VERSION) - switch_inet_ntop6((unsigned char*)sa, buf, len); + switch_inet_ntop6((unsigned char*)sa->sin6_addr, buf, len); #else - inet_ntop(AF_INET6, sa, buf, len); + inet_ntop(AF_INET6, &(sa->sin6_addr), buf, len); #endif } From ffd28c193079a1e720a32b85b0a4727bcc869f92 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Wed, 13 Oct 2010 10:59:34 -0500 Subject: [PATCH 018/230] fix build windows --- src/switch_utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/switch_utils.c b/src/switch_utils.c index aa8f4139d2..ea5bd37051 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -1515,7 +1515,7 @@ SWITCH_DECLARE(char *) get_addr6(char *buf, switch_size_t len, struct sockaddr_i if (sa) { #if defined(NTDDI_VERSION) - switch_inet_ntop6((unsigned char*)sa->sin6_addr, buf, len); + switch_inet_ntop6((unsigned char*)&(sa->sin6_addr), buf, len); #else inet_ntop(AF_INET6, &(sa->sin6_addr), buf, len); #endif From 93c2ed941a5c659f701dd8987e23dbb3156f1daa Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 13 Oct 2010 16:17:36 -0500 Subject: [PATCH 019/230] silent recovery --- src/include/switch_types.h | 1 + .../mod_conference/mod_conference.c | 21 ++++++++++++------- src/mod/endpoints/mod_sofia/sofia_glue.c | 5 ++++- src/switch_channel.c | 12 +++++++++++ src/switch_core_session.c | 4 +++- src/switch_core_state_machine.c | 6 +++++- 6 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/include/switch_types.h b/src/include/switch_types.h index d027549bce..cf27cb747e 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -1063,6 +1063,7 @@ typedef enum { CF_CONSUME_ON_ORIGINATE, CF_PASSTHRU_PTIME_MISMATCH, CF_BRIDGE_NOWRITE, + CF_RECOVERED, /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */ CF_FLAG_MAX } switch_channel_flag_t; diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index ac57dc0c15..64a76d4226 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -698,20 +698,21 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe switch_clear_flag(conference, CFLAG_WAIT_MOD); } + channel = switch_core_session_get_channel(member->session); + switch_channel_set_variable_printf(channel, "conference_member_id", "%d", member->id); + if (conference->count > 1) { if (conference->moh_sound && !switch_test_flag(conference, CFLAG_WAIT_MOD)) { /* stop MoH if any */ conference_stop_file(conference, FILE_STOP_ASYNC); } - if (conference->enter_sound) { + if (conference->enter_sound && (!switch_channel_test_flag(channel, CF_RECOVERED) || + switch_true(switch_channel_get_variable(channel, "conference_silent_entry")))) { 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); } } - channel = switch_core_session_get_channel(member->session); - switch_channel_set_variable_printf(channel, "conference_member_id", "%d", member->id); - call_list = (call_list_t *) switch_channel_get_private(channel, "_conference_autocall_list_"); @@ -720,7 +721,8 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe switch_snprintf(saymsg, sizeof(saymsg), "Auto Calling %d parties", call_list->iteration); conference_member_say(member, saymsg, 0); } else { - if (zstr(conference->special_announce)) { + if (zstr(conference->special_announce) && (!switch_channel_test_flag(channel, CF_RECOVERED) || + switch_true(switch_channel_get_variable(channel, "conference_silent_entry")))) { /* announce the total number of members in the conference */ if (conference->count >= conference->announce_count && conference->announce_count > 1) { switch_snprintf(msg, sizeof(msg), "There are %d callers", conference->count); @@ -750,7 +752,8 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe switch_set_flag(conference, CFLAG_ENFORCE_MIN); } - if (test_eflag(conference, EFLAG_ADD_MEMBER) && + if (test_eflag(conference, EFLAG_ADD_MEMBER) && (!switch_channel_test_flag(channel, CF_RECOVERED) || + switch_true(switch_channel_get_variable(channel, "conference_silent_entry"))) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { conference_add_event_member_data(member, event); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "add-member"); @@ -2408,7 +2411,8 @@ static void conference_loop_output(conference_member_t *member) const char *prefix = switch_channel_get_variable(channel, "conference_auto_outcall_prefix"); int to = 60; - if (ann) { + if (ann && (!switch_channel_test_flag(channel, CF_RECOVERED) || + switch_true(switch_channel_get_variable(channel, "conference_silent_entry")))) { member->conference->special_announce = switch_core_strdup(member->conference->pool, ann); } @@ -5657,7 +5661,8 @@ SWITCH_STANDARD_APP(conference_function) } } - if (conference->special_announce) { + if (conference->special_announce && (!switch_channel_test_flag(channel, CF_RECOVERED) || + switch_true(switch_channel_get_variable(channel, "conference_silent_entry")))) { conference_local_play_file(conference, session, conference->special_announce, CONF_DEFAULT_LEADIN, NULL, 0); } diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index cb8b257e58..13d323f02c 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -4999,7 +4999,10 @@ static int recover_callback(void *pArg, int argc, char **argv, char **columnName for (param = switch_xml_child(x_extension, "application"); param; param = param->next) { const char *var = switch_xml_attr_soft(param, "app_name"); const char *val = switch_xml_attr_soft(param, "app_data"); - switch_caller_extension_add_application(session, extension, var, val); + /* skip announcement type apps */ + if (strcasecmp(var, "speak") && strcasecmp(var, "playback") && strcasecmp(var, "gentones" || strcasecmp(var, "say"))) { + switch_caller_extension_add_application(session, extension, var, val); + } } } diff --git a/src/switch_channel.c b/src/switch_channel.c index 9e76b46a5a..0b1b6e8f82 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -1335,6 +1335,10 @@ SWITCH_DECLARE(void) switch_channel_set_flag_value(switch_channel_t *channel, sw switch_channel_set_variable(channel, "is_outbound", "true"); } + if (flag == CF_RECOVERED) { + switch_channel_set_variable(channel, "recovered", "true"); + } + } SWITCH_DECLARE(void) switch_channel_set_flag_recursive(switch_channel_t *channel, switch_channel_flag_t flag) @@ -1349,6 +1353,10 @@ SWITCH_DECLARE(void) switch_channel_set_flag_recursive(switch_channel_t *channel if (flag == CF_OUTBOUND) { switch_channel_set_variable(channel, "is_outbound", "true"); } + + if (flag == CF_RECOVERED) { + switch_channel_set_variable(channel, "recovered", "true"); + } } @@ -1461,6 +1469,10 @@ SWITCH_DECLARE(void) switch_channel_clear_flag(switch_channel_t *channel, switch if (flag == CF_OUTBOUND) { switch_channel_set_variable(channel, "is_outbound", NULL); } + + if (flag == CF_RECOVERED) { + switch_channel_set_variable(channel, "recovered", NULL); + } } diff --git a/src/switch_core_session.c b/src/switch_core_session.c index c8aca7dbc6..1589bebb67 100644 --- a/src/switch_core_session.c +++ b/src/switch_core_session.c @@ -1437,7 +1437,7 @@ SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_xml(switch_e } } } - + if ((callflow = switch_xml_child(xml, "callflow"))) { if ((tag2 = switch_xml_child(callflow, "caller_profile"))) { switch_caller_profile_t *caller_profile; @@ -1528,6 +1528,8 @@ SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_xml(switch_e } + + switch_channel_set_flag(channel, CF_RECOVERED); } diff --git a/src/switch_core_state_machine.c b/src/switch_core_state_machine.c index 2b8a6ced16..27579c2fb4 100644 --- a/src/switch_core_state_machine.c +++ b/src/switch_core_state_machine.c @@ -156,9 +156,13 @@ static void switch_core_standard_on_execute(switch_core_session_t *session) switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s Standard EXECUTE\n", switch_channel_get_name(session->channel)); + if (switch_channel_get_variable(session->channel, "recovered") && !switch_channel_test_flag(session->channel, CF_RECOVERED)) { + switch_channel_set_flag(session->channel, CF_RECOVERED); + } + top: switch_channel_clear_flag(session->channel, CF_RESET); - + if ((extension = switch_channel_get_caller_extension(session->channel)) == 0) { switch_channel_hangup(session->channel, SWITCH_CAUSE_NORMAL_CLEARING); return; From 54dcb64a4dd2b4e9a20c7d7eaed23e6465570b02 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 13 Oct 2010 16:21:53 -0500 Subject: [PATCH 020/230] typo --- src/mod/endpoints/mod_sofia/sofia_glue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 13d323f02c..35111a8681 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -5000,7 +5000,7 @@ static int recover_callback(void *pArg, int argc, char **argv, char **columnName const char *var = switch_xml_attr_soft(param, "app_name"); const char *val = switch_xml_attr_soft(param, "app_data"); /* skip announcement type apps */ - if (strcasecmp(var, "speak") && strcasecmp(var, "playback") && strcasecmp(var, "gentones" || strcasecmp(var, "say"))) { + if (strcasecmp(var, "speak") && strcasecmp(var, "playback") && strcasecmp(var, "gentones") && strcasecmp(var, "say")) { switch_caller_extension_add_application(session, extension, var, val); } } From f42c90365cb253a7956e90e5620a0074e5712936 Mon Sep 17 00:00:00 2001 From: Brian West Date: Wed, 13 Oct 2010 16:51:46 -0500 Subject: [PATCH 021/230] FS-2778: force_local_ip_v4 / _v6 not handled properly in switch_find_local_ip --- src/switch_utils.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/switch_utils.c b/src/switch_utils.c index ea5bd37051..4a0b818a6a 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -1071,10 +1071,12 @@ SWITCH_DECLARE(switch_status_t) switch_find_local_ip(char *buf, int len, int *ma case AF_INET: if (force_local_ip_v4) { switch_copy_string(buf, force_local_ip_v4, len); + return SWITCH_STATUS_SUCCESS; } case AF_INET6: if (force_local_ip_v6) { switch_copy_string(buf, force_local_ip_v6, len); + return SWITCH_STATUS_SUCCESS; } default: break; From 4eb3ec14488275e63a223441a021d2ee65574c70 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 13 Oct 2010 16:55:40 -0500 Subject: [PATCH 022/230] update last --- .../mod_conference/mod_conference.c | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 64a76d4226..31d2158f78 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -40,6 +40,11 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_conference_load); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_conference_shutdown); SWITCH_MODULE_DEFINITION(mod_conference, mod_conference_load, mod_conference_shutdown, NULL); +typedef enum { + CONF_SILENT_REQ = (1 << 0), + CONF_SILENT_DONE = (1 << 1) +} conf_app_flag_t; + static const char global_app_name[] = "conference"; static char *global_cf_name = "conference.conf"; static char *cf_pin_url_param_name = "X-ConfPin="; @@ -706,8 +711,8 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe /* stop MoH if any */ conference_stop_file(conference, FILE_STOP_ASYNC); } - if (conference->enter_sound && (!switch_channel_test_flag(channel, CF_RECOVERED) || - switch_true(switch_channel_get_variable(channel, "conference_silent_entry")))) { + + if (!switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ)) { 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); } @@ -721,8 +726,8 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe switch_snprintf(saymsg, sizeof(saymsg), "Auto Calling %d parties", call_list->iteration); conference_member_say(member, saymsg, 0); } else { - if (zstr(conference->special_announce) && (!switch_channel_test_flag(channel, CF_RECOVERED) || - switch_true(switch_channel_get_variable(channel, "conference_silent_entry")))) { + + if (!switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ)) { /* announce the total number of members in the conference */ if (conference->count >= conference->announce_count && conference->announce_count > 1) { switch_snprintf(msg, sizeof(msg), "There are %d callers", conference->count); @@ -752,14 +757,14 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe switch_set_flag(conference, CFLAG_ENFORCE_MIN); } - if (test_eflag(conference, EFLAG_ADD_MEMBER) && (!switch_channel_test_flag(channel, CF_RECOVERED) || - switch_true(switch_channel_get_variable(channel, "conference_silent_entry"))) && + if (!switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { conference_add_event_member_data(member, event); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "add-member"); switch_event_fire(&event); } + switch_channel_clear_app_flag_key("conf_silent", channel, CONF_SILENT_REQ); } unlock_member(member); switch_mutex_unlock(member->audio_out_mutex); @@ -2411,8 +2416,7 @@ static void conference_loop_output(conference_member_t *member) const char *prefix = switch_channel_get_variable(channel, "conference_auto_outcall_prefix"); int to = 60; - if (ann && (!switch_channel_test_flag(channel, CF_RECOVERED) || - switch_true(switch_channel_get_variable(channel, "conference_silent_entry")))) { + if (ann && !switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ)) { member->conference->special_announce = switch_core_strdup(member->conference->pool, ann); } @@ -5333,7 +5337,6 @@ static int setup_media(conference_member_t *member, conference_obj_t *conference } - /* Application interface function that is called from the dialplan to join the channel to a conference */ SWITCH_STANDARD_APP(conference_function) { @@ -5358,7 +5361,10 @@ SWITCH_STANDARD_APP(conference_function) switch_event_t *params = NULL; int locked = 0; - + if (!switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_DONE) && + (switch_channel_test_flag(channel, CF_RECOVERED) || switch_true(switch_channel_get_variable(channel, "conference_silent_entry")))) { + switch_channel_set_app_flag_key("conf_silent", channel, CONF_SILENT_REQ); + } if (switch_channel_answer(channel) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Channel answer failed.\n"); @@ -5661,8 +5667,7 @@ SWITCH_STANDARD_APP(conference_function) } } - if (conference->special_announce && (!switch_channel_test_flag(channel, CF_RECOVERED) || - switch_true(switch_channel_get_variable(channel, "conference_silent_entry")))) { + if (conference->special_announce && !switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ)) { conference_local_play_file(conference, session, conference->special_announce, CONF_DEFAULT_LEADIN, NULL, 0); } From 3cd8766b9c9bc04002e2b9d62bec852364ad2314 Mon Sep 17 00:00:00 2001 From: Michael S Collins Date: Wed, 13 Oct 2010 16:43:05 -0700 Subject: [PATCH 023/230] Minor typos in phrase_en.xml --- docs/phrase/phrase_en.xml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/phrase/phrase_en.xml b/docs/phrase/phrase_en.xml index 318aba18dd..65c70171fb 100644 --- a/docs/phrase/phrase_en.xml +++ b/docs/phrase/phrase_en.xml @@ -384,14 +384,14 @@ - + - + @@ -403,27 +403,29 @@ - + - + - + + + From dfa78985b4f6994f43b877b96d0a6dcb81cfdc01 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 13 Oct 2010 19:27:45 -0500 Subject: [PATCH 024/230] Change codec behaviour channel_variable: sdp_m_per_ptime Adds a new m= line for each distinct ptime in codec list. When this variable is not set: When mixing codecs with various ptime in a codec list, they will now be allowed to co-exist in the sdp but it will send no ptime attr. This means the ptime preferences on the offer will be ignored when mixing codecs with various ptimes. When receiving a codec list with no ptime attr, the ptime will be chosen from local preference instead of assuming 20ms This means if offer contains PCMU with not ptime and FS has PCMU@40i Dynamic payloads will now start at 98 and increment per additional dynamic codec per call. So now you can add CELT@32000h,CELT@48000h and each one will be auto-assigned a dynamic paylaod type. --- src/mod/endpoints/mod_sofia/mod_sofia.c | 11 +- src/mod/endpoints/mod_sofia/mod_sofia.h | 2 + src/mod/endpoints/mod_sofia/sofia_glue.c | 420 ++++++++++++++--------- src/switch_core.c | 2 +- src/switch_loadable_module.c | 104 ++++-- 5 files changed, 351 insertions(+), 188 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 36954d2904..702875465a 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -1031,13 +1031,10 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f if (codec_ms != tech_pvt->codec_ms) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, - "We were told to use ptime %d but what they meant to say was %d\n" - "This issue has so far been identified to happen on the following broken platforms/devices:\n" - "Linksys/Sipura aka Cisco\n" - "ShoreTel\n" - "Sonus/L3\n" - "We will try to fix it but some of the devices on this list are so broken,\n" - "who knows what will happen..\n", (int) tech_pvt->codec_ms, (int) codec_ms); + "Asynchronous PTIME not supported, changing our end from %d to %d\n", + (int) tech_pvt->codec_ms, + (int) codec_ms + ); switch_channel_set_variable_printf(channel, "sip_h_X-Broken-PTIME", "Adv=%d;Sent=%d", (int) tech_pvt->codec_ms, (int) codec_ms); diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index cf4b9a3759..87e0a5be4d 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -705,6 +705,8 @@ struct private_object { char *user_via; char *redirected; sofia_cid_type_t cid_type; + switch_payload_t payload_space; + switch_payload_t ianacodes[SWITCH_MAX_CODECS]; }; struct callback_t { diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 35111a8681..8358d1fd09 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -185,6 +185,158 @@ void sofia_glue_set_image_sdp(private_object_t *tech_pvt, switch_t38_options_t * } +static void generate_m(private_object_t *tech_pvt, char *buf, size_t buflen, + switch_port_t port, + int cur_ptime, const char *append_audio, const char *sr, int use_cng, int cng_type, switch_event_t *map) +{ + int i = 0; + int rate; + int already_did[128] = { 0 }; + int ptime = 0, noptime = 0; + + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "m=audio %d RTP/%sAVP", + port, (!zstr(tech_pvt->local_crypto_key) && sofia_test_flag(tech_pvt, TFLAG_SECURE)) ? "S" : ""); + + + + for (i = 0; i < tech_pvt->num_codecs; i++) { + const switch_codec_implementation_t *imp = tech_pvt->codecs[i]; + + if (imp->codec_type != SWITCH_CODEC_TYPE_AUDIO) { + continue; + } + + if (!noptime) { + if (!cur_ptime) { + if (ptime) { + if (ptime != imp->microseconds_per_packet / 1000) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, + "Codec %s payload %d added to sdp wanting ptime %d but it's already %d (%s:%d:%d), disabling ptime.\n", + imp->iananame, + tech_pvt->ianacodes[i], + imp->microseconds_per_packet / 1000, + ptime, + tech_pvt->codecs[0]->iananame, + tech_pvt->codecs[0]->ianacode, + ptime); + ptime = 0; + noptime = 1; + } + } else { + ptime = imp->microseconds_per_packet / 1000; + } + } else { + if ((imp->microseconds_per_packet / 1000) != cur_ptime) { + continue; + } + } + } + + if (tech_pvt->ianacodes[i] < 128) { + if (already_did[tech_pvt->ianacodes[i]]) { + continue; + } + + already_did[tech_pvt->ianacodes[i]] = 1; + } + + + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), " %d", tech_pvt->ianacodes[i]); + } + + if (tech_pvt->dtmf_type == DTMF_2833 && tech_pvt->te > 95) { + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), " %d", tech_pvt->te); + } + + if (!sofia_test_pflag(tech_pvt->profile, PFLAG_SUPPRESS_CNG) && cng_type && use_cng) { + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), " %d", cng_type); + } + + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "\n"); + + + memset(already_did, 0, sizeof(already_did)); + + for (i = 0; i < tech_pvt->num_codecs; i++) { + const switch_codec_implementation_t *imp = tech_pvt->codecs[i]; + char *fmtp = imp->fmtp; + + if (imp->codec_type != SWITCH_CODEC_TYPE_AUDIO) { + continue; + } + + if (!noptime) { + if (!cur_ptime) { + if (!ptime) { + ptime = imp->microseconds_per_packet / 1000; + } + } else { + if ((imp->microseconds_per_packet / 1000) != cur_ptime) { + continue; + } + } + } + + if (tech_pvt->ianacodes[i] < 128) { + if (already_did[tech_pvt->ianacodes[i]]) { + continue; + } + + already_did[tech_pvt->ianacodes[i]] = 1; + } + + + rate = imp->samples_per_second; + + if (map) { + char key[128] = ""; + char *check = NULL; + switch_snprintf(key, sizeof(key), "%s:%u", imp->iananame, imp->bits_per_second); + + if ((check = switch_event_get_header(map, key)) || (check = switch_event_get_header(map, imp->iananame))) { + fmtp = check; + } + } + + if (tech_pvt->ianacodes[i] > 95) { + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "a=rtpmap:%d %s/%d\n", tech_pvt->ianacodes[i], imp->iananame, rate); + } + + if (fmtp) { + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "a=fmtp:%d %s\n", tech_pvt->ianacodes[i], fmtp); + } + } + + + if (tech_pvt->dtmf_type == DTMF_2833 && tech_pvt->te > 95) { + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "a=rtpmap:%d telephone-event/8000\na=fmtp:%d 0-16\n", tech_pvt->te, tech_pvt->te); + } + + if (!cng_type) { + //switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "a=rtpmap:%d CN/8000\n", cng_type); + //} else { + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "a=silenceSupp:off - - - -\n"); + } + + if (append_audio) { + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "%s%s", append_audio, end_of(append_audio) == '\n' ? "" : "\n"); + } + + if (!cur_ptime) { + cur_ptime = ptime; + } + + if (!noptime && cur_ptime) { + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "a=ptime:%d\n", cur_ptime); + } + + if (sr) { + switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "a=%s\n", sr); + } + +} + + void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, uint32_t port, const char *sr, int force) { char buf[2048]; @@ -205,6 +357,23 @@ void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, uint32 switch_event_t *map = NULL, *ptmap = NULL; const char *b_sdp = NULL; + + if (!tech_pvt->payload_space) { + int i; + + tech_pvt->payload_space = 98; + + for (i = 0; i < tech_pvt->num_codecs; i++) { + const switch_codec_implementation_t *imp = tech_pvt->codecs[i]; + + tech_pvt->ianacodes[i] = imp->ianacode; + + if (tech_pvt->ianacodes[i] > 64) { + tech_pvt->ianacodes[i] = tech_pvt->payload_space++; + } + } + } + if (!tech_pvt->rm_encoding && (b_sdp = switch_channel_get_variable(tech_pvt->channel, SWITCH_B_SDP_VARIABLE))) { sofia_glue_sdp_map(b_sdp, &map, &ptmap); } @@ -278,155 +447,100 @@ void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, uint32 "o=%s %010u %010u IN %s %s\n" "s=%s\n" "c=IN %s %s\n" "t=0 0\n" - "%sm=audio %d RTP/%sAVP", - username, tech_pvt->owner_id, tech_pvt->session_id, family, ip, username, family, ip, srbuf, port, (!zstr(tech_pvt->local_crypto_key) - && sofia_test_flag(tech_pvt, - TFLAG_SECURE)) ? - "S" : ""); + "%s", + username, tech_pvt->owner_id, tech_pvt->session_id, family, ip, username, family, ip, srbuf); if (tech_pvt->rm_encoding) { + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "m=audio %d RTP/%sAVP", + port, (!zstr(tech_pvt->local_crypto_key) && sofia_test_flag(tech_pvt, TFLAG_SECURE)) ? "S" : ""); + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", tech_pvt->pt); - } else if (tech_pvt->num_codecs) { - int i; - int already_did[128] = { 0 }; - for (i = 0; i < tech_pvt->num_codecs; i++) { - const switch_codec_implementation_t *imp = tech_pvt->codecs[i]; - if (imp->codec_type != SWITCH_CODEC_TYPE_AUDIO) { - continue; - } - - if (imp->ianacode < 128) { - if (already_did[imp->ianacode]) { - continue; - } - - already_did[imp->ianacode] = 1; - } - - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", imp->ianacode); - if (!ptime) { - ptime = imp->microseconds_per_packet / 1000; - } + if (tech_pvt->dtmf_type == DTMF_2833 && tech_pvt->te > 95) { + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", tech_pvt->te); } - } + + if (!sofia_test_pflag(tech_pvt->profile, PFLAG_SUPPRESS_CNG) && tech_pvt->cng_pt && use_cng) { + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", tech_pvt->cng_pt); + } + + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "\n"); - if (tech_pvt->dtmf_type == DTMF_2833 && tech_pvt->te > 95) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", tech_pvt->te); - } - - if (!sofia_test_pflag(tech_pvt->profile, PFLAG_SUPPRESS_CNG) && tech_pvt->cng_pt && use_cng) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", tech_pvt->cng_pt); - } - - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "\n"); - - - if (tech_pvt->rm_encoding) { rate = tech_pvt->rm_rate; switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=rtpmap:%d %s/%d\n", tech_pvt->agreed_pt, tech_pvt->rm_encoding, rate); if (fmtp_out) { switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=fmtp:%d %s\n", tech_pvt->agreed_pt, fmtp_out); } + if (tech_pvt->read_codec.implementation && !ptime) { ptime = tech_pvt->read_codec.implementation->microseconds_per_packet / 1000; } + + if (tech_pvt->dtmf_type == DTMF_2833 && tech_pvt->te > 95) { + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=rtpmap:%d telephone-event/8000\na=fmtp:%d 0-16\n", tech_pvt->te, tech_pvt->te); + } + if (!sofia_test_pflag(tech_pvt->profile, PFLAG_SUPPRESS_CNG) && tech_pvt->cng_pt && use_cng) { + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=rtpmap:%d CN/8000\n", tech_pvt->cng_pt); + if (!tech_pvt->rm_encoding) { + tech_pvt->cng_pt = 0; + } + } else { + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=silenceSupp:off - - - -\n"); + } + + if (append_audio) { + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%s%s", append_audio, end_of(append_audio) == '\n' ? "" : "\n"); + } + + if (ptime) { + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=ptime:%d\n", ptime); + } + + if (sr) { + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=%s\n", sr); + } + + } else if (tech_pvt->num_codecs) { int i; - int already_did[128] = { 0 }; - for (i = 0; i < tech_pvt->num_codecs; i++) { - const switch_codec_implementation_t *imp = tech_pvt->codecs[i]; - char *fmtp = imp->fmtp; - - if (imp->codec_type != SWITCH_CODEC_TYPE_AUDIO) { - continue; - } + int cur_ptime = 0, this_ptime = 0, cng_type = 0; - if (imp->ianacode < 128) { - if (already_did[imp->ianacode]) { - continue; - } - already_did[imp->ianacode] = 1; - } + if (!sofia_test_pflag(tech_pvt->profile, PFLAG_SUPPRESS_CNG) && tech_pvt->cng_pt && use_cng) { + cng_type = tech_pvt->cng_pt; - rate = imp->samples_per_second; - - if (map) { - char key[128] = ""; - char *check = NULL; - switch_snprintf(key, sizeof(key), "%s:%u", imp->iananame, imp->bits_per_second); - - if ((check = switch_event_get_header(map, key)) || (check = switch_event_get_header(map, imp->iananame))) { - fmtp = check; - } - } - - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=rtpmap:%d %s/%d\n", imp->ianacode, imp->iananame, rate); - - if (fmtp) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=fmtp:%d %s\n", imp->ianacode, fmtp); + if (!tech_pvt->rm_encoding) { + tech_pvt->cng_pt = 0; } } - } - if (tech_pvt->dtmf_type == DTMF_2833 && tech_pvt->te > 95) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=rtpmap:%d telephone-event/8000\na=fmtp:%d 0-16\n", tech_pvt->te, tech_pvt->te); - } - if (!sofia_test_pflag(tech_pvt->profile, PFLAG_SUPPRESS_CNG) && tech_pvt->cng_pt && use_cng) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=rtpmap:%d CN/8000\n", tech_pvt->cng_pt); - if (!tech_pvt->rm_encoding) { - tech_pvt->cng_pt = 0; - } - } else { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=silenceSupp:off - - - -\n"); - } + if (!switch_true(switch_channel_get_variable(tech_pvt->channel, "sdp_m_per_ptime"))) { + generate_m(tech_pvt, buf, sizeof(buf), port, 0, append_audio, sr, use_cng, cng_type, map); + } else { - if (append_audio) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%s%s", append_audio, end_of(append_audio) == '\n' ? "" : "\n"); - } - - if (ptime) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=ptime:%d\n", ptime); - } - - if (sr) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=%s\n", sr); - } - - if (!zstr(tech_pvt->local_crypto_key) && sofia_test_flag(tech_pvt, TFLAG_SECURE)) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=crypto:%s\n", tech_pvt->local_crypto_key); - //switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=encryption:optional\n"); -#if 0 - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "m=audio %d RTP/AVP", port); - - if (tech_pvt->rm_encoding) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", tech_pvt->pt); - } else if (tech_pvt->num_codecs) { - int i; - int already_did[128] = { 0 }; for (i = 0; i < tech_pvt->num_codecs; i++) { const switch_codec_implementation_t *imp = tech_pvt->codecs[i]; - + if (imp->codec_type != SWITCH_CODEC_TYPE_AUDIO) { continue; } - - if (imp->ianacode < 128) { - if (already_did[imp->ianacode]) { - continue; - } - - already_did[imp->ianacode] = 1; + + this_ptime = imp->microseconds_per_packet / 1000; + + if (cur_ptime != this_ptime) { + cur_ptime = this_ptime; + generate_m(tech_pvt, buf, sizeof(buf), port, cur_ptime, append_audio, sr, use_cng, cng_type, map); } - - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", imp->ianacode); + } } - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "\na=crypto:%s\n", tech_pvt->local_crypto_key); -#endif + } + + if (!zstr(tech_pvt->local_crypto_key) && sofia_test_flag(tech_pvt, TFLAG_SECURE)) { + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=crypto:%s\n", tech_pvt->local_crypto_key); + //switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=encryption:optional\n"); } if (sofia_test_flag(tech_pvt, TFLAG_VIDEO)) { @@ -451,14 +565,14 @@ void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, uint32 continue; } - if (imp->ianacode < 128) { - if (already_did[imp->ianacode]) { + if (tech_pvt->ianacodes[i] < 128) { + if (already_did[tech_pvt->ianacodes[i]]) { continue; } - already_did[imp->ianacode] = 1; + already_did[tech_pvt->ianacodes[i]] = 1; } - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", imp->ianacode); + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", tech_pvt->ianacodes[i]); if (!ptime) { ptime = imp->microseconds_per_packet / 1000; } @@ -498,37 +612,11 @@ void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, uint32 int i; int already_did[128] = { 0 }; -#if 0 - switch_event_t *event; - char *buf; - int level = SWITCH_LOG_INFO; - - if (switch_event_create_plain(&event, SWITCH_EVENT_CHANNEL_DATA) == SWITCH_STATUS_SUCCESS) { - switch_channel_event_set_data(switch_core_session_get_channel(tech_pvt->session), event); - switch_event_serialize(event, &buf, SWITCH_FALSE); - switch_assert(buf); - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), level, "CHANNEL_DATA:\n%s\n", buf); - switch_event_destroy(&event); - free(buf); - } -#endif - for (i = 0; i < tech_pvt->num_codecs; i++) { const switch_codec_implementation_t *imp = tech_pvt->codecs[i]; char *fmtp = NULL; - uint32_t ianacode = imp->ianacode; -#if 0 - const char *str; + uint32_t ianacode = tech_pvt->ianacodes[i]; - - - if ((str = switch_event_get_header(ptmap, imp->iananame))) { - int tmp = atoi(str); - if (tmp > 0) { - ianacode = tmp; - } - } -#endif if (imp->codec_type != SWITCH_CODEC_TYPE_VIDEO) { continue; } @@ -562,7 +650,7 @@ void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, uint32 } if (!zstr(fmtp) && strcasecmp(fmtp, "_blank_")) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=fmtp:%d %s\n", imp->ianacode, fmtp); + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=fmtp:%d %s\n", ianacode, fmtp); } } @@ -578,7 +666,7 @@ void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, uint32 if (ptmap) { switch_event_destroy(&ptmap); } - + sofia_glue_tech_set_local_sdp(tech_pvt, buf, SWITCH_TRUE); } @@ -4219,28 +4307,38 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s last = tech_pvt->num_codecs; } - if (maxptime && (!ptime || ptime > maxptime)) { - ptime = maxptime; + codec_ms = ptime; + + if (maxptime && (!codec_ms || codec_ms > maxptime)) { + codec_ms = maxptime; } - if (!ptime) { - ptime = switch_default_ptime(rm_encoding, map->rm_pt); + if (!codec_ms) { + codec_ms = switch_default_ptime(rm_encoding, map->rm_pt); } map_bit_rate = switch_known_bitrate(map->rm_pt); - - if (!zstr(map->rm_fmtp)) { + + if (!ptime && !strcasecmp(map->rm_encoding, "g723")) { + codec_ms = 30; + } + + if (zstr(map->rm_fmtp)) { + if (!strcasecmp(map->rm_encoding, "ilbc")) { + codec_ms = 30; + } + } else { if ((switch_core_codec_parse_fmtp(map->rm_encoding, map->rm_fmtp, map->rm_rate, &codec_fmtp)) == SWITCH_STATUS_SUCCESS) { if (codec_fmtp.bits_per_second) { map_bit_rate = codec_fmtp.bits_per_second; } if (codec_fmtp.microseconds_per_packet) { - ptime = (codec_fmtp.microseconds_per_packet / 1000); + codec_ms = (codec_fmtp.microseconds_per_packet / 1000); } } } - codec_ms = ptime; + for (i = first; i < last && i < tech_pvt->num_codecs; i++) { const switch_codec_implementation_t *imp = tech_pvt->codecs[i]; @@ -4251,7 +4349,7 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s } switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Audio Codec Compare [%s:%d:%u:%d:%u]/[%s:%d:%u:%d:%u]\n", - rm_encoding, map->rm_pt, (int) map->rm_rate, codec_ms, map_bit_rate, + rm_encoding, map->rm_pt, (int) map->rm_rate, ptime, map_bit_rate, imp->iananame, imp->ianacode, codec_rate, imp->microseconds_per_packet / 1000, bit_rate); if ((zstr(map->rm_encoding) || (tech_pvt->profile->ndlb & PFLAG_NDLB_ALLOW_BAD_IANANAME)) && map->rm_pt < 96) { match = (map->rm_pt == imp->ianacode) ? 1 : 0; @@ -4270,7 +4368,7 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s "Bah HUMBUG! Sticking with %s@%uh@%ui\n", imp->iananame, imp->samples_per_second, imp->microseconds_per_packet / 1000); } else { - if ((codec_ms && codec_ms * 1000 != imp->microseconds_per_packet) || map->rm_rate != codec_rate) { + if ((ptime && codec_ms && codec_ms * 1000 != imp->microseconds_per_packet) || map->rm_rate != codec_rate) { near_rate = map->rm_rate; near_match = imp; match = 0; @@ -4337,7 +4435,9 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s } if (match) { - if (sofia_glue_tech_set_codec(tech_pvt, 1) != SWITCH_STATUS_SUCCESS) { + if (sofia_glue_tech_set_codec(tech_pvt, 1) == SWITCH_STATUS_SUCCESS) { + got_audio = 1; + } else { match = 0; } } diff --git a/src/switch_core.c b/src/switch_core.c index 1275b906e7..2f89c7bca7 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1423,7 +1423,7 @@ static void switch_load_core_config(const char *file) { switch_xml_t xml = NULL, cfg = NULL; - switch_core_hash_insert(runtime.ptimes, "ilbc", &d_30); + //switch_core_hash_insert(runtime.ptimes, "ilbc", &d_30); switch_core_hash_insert(runtime.ptimes, "G723", &d_30); if ((xml = switch_xml_open_cfg(file, &cfg, NULL))) { diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index 5645ea5fec..7aee9a769b 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -1547,12 +1547,91 @@ SWITCH_DECLARE(switch_management_interface_t *) switch_loadable_module_get_manag return switch_core_hash_find_locked(loadable_modules.management_hash, relative_oid, loadable_modules.mutex); } +#ifdef DEBUG_CODEC_SORTING +static void do_print(const switch_codec_implementation_t **array, int arraylen) +{ + int i; + + for(i = 0; i < arraylen; i++) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, + "DEBUG %d %s:%d %d\n", i, array[i]->iananame, array[i]->ianacode, array[i]->microseconds_per_packet / 1000); + } + +} +#endif + +/* helper only -- bounds checking enforced by caller */ +static void do_swap(const switch_codec_implementation_t **array, int a, int b) +{ + const switch_codec_implementation_t *tmp = array[b]; + array[b] = array[a]; + array[a] = tmp; +} + +static void switch_loadable_module_sort_codecs(const switch_codec_implementation_t **array, int arraylen) +{ + int i = 0, sorted_ptime = 0; + +#ifdef DEBUG_CODEC_SORTING + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "--BEFORE\n"); + do_print(array, arraylen); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "--BEFORE\n"); +#endif + + for (i = 0; i < arraylen; i++) { + int this_ptime = array[i]->microseconds_per_packet / 1000; + + if (!sorted_ptime) { + sorted_ptime = this_ptime; +#ifdef DEBUG_CODEC_SORTING + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "sorted1 = %d\n", sorted_ptime); +#endif + } + + if (this_ptime != sorted_ptime) { + int j; + int swapped = 0; + +#ifdef DEBUG_CODEC_SORTING + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%d != %d\n", this_ptime, sorted_ptime); +#endif + for(j = i; j < arraylen; j++) { + int check_ptime = array[j]->microseconds_per_packet / 1000; + + if (check_ptime == sorted_ptime) { +#ifdef DEBUG_CODEC_SORTING + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "swap %d %d ptime %d\n", i, j, check_ptime); +#endif + do_swap(array, i, j); + swapped = 1; + break; + } + } + + if (!swapped) { + sorted_ptime = this_ptime; +#ifdef DEBUG_CODEC_SORTING + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "sorted2 = %d\n", sorted_ptime); +#endif + } + } + } + +#ifdef DEBUG_CODEC_SORTING + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "--AFTER\n"); + do_print(array, arraylen); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "--AFTER\n"); +#endif + +} + + SWITCH_DECLARE(int) switch_loadable_module_get_codecs(const switch_codec_implementation_t **array, int arraylen) { switch_hash_index_t *hi; void *val; switch_codec_interface_t *codec_interface; - int i = 0, lock = 0; + int i = 0; const switch_codec_implementation_t *imp; switch_mutex_lock(loadable_modules.mutex); @@ -1564,10 +1643,6 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs(const switch_codec_impleme for (imp = codec_interface->implementations; imp; imp = imp->next) { uint32_t default_ptime = switch_default_ptime(imp->iananame, imp->ianacode); - if (lock && imp->microseconds_per_packet != lock) { - continue; - } - if (imp->microseconds_per_packet / 1000 == (int)default_ptime) { array[i++] = imp; goto found; @@ -1578,9 +1653,6 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs(const switch_codec_impleme found: - if (!lock && i > 0) - lock = array[i - 1]->microseconds_per_packet; - if (i > arraylen) { break; } @@ -1588,13 +1660,15 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs(const switch_codec_impleme switch_mutex_unlock(loadable_modules.mutex); + switch_loadable_module_sort_codecs(array, i); + return i; } SWITCH_DECLARE(int) switch_loadable_module_get_codecs_sorted(const switch_codec_implementation_t **array, int arraylen, char **prefs, int preflen) { - int x, i = 0, lock = 0; + int x, i = 0; switch_codec_interface_t *codec_interface; const switch_codec_implementation_t *imp; @@ -1635,9 +1709,6 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs_sorted(const switch_codec_ uint32_t default_ptime = switch_default_ptime(imp->iananame, imp->ianacode); if (imp->codec_type != SWITCH_CODEC_TYPE_VIDEO) { - if (lock && imp->microseconds_per_packet != lock) { - continue; - } if ((!interval && (uint32_t) (imp->microseconds_per_packet / 1000) != default_ptime) || (interval && (uint32_t) (imp->microseconds_per_packet / 1000) != interval)) { @@ -1664,10 +1735,6 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs_sorted(const switch_codec_ for (imp = codec_interface->implementations; imp; imp = imp->next) { if (imp->codec_type != SWITCH_CODEC_TYPE_VIDEO) { - if (lock && imp->microseconds_per_packet != lock) { - continue; - } - if (interval && (uint32_t) (imp->microseconds_per_packet / 1000) != interval) { continue; } @@ -1689,10 +1756,6 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs_sorted(const switch_codec_ found: - if (!lock && i > 0) { - lock = array[i - 1]->microseconds_per_packet; - } - UNPROTECT_INTERFACE(codec_interface); if (i > arraylen) { @@ -1704,6 +1767,7 @@ SWITCH_DECLARE(int) switch_loadable_module_get_codecs_sorted(const switch_codec_ switch_mutex_unlock(loadable_modules.mutex); + switch_loadable_module_sort_codecs(array, i); return i; } From 0559cc50da3dd8e7aa74eb6276e732c08d6cf8b9 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 13 Oct 2010 20:23:55 -0500 Subject: [PATCH 025/230] fix att_xfer reported by woody dickson on the mailing list --- src/switch_ivr_async.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 7cda473565..b8c8a69204 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -1066,11 +1066,17 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_eavesdrop_session(switch_core_session switch_core_session_message_t msg = { 0 }; char cid_buf[1024] = ""; switch_caller_profile_t *cp = NULL; + uint32_t sanity = 600; if (!switch_channel_media_ready(channel)) { goto end; } + while(switch_channel_state_change_pending(tchannel)) { + switch_yield(10000); + if (!--sanity) break; + } + if (!switch_channel_media_ready(tchannel)) { goto end; } From c465c435dcf0b9c0b52ec5249247534b2cfbc4b4 Mon Sep 17 00:00:00 2001 From: Brian West Date: Thu, 14 Oct 2010 12:18:40 -0500 Subject: [PATCH 026/230] If we discard a recording lets set a variable to let us know this took place --- src/switch_ivr_async.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index b8c8a69204..299c24d4c4 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -906,6 +906,7 @@ static switch_bool_t record_callback(switch_media_bug_t *bug, void *user_data, s switch_core_file_close(rh->fh); if (rh->fh->samples_out < rh->fh->samplerate * rh->min_sec) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Discarding short file %s\n", rh->file); + switch_channel_set_variable(channel, "RECORD_DISCARDED", "true"); switch_file_remove(rh->file, switch_core_session_get_pool(session)); } } From c4d1df76191fd4562d5e2fb202fb8ffe39437f38 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Thu, 14 Oct 2010 14:45:15 -0500 Subject: [PATCH 027/230] continuation of msbuild enabled automated installers for Win32/X64 --- Freeswitch.2010.sln | 1667 ++++++++++++----- .../mod_unimrcp/mod_unimrcp.2010.vcxproj | 3 + 2 files changed, 1169 insertions(+), 501 deletions(-) diff --git a/Freeswitch.2010.sln b/Freeswitch.2010.sln index a7af2ca13c..4b67f51114 100644 --- a/Freeswitch.2010.sln +++ b/Freeswitch.2010.sln @@ -711,2237 +711,2902 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution All|Win32 = All|Win32 All|x64 = All|x64 - All|x86 = All|x86 + All|x64 Setup = All|x64 Setup + All|x86 Setup = All|x86 Setup Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 + Debug|x64 Setup = Debug|x64 Setup + Debug|x86 Setup = Debug|x86 Setup Release|Win32 = Release|Win32 Release|x64 = Release|x64 - Release|x86 = Release|x86 + Release|x64 Setup = Release|x64 Setup + Release|x86 Setup = Release|x86 Setup EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|Win32.ActiveCfg = Release|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64.ActiveCfg = Release|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64.Build.0 = Release|x64 - {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x86.ActiveCfg = Release|x64 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64 Setup.ActiveCfg = Release|x64 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64 Setup.Build.0 = Release|x64 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x86 Setup.ActiveCfg = Release|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Win32.ActiveCfg = Debug|Win32 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Win32.Build.0 = Debug|Win32 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64.ActiveCfg = Debug|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64.Build.0 = Debug|x64 - {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x86.ActiveCfg = Debug|x64 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Win32.ActiveCfg = Release|Win32 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Win32.Build.0 = Release|Win32 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.ActiveCfg = Release|x64 {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.Build.0 = Release|x64 - {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x86.ActiveCfg = Release|x64 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64 Setup.ActiveCfg = Release|x64 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x86 Setup.ActiveCfg = Release|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|Win32.ActiveCfg = Release|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64.ActiveCfg = Release|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64.Build.0 = Release|x64 - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x86.ActiveCfg = Release|x64 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64 Setup.ActiveCfg = Release|x64 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64 Setup.Build.0 = Release|x64 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x86 Setup.ActiveCfg = Release|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.ActiveCfg = Debug|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.Build.0 = Debug|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64.ActiveCfg = Debug|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64.Build.0 = Debug|x64 - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x86.ActiveCfg = Debug|x64 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.ActiveCfg = Release|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.Build.0 = Release|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.ActiveCfg = Release|x64 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.Build.0 = Release|x64 - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x86.ActiveCfg = Release|x64 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64 Setup.ActiveCfg = Release|x64 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x86 Setup.ActiveCfg = Release|Win32 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|Win32.ActiveCfg = Release Passthrough|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64.ActiveCfg = Release Passthrough|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64.Build.0 = Release Passthrough|x64 - {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x86.ActiveCfg = Release|x64 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64 Setup.ActiveCfg = Release Passthrough|x64 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64 Setup.Build.0 = Release Passthrough|x64 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x86 Setup.ActiveCfg = Release Passthrough|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.Build.0 = Debug Passthrough|Win32 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.ActiveCfg = Debug Passthrough|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.Build.0 = Debug Passthrough|x64 - {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x86.ActiveCfg = Debug|x64 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64 Setup.ActiveCfg = Debug Passthrough|x64 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x86 Setup.ActiveCfg = Debug Passthrough|Win32 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.ActiveCfg = Release Passthrough|Win32 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.Build.0 = Release Passthrough|Win32 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.ActiveCfg = Release Passthrough|x64 {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.Build.0 = Release Passthrough|x64 - {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x86.ActiveCfg = Release|x64 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64 Setup.ActiveCfg = Release Passthrough|x64 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x86 Setup.ActiveCfg = Release Passthrough|Win32 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|Win32.ActiveCfg = Release|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64.ActiveCfg = Release|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64.Build.0 = Release|x64 - {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x86.ActiveCfg = Release|x64 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64 Setup.ActiveCfg = Release|x64 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64 Setup.Build.0 = Release|x64 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x86 Setup.ActiveCfg = Release|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.ActiveCfg = Debug|Win32 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.Build.0 = Debug|Win32 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64.ActiveCfg = Debug|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64.Build.0 = Debug|x64 - {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x86.ActiveCfg = Debug|x64 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.ActiveCfg = Release|Win32 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.Build.0 = Release|Win32 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.ActiveCfg = Release|x64 {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.Build.0 = Release|x64 - {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x86.ActiveCfg = Release|x64 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64 Setup.ActiveCfg = Release|x64 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x86 Setup.ActiveCfg = Release|Win32 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|Win32.ActiveCfg = Release|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64.ActiveCfg = Release|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64.Build.0 = Release|x64 - {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x86.ActiveCfg = Release|x64 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64 Setup.ActiveCfg = Release|x64 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64 Setup.Build.0 = Release|x64 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x86 Setup.ActiveCfg = Release|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.ActiveCfg = Debug|Win32 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.Build.0 = Debug|Win32 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64.ActiveCfg = Debug|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64.Build.0 = Debug|x64 - {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x86.ActiveCfg = Debug|x64 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.ActiveCfg = Release|Win32 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.Build.0 = Release|Win32 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.ActiveCfg = Release|x64 {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.Build.0 = Release|x64 - {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x86.ActiveCfg = Release|x64 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64 Setup.ActiveCfg = Release|x64 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x86 Setup.ActiveCfg = Release|Win32 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|Win32.ActiveCfg = Release|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64.ActiveCfg = Release|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64.Build.0 = Release|x64 - {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x86.ActiveCfg = Release|x64 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64 Setup.ActiveCfg = Release|x64 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64 Setup.Build.0 = Release|x64 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x86 Setup.ActiveCfg = Release|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.ActiveCfg = Debug|Win32 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.Build.0 = Debug|Win32 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64.ActiveCfg = Debug|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64.Build.0 = Debug|x64 - {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x86.ActiveCfg = Debug|x64 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.ActiveCfg = Release|Win32 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.Build.0 = Release|Win32 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.ActiveCfg = Release|x64 {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.Build.0 = Release|x64 - {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x86.ActiveCfg = Release|x64 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64 Setup.ActiveCfg = Release|x64 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x86 Setup.ActiveCfg = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|Win32.ActiveCfg = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|x64.ActiveCfg = Release|Win32 - {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|x86.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|x64 Setup.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|x86 Setup.ActiveCfg = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Win32.ActiveCfg = Debug|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|x64.ActiveCfg = Debug|Win32 - {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|x86.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Win32.ActiveCfg = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x64.ActiveCfg = Release|Win32 - {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x86.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x64 Setup.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x86 Setup.ActiveCfg = Release|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|Win32.ActiveCfg = Release|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64.ActiveCfg = Release|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64.Build.0 = Release|x64 - {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x86.ActiveCfg = Release|x64 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64 Setup.ActiveCfg = Release|x64 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64 Setup.Build.0 = Release|x64 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x86 Setup.ActiveCfg = Release|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.ActiveCfg = Debug|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.Build.0 = Debug|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64.ActiveCfg = Debug|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64.Build.0 = Debug|x64 - {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x86.ActiveCfg = Debug|x64 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.ActiveCfg = Release|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.Build.0 = Release|Win32 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.ActiveCfg = Release|x64 {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.Build.0 = Release|x64 - {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x86.ActiveCfg = Release|x64 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64 Setup.ActiveCfg = Release|x64 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x86 Setup.ActiveCfg = Release|Win32 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|Win32.ActiveCfg = Release MS-LDAP|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64.ActiveCfg = Release MS-LDAP|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64.Build.0 = Release MS-LDAP|x64 - {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x86.ActiveCfg = Release|x64 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64 Setup.ActiveCfg = Release MS-LDAP|x64 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64 Setup.Build.0 = Release MS-LDAP|x64 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x86 Setup.ActiveCfg = Release MS-LDAP|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Win32.ActiveCfg = Debug MS-LDAP|Win32 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Win32.Build.0 = Debug MS-LDAP|Win32 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.ActiveCfg = Debug MS-LDAP|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.Build.0 = Debug MS-LDAP|x64 - {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x86.ActiveCfg = Debug|x64 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64 Setup.ActiveCfg = Debug MS-LDAP|x64 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x86 Setup.ActiveCfg = Debug MS-LDAP|Win32 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Win32.ActiveCfg = Release MS-LDAP|Win32 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Win32.Build.0 = Release MS-LDAP|Win32 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.ActiveCfg = Release MS-LDAP|x64 {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.Build.0 = Release MS-LDAP|x64 - {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x86.ActiveCfg = Release|x64 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64 Setup.ActiveCfg = Release MS-LDAP|x64 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x86 Setup.ActiveCfg = Release MS-LDAP|Win32 {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|Win32.ActiveCfg = Release|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64.ActiveCfg = Release|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64.Build.0 = Release|x64 - {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x86.ActiveCfg = Release|x64 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64 Setup.ActiveCfg = Release|x64 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64 Setup.Build.0 = Release|x64 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x86 Setup.ActiveCfg = Release|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Win32.ActiveCfg = Debug|Win32 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Win32.Build.0 = Debug|Win32 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64.ActiveCfg = Debug|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64.Build.0 = Debug|x64 - {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x86.ActiveCfg = Debug|x64 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Win32.ActiveCfg = Release|Win32 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Win32.Build.0 = Release|Win32 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.ActiveCfg = Release|x64 {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.Build.0 = Release|x64 - {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x86.ActiveCfg = Release|x64 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64 Setup.ActiveCfg = Release|x64 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x86 Setup.ActiveCfg = Release|Win32 {784113EF-44D9-4949-835D-7065D3C7AD08}.All|Win32.ActiveCfg = Release|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64.ActiveCfg = Release|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64.Build.0 = Release|x64 - {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x86.ActiveCfg = Release|x64 + {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64 Setup.ActiveCfg = Release|x64 + {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64 Setup.Build.0 = Release|x64 + {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x86 Setup.ActiveCfg = Release|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Win32.ActiveCfg = Debug|Win32 {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Win32.Build.0 = Debug|Win32 {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64.ActiveCfg = Debug|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64.Build.0 = Debug|x64 - {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x86.ActiveCfg = Debug|x64 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Win32.ActiveCfg = Release|Win32 {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Win32.Build.0 = Release|Win32 {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.ActiveCfg = Release|x64 {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.Build.0 = Release|x64 - {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x86.ActiveCfg = Release|x64 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64 Setup.ActiveCfg = Release|x64 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x86 Setup.ActiveCfg = Release|Win32 {89385C74-5860-4174-9CAF-A39E7C48909C}.All|Win32.ActiveCfg = Release|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64.ActiveCfg = Release|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64.Build.0 = Release|x64 - {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x86.ActiveCfg = Release|x64 + {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64 Setup.ActiveCfg = Release|x64 + {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64 Setup.Build.0 = Release|x64 + {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x86 Setup.ActiveCfg = Release|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.ActiveCfg = Debug|Win32 {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.Build.0 = Debug|Win32 {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64.ActiveCfg = Debug|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64.Build.0 = Debug|x64 - {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x86.ActiveCfg = Debug|x64 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.ActiveCfg = Release|Win32 {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.Build.0 = Release|Win32 {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.ActiveCfg = Release|x64 {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.Build.0 = Release|x64 - {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x86.ActiveCfg = Release|x64 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64 Setup.ActiveCfg = Release|x64 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x86 Setup.ActiveCfg = Release|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|Win32.ActiveCfg = Release|x64 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64.ActiveCfg = Release|x64 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64.Build.0 = Release|x64 - {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x86.ActiveCfg = Release|x64 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64 Setup.ActiveCfg = Release|x64 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64 Setup.Build.0 = Release|x64 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x86 Setup.ActiveCfg = Release|x64 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.ActiveCfg = Debug|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.Build.0 = Debug|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64.ActiveCfg = Debug|x64 - {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x86.ActiveCfg = Debug|x64 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.ActiveCfg = Release|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.Build.0 = Release|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.ActiveCfg = Release|x64 - {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x86.ActiveCfg = Release|x64 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64 Setup.ActiveCfg = Release|x64 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x86 Setup.ActiveCfg = Release|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.All|Win32.ActiveCfg = Release|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.ActiveCfg = Release|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.Build.0 = Release|x64 - {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x86.ActiveCfg = Release|x64 + {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64 Setup.ActiveCfg = Release|x64 + {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64 Setup.Build.0 = Release|x64 + {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x86 Setup.ActiveCfg = Release|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Win32.ActiveCfg = Debug|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64.ActiveCfg = Debug|x64 - {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x86.ActiveCfg = Debug|x64 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Win32.ActiveCfg = Release|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|x64 - {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x86.ActiveCfg = Release|x64 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64 Setup.ActiveCfg = Release|x64 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x86 Setup.ActiveCfg = Release|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|Win32.ActiveCfg = Release|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64.ActiveCfg = Release|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64.Build.0 = Release|x64 - {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x86.ActiveCfg = Release|x64 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64 Setup.ActiveCfg = Release|x64 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64 Setup.Build.0 = Release|x64 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x86 Setup.ActiveCfg = Release|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.ActiveCfg = Debug|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.Build.0 = Debug|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64.ActiveCfg = Debug|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64.Build.0 = Debug|x64 - {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x86.ActiveCfg = Debug|x64 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.ActiveCfg = Release|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.Build.0 = Release|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.ActiveCfg = Release|x64 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.Build.0 = Release|x64 - {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x86.ActiveCfg = Release|x64 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64 Setup.ActiveCfg = Release|x64 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x86 Setup.ActiveCfg = Release|Win32 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|Win32.ActiveCfg = Release|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64.ActiveCfg = Release|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64.Build.0 = Release|x64 - {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x86.ActiveCfg = Release|x64 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64 Setup.ActiveCfg = Release|x64 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64 Setup.Build.0 = Release|x64 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x86 Setup.ActiveCfg = Release|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.ActiveCfg = Debug|Win32 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.Build.0 = Debug|Win32 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64.ActiveCfg = Debug|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64.Build.0 = Debug|x64 - {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x86.ActiveCfg = Debug|x64 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.ActiveCfg = Release|Win32 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.Build.0 = Release|Win32 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.ActiveCfg = Release|x64 {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.Build.0 = Release|x64 - {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x86.ActiveCfg = Release|x64 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64 Setup.ActiveCfg = Release|x64 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x86 Setup.ActiveCfg = Release|Win32 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|Win32.ActiveCfg = Release|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64.ActiveCfg = Release|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64.Build.0 = Release|x64 - {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x86.ActiveCfg = Release|x64 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64 Setup.ActiveCfg = Release|x64 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64 Setup.Build.0 = Release|x64 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x86 Setup.ActiveCfg = Release|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.ActiveCfg = Debug|Win32 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.Build.0 = Debug|Win32 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64.ActiveCfg = Debug|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64.Build.0 = Debug|x64 - {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x86.ActiveCfg = Debug|x64 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.ActiveCfg = Release|Win32 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.Build.0 = Release|Win32 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.ActiveCfg = Release|x64 {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.Build.0 = Release|x64 - {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x86.ActiveCfg = Release|x64 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64 Setup.ActiveCfg = Release|x64 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x86 Setup.ActiveCfg = Release|Win32 {1C453396-D912-4213-89FD-9B489162B7B5}.All|Win32.ActiveCfg = Release|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64.ActiveCfg = Release|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64.Build.0 = Release|x64 - {1C453396-D912-4213-89FD-9B489162B7B5}.All|x86.ActiveCfg = Release|x64 + {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64 Setup.ActiveCfg = Release|x64 + {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64 Setup.Build.0 = Release|x64 + {1C453396-D912-4213-89FD-9B489162B7B5}.All|x86 Setup.ActiveCfg = Release|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.ActiveCfg = Debug|Win32 {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.Build.0 = Debug|Win32 {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64.ActiveCfg = Debug|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64.Build.0 = Debug|x64 - {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x86.ActiveCfg = Debug|x64 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.ActiveCfg = Release|Win32 {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.Build.0 = Release|Win32 {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.ActiveCfg = Release|x64 {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.Build.0 = Release|x64 - {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x86.ActiveCfg = Release|x64 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64 Setup.ActiveCfg = Release|x64 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release|x86 Setup.ActiveCfg = Release|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|Win32.ActiveCfg = Release|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64.ActiveCfg = Release|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64.Build.0 = Release|x64 - {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x86.ActiveCfg = Release|x64 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64 Setup.ActiveCfg = Release|x64 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64 Setup.Build.0 = Release|x64 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x86 Setup.ActiveCfg = Release|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.ActiveCfg = Debug|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.Build.0 = Debug|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64.ActiveCfg = Debug|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64.Build.0 = Debug|x64 - {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x86.ActiveCfg = Debug|x64 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.ActiveCfg = Release|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.Build.0 = Release|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.ActiveCfg = Release|x64 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.Build.0 = Release|x64 - {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x86.ActiveCfg = Release|x64 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64 Setup.ActiveCfg = Release|x64 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x86 Setup.ActiveCfg = Release|Win32 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|Win32.ActiveCfg = Release|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.ActiveCfg = Release|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.Build.0 = Release|x64 - {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x86.ActiveCfg = Release|x64 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64 Setup.ActiveCfg = Release|x64 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64 Setup.Build.0 = Release|x64 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x86 Setup.ActiveCfg = Release|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.ActiveCfg = Debug|Win32 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.Build.0 = Debug|Win32 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.ActiveCfg = Debug|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.Build.0 = Debug|x64 - {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x86.ActiveCfg = Debug|x64 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.ActiveCfg = Release|Win32 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.Build.0 = Release|Win32 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.ActiveCfg = Release|x64 {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.Build.0 = Release|x64 - {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x86.ActiveCfg = Release|x64 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64 Setup.ActiveCfg = Release|x64 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x86 Setup.ActiveCfg = Release|Win32 {C24FB505-05D7-4319-8485-7540B44C8603}.All|Win32.ActiveCfg = Release|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.ActiveCfg = Release|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.Build.0 = Release|x64 - {C24FB505-05D7-4319-8485-7540B44C8603}.All|x86.ActiveCfg = Release|x64 + {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64 Setup.ActiveCfg = Release|x64 + {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64 Setup.Build.0 = Release|x64 + {C24FB505-05D7-4319-8485-7540B44C8603}.All|x86 Setup.ActiveCfg = Release|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.ActiveCfg = Debug|Win32 {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.Build.0 = Debug|Win32 {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64.ActiveCfg = Debug|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64.Build.0 = Debug|x64 - {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x86.ActiveCfg = Debug|x64 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.ActiveCfg = Release|Win32 {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.Build.0 = Release|Win32 {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.ActiveCfg = Release|x64 {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.Build.0 = Release|x64 - {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x86.ActiveCfg = Release|x64 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64 Setup.ActiveCfg = Release|x64 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release|x86 Setup.ActiveCfg = Release|Win32 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|Win32.ActiveCfg = Release|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64.ActiveCfg = Release|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64.Build.0 = Release|x64 - {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x86.ActiveCfg = Release|x64 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64 Setup.ActiveCfg = Release|x64 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64 Setup.Build.0 = Release|x64 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x86 Setup.ActiveCfg = Release|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.ActiveCfg = Debug|Win32 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.Build.0 = Debug|Win32 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64.ActiveCfg = Debug|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64.Build.0 = Debug|x64 - {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x86.ActiveCfg = Debug|x64 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.ActiveCfg = Release|Win32 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.Build.0 = Release|Win32 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.ActiveCfg = Release|x64 {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.Build.0 = Release|x64 - {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x86.ActiveCfg = Release|x64 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64 Setup.ActiveCfg = Release|x64 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x86 Setup.ActiveCfg = Release|Win32 {05515420-16DE-4E63-BE73-85BE85BA5142}.All|Win32.ActiveCfg = Release|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64.ActiveCfg = Release|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64.Build.0 = Release|x64 - {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x86.ActiveCfg = Release|x64 + {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64 Setup.ActiveCfg = Release|x64 + {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64 Setup.Build.0 = Release|x64 + {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x86 Setup.ActiveCfg = Release|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Win32.ActiveCfg = Debug|Win32 {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Win32.Build.0 = Debug|Win32 {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64.ActiveCfg = Debug|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64.Build.0 = Debug|x64 - {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x86.ActiveCfg = Debug|x64 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.ActiveCfg = Release|Win32 {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.Build.0 = Release|Win32 {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.ActiveCfg = Release|x64 {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.Build.0 = Release|x64 - {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x86.ActiveCfg = Release|x64 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64 Setup.ActiveCfg = Release|x64 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x86 Setup.ActiveCfg = Release|Win32 {1906D736-08BD-4EE1-924F-B536249B9A54}.All|Win32.ActiveCfg = Release DLL|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64.ActiveCfg = Release DLL|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64.Build.0 = Release DLL|x64 - {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x86.ActiveCfg = Release|x64 + {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64 Setup.ActiveCfg = Release DLL|x64 + {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64 Setup.Build.0 = Release DLL|x64 + {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x86 Setup.ActiveCfg = Release DLL|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.ActiveCfg = Debug|Win32 {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.Build.0 = Debug|Win32 {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.ActiveCfg = Debug|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.Build.0 = Debug|x64 - {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x86.ActiveCfg = Debug|x64 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.ActiveCfg = Release|Win32 {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.Build.0 = Release|Win32 {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.ActiveCfg = Release|x64 {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.Build.0 = Release|x64 - {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x86.ActiveCfg = Release|x64 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64 Setup.ActiveCfg = Release|x64 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x86 Setup.ActiveCfg = Release|Win32 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|Win32.ActiveCfg = Release Dll|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64.ActiveCfg = Release Dll|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64.Build.0 = Release Dll|x64 - {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x86.ActiveCfg = Release|x64 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64 Setup.ActiveCfg = Release Dll|x64 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64 Setup.Build.0 = Release Dll|x64 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x86 Setup.ActiveCfg = Release Dll|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.ActiveCfg = Debug|Win32 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.Build.0 = Debug|Win32 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64.ActiveCfg = Debug|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64.Build.0 = Debug|x64 - {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x86.ActiveCfg = Debug|x64 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.ActiveCfg = Release|Win32 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.Build.0 = Release|Win32 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.ActiveCfg = Release|x64 {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.Build.0 = Release|x64 - {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x86.ActiveCfg = Release|x64 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64 Setup.ActiveCfg = Release|x64 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x86 Setup.ActiveCfg = Release|Win32 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|Win32.ActiveCfg = Release DLL|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64.ActiveCfg = Release DLL|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64.Build.0 = Release DLL|x64 - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x86.ActiveCfg = Release|x64 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64 Setup.ActiveCfg = Release DLL|x64 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64 Setup.Build.0 = Release DLL|x64 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x86 Setup.ActiveCfg = Release DLL|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.ActiveCfg = Debug|Win32 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.Build.0 = Debug|Win32 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.ActiveCfg = Debug|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.Build.0 = Debug|x64 - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x86.ActiveCfg = Debug|x64 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.ActiveCfg = Release|Win32 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.Build.0 = Release|Win32 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.ActiveCfg = Release|x64 {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.Build.0 = Release|x64 - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x86.ActiveCfg = Release|x64 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64 Setup.ActiveCfg = Release|x64 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x86 Setup.ActiveCfg = Release|Win32 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|Win32.ActiveCfg = Release DLL|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64.ActiveCfg = Release DLL|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64.Build.0 = Release DLL|x64 - {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x86.ActiveCfg = Release|x64 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64 Setup.ActiveCfg = Release DLL|x64 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64 Setup.Build.0 = Release DLL|x64 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x86 Setup.ActiveCfg = Release DLL|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.ActiveCfg = Debug|Win32 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.Build.0 = Debug|Win32 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64.ActiveCfg = Debug|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64.Build.0 = Debug|x64 - {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x86.ActiveCfg = Debug|x64 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.ActiveCfg = Release|Win32 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.Build.0 = Release|Win32 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.ActiveCfg = Release|x64 {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.Build.0 = Release|x64 - {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x86.ActiveCfg = Release|x64 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64 Setup.ActiveCfg = Release|x64 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x86 Setup.ActiveCfg = Release|Win32 {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|Win32.ActiveCfg = Release|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64.ActiveCfg = Release|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64.Build.0 = Release|x64 - {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x86.ActiveCfg = Release|x64 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64 Setup.ActiveCfg = Release|x64 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64 Setup.Build.0 = Release|x64 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x86 Setup.ActiveCfg = Release|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.ActiveCfg = Debug|Win32 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.Build.0 = Debug|Win32 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64.ActiveCfg = Debug|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64.Build.0 = Debug|x64 - {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x86.ActiveCfg = Debug|x64 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.ActiveCfg = Release|Win32 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.Build.0 = Release|Win32 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.ActiveCfg = Release|x64 {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.Build.0 = Release|x64 - {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x86.ActiveCfg = Release|x64 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64 Setup.ActiveCfg = Release|x64 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x86 Setup.ActiveCfg = Release|Win32 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|Win32.ActiveCfg = Release|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64.ActiveCfg = Release|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64.Build.0 = Release|x64 - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x86.ActiveCfg = Release|x64 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64 Setup.ActiveCfg = Release|x64 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64 Setup.Build.0 = Release|x64 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x86 Setup.ActiveCfg = Release|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.ActiveCfg = Debug|Win32 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.Build.0 = Debug|Win32 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.ActiveCfg = Debug|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.Build.0 = Debug|x64 - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x86.ActiveCfg = Debug|x64 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.ActiveCfg = Release|Win32 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.Build.0 = Release|Win32 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.ActiveCfg = Release|x64 {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.Build.0 = Release|x64 - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x86.ActiveCfg = Release|x64 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64 Setup.ActiveCfg = Release|x64 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x86 Setup.ActiveCfg = Release|Win32 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|Win32.ActiveCfg = Release|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64.ActiveCfg = Release|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64.Build.0 = Release|x64 - {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x86.ActiveCfg = Release|x64 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64 Setup.ActiveCfg = Release|x64 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64 Setup.Build.0 = Release|x64 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x86 Setup.ActiveCfg = Release|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.ActiveCfg = Debug|Win32 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.Build.0 = Debug|Win32 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.ActiveCfg = Debug|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.Build.0 = Debug|x64 - {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x86.ActiveCfg = Debug|x64 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.ActiveCfg = Release|Win32 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.Build.0 = Release|Win32 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.ActiveCfg = Release|x64 {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.Build.0 = Release|x64 - {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x86.ActiveCfg = Release|x64 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64 Setup.ActiveCfg = Release|x64 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x86 Setup.ActiveCfg = Release|Win32 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|Win32.ActiveCfg = Release|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64.ActiveCfg = Release|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64.Build.0 = Release|x64 - {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x86.ActiveCfg = Release|x64 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64 Setup.ActiveCfg = Release|x64 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64 Setup.Build.0 = Release|x64 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x86 Setup.ActiveCfg = Release|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.ActiveCfg = Debug|Win32 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.Build.0 = Debug|Win32 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.ActiveCfg = Debug|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.Build.0 = Debug|x64 - {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x86.ActiveCfg = Debug|x64 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.ActiveCfg = Release|Win32 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.Build.0 = Release|Win32 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.ActiveCfg = Release|x64 {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.Build.0 = Release|x64 - {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x86.ActiveCfg = Release|x64 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64 Setup.ActiveCfg = Release|x64 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x86 Setup.ActiveCfg = Release|Win32 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|Win32.ActiveCfg = Release|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.ActiveCfg = Release|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.Build.0 = Release|x64 - {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x86.ActiveCfg = Release|x64 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64 Setup.ActiveCfg = Release|x64 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64 Setup.Build.0 = Release|x64 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x86 Setup.ActiveCfg = Release|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.ActiveCfg = Debug|Win32 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.Build.0 = Debug|Win32 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.ActiveCfg = Debug|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.Build.0 = Debug|x64 - {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x86.ActiveCfg = Debug|x64 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.ActiveCfg = Release|Win32 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.Build.0 = Release|Win32 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.ActiveCfg = Release|x64 {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.Build.0 = Release|x64 - {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x86.ActiveCfg = Release|x64 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64 Setup.ActiveCfg = Release|x64 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x86 Setup.ActiveCfg = Release|Win32 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|Win32.ActiveCfg = Debug|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64.ActiveCfg = Debug|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64.Build.0 = Debug|x64 - {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x86.ActiveCfg = Release|x64 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64 Setup.ActiveCfg = Debug|x64 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64 Setup.Build.0 = Debug|x64 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x86 Setup.ActiveCfg = Debug|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.ActiveCfg = Debug|Win32 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.Build.0 = Debug|Win32 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64.ActiveCfg = Debug|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64.Build.0 = Debug|x64 - {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x86.ActiveCfg = Debug|x64 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.ActiveCfg = Release|Win32 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.Build.0 = Release|Win32 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.ActiveCfg = Release|x64 {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.Build.0 = Release|x64 - {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x86.ActiveCfg = Release|x64 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64 Setup.ActiveCfg = Release|x64 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x86 Setup.ActiveCfg = Release|Win32 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|Win32.ActiveCfg = Debug|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.ActiveCfg = Debug|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.Build.0 = Debug|x64 - {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x86.ActiveCfg = Release|x64 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64 Setup.ActiveCfg = Debug|x64 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64 Setup.Build.0 = Debug|x64 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x86 Setup.ActiveCfg = Debug|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.ActiveCfg = Debug|Win32 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.Build.0 = Debug|Win32 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64.ActiveCfg = Debug|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64.Build.0 = Debug|x64 - {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x86.ActiveCfg = Debug|x64 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.ActiveCfg = Release|Win32 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.Build.0 = Release|Win32 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.ActiveCfg = Release|x64 {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.Build.0 = Release|x64 - {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x86.ActiveCfg = Release|x64 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64 Setup.ActiveCfg = Release|x64 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x86 Setup.ActiveCfg = Release|Win32 {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|Win32.ActiveCfg = Debug|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64.ActiveCfg = Debug|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64.Build.0 = Debug|x64 - {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x86.ActiveCfg = Release|x64 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64 Setup.ActiveCfg = Debug|x64 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64 Setup.Build.0 = Debug|x64 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x86 Setup.ActiveCfg = Debug|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Win32.ActiveCfg = Debug|Win32 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Win32.Build.0 = Debug|Win32 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64.ActiveCfg = Debug|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64.Build.0 = Debug|x64 - {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x86.ActiveCfg = Debug|x64 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Win32.ActiveCfg = Release|Win32 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Win32.Build.0 = Release|Win32 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.ActiveCfg = Release|x64 {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.Build.0 = Release|x64 - {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x86.ActiveCfg = Release|x64 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64 Setup.ActiveCfg = Release|x64 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x86 Setup.ActiveCfg = Release|Win32 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|Win32.ActiveCfg = Release|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64.ActiveCfg = Release|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64.Build.0 = Release|x64 - {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x86.ActiveCfg = Release|x64 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64 Setup.ActiveCfg = Release|x64 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64 Setup.Build.0 = Release|x64 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x86 Setup.ActiveCfg = Release|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Win32.ActiveCfg = Debug|Win32 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Win32.Build.0 = Debug|Win32 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64.ActiveCfg = Debug|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64.Build.0 = Debug|x64 - {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x86.ActiveCfg = Debug|x64 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Win32.ActiveCfg = Release|Win32 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Win32.Build.0 = Release|Win32 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.ActiveCfg = Release|x64 {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.Build.0 = Release|x64 - {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x86.ActiveCfg = Release|x64 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64 Setup.ActiveCfg = Release|x64 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x86 Setup.ActiveCfg = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|Win32.ActiveCfg = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|Win32.Build.0 = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x64.ActiveCfg = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x64.Build.0 = Release|Win32 - {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x86.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x64 Setup.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x64 Setup.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x86 Setup.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x86 Setup.Build.0 = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Win32.ActiveCfg = Debug|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Win32.Build.0 = Debug|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x64.ActiveCfg = Debug|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x64.Build.0 = Debug|Win32 - {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x86.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Win32.ActiveCfg = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Win32.Build.0 = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x64.ActiveCfg = Release|Win32 {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x64.Build.0 = Release|Win32 - {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x86.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x64 Setup.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x86 Setup.ActiveCfg = Release|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|Win32.ActiveCfg = Release DLL|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64.ActiveCfg = Release DLL|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64.Build.0 = Release DLL|x64 - {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x86.ActiveCfg = Release|x64 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64 Setup.ActiveCfg = Release DLL|x64 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64 Setup.Build.0 = Release DLL|x64 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x86 Setup.ActiveCfg = Release DLL|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Win32.ActiveCfg = Debug DLL|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Win32.Build.0 = Debug DLL|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64.ActiveCfg = Debug DLL|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64.Build.0 = Debug DLL|x64 - {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x86.ActiveCfg = Debug|x64 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64 Setup.ActiveCfg = Debug DLL|x64 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x86 Setup.ActiveCfg = Debug DLL|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Win32.ActiveCfg = Release DLL|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Win32.Build.0 = Release DLL|Win32 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.ActiveCfg = Release DLL|x64 {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.Build.0 = Release DLL|x64 - {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x86.ActiveCfg = Release|x64 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64 Setup.ActiveCfg = Release DLL|x64 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x86 Setup.ActiveCfg = Release DLL|Win32 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|Win32.ActiveCfg = Release Passthrough|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64.ActiveCfg = Release Passthrough|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64.Build.0 = Release Passthrough|x64 - {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x86.ActiveCfg = Release|x64 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64 Setup.ActiveCfg = Release Passthrough|x64 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64 Setup.Build.0 = Release Passthrough|x64 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x86 Setup.ActiveCfg = Release Passthrough|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Win32.Build.0 = Debug Passthrough|Win32 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.ActiveCfg = Debug Passthrough|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.Build.0 = Debug Passthrough|x64 - {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x86.ActiveCfg = Debug|x64 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64 Setup.ActiveCfg = Debug Passthrough|x64 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x86 Setup.ActiveCfg = Debug Passthrough|Win32 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Win32.ActiveCfg = Release Passthrough|Win32 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Win32.Build.0 = Release Passthrough|Win32 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.ActiveCfg = Release Passthrough|x64 {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.Build.0 = Release Passthrough|x64 - {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x86.ActiveCfg = Release|x64 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64 Setup.ActiveCfg = Release Passthrough|x64 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x86 Setup.ActiveCfg = Release Passthrough|Win32 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|Win32.ActiveCfg = Release|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x64.ActiveCfg = Release|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x64.Build.0 = Release|x64 - {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x86.ActiveCfg = Release|x64 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x64 Setup.ActiveCfg = Release|x64 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x64 Setup.Build.0 = Release|x64 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x86 Setup.ActiveCfg = Release|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Win32.ActiveCfg = Debug|Win32 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Win32.Build.0 = Debug|Win32 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64.ActiveCfg = Debug|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64.Build.0 = Debug|x64 - {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x86.ActiveCfg = Debug|x64 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Win32.ActiveCfg = Release|Win32 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Win32.Build.0 = Release|Win32 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.ActiveCfg = Release|x64 {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.Build.0 = Release|x64 - {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x86.ActiveCfg = Release|x64 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64 Setup.ActiveCfg = Release|x64 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x86 Setup.ActiveCfg = Release|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|Win32.ActiveCfg = Release|x64 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64.ActiveCfg = Release|x64 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64.Build.0 = Release|x64 - {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x86.ActiveCfg = Release|x64 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64 Setup.ActiveCfg = Release|x64 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64 Setup.Build.0 = Release|x64 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x86 Setup.ActiveCfg = Release|x64 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.ActiveCfg = Debug|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.Build.0 = Debug|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64.ActiveCfg = Debug|x64 - {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x86.ActiveCfg = Debug|x64 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.ActiveCfg = Release|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.Build.0 = Release|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.ActiveCfg = Release|x64 - {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x86.ActiveCfg = Release|x64 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64 Setup.ActiveCfg = Release|x64 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x86 Setup.ActiveCfg = Release|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|Win32.ActiveCfg = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.ActiveCfg = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.Build.0 = Release|x64 - {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x86.ActiveCfg = Release|x64 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64 Setup.ActiveCfg = Release|x64 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64 Setup.Build.0 = Release|x64 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x86 Setup.ActiveCfg = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.ActiveCfg = Debug|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.Build.0 = Debug|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64.ActiveCfg = Debug|x64 - {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x86.ActiveCfg = Debug|x64 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.ActiveCfg = Release|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.Build.0 = Release|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.ActiveCfg = Release|x64 - {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x86.ActiveCfg = Release|x64 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64 Setup.ActiveCfg = Release|x64 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x86 Setup.ActiveCfg = Release|Win32 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|Win32.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.Build.0 = Release|x64 - {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x86.ActiveCfg = Release|x64 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64 Setup.ActiveCfg = Release|x64 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64 Setup.Build.0 = Release|x64 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x86 Setup.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Win32.ActiveCfg = Debug|Win32 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Win32.Build.0 = Debug|Win32 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64.ActiveCfg = Debug|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64.Build.0 = Debug|x64 - {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x86.ActiveCfg = Debug|x64 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Win32.ActiveCfg = Release|Win32 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Win32.Build.0 = Release|Win32 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.Build.0 = Release|x64 - {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x86.ActiveCfg = Release|x64 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64 Setup.ActiveCfg = Release|x64 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x86 Setup.ActiveCfg = Release|Win32 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|Win32.ActiveCfg = Release|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64.ActiveCfg = Release|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64.Build.0 = Release|x64 - {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x86.ActiveCfg = Release|x64 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64 Setup.ActiveCfg = Release|x64 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64 Setup.Build.0 = Release|x64 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x86 Setup.ActiveCfg = Release|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Win32.ActiveCfg = Debug|Win32 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Win32.Build.0 = Debug|Win32 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64.ActiveCfg = Debug|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64.Build.0 = Debug|x64 - {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x86.ActiveCfg = Debug|x64 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Win32.ActiveCfg = Release|Win32 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Win32.Build.0 = Release|Win32 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.ActiveCfg = Release|x64 {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.Build.0 = Release|x64 - {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x86.ActiveCfg = Release|x64 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64 Setup.ActiveCfg = Release|x64 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x86 Setup.ActiveCfg = Release|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|Win32.ActiveCfg = Release|x64 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64.ActiveCfg = Release|x64 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64.Build.0 = Release|x64 - {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x86.ActiveCfg = Release|x64 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64 Setup.ActiveCfg = Release|x64 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64 Setup.Build.0 = Release|x64 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x86 Setup.ActiveCfg = Release|x64 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.ActiveCfg = Debug|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.Build.0 = Debug|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64.ActiveCfg = Debug|x64 - {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x86.ActiveCfg = Debug|x64 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.ActiveCfg = Release|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.Build.0 = Release|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.ActiveCfg = Release|x64 - {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x86.ActiveCfg = Release|x64 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64 Setup.ActiveCfg = Release|x64 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x86 Setup.ActiveCfg = Release|Win32 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|Win32.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.Build.0 = Release|x64 - {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x86.ActiveCfg = Release|x64 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64 Setup.ActiveCfg = Release|x64 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64 Setup.Build.0 = Release|x64 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x86 Setup.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Win32.ActiveCfg = Debug|Win32 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Win32.Build.0 = Debug|Win32 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64.ActiveCfg = Debug|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64.Build.0 = Debug|x64 - {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x86.ActiveCfg = Debug|x64 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Win32.ActiveCfg = Release|Win32 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Win32.Build.0 = Release|Win32 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.Build.0 = Release|x64 - {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x86.ActiveCfg = Release|x64 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64 Setup.ActiveCfg = Release|x64 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x86 Setup.ActiveCfg = Release|Win32 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|Win32.ActiveCfg = Release|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64.ActiveCfg = Release|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64.Build.0 = Release|x64 - {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x86.ActiveCfg = Release|x64 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64 Setup.ActiveCfg = Release|x64 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64 Setup.Build.0 = Release|x64 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x86 Setup.ActiveCfg = Release|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Win32.ActiveCfg = Debug|Win32 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Win32.Build.0 = Debug|Win32 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64.ActiveCfg = Debug|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64.Build.0 = Debug|x64 - {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x86.ActiveCfg = Debug|x64 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Win32.ActiveCfg = Release|Win32 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Win32.Build.0 = Release|Win32 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.ActiveCfg = Release|x64 {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.Build.0 = Release|x64 - {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x86.ActiveCfg = Release|x64 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64 Setup.ActiveCfg = Release|x64 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x86 Setup.ActiveCfg = Release|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|Win32.ActiveCfg = Release DirectSound|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64.ActiveCfg = Release DirectSound|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64.Build.0 = Release DirectSound|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x86.ActiveCfg = Release|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64 Setup.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64 Setup.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x86 Setup.ActiveCfg = Release DirectSound|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.Build.0 = Debug|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.Build.0 = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x86.ActiveCfg = Debug|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.Build.0 = Release|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x86.ActiveCfg = Release|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64 Setup.ActiveCfg = Release|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x86 Setup.ActiveCfg = Release|Win32 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|Win32.ActiveCfg = Release|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64.ActiveCfg = Release|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64.Build.0 = Release|x64 - {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x86.ActiveCfg = Release|x64 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64 Setup.ActiveCfg = Release|x64 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64 Setup.Build.0 = Release|x64 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x86 Setup.ActiveCfg = Release|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Win32.ActiveCfg = Debug|Win32 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Win32.Build.0 = Debug|Win32 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64.ActiveCfg = Debug|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64.Build.0 = Debug|x64 - {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x86.ActiveCfg = Debug|x64 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Win32.ActiveCfg = Release|Win32 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Win32.Build.0 = Release|Win32 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.ActiveCfg = Release|x64 {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.Build.0 = Release|x64 - {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x86.ActiveCfg = Release|x64 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64 Setup.ActiveCfg = Release|x64 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x86 Setup.ActiveCfg = Release|Win32 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|Win32.ActiveCfg = Release Passthrough|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64.ActiveCfg = Release Passthrough|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64.Build.0 = Release Passthrough|x64 - {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x86.ActiveCfg = Release|x64 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64 Setup.ActiveCfg = Release Passthrough|x64 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64 Setup.Build.0 = Release Passthrough|x64 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x86 Setup.ActiveCfg = Release Passthrough|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Win32.Build.0 = Debug Passthrough|Win32 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.ActiveCfg = Debug Passthrough|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.Build.0 = Debug Passthrough|x64 - {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x86.ActiveCfg = Debug|x64 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64 Setup.ActiveCfg = Debug Passthrough|x64 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x86 Setup.ActiveCfg = Debug Passthrough|Win32 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Win32.ActiveCfg = Release Passthrough|Win32 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Win32.Build.0 = Release Passthrough|Win32 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.ActiveCfg = Release Passthrough|x64 {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.Build.0 = Release Passthrough|x64 - {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x86.ActiveCfg = Release|x64 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64 Setup.ActiveCfg = Release Passthrough|x64 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x86 Setup.ActiveCfg = Release Passthrough|Win32 {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|Win32.ActiveCfg = Release|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64.ActiveCfg = Release|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64.Build.0 = Release|x64 - {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x86.ActiveCfg = Release|x64 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64 Setup.ActiveCfg = Release|x64 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64 Setup.Build.0 = Release|x64 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x86 Setup.ActiveCfg = Release|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Win32.ActiveCfg = Debug|Win32 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Win32.Build.0 = Debug|Win32 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64.ActiveCfg = Debug|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64.Build.0 = Debug|x64 - {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x86.ActiveCfg = Debug|x64 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Win32.ActiveCfg = Release|Win32 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Win32.Build.0 = Release|Win32 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.ActiveCfg = Release|x64 {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.Build.0 = Release|x64 - {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x86.ActiveCfg = Release|x64 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64 Setup.ActiveCfg = Release|x64 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x86 Setup.ActiveCfg = Release|Win32 {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|Win32.ActiveCfg = Release|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64.ActiveCfg = Release|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64.Build.0 = Release|x64 - {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x86.ActiveCfg = Release|x64 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64 Setup.ActiveCfg = Release|x64 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64 Setup.Build.0 = Release|x64 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x86 Setup.ActiveCfg = Release|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Win32.ActiveCfg = Debug|Win32 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Win32.Build.0 = Debug|Win32 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64.ActiveCfg = Debug|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64.Build.0 = Debug|x64 - {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x86.ActiveCfg = Debug|x64 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Win32.ActiveCfg = Release|Win32 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Win32.Build.0 = Release|Win32 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.ActiveCfg = Release|x64 {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.Build.0 = Release|x64 - {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x86.ActiveCfg = Release|x64 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64 Setup.ActiveCfg = Release|x64 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x86 Setup.ActiveCfg = Release|Win32 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|Win32.ActiveCfg = Release|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64.ActiveCfg = Release|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64.Build.0 = Release|x64 - {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x86.ActiveCfg = Release|x64 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64 Setup.ActiveCfg = Release|x64 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64 Setup.Build.0 = Release|x64 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x86 Setup.ActiveCfg = Release|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Win32.ActiveCfg = Debug|Win32 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Win32.Build.0 = Debug|Win32 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64.ActiveCfg = Debug|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64.Build.0 = Debug|x64 - {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x86.ActiveCfg = Debug|x64 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Win32.ActiveCfg = Release|Win32 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Win32.Build.0 = Release|Win32 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.ActiveCfg = Release|x64 {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.Build.0 = Release|x64 - {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x86.ActiveCfg = Release|x64 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64 Setup.ActiveCfg = Release|x64 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x86 Setup.ActiveCfg = Release|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.All|Win32.ActiveCfg = Release|x64 {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64.ActiveCfg = Release|x64 {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64.Build.0 = Release|x64 - {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x86.ActiveCfg = Release|x64 + {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64 Setup.ActiveCfg = Release|x64 + {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64 Setup.Build.0 = Release|x64 + {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x86 Setup.ActiveCfg = Release|x64 {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.ActiveCfg = Debug|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.Build.0 = Debug|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64.ActiveCfg = Debug|x64 - {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x86.ActiveCfg = Debug|x64 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.ActiveCfg = Release|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.Build.0 = Release|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.ActiveCfg = Release|x64 - {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x86.ActiveCfg = Release|x64 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64 Setup.ActiveCfg = Release|x64 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x86 Setup.ActiveCfg = Release|Win32 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|Win32.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.Build.0 = Release|x64 - {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x86.ActiveCfg = Release|x64 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64 Setup.ActiveCfg = Release|x64 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64 Setup.Build.0 = Release|x64 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x86 Setup.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Win32.ActiveCfg = Debug|Win32 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Win32.Build.0 = Debug|Win32 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64.ActiveCfg = Debug|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64.Build.0 = Debug|x64 - {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x86.ActiveCfg = Debug|x64 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Win32.ActiveCfg = Release|Win32 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Win32.Build.0 = Release|Win32 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.Build.0 = Release|x64 - {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x86.ActiveCfg = Release|x64 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64 Setup.ActiveCfg = Release|x64 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x86 Setup.ActiveCfg = Release|Win32 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|Win32.ActiveCfg = Release|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64.ActiveCfg = Release|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64.Build.0 = Release|x64 - {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x86.ActiveCfg = Release|x64 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64 Setup.ActiveCfg = Release|x64 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64 Setup.Build.0 = Release|x64 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x86 Setup.ActiveCfg = Release|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Win32.ActiveCfg = Debug|Win32 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Win32.Build.0 = Debug|Win32 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64.ActiveCfg = Debug|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64.Build.0 = Debug|x64 - {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x86.ActiveCfg = Debug|x64 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Win32.ActiveCfg = Release|Win32 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Win32.Build.0 = Release|Win32 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.ActiveCfg = Release|x64 {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.Build.0 = Release|x64 - {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x86.ActiveCfg = Release|x64 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64 Setup.ActiveCfg = Release|x64 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x86 Setup.ActiveCfg = Release|Win32 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|Win32.ActiveCfg = Release|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64.ActiveCfg = Release|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64.Build.0 = Release|x64 - {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x86.ActiveCfg = Release|x64 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64 Setup.ActiveCfg = Release|x64 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64 Setup.Build.0 = Release|x64 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x86 Setup.ActiveCfg = Release|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Win32.ActiveCfg = Debug|Win32 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Win32.Build.0 = Debug|Win32 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64.ActiveCfg = Debug|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64.Build.0 = Debug|x64 - {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x86.ActiveCfg = Debug|x64 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Win32.ActiveCfg = Release|Win32 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Win32.Build.0 = Release|Win32 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.ActiveCfg = Release|x64 {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.Build.0 = Release|x64 - {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x86.ActiveCfg = Release|x64 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64 Setup.ActiveCfg = Release|x64 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x86 Setup.ActiveCfg = Release|Win32 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|Win32.ActiveCfg = Release|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64.ActiveCfg = Release|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64.Build.0 = Release|x64 - {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x86.ActiveCfg = Release|x64 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64 Setup.ActiveCfg = Release|x64 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64 Setup.Build.0 = Release|x64 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x86 Setup.ActiveCfg = Release|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Win32.ActiveCfg = Debug|Win32 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Win32.Build.0 = Debug|Win32 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64.ActiveCfg = Debug|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64.Build.0 = Debug|x64 - {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x86.ActiveCfg = Debug|x64 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Win32.ActiveCfg = Release|Win32 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Win32.Build.0 = Release|Win32 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.ActiveCfg = Release|x64 {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.Build.0 = Release|x64 - {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x86.ActiveCfg = Release|x64 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64 Setup.ActiveCfg = Release|x64 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x86 Setup.ActiveCfg = Release|Win32 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|Win32.ActiveCfg = Release|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64.ActiveCfg = Release|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64.Build.0 = Release|x64 - {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x86.ActiveCfg = Release|x64 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64 Setup.ActiveCfg = Release|x64 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64 Setup.Build.0 = Release|x64 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x86 Setup.ActiveCfg = Release|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Win32.ActiveCfg = Debug|Win32 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Win32.Build.0 = Debug|Win32 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64.ActiveCfg = Debug|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64.Build.0 = Debug|x64 - {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x86.ActiveCfg = Debug|x64 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Win32.ActiveCfg = Release|Win32 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Win32.Build.0 = Release|Win32 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.ActiveCfg = Release|x64 {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.Build.0 = Release|x64 - {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x86.ActiveCfg = Release|x64 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64 Setup.ActiveCfg = Release|x64 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x86 Setup.ActiveCfg = Release|Win32 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|Win32.ActiveCfg = Release|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64.ActiveCfg = Release|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64.Build.0 = Release|x64 - {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x86.ActiveCfg = Release|x64 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64 Setup.ActiveCfg = Release|x64 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64 Setup.Build.0 = Release|x64 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x86 Setup.ActiveCfg = Release|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Win32.ActiveCfg = Debug|Win32 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Win32.Build.0 = Debug|Win32 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64.ActiveCfg = Debug|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64.Build.0 = Debug|x64 - {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x86.ActiveCfg = Debug|x64 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Win32.ActiveCfg = Release|Win32 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Win32.Build.0 = Release|Win32 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.ActiveCfg = Release|x64 {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.Build.0 = Release|x64 - {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x86.ActiveCfg = Release|x64 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64 Setup.ActiveCfg = Release|x64 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x86 Setup.ActiveCfg = Release|Win32 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|Win32.ActiveCfg = Release|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64.ActiveCfg = Release|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64.Build.0 = Release|x64 - {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x86.ActiveCfg = Release|x64 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64 Setup.ActiveCfg = Release|x64 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64 Setup.Build.0 = Release|x64 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x86 Setup.ActiveCfg = Release|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Win32.ActiveCfg = Debug|Win32 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Win32.Build.0 = Debug|Win32 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64.ActiveCfg = Debug|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64.Build.0 = Debug|x64 - {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x86.ActiveCfg = Debug|x64 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Win32.ActiveCfg = Release|Win32 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Win32.Build.0 = Release|Win32 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.ActiveCfg = Release|x64 {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.Build.0 = Release|x64 - {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x86.ActiveCfg = Release|x64 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64 Setup.ActiveCfg = Release|x64 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x86 Setup.ActiveCfg = Release|Win32 {F6A33240-8F29-48BD-98F0-826995911799}.All|Win32.ActiveCfg = Release|x64 {F6A33240-8F29-48BD-98F0-826995911799}.All|x64.ActiveCfg = Release|x64 {F6A33240-8F29-48BD-98F0-826995911799}.All|x64.Build.0 = Release|x64 - {F6A33240-8F29-48BD-98F0-826995911799}.All|x86.ActiveCfg = Release|x64 + {F6A33240-8F29-48BD-98F0-826995911799}.All|x64 Setup.ActiveCfg = Release|x64 + {F6A33240-8F29-48BD-98F0-826995911799}.All|x64 Setup.Build.0 = Release|x64 + {F6A33240-8F29-48BD-98F0-826995911799}.All|x86 Setup.ActiveCfg = Release|x64 {F6A33240-8F29-48BD-98F0-826995911799}.Debug|Win32.ActiveCfg = Debug|Win32 {F6A33240-8F29-48BD-98F0-826995911799}.Debug|Win32.Build.0 = Debug|Win32 {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64.ActiveCfg = Debug|x64 {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64.Build.0 = Debug|x64 - {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x86.ActiveCfg = Debug|x64 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {F6A33240-8F29-48BD-98F0-826995911799}.Release|Win32.ActiveCfg = Release|Win32 {F6A33240-8F29-48BD-98F0-826995911799}.Release|Win32.Build.0 = Release|Win32 {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.ActiveCfg = Release|x64 {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.Build.0 = Release|x64 - {F6A33240-8F29-48BD-98F0-826995911799}.Release|x86.ActiveCfg = Release|x64 + {F6A33240-8F29-48BD-98F0-826995911799}.Release|x64 Setup.ActiveCfg = Release|x64 + {F6A33240-8F29-48BD-98F0-826995911799}.Release|x86 Setup.ActiveCfg = Release|Win32 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|Win32.ActiveCfg = Release|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64.ActiveCfg = Release|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64.Build.0 = Release|x64 - {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x86.ActiveCfg = Release|x64 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64 Setup.ActiveCfg = Release|x64 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64 Setup.Build.0 = Release|x64 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x86 Setup.ActiveCfg = Release|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Win32.ActiveCfg = Debug|Win32 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Win32.Build.0 = Debug|Win32 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64.ActiveCfg = Debug|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64.Build.0 = Debug|x64 - {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x86.ActiveCfg = Debug|x64 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Win32.ActiveCfg = Release|Win32 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Win32.Build.0 = Release|Win32 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.ActiveCfg = Release|x64 {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.Build.0 = Release|x64 - {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x86.ActiveCfg = Release|x64 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64 Setup.ActiveCfg = Release|x64 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x86 Setup.ActiveCfg = Release|Win32 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|Win32.ActiveCfg = Release|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64.ActiveCfg = Release|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64.Build.0 = Release|x64 - {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x86.ActiveCfg = Release|x64 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64 Setup.ActiveCfg = Release|x64 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64 Setup.Build.0 = Release|x64 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x86 Setup.ActiveCfg = Release|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Win32.ActiveCfg = Debug|Win32 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Win32.Build.0 = Debug|Win32 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64.ActiveCfg = Debug|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64.Build.0 = Debug|x64 - {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x86.ActiveCfg = Debug|x64 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.ActiveCfg = Release|Win32 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.Build.0 = Release|Win32 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.ActiveCfg = Release|x64 {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.Build.0 = Release|x64 - {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x86.ActiveCfg = Release|x64 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64 Setup.ActiveCfg = Release|x64 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x86 Setup.ActiveCfg = Release|Win32 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|Win32.ActiveCfg = Release|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64.ActiveCfg = Release|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64.Build.0 = Release|x64 - {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x86.ActiveCfg = Release|x64 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64 Setup.ActiveCfg = Release|x64 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64 Setup.Build.0 = Release|x64 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x86 Setup.ActiveCfg = Release|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.ActiveCfg = Debug|Win32 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.Build.0 = Debug|Win32 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.ActiveCfg = Debug|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.Build.0 = Debug|x64 - {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x86.ActiveCfg = Debug|x64 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.ActiveCfg = Release|Win32 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.Build.0 = Release|Win32 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.ActiveCfg = Release|x64 {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.Build.0 = Release|x64 - {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x86.ActiveCfg = Release|x64 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64 Setup.ActiveCfg = Release|x64 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x86 Setup.ActiveCfg = Release|Win32 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|Win32.ActiveCfg = Release|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64.ActiveCfg = Release|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64.Build.0 = Release|x64 - {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x86.ActiveCfg = Release|x64 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64 Setup.ActiveCfg = Release|x64 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64 Setup.Build.0 = Release|x64 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x86 Setup.ActiveCfg = Release|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Win32.ActiveCfg = Debug|Win32 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Win32.Build.0 = Debug|Win32 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64.ActiveCfg = Debug|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64.Build.0 = Debug|x64 - {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x86.ActiveCfg = Debug|x64 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Win32.ActiveCfg = Release|Win32 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Win32.Build.0 = Release|Win32 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.ActiveCfg = Release|x64 {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.Build.0 = Release|x64 - {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x86.ActiveCfg = Release|x64 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64 Setup.ActiveCfg = Release|x64 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x86 Setup.ActiveCfg = Release|Win32 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|Win32.ActiveCfg = Release|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x64.ActiveCfg = Release|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x64.Build.0 = Release|x64 - {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x86.ActiveCfg = Release|x64 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x64 Setup.ActiveCfg = Release|x64 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x64 Setup.Build.0 = Release|x64 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.All|x86 Setup.ActiveCfg = Release|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Win32.ActiveCfg = Debug|Win32 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Win32.Build.0 = Debug|Win32 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x64.ActiveCfg = Debug|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x64.Build.0 = Debug|x64 - {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x86.ActiveCfg = Debug|x64 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Win32.ActiveCfg = Release|Win32 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Win32.Build.0 = Release|Win32 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64.ActiveCfg = Release|x64 {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64.Build.0 = Release|x64 - {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x86.ActiveCfg = Release|x64 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x64 Setup.ActiveCfg = Release|x64 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|x86 Setup.ActiveCfg = Release|Win32 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|Win32.ActiveCfg = Release|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x64.ActiveCfg = Release|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x64.Build.0 = Release|x64 - {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x86.ActiveCfg = Release|x64 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x64 Setup.ActiveCfg = Release|x64 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x64 Setup.Build.0 = Release|x64 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.All|x86 Setup.ActiveCfg = Release|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Win32.ActiveCfg = Debug|Win32 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Win32.Build.0 = Debug|Win32 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x64.ActiveCfg = Debug|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x64.Build.0 = Debug|x64 - {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x86.ActiveCfg = Debug|x64 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Win32.ActiveCfg = Release|Win32 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Win32.Build.0 = Release|Win32 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64.ActiveCfg = Release|x64 {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64.Build.0 = Release|x64 - {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x86.ActiveCfg = Release|x64 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x64 Setup.ActiveCfg = Release|x64 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|x86 Setup.ActiveCfg = Release|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|Win32.ActiveCfg = Release|x64 {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x64.ActiveCfg = Release|x64 {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x64.Build.0 = Release|x64 - {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x86.ActiveCfg = Release|x64 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x64 Setup.ActiveCfg = Release|x64 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x64 Setup.Build.0 = Release|x64 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.All|x86 Setup.ActiveCfg = Release|x64 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Win32.ActiveCfg = Debug|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Win32.Build.0 = Debug|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x64.ActiveCfg = Debug|x64 - {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x86.ActiveCfg = Debug|x64 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Win32.ActiveCfg = Release|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Win32.Build.0 = Release|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64.ActiveCfg = Release|x64 - {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x86.ActiveCfg = Release|x64 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64 Setup.ActiveCfg = Release|x64 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x86 Setup.ActiveCfg = Release|Win32 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|Win32.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.Build.0 = Release|x64 - {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x86.ActiveCfg = Release|x64 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64 Setup.ActiveCfg = Release|x64 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64 Setup.Build.0 = Release|x64 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x86 Setup.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Win32.ActiveCfg = Debug|Win32 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Win32.Build.0 = Debug|Win32 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64.ActiveCfg = Debug|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64.Build.0 = Debug|x64 - {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x86.ActiveCfg = Debug|x64 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Win32.ActiveCfg = Release|Win32 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Win32.Build.0 = Release|Win32 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.Build.0 = Release|x64 - {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x86.ActiveCfg = Release|x64 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64 Setup.ActiveCfg = Release|x64 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x86 Setup.ActiveCfg = Release|Win32 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|Win32.ActiveCfg = Release|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64.ActiveCfg = Release|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64.Build.0 = Release|x64 - {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x86.ActiveCfg = Release|x64 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64 Setup.ActiveCfg = Release|x64 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64 Setup.Build.0 = Release|x64 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x86 Setup.ActiveCfg = Release|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Win32.ActiveCfg = Debug|Win32 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Win32.Build.0 = Debug|Win32 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64.ActiveCfg = Debug|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64.Build.0 = Debug|x64 - {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x86.ActiveCfg = Debug|x64 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Win32.ActiveCfg = Release|Win32 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Win32.Build.0 = Release|Win32 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.ActiveCfg = Release|x64 {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.Build.0 = Release|x64 - {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x86.ActiveCfg = Release|x64 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64 Setup.ActiveCfg = Release|x64 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x86 Setup.ActiveCfg = Release|Win32 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|Win32.ActiveCfg = Release|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64.ActiveCfg = Release|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64.Build.0 = Release|x64 - {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x86.ActiveCfg = Release|x64 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64 Setup.ActiveCfg = Release|x64 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64 Setup.Build.0 = Release|x64 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x86 Setup.ActiveCfg = Release|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Win32.ActiveCfg = Debug|Win32 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Win32.Build.0 = Debug|Win32 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64.ActiveCfg = Debug|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64.Build.0 = Debug|x64 - {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x86.ActiveCfg = Debug|x64 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Win32.ActiveCfg = Release|Win32 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Win32.Build.0 = Release|Win32 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.ActiveCfg = Release|x64 {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.Build.0 = Release|x64 - {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x86.ActiveCfg = Release|x64 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64 Setup.ActiveCfg = Release|x64 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x86 Setup.ActiveCfg = Release|Win32 {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|Win32.ActiveCfg = Debug|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64.ActiveCfg = Debug|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64.Build.0 = Debug|x64 - {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x86.ActiveCfg = Release|x64 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64 Setup.ActiveCfg = Debug|x64 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64 Setup.Build.0 = Debug|x64 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x86 Setup.ActiveCfg = Debug|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Win32.ActiveCfg = Debug|Win32 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Win32.Build.0 = Debug|Win32 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64.ActiveCfg = Debug|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64.Build.0 = Debug|x64 - {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x86.ActiveCfg = Debug|x64 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Win32.ActiveCfg = Release|Win32 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Win32.Build.0 = Release|Win32 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.ActiveCfg = Release|x64 {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.Build.0 = Release|x64 - {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x86.ActiveCfg = Release|x64 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64 Setup.ActiveCfg = Release|x64 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x86 Setup.ActiveCfg = Release|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.All|Win32.ActiveCfg = Release|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64.ActiveCfg = Release|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64.Build.0 = Release|x64 - {B535402E-38D2-4D54-8360-423ACBD17192}.All|x86.ActiveCfg = Release|x64 + {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64 Setup.ActiveCfg = Release|x64 + {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64 Setup.Build.0 = Release|x64 + {B535402E-38D2-4D54-8360-423ACBD17192}.All|x86 Setup.ActiveCfg = Release|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Win32.ActiveCfg = Debug|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Win32.Build.0 = Debug|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64.ActiveCfg = Debug|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64.Build.0 = Debug|x64 - {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x86.ActiveCfg = Debug|x64 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.ActiveCfg = Release|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.Build.0 = Release|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.ActiveCfg = Release|x64 {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.Build.0 = Release|x64 - {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x86.ActiveCfg = Release|x64 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64 Setup.ActiveCfg = Release|x64 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x86 Setup.ActiveCfg = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|Win32.ActiveCfg = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|Win32.Build.0 = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x64.ActiveCfg = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x64.Build.0 = Release|Win32 - {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x86.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x64 Setup.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x64 Setup.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x86 Setup.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.All|x86 Setup.Build.0 = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Win32.ActiveCfg = Debug|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Win32.Build.0 = Debug|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x64.ActiveCfg = Debug|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x64.Build.0 = Debug|Win32 - {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x86.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Win32.ActiveCfg = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Win32.Build.0 = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x64.ActiveCfg = Release|Win32 {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x64.Build.0 = Release|Win32 - {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x86.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x64 Setup.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x86 Setup.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.All|Win32.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.All|Win32.Build.0 = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.All|x64.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.All|x64.Build.0 = Release|Win32 - {2DEE4895-1134-439C-B688-52203E57D878}.All|x86.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.All|x64 Setup.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.All|x64 Setup.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.All|x86 Setup.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.All|x86 Setup.Build.0 = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Win32.ActiveCfg = Debug|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Win32.Build.0 = Debug|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x64.ActiveCfg = Debug|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x64.Build.0 = Debug|Win32 - {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x86.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Release|Win32.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Release|Win32.Build.0 = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Release|x64.ActiveCfg = Release|Win32 {2DEE4895-1134-439C-B688-52203E57D878}.Release|x64.Build.0 = Release|Win32 - {2DEE4895-1134-439C-B688-52203E57D878}.Release|x86.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release|x64 Setup.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release|x86 Setup.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|Win32.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|Win32.Build.0 = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x64.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x64.Build.0 = Release|Win32 - {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x86.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x64 Setup.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x64 Setup.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x86 Setup.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.All|x86 Setup.Build.0 = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Win32.ActiveCfg = Debug|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Win32.Build.0 = Debug|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x64.ActiveCfg = Debug|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x64.Build.0 = Debug|Win32 - {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x86.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Win32.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Win32.Build.0 = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x64.ActiveCfg = Release|Win32 {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x64.Build.0 = Release|Win32 - {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x86.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x64 Setup.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x86 Setup.ActiveCfg = Release|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|Win32.ActiveCfg = Debug|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x64.ActiveCfg = Debug|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x64.Build.0 = Debug|x64 - {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x86.ActiveCfg = Release|x64 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x64 Setup.ActiveCfg = Debug|x64 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x64 Setup.Build.0 = Debug|x64 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.All|x86 Setup.ActiveCfg = Debug|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.ActiveCfg = Debug|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.Build.0 = Debug|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64.ActiveCfg = Debug|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64.Build.0 = Debug|x64 - {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x86.ActiveCfg = Debug|x64 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.ActiveCfg = Release|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.Build.0 = Release|Win32 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.ActiveCfg = Release|x64 {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.Build.0 = Release|x64 - {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x86.ActiveCfg = Release|x64 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64 Setup.ActiveCfg = Release|x64 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x86 Setup.ActiveCfg = Release|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.All|Win32.ActiveCfg = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.All|x64.ActiveCfg = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.All|x64.Build.0 = Debug|x64 - {94001A0E-A837-445C-8004-F918F10D0226}.All|x86.ActiveCfg = Release|x64 + {94001A0E-A837-445C-8004-F918F10D0226}.All|x64 Setup.ActiveCfg = Debug|x64 + {94001A0E-A837-445C-8004-F918F10D0226}.All|x64 Setup.Build.0 = Debug|x64 + {94001A0E-A837-445C-8004-F918F10D0226}.All|x86 Setup.ActiveCfg = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.ActiveCfg = Debug|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.Build.0 = Debug|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.ActiveCfg = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.Build.0 = Debug|x64 - {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x86.ActiveCfg = Debug|x64 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.ActiveCfg = Release|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.Build.0 = Release|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.ActiveCfg = Release|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.Build.0 = Release|x64 - {94001A0E-A837-445C-8004-F918F10D0226}.Release|x86.ActiveCfg = Release|x64 + {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64 Setup.ActiveCfg = Release|x64 + {94001A0E-A837-445C-8004-F918F10D0226}.Release|x86 Setup.ActiveCfg = Release|Win32 {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|Win32.ActiveCfg = Release|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x64.ActiveCfg = Release|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x64.Build.0 = Release|x64 - {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x86.ActiveCfg = Release|x64 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x64 Setup.ActiveCfg = Release|x64 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x64 Setup.Build.0 = Release|x64 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.All|x86 Setup.ActiveCfg = Release|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Win32.ActiveCfg = Debug|Win32 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Win32.Build.0 = Debug|Win32 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64.ActiveCfg = Debug|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64.Build.0 = Debug|x64 - {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x86.ActiveCfg = Debug|x64 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Win32.ActiveCfg = Release|Win32 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Win32.Build.0 = Release|Win32 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.ActiveCfg = Release|x64 {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.Build.0 = Release|x64 - {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x86.ActiveCfg = Release|x64 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64 Setup.ActiveCfg = Release|x64 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x86 Setup.ActiveCfg = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|Win32.ActiveCfg = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|Win32.Build.0 = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x64.ActiveCfg = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x64.Build.0 = Release|Win32 - {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x86.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x64 Setup.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x64 Setup.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x86 Setup.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.All|x86 Setup.Build.0 = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Win32.ActiveCfg = Debug|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Win32.Build.0 = Debug|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x64.ActiveCfg = Debug|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x64.Build.0 = Debug|Win32 - {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x86.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Win32.ActiveCfg = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Win32.Build.0 = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x64.ActiveCfg = Release|Win32 {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x64.Build.0 = Release|Win32 - {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x86.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x64 Setup.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x86 Setup.ActiveCfg = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|Win32.ActiveCfg = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|x64.ActiveCfg = Release|Win32 - {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|x86.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|x64 Setup.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.All|x86 Setup.ActiveCfg = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Win32.ActiveCfg = Debug|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|x64.ActiveCfg = Debug|Win32 - {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|x86.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Win32.ActiveCfg = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x64.ActiveCfg = Release|Win32 - {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x86.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x64 Setup.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x86 Setup.ActiveCfg = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|Win32.ActiveCfg = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|Win32.Build.0 = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.ActiveCfg = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.Build.0 = Release|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x86.ActiveCfg = Release|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64 Setup.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64 Setup.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x86 Setup.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x86 Setup.Build.0 = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.ActiveCfg = Debug|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.Build.0 = Debug|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|x64 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.Build.0 = Debug|x64 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x86.ActiveCfg = Debug|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.ActiveCfg = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.Build.0 = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|x64 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.Build.0 = Release|x64 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x86.ActiveCfg = Release|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64 Setup.ActiveCfg = Release|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x86 Setup.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.All|Win32.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.All|x64.ActiveCfg = Release|Win32 - {7EB71250-F002-4ED8-92CA-CA218114537A}.All|x86.ActiveCfg = Release|x64 + {7EB71250-F002-4ED8-92CA-CA218114537A}.All|x64 Setup.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.All|x86 Setup.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Win32.ActiveCfg = Debug|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|x64 - {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x86.ActiveCfg = Debug|x64 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|x64 - {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x86.ActiveCfg = Release|x64 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64 Setup.ActiveCfg = Release|x64 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x86 Setup.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|Win32.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x64.ActiveCfg = Release|Win32 - {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x86.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x64 Setup.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x86 Setup.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Win32.ActiveCfg = Debug|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|x64.ActiveCfg = Debug|Win32 - {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|x86.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Win32.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x64.ActiveCfg = Release|Win32 - {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x86.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x64 Setup.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x86 Setup.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.All|Win32.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.All|x64.ActiveCfg = Release|Win32 - {464AAB78-5489-4916-BE51-BF8D61822311}.All|x86.ActiveCfg = Release|x64 + {464AAB78-5489-4916-BE51-BF8D61822311}.All|x64 Setup.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.All|x86 Setup.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Win32.ActiveCfg = Debug|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|x64 - {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x86.ActiveCfg = Debug|x64 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|x64 - {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x86.ActiveCfg = Release|x64 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64 Setup.ActiveCfg = Release|x64 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x86 Setup.ActiveCfg = Release|Win32 {0AD1177E-1FD8-4643-9391-431467A11084}.All|Win32.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.Build.0 = Release|x64 - {0AD1177E-1FD8-4643-9391-431467A11084}.All|x86.ActiveCfg = Release|x64 + {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64 Setup.ActiveCfg = Release|x64 + {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64 Setup.Build.0 = Release|x64 + {0AD1177E-1FD8-4643-9391-431467A11084}.All|x86 Setup.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Win32.ActiveCfg = Debug|Win32 {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Win32.Build.0 = Debug|Win32 {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64.ActiveCfg = Debug|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64.Build.0 = Debug|x64 - {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x86.ActiveCfg = Debug|x64 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Win32.ActiveCfg = Release|Win32 {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Win32.Build.0 = Release|Win32 {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.Build.0 = Release|x64 - {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x86.ActiveCfg = Release|x64 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64 Setup.ActiveCfg = Release|x64 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x86 Setup.ActiveCfg = Release|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|Win32.ActiveCfg = Release Static|x64 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x64.ActiveCfg = Release Static|x64 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x64.Build.0 = Release Static|x64 - {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x86.ActiveCfg = Release|x64 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x64 Setup.ActiveCfg = Release Static|x64 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x64 Setup.Build.0 = Release Static|x64 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.All|x86 Setup.ActiveCfg = Release Static|x64 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.ActiveCfg = Debug|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64.ActiveCfg = Debug|x64 - {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x86.ActiveCfg = Debug|x64 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.ActiveCfg = Release|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.ActiveCfg = Release|x64 - {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x86.ActiveCfg = Release|x64 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64 Setup.ActiveCfg = Release|x64 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x86 Setup.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x64.Build.0 = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x86.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x64 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x64 Setup.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x86 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.All|x86 Setup.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Win32.Build.0 = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x64.Build.0 = Debug|Win32 - {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x86.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x64.Build.0 = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x86.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x64 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x86 Setup.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x64.Build.0 = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x86.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x64 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x64 Setup.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x86 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.All|x86 Setup.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.Build.0 = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.Build.0 = Debug|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x86.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x64.Build.0 = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x86.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x64 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x86 Setup.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x64.Build.0 = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x86.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x64 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x64 Setup.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x86 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.All|x86 Setup.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Win32.Build.0 = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x64.Build.0 = Debug|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x86.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x64.Build.0 = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x86.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x64 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x86 Setup.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x64.Build.0 = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x86.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x64 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x64 Setup.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x86 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.All|x86 Setup.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Win32.Build.0 = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x64.Build.0 = Debug|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x86.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Win32.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Win32.Build.0 = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x64.ActiveCfg = Release|Win32 {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x64.Build.0 = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x86.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x64 Setup.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x86 Setup.ActiveCfg = Release|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|Win32.ActiveCfg = Debug|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x64.ActiveCfg = Debug|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x64.Build.0 = Debug|x64 - {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x86.ActiveCfg = Release|x64 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x64 Setup.ActiveCfg = Debug|x64 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x64 Setup.Build.0 = Debug|x64 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.All|x86 Setup.ActiveCfg = Debug|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Win32.ActiveCfg = Debug|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Win32.Build.0 = Debug|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64.ActiveCfg = Debug|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64.Build.0 = Debug|x64 - {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x86.ActiveCfg = Debug|x64 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Win32.ActiveCfg = Release|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Win32.Build.0 = Release|Win32 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.ActiveCfg = Release|x64 {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.Build.0 = Release|x64 - {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x86.ActiveCfg = Release|x64 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64 Setup.ActiveCfg = Release|x64 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x86 Setup.ActiveCfg = Release|Win32 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|Win32.ActiveCfg = Debug|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x64.ActiveCfg = Debug|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x64.Build.0 = Debug|x64 - {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x86.ActiveCfg = Release|x64 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x64 Setup.ActiveCfg = Debug|x64 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x64 Setup.Build.0 = Debug|x64 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.All|x86 Setup.ActiveCfg = Debug|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Win32.ActiveCfg = Debug|Win32 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Win32.Build.0 = Debug|Win32 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64.ActiveCfg = Debug|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64.Build.0 = Debug|x64 - {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x86.ActiveCfg = Debug|x64 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Win32.ActiveCfg = Release|Win32 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Win32.Build.0 = Release|Win32 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.ActiveCfg = Release|x64 {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.Build.0 = Release|x64 - {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x86.ActiveCfg = Release|x64 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64 Setup.ActiveCfg = Release|x64 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x86 Setup.ActiveCfg = Release|Win32 {38FE0559-9910-43A8-9E45-3E5004C27692}.All|Win32.ActiveCfg = Release|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x64.ActiveCfg = Release|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x64.Build.0 = Release|x64 - {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x86.ActiveCfg = Release|x64 + {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x64 Setup.ActiveCfg = Release|x64 + {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x64 Setup.Build.0 = Release|x64 + {38FE0559-9910-43A8-9E45-3E5004C27692}.All|x86 Setup.ActiveCfg = Release|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Win32.ActiveCfg = Debug|Win32 {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Win32.Build.0 = Debug|Win32 {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64.ActiveCfg = Debug|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64.Build.0 = Debug|x64 - {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x86.ActiveCfg = Debug|x64 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Win32.ActiveCfg = Release|Win32 {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Win32.Build.0 = Release|Win32 {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.ActiveCfg = Release|x64 {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.Build.0 = Release|x64 - {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x86.ActiveCfg = Release|x64 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64 Setup.ActiveCfg = Release|x64 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x86 Setup.ActiveCfg = Release|Win32 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|Win32.ActiveCfg = Debug|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x64.ActiveCfg = Debug|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x64.Build.0 = Debug|x64 - {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x86.ActiveCfg = Release|x64 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x64 Setup.ActiveCfg = Debug|x64 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x64 Setup.Build.0 = Debug|x64 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.All|x86 Setup.ActiveCfg = Debug|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Win32.ActiveCfg = Debug|Win32 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Win32.Build.0 = Debug|Win32 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64.ActiveCfg = Debug|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64.Build.0 = Debug|x64 - {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x86.ActiveCfg = Debug|x64 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Win32.ActiveCfg = Release|Win32 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Win32.Build.0 = Release|Win32 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.ActiveCfg = Release|x64 {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.Build.0 = Release|x64 - {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x86.ActiveCfg = Release|x64 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64 Setup.ActiveCfg = Release|x64 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x86 Setup.ActiveCfg = Release|Win32 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|Win32.ActiveCfg = Release|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x64.ActiveCfg = Release|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x64.Build.0 = Release|x64 - {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x86.ActiveCfg = Release|x64 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x64 Setup.ActiveCfg = Release|x64 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x64 Setup.Build.0 = Release|x64 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.All|x86 Setup.ActiveCfg = Release|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Win32.ActiveCfg = Debug|Win32 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Win32.Build.0 = Debug|Win32 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64.ActiveCfg = Debug|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64.Build.0 = Debug|x64 - {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x86.ActiveCfg = Debug|x64 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Win32.ActiveCfg = Release|Win32 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Win32.Build.0 = Release|Win32 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.ActiveCfg = Release|x64 {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.Build.0 = Release|x64 - {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x86.ActiveCfg = Release|x64 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64 Setup.ActiveCfg = Release|x64 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x86 Setup.ActiveCfg = Release|Win32 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|Win32.ActiveCfg = Release|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x64.ActiveCfg = Release|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x64.Build.0 = Release|x64 - {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x86.ActiveCfg = Release|x64 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x64 Setup.ActiveCfg = Release|x64 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x64 Setup.Build.0 = Release|x64 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.All|x86 Setup.ActiveCfg = Release|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Win32.ActiveCfg = Debug|Win32 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Win32.Build.0 = Debug|Win32 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x64.ActiveCfg = Debug|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x64.Build.0 = Debug|x64 - {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x86.ActiveCfg = Debug|x64 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Win32.ActiveCfg = Release|Win32 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Win32.Build.0 = Release|Win32 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64.ActiveCfg = Release|x64 {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64.Build.0 = Release|x64 - {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x86.ActiveCfg = Release|x64 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x64 Setup.ActiveCfg = Release|x64 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|x86 Setup.ActiveCfg = Release|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|Win32.ActiveCfg = Release_Mono|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x64.ActiveCfg = Release_Mono|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x64.Build.0 = Release_Mono|x64 - {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x86.ActiveCfg = Release_Mono|x64 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x64 Setup.ActiveCfg = Release_Mono|x64 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x64 Setup.Build.0 = Release_Mono|x64 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.All|x86 Setup.ActiveCfg = Release_Mono|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Win32.ActiveCfg = Debug_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Win32.Build.0 = Debug_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64.ActiveCfg = Debug_CLR|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64.Build.0 = Debug_CLR|x64 - {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x86.ActiveCfg = Debug_Mono|x64 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x64 Setup.ActiveCfg = Debug_CLR|x64 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|x86 Setup.ActiveCfg = Debug_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.ActiveCfg = Release_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.Build.0 = Release_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.ActiveCfg = Release_CLR|x64 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.Build.0 = Release_CLR|x64 - {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x86.ActiveCfg = Release_Mono|x64 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64 Setup.ActiveCfg = Release_CLR|x64 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x86 Setup.ActiveCfg = Release_CLR|Win32 {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|Win32.ActiveCfg = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|x64.ActiveCfg = Release|Any CPU - {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|x86.ActiveCfg = Release|x64 + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|x64 Setup.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.All|x86 Setup.ActiveCfg = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Win32.ActiveCfg = Debug|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Win32.Build.0 = Debug|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.ActiveCfg = Debug|x64 {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.Build.0 = Debug|x64 - {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x86.ActiveCfg = Debug|x64 + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x86 Setup.ActiveCfg = Debug|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.ActiveCfg = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.Build.0 = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.ActiveCfg = Release|x64 {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.Build.0 = Release|x64 - {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x86.ActiveCfg = Release|x64 + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64 Setup.ActiveCfg = Release|x64 + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x86 Setup.ActiveCfg = Release|Any CPU {E796E337-DE78-4303-8614-9A590862EE95}.All|Win32.ActiveCfg = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.All|Win32.Build.0 = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.All|x64.ActiveCfg = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.All|x64.Build.0 = Release|Win32 - {E796E337-DE78-4303-8614-9A590862EE95}.All|x86.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.All|x64 Setup.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.All|x64 Setup.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.All|x86 Setup.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.All|x86 Setup.Build.0 = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.ActiveCfg = Debug|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.Build.0 = Debug|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Debug|x64.ActiveCfg = Debug|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Debug|x64.Build.0 = Debug|Win32 - {E796E337-DE78-4303-8614-9A590862EE95}.Debug|x86.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Release|Win32.ActiveCfg = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Release|Win32.Build.0 = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Release|x64.ActiveCfg = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Release|x64.Build.0 = Release|Win32 - {E796E337-DE78-4303-8614-9A590862EE95}.Release|x86.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release|x64 Setup.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release|x86 Setup.ActiveCfg = Release|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.All|Win32.ActiveCfg = Release|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.All|x64.ActiveCfg = Release|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.All|x64.Build.0 = Release|x64 - {419C8F80-D858-4B48-A25C-AF4007608137}.All|x86.ActiveCfg = Release|x64 + {419C8F80-D858-4B48-A25C-AF4007608137}.All|x64 Setup.ActiveCfg = Release|x64 + {419C8F80-D858-4B48-A25C-AF4007608137}.All|x64 Setup.Build.0 = Release|x64 + {419C8F80-D858-4B48-A25C-AF4007608137}.All|x86 Setup.ActiveCfg = Release|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Win32.ActiveCfg = Debug|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Win32.Build.0 = Debug|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x64.ActiveCfg = Debug|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x64.Build.0 = Debug|x64 - {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x86.ActiveCfg = Debug|x64 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.Release|Win32.ActiveCfg = Release|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.Release|Win32.Build.0 = Release|Win32 {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64.ActiveCfg = Release|x64 {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64.Build.0 = Release|x64 - {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x86.ActiveCfg = Release|x64 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x64 Setup.ActiveCfg = Release|x64 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release|x86 Setup.ActiveCfg = Release|Win32 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|Win32.ActiveCfg = Release|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x64.ActiveCfg = Release|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x64.Build.0 = Release|x64 - {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x86.ActiveCfg = Release|x64 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x64 Setup.ActiveCfg = Release|x64 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x64 Setup.Build.0 = Release|x64 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.All|x86 Setup.ActiveCfg = Release|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Win32.ActiveCfg = Debug|Win32 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Win32.Build.0 = Debug|Win32 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x64.ActiveCfg = Debug|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x64.Build.0 = Debug|x64 - {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x86.ActiveCfg = Debug|x64 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Win32.ActiveCfg = Release|Win32 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Win32.Build.0 = Release|Win32 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64.ActiveCfg = Release|x64 {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64.Build.0 = Release|x64 - {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x86.ActiveCfg = Release|x64 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x64 Setup.ActiveCfg = Release|x64 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|x86 Setup.ActiveCfg = Release|Win32 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|Win32.ActiveCfg = Release|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x64.ActiveCfg = Release|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x64.Build.0 = Release|x64 - {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x86.ActiveCfg = Release|x64 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x64 Setup.ActiveCfg = Release|x64 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x64 Setup.Build.0 = Release|x64 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.All|x86 Setup.ActiveCfg = Release|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Win32.ActiveCfg = Debug|Win32 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Win32.Build.0 = Debug|Win32 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x64.ActiveCfg = Debug|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x64.Build.0 = Debug|x64 - {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x86.ActiveCfg = Debug|x64 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Win32.ActiveCfg = Release|Win32 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Win32.Build.0 = Release|Win32 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64.ActiveCfg = Release|x64 {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64.Build.0 = Release|x64 - {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x86.ActiveCfg = Release|x64 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x64 Setup.ActiveCfg = Release|x64 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|x86 Setup.ActiveCfg = Release|Win32 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|Win32.ActiveCfg = Release|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x64.ActiveCfg = Release|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x64.Build.0 = Release|x64 - {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x86.ActiveCfg = Release|x64 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x64 Setup.ActiveCfg = Release|x64 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x64 Setup.Build.0 = Release|x64 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.All|x86 Setup.ActiveCfg = Release|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|Win32.ActiveCfg = Debug|Win32 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|Win32.Build.0 = Debug|Win32 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x64.ActiveCfg = Debug|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x64.Build.0 = Debug|x64 - {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x86.ActiveCfg = Debug|x64 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|Win32.ActiveCfg = Release|Win32 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|Win32.Build.0 = Release|Win32 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64.ActiveCfg = Release|x64 {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64.Build.0 = Release|x64 - {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x86.ActiveCfg = Release|x64 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x64 Setup.ActiveCfg = Release|x64 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|x86 Setup.ActiveCfg = Release|Win32 {0B6C905B-142E-4999-B39D-92FF7951E921}.All|Win32.ActiveCfg = Release|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x64.ActiveCfg = Release|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x64.Build.0 = Release|x64 - {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x86.ActiveCfg = Release|x64 + {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x64 Setup.ActiveCfg = Release|x64 + {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x64 Setup.Build.0 = Release|x64 + {0B6C905B-142E-4999-B39D-92FF7951E921}.All|x86 Setup.ActiveCfg = Release|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|Win32.ActiveCfg = Debug|Win32 {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|Win32.Build.0 = Debug|Win32 {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x64.ActiveCfg = Debug|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x64.Build.0 = Debug|x64 - {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x86.ActiveCfg = Debug|x64 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|Win32.ActiveCfg = Release|Win32 {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|Win32.Build.0 = Release|Win32 {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64.ActiveCfg = Release|x64 {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64.Build.0 = Release|x64 - {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x86.ActiveCfg = Release|x64 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x64 Setup.ActiveCfg = Release|x64 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|x86 Setup.ActiveCfg = Release|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|Win32.ActiveCfg = Release|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x64.ActiveCfg = Release|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x64.Build.0 = Release|x64 - {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x86.ActiveCfg = Release|x64 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x64 Setup.ActiveCfg = Release|x64 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x64 Setup.Build.0 = Release|x64 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.All|x86 Setup.ActiveCfg = Release|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|Win32.ActiveCfg = Debug|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|Win32.Build.0 = Debug|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x64.ActiveCfg = Debug|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x64.Build.0 = Debug|x64 - {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x86.ActiveCfg = Debug|x64 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.ActiveCfg = Release|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.Build.0 = Release|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.ActiveCfg = Release|x64 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.Build.0 = Release|x64 - {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x86.ActiveCfg = Release|x64 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64 Setup.ActiveCfg = Release|x64 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x86 Setup.ActiveCfg = Release|Win32 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|Win32.ActiveCfg = Release|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x64.ActiveCfg = Release|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x64.Build.0 = Release|x64 - {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x86.ActiveCfg = Release|x64 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x64 Setup.ActiveCfg = Release|x64 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x64 Setup.Build.0 = Release|x64 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.All|x86 Setup.ActiveCfg = Release|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.ActiveCfg = Debug|Win32 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.Build.0 = Debug|Win32 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.ActiveCfg = Debug|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.Build.0 = Debug|x64 - {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x86.ActiveCfg = Debug|x64 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.ActiveCfg = Release|Win32 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.Build.0 = Release|Win32 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.ActiveCfg = Release|x64 {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.Build.0 = Release|x64 - {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x86.ActiveCfg = Release|x64 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64 Setup.ActiveCfg = Release|x64 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x86 Setup.ActiveCfg = Release|Win32 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|Win32.ActiveCfg = Release|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x64.ActiveCfg = Release|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x64.Build.0 = Release|x64 - {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x86.ActiveCfg = Release|x64 + {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x64 Setup.ActiveCfg = Release|x64 + {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x64 Setup.Build.0 = Release|x64 + {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.All|x86 Setup.ActiveCfg = Release|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|Win32.ActiveCfg = Debug|Win32 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|Win32.Build.0 = Debug|Win32 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x64.ActiveCfg = Debug|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x64.Build.0 = Debug|x64 - {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x86.ActiveCfg = Debug|x64 + {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|Win32.ActiveCfg = Release|Win32 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|Win32.Build.0 = Release|Win32 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x64.ActiveCfg = Release|x64 {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x64.Build.0 = Release|x64 - {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x86.ActiveCfg = Release|x64 + {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x64 Setup.ActiveCfg = Release|x64 + {329FD5B0-EF28-4606-86D0-F6EA21CF8E36}.Release|x86 Setup.ActiveCfg = Release|Win32 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|Win32.ActiveCfg = Release|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x64.ActiveCfg = Release|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x64.Build.0 = Release|x64 - {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x86.ActiveCfg = Release|x64 + {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x64 Setup.ActiveCfg = Release|x64 + {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x64 Setup.Build.0 = Release|x64 + {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.All|x86 Setup.ActiveCfg = Release|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|Win32.ActiveCfg = Debug|Win32 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|Win32.Build.0 = Debug|Win32 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x64.ActiveCfg = Debug|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x64.Build.0 = Debug|x64 - {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x86.ActiveCfg = Debug|x64 + {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|Win32.ActiveCfg = Release|Win32 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|Win32.Build.0 = Release|Win32 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x64.ActiveCfg = Release|x64 {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x64.Build.0 = Release|x64 - {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x86.ActiveCfg = Release|x64 + {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x64 Setup.ActiveCfg = Release|x64 + {1A3793D1-05D1-4B57-9B0F-5AF3E79DC439}.Release|x86 Setup.ActiveCfg = Release|Win32 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|Win32.ActiveCfg = Release|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64.ActiveCfg = Release|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64.Build.0 = Release|x64 - {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x86.ActiveCfg = Release|x64 + {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64 Setup.ActiveCfg = Release|x64 + {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64 Setup.Build.0 = Release|x64 + {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x86 Setup.ActiveCfg = Release|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.ActiveCfg = Debug|Win32 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.Build.0 = Debug|Win32 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x64.ActiveCfg = Debug|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x64.Build.0 = Debug|x64 - {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x86.ActiveCfg = Debug|x64 + {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.ActiveCfg = Release|Win32 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.Build.0 = Release|Win32 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x64.ActiveCfg = Release|x64 {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x64.Build.0 = Release|x64 - {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x86.ActiveCfg = Release|x64 + {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x64 Setup.ActiveCfg = Release|x64 + {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x86 Setup.ActiveCfg = Release|Win32 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|Win32.ActiveCfg = Release|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64.ActiveCfg = Release|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64.Build.0 = Release|x64 - {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x86.ActiveCfg = Release|x64 + {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64 Setup.ActiveCfg = Release|x64 + {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64 Setup.Build.0 = Release|x64 + {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x86 Setup.ActiveCfg = Release|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.ActiveCfg = Debug|Win32 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.Build.0 = Debug|Win32 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x64.ActiveCfg = Debug|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x64.Build.0 = Debug|x64 - {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x86.ActiveCfg = Debug|x64 + {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.ActiveCfg = Release|Win32 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.Build.0 = Release|Win32 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x64.ActiveCfg = Release|x64 {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x64.Build.0 = Release|x64 - {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x86.ActiveCfg = Release|x64 + {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x64 Setup.ActiveCfg = Release|x64 + {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x86 Setup.ActiveCfg = Release|Win32 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|Win32.ActiveCfg = Release_WM5_PPC_ARM|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64.ActiveCfg = Release_WM5_PPC_ARM|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64.Build.0 = Release_WM5_PPC_ARM|x64 - {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x86.ActiveCfg = Release_WM5_PPC_ARM|x64 + {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64 Setup.ActiveCfg = Release_WM5_PPC_ARM|x64 + {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64 Setup.Build.0 = Release_WM5_PPC_ARM|x64 + {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x86 Setup.ActiveCfg = Release_WM5_PPC_ARM|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.ActiveCfg = Debug|Win32 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.Build.0 = Debug|Win32 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64.ActiveCfg = Debug|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64.Build.0 = Debug|x64 - {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x86.ActiveCfg = Debug|x64 + {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.ActiveCfg = Release|Win32 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.Build.0 = Release|Win32 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64.ActiveCfg = Release|x64 {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64.Build.0 = Release|x64 - {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x86.ActiveCfg = Release|x64 + {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64 Setup.ActiveCfg = Release|x64 + {E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x86 Setup.ActiveCfg = Release|Win32 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|Win32.ActiveCfg = Release_Static_SSE|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x64.ActiveCfg = Release_Static_SSE|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x64.Build.0 = Release_Static_SSE|x64 - {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x86.ActiveCfg = Release|x64 + {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x64 Setup.ActiveCfg = Release_Static_SSE|x64 + {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x64 Setup.Build.0 = Release_Static_SSE|x64 + {03207781-0D1C-4DB3-A71D-45C608F28DBD}.All|x86 Setup.ActiveCfg = Release_Static_SSE|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|Win32.ActiveCfg = Debug|Win32 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|Win32.Build.0 = Debug|Win32 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x64.ActiveCfg = Debug|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x64.Build.0 = Debug|x64 - {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x86.ActiveCfg = Debug|x64 + {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|Win32.ActiveCfg = Release|Win32 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|Win32.Build.0 = Release|Win32 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x64.ActiveCfg = Release|x64 {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x64.Build.0 = Release|x64 - {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x86.ActiveCfg = Release|x64 + {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x64 Setup.ActiveCfg = Release|x64 + {03207781-0D1C-4DB3-A71D-45C608F28DBD}.Release|x86 Setup.ActiveCfg = Release|Win32 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|Win32.ActiveCfg = Release|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x64.ActiveCfg = Release|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x64.Build.0 = Release|x64 - {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x86.ActiveCfg = Release|x64 + {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x64 Setup.ActiveCfg = Release|x64 + {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x64 Setup.Build.0 = Release|x64 + {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.All|x86 Setup.ActiveCfg = Release|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|Win32.ActiveCfg = Debug|Win32 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|Win32.Build.0 = Debug|Win32 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x64.ActiveCfg = Debug|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x64.Build.0 = Debug|x64 - {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x86.ActiveCfg = Debug|x64 + {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|Win32.ActiveCfg = Release|Win32 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|Win32.Build.0 = Release|Win32 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x64.ActiveCfg = Release|x64 {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x64.Build.0 = Release|x64 - {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x86.ActiveCfg = Release|x64 + {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x64 Setup.ActiveCfg = Release|x64 + {9A5DDF08-C88C-4A35-B7F6-D605228446BD}.Release|x86 Setup.ActiveCfg = Release|Win32 {D0B36172-CD76-454A-9B89-990025266C2A}.All|Win32.ActiveCfg = Release|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64.ActiveCfg = Release|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64.Build.0 = Release|x64 - {D0B36172-CD76-454A-9B89-990025266C2A}.All|x86.ActiveCfg = Release|x64 + {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64 Setup.ActiveCfg = Release|x64 + {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64 Setup.Build.0 = Release|x64 + {D0B36172-CD76-454A-9B89-990025266C2A}.All|x86 Setup.ActiveCfg = Release|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.ActiveCfg = Debug|Win32 {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.Build.0 = Debug|Win32 {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64.ActiveCfg = Debug|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64.Build.0 = Debug|x64 - {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x86.ActiveCfg = Debug|x64 + {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.ActiveCfg = Release|Win32 {D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.Build.0 = Release|Win32 {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64.ActiveCfg = Release|x64 {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64.Build.0 = Release|x64 - {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x86.ActiveCfg = Release|x64 + {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64 Setup.ActiveCfg = Release|x64 + {D0B36172-CD76-454A-9B89-990025266C2A}.Release|x86 Setup.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|Win32.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|Win32.Build.0 = Release|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|x64.ActiveCfg = Release|Win32 - {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|x86.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|x64 Setup.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|x86 Setup.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-6338E2526666}.All|x86 Setup.Build.0 = Release|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|Win32.ActiveCfg = Debug|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|x64.ActiveCfg = Debug|Win32 - {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|x86.ActiveCfg = Debug|Win32 + {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|Win32.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|x64.ActiveCfg = Release|Win32 - {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|x86.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|x64 Setup.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|x86 Setup.ActiveCfg = Release|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|Win32.ActiveCfg = Release|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|x64.ActiveCfg = Release|Win32 - {CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|x86.ActiveCfg = Release|x64 + {CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|x64 Setup.ActiveCfg = Release|Win32 + {CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|x86 Setup.ActiveCfg = Release|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Debug|Win32.ActiveCfg = Debug|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Debug|x64.ActiveCfg = Debug|x64 - {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Debug|x86.ActiveCfg = Debug|x64 + {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Release|Win32.ActiveCfg = Release|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Release|x64.ActiveCfg = Release|x64 - {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Release|x86.ActiveCfg = Release|x64 + {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Release|x64 Setup.ActiveCfg = Release|x64 + {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Release|x86 Setup.ActiveCfg = Release|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.Build.0 = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|x64.ActiveCfg = All|Win32 - {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|x86.ActiveCfg = All|Win32 + {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|x64 Setup.ActiveCfg = All|Win32 + {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|x86 Setup.ActiveCfg = All|Win32 + {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|x86 Setup.Build.0 = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.Build.0 = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x64.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x64.Build.0 = All|Win32 - {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x86.ActiveCfg = All|Win32 + {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x64 Setup.ActiveCfg = All|Win32 + {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x86 Setup.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.Build.0 = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x64.ActiveCfg = All|Win32 {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x64.Build.0 = All|Win32 - {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x86.ActiveCfg = All|Win32 + {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x64 Setup.ActiveCfg = All|Win32 + {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x86 Setup.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.Build.0 = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|x64.ActiveCfg = All|Win32 - {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|x86.ActiveCfg = All|Win32 + {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|x64 Setup.ActiveCfg = All|Win32 + {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|x86 Setup.ActiveCfg = All|Win32 + {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|x86 Setup.Build.0 = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.Build.0 = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x64.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x64.Build.0 = All|Win32 - {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x86.ActiveCfg = All|Win32 + {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x64 Setup.ActiveCfg = All|Win32 + {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x86 Setup.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.Build.0 = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x64.ActiveCfg = All|Win32 {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x64.Build.0 = All|Win32 - {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x86.ActiveCfg = All|Win32 + {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x64 Setup.ActiveCfg = All|Win32 + {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x86 Setup.ActiveCfg = All|Win32 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|Win32.ActiveCfg = Release|x64 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x64.ActiveCfg = Release|x64 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x64.Build.0 = Release|x64 - {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x86.ActiveCfg = Release|x64 + {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x64 Setup.ActiveCfg = Release|x64 + {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x64 Setup.Build.0 = Release|x64 + {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.All|x86 Setup.ActiveCfg = Release|x64 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Debug|Win32.ActiveCfg = Debug|Win32 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Debug|x64.ActiveCfg = Debug|x64 - {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Debug|x86.ActiveCfg = Debug|x64 + {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Release|Win32.ActiveCfg = Release|Win32 {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Release|x64.ActiveCfg = Release|x64 - {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Release|x86.ActiveCfg = Release|x64 + {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Release|x64 Setup.ActiveCfg = Release|x64 + {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39}.Release|x86 Setup.ActiveCfg = Release|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|Win32.ActiveCfg = Release|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|Win32.Build.0 = Release|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x64.ActiveCfg = Release|Win32 - {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x86.ActiveCfg = Release|Win32 + {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x64 Setup.ActiveCfg = Release|Win32 + {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x86 Setup.ActiveCfg = Release|Win32 + {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x86 Setup.Build.0 = Release|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|Win32.ActiveCfg = Debug|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x64.ActiveCfg = Debug|Win32 - {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x86.ActiveCfg = Debug|Win32 + {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|Win32.ActiveCfg = Release|Win32 {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x64.ActiveCfg = Release|Win32 - {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x86.ActiveCfg = Release|Win32 + {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x64 Setup.ActiveCfg = Release|Win32 + {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x86 Setup.ActiveCfg = Release|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.All|Win32.ActiveCfg = Release|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.All|x64.ActiveCfg = Release|Win32 - {1F0A8A77-E661-418F-BB92-82172AE43803}.All|x86.ActiveCfg = Release|Win32 + {1F0A8A77-E661-418F-BB92-82172AE43803}.All|x64 Setup.ActiveCfg = Release|Win32 + {1F0A8A77-E661-418F-BB92-82172AE43803}.All|x86 Setup.ActiveCfg = Release|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|Win32.ActiveCfg = Debug|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|x64.ActiveCfg = Debug|Win32 - {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|x86.ActiveCfg = Debug|Win32 + {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {1F0A8A77-E661-418F-BB92-82172AE43803}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|Win32.ActiveCfg = Release|Win32 {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|x64.ActiveCfg = Release|Win32 - {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|x86.ActiveCfg = Release|Win32 + {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|x64 Setup.ActiveCfg = Release|Win32 + {1F0A8A77-E661-418F-BB92-82172AE43803}.Release|x86 Setup.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|Win32.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|Win32.Build.0 = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x64.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x64.Build.0 = Release|Win32 - {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x86.ActiveCfg = Release|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x64 Setup.ActiveCfg = Release|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x64 Setup.Build.0 = Release|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x86 Setup.ActiveCfg = Release|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.All|x86 Setup.Build.0 = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|Win32.ActiveCfg = Debug|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|Win32.Build.0 = Debug|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x64.ActiveCfg = Debug|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x64.Build.0 = Debug|Win32 - {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x86.ActiveCfg = Debug|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|Win32.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|Win32.Build.0 = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x64.ActiveCfg = Release|Win32 {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x64.Build.0 = Release|Win32 - {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x86.ActiveCfg = Release|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x64 Setup.ActiveCfg = Release|Win32 + {4F5C9D55-98EF-4256-8311-32D7BD360406}.Release|x86 Setup.ActiveCfg = Release|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|Win32.ActiveCfg = Release|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|x64.ActiveCfg = Release|Win32 - {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|x86.ActiveCfg = Release|Win32 + {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|x64 Setup.ActiveCfg = Release|Win32 + {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.All|x86 Setup.ActiveCfg = Release|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|Win32.ActiveCfg = Debug|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|x64.ActiveCfg = Debug|Win32 - {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|x86.ActiveCfg = Debug|Win32 + {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|Win32.ActiveCfg = Release|Win32 {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|x64.ActiveCfg = Release|Win32 - {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|x86.ActiveCfg = Release|Win32 + {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|x64 Setup.ActiveCfg = Release|Win32 + {E10571C4-E7F4-4608-B5F2-B22E7EB95400}.Release|x86 Setup.ActiveCfg = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|Win32.ActiveCfg = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|Win32.Build.0 = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.ActiveCfg = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.Build.0 = Release|Win32 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x86.ActiveCfg = Release|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64 Setup.ActiveCfg = Release|Win32 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64 Setup.Build.0 = Release|Win32 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x86 Setup.ActiveCfg = Release|Win32 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x86 Setup.Build.0 = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.ActiveCfg = Debug|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.Build.0 = Debug|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.ActiveCfg = Debug|x64 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.Build.0 = Debug|x64 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x86.ActiveCfg = Debug|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.ActiveCfg = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.Build.0 = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.ActiveCfg = Release|x64 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.Build.0 = Release|x64 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x86.ActiveCfg = Release|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64 Setup.ActiveCfg = Release|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x86 Setup.ActiveCfg = Release|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|Win32.ActiveCfg = Release|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x64.ActiveCfg = Release|Win32 - {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x86.ActiveCfg = Release|x64 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x64 Setup.ActiveCfg = Release|Win32 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x86 Setup.ActiveCfg = Release|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|Win32.ActiveCfg = Debug|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64.ActiveCfg = Debug|x64 - {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x86.ActiveCfg = Debug|x64 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|Win32.ActiveCfg = Release|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64.ActiveCfg = Release|x64 - {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x86.ActiveCfg = Release|x64 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64 Setup.ActiveCfg = Release|x64 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x86 Setup.ActiveCfg = Release|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|Win32.ActiveCfg = Release|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x64.ActiveCfg = Release|Win32 - {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x86.ActiveCfg = Release|x64 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x64 Setup.ActiveCfg = Release|Win32 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x86 Setup.ActiveCfg = Release|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|Win32.ActiveCfg = Debug|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64.ActiveCfg = Debug|x64 - {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x86.ActiveCfg = Debug|x64 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|Win32.ActiveCfg = Release|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64.ActiveCfg = Release|x64 - {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x86.ActiveCfg = Release|x64 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64 Setup.ActiveCfg = Release|x64 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x86 Setup.ActiveCfg = Release|Win32 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|Win32.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.Build.0 = Release|x64 - {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x86.ActiveCfg = Release|x64 + {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64 Setup.ActiveCfg = Release|x64 + {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64 Setup.Build.0 = Release|x64 + {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x86 Setup.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|Win32.ActiveCfg = Debug|Win32 {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|Win32.Build.0 = Debug|Win32 {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|x64.ActiveCfg = Debug|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|x64.Build.0 = Debug|x64 - {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|x86.ActiveCfg = Debug|x64 + {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {70564D74-199A-4452-9C60-19ED5F242F0D}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|Win32.ActiveCfg = Release|Win32 {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|Win32.Build.0 = Release|Win32 {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|x64.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|x64.Build.0 = Release|x64 - {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|x86.ActiveCfg = Release|x64 + {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|x64 Setup.ActiveCfg = Release|x64 + {70564D74-199A-4452-9C60-19ED5F242F0D}.Release|x86 Setup.ActiveCfg = Release|Win32 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|Win32.ActiveCfg = Release|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x64.ActiveCfg = Release|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x64.Build.0 = Release|x64 - {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x86.ActiveCfg = Release|x64 + {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x64 Setup.ActiveCfg = Release|x64 + {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x64 Setup.Build.0 = Release|x64 + {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.All|x86 Setup.ActiveCfg = Release|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|Win32.ActiveCfg = Debug|Win32 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|Win32.Build.0 = Debug|Win32 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|x64.ActiveCfg = Debug|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|x64.Build.0 = Debug|x64 - {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|x86.ActiveCfg = Debug|x64 + {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|Win32.ActiveCfg = Release|Win32 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|Win32.Build.0 = Release|Win32 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|x64.ActiveCfg = Release|x64 {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|x64.Build.0 = Release|x64 - {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|x86.ActiveCfg = Release|x64 + {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|x64 Setup.ActiveCfg = Release|x64 + {3C977801-FE88-48F2-83D3-FA2EBFF6688E}.Release|x86 Setup.ActiveCfg = Release|Win32 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|Win32.ActiveCfg = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|Win32.Build.0 = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x64.ActiveCfg = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x64.Build.0 = Release|x64 - {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x86.ActiveCfg = Release|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x64 Setup.ActiveCfg = Release|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x64 Setup.Build.0 = Release|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x86 Setup.ActiveCfg = Release|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.All|x86 Setup.Build.0 = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|Win32.ActiveCfg = Debug|Win32 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|Win32.Build.0 = Debug|Win32 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x64.ActiveCfg = Debug|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x64.Build.0 = Debug|x64 - {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x86.ActiveCfg = Debug|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|Win32.ActiveCfg = Release|Win32 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|Win32.Build.0 = Release|Win32 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x64.ActiveCfg = Release|x64 {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x64.Build.0 = Release|x64 - {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x86.ActiveCfg = Release|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x64 Setup.ActiveCfg = Release|x64 + {0382E8FD-CFDC-41C0-8B03-792C7C84FC31}.Release|x86 Setup.ActiveCfg = Release|Win32 {432DB165-1EB2-4781-A9C0-71E62610B20A}.All|Win32.ActiveCfg = Release|x64 {432DB165-1EB2-4781-A9C0-71E62610B20A}.All|x64.ActiveCfg = Release|x64 - {432DB165-1EB2-4781-A9C0-71E62610B20A}.All|x86.ActiveCfg = Release|x64 + {432DB165-1EB2-4781-A9C0-71E62610B20A}.All|x64 Setup.ActiveCfg = Release|x64 + {432DB165-1EB2-4781-A9C0-71E62610B20A}.All|x86 Setup.ActiveCfg = Release|x64 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|Win32.ActiveCfg = Debug|Win32 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|Win32.Build.0 = Debug|Win32 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|x64.ActiveCfg = Debug|x64 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|x64.Build.0 = Debug|x64 - {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|x86.ActiveCfg = Debug|x64 + {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {432DB165-1EB2-4781-A9C0-71E62610B20A}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|Win32.ActiveCfg = Release|Win32 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|Win32.Build.0 = Release|Win32 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|x64.ActiveCfg = Release|x64 {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|x64.Build.0 = Release|x64 - {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|x86.ActiveCfg = Release|x64 + {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|x64 Setup.ActiveCfg = Release|x64 + {432DB165-1EB2-4781-A9C0-71E62610B20A}.Release|x86 Setup.ActiveCfg = Release|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|Win32.ActiveCfg = Release|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|Win32.Build.0 = Release|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x64.ActiveCfg = Release|Win32 - {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x86.ActiveCfg = Release|x64 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x64 Setup.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x86 Setup.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.All|x86 Setup.Build.0 = Release|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.ActiveCfg = Debug|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.Build.0 = Debug|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64.ActiveCfg = Debug|x64 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64.Build.0 = Debug|x64 - {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x86.ActiveCfg = Debug|x64 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.ActiveCfg = Release|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.Build.0 = Release|Win32 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.ActiveCfg = Release|x64 {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.Build.0 = Release|x64 - {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x86.ActiveCfg = Release|x64 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64 Setup.ActiveCfg = Release|x64 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x86 Setup.ActiveCfg = Release|Win32 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|Win32.ActiveCfg = Release|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|x64.ActiveCfg = Release|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|x64.Build.0 = Release|x64 - {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|x86.ActiveCfg = Release|x64 + {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|x64 Setup.ActiveCfg = Release|x64 + {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|x64 Setup.Build.0 = Release|x64 + {D5C87B19-150D-4EF3-A671-96589BD2D14A}.All|x86 Setup.ActiveCfg = Release|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|Win32.ActiveCfg = Debug|Win32 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|Win32.Build.0 = Debug|Win32 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|x64.ActiveCfg = Debug|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|x64.Build.0 = Debug|x64 - {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|x86.ActiveCfg = Debug|x64 + {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|Win32.ActiveCfg = Release|Win32 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|Win32.Build.0 = Release|Win32 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|x64.ActiveCfg = Release|x64 {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|x64.Build.0 = Release|x64 - {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|x86.ActiveCfg = Release|x64 + {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|x64 Setup.ActiveCfg = Release|x64 + {D5C87B19-150D-4EF3-A671-96589BD2D14A}.Release|x86 Setup.ActiveCfg = Release|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|Win32.ActiveCfg = Release|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|Win32.Build.0 = Release|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|x64.ActiveCfg = Release|Win32 - {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|x86.ActiveCfg = Release|x64 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|x64 Setup.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|x86 Setup.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.All|x86 Setup.Build.0 = Release|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|Win32.ActiveCfg = Debug|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|Win32.Build.0 = Debug|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|x64.ActiveCfg = Debug|x64 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|x64.Build.0 = Debug|x64 - {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|x86.ActiveCfg = Debug|x64 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|Win32.ActiveCfg = Release|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|Win32.Build.0 = Release|Win32 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|x64.ActiveCfg = Release|x64 {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|x64.Build.0 = Release|x64 - {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|x86.ActiveCfg = Release|x64 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|x64 Setup.ActiveCfg = Release|x64 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|x86 Setup.ActiveCfg = Release|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|Win32.ActiveCfg = Release|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|Win32.Build.0 = Release|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|x64.ActiveCfg = Release|Win32 - {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|x86.ActiveCfg = Release|x64 + {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|x64 Setup.ActiveCfg = Release|Win32 + {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|x86 Setup.ActiveCfg = Release|Win32 + {B5A00BFA-6083-4FAE-A097-71642D6473B5}.All|x86 Setup.Build.0 = Release|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|Win32.ActiveCfg = Debug|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|Win32.Build.0 = Debug|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|x64.ActiveCfg = Debug|x64 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|x64.Build.0 = Debug|x64 - {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|x86.ActiveCfg = Debug|x64 + {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|Win32.ActiveCfg = Release|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|Win32.Build.0 = Release|Win32 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|x64.ActiveCfg = Release|x64 {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|x64.Build.0 = Release|x64 - {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|x86.ActiveCfg = Release|x64 + {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|x64 Setup.ActiveCfg = Release|x64 + {B5A00BFA-6083-4FAE-A097-71642D6473B5}.Release|x86 Setup.ActiveCfg = Release|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|Win32.ActiveCfg = Release|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|Win32.Build.0 = Release|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|x64.ActiveCfg = Release|Win32 - {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|x86.ActiveCfg = Release|x64 + {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|x64 Setup.ActiveCfg = Release|Win32 + {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|x86 Setup.ActiveCfg = Release|Win32 + {1C320193-46A6-4B34-9C56-8AB584FC1B56}.All|x86 Setup.Build.0 = Release|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|Win32.ActiveCfg = Debug|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|Win32.Build.0 = Debug|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|x64.ActiveCfg = Debug|x64 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|x64.Build.0 = Debug|x64 - {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|x86.ActiveCfg = Debug|x64 + {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|Win32.ActiveCfg = Release|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|Win32.Build.0 = Release|Win32 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|x64.ActiveCfg = Release|x64 {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|x64.Build.0 = Release|x64 - {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|x86.ActiveCfg = Release|x64 + {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|x64 Setup.ActiveCfg = Release|x64 + {1C320193-46A6-4B34-9C56-8AB584FC1B56}.Release|x86 Setup.ActiveCfg = Release|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|Win32.ActiveCfg = Release|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|Win32.Build.0 = Release|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|x64.ActiveCfg = Release|Win32 - {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|x86.ActiveCfg = Release|x64 + {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|x64 Setup.ActiveCfg = Release|Win32 + {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|x86 Setup.ActiveCfg = Release|Win32 + {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.All|x86 Setup.Build.0 = Release|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|Win32.ActiveCfg = Debug|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|Win32.Build.0 = Debug|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|x64.ActiveCfg = Debug|x64 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|x64.Build.0 = Debug|x64 - {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|x86.ActiveCfg = Debug|x64 + {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|Win32.ActiveCfg = Release|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|Win32.Build.0 = Release|Win32 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|x64.ActiveCfg = Release|x64 {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|x64.Build.0 = Release|x64 - {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|x86.ActiveCfg = Release|x64 + {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|x64 Setup.ActiveCfg = Release|x64 + {72782932-37CC-46AE-8C7F-9A7B1A6EE108}.Release|x86 Setup.ActiveCfg = Release|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|Win32.ActiveCfg = Release|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|Win32.Build.0 = Release|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|x64.ActiveCfg = Release|Win32 - {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|x86.ActiveCfg = Release|x64 + {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|x64 Setup.ActiveCfg = Release|Win32 + {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|x86 Setup.ActiveCfg = Release|Win32 + {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.All|x86 Setup.Build.0 = Release|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|Win32.ActiveCfg = Debug|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|Win32.Build.0 = Debug|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|x64.ActiveCfg = Debug|x64 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|x64.Build.0 = Debug|x64 - {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|x86.ActiveCfg = Debug|x64 + {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|Win32.ActiveCfg = Release|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|Win32.Build.0 = Release|Win32 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|x64.ActiveCfg = Release|x64 {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|x64.Build.0 = Release|x64 - {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|x86.ActiveCfg = Release|x64 + {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|x64 Setup.ActiveCfg = Release|x64 + {12A49562-BAB9-43A3-A21D-15B60BBB4C31}.Release|x86 Setup.ActiveCfg = Release|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|Win32.ActiveCfg = Release|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|Win32.Build.0 = Release|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|x64.ActiveCfg = Release|Win32 - {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|x86.ActiveCfg = Release|x64 + {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|x64 Setup.ActiveCfg = Release|Win32 + {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|x86 Setup.ActiveCfg = Release|Win32 + {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.All|x86 Setup.Build.0 = Release|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|Win32.ActiveCfg = Debug|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|Win32.Build.0 = Debug|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|x64.ActiveCfg = Debug|x64 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|x64.Build.0 = Debug|x64 - {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|x86.ActiveCfg = Debug|x64 + {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|Win32.ActiveCfg = Release|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|Win32.Build.0 = Release|Win32 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|x64.ActiveCfg = Release|x64 {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|x64.Build.0 = Release|x64 - {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|x86.ActiveCfg = Release|x64 + {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|x64 Setup.ActiveCfg = Release|x64 + {A9EDAC04-6A5F-4BA7-BC0D-CCE7B255B6EA}.Release|x86 Setup.ActiveCfg = Release|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.All|Win32.ActiveCfg = Release|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.All|Win32.Build.0 = Release|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.All|x64.ActiveCfg = Release|Win32 - {504B3154-7A4F-459D-9877-B951021C3F1F}.All|x86.ActiveCfg = Release|x64 + {504B3154-7A4F-459D-9877-B951021C3F1F}.All|x64 Setup.ActiveCfg = Release|Win32 + {504B3154-7A4F-459D-9877-B951021C3F1F}.All|x86 Setup.ActiveCfg = Release|Win32 + {504B3154-7A4F-459D-9877-B951021C3F1F}.All|x86 Setup.Build.0 = Release|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|Win32.ActiveCfg = Debug|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|Win32.Build.0 = Debug|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|x64.ActiveCfg = Debug|x64 {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|x64.Build.0 = Debug|x64 - {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|x86.ActiveCfg = Debug|x64 + {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {504B3154-7A4F-459D-9877-B951021C3F1F}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|Win32.ActiveCfg = Release|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|Win32.Build.0 = Release|Win32 {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|x64.ActiveCfg = Release|x64 {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|x64.Build.0 = Release|x64 - {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|x86.ActiveCfg = Release|x64 + {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|x64 Setup.ActiveCfg = Release|x64 + {504B3154-7A4F-459D-9877-B951021C3F1F}.Release|x86 Setup.ActiveCfg = Release|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|Win32.ActiveCfg = Release|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|Win32.Build.0 = Release|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|x64.ActiveCfg = Release|Win32 - {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|x86.ActiveCfg = Release|x64 + {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|x64 Setup.ActiveCfg = Release|Win32 + {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|x86 Setup.ActiveCfg = Release|Win32 + {746F3632-5BB2-4570-9453-31D6D58A7D8E}.All|x86 Setup.Build.0 = Release|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|Win32.ActiveCfg = Debug|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|Win32.Build.0 = Debug|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|x64.ActiveCfg = Debug|x64 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|x64.Build.0 = Debug|x64 - {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|x86.ActiveCfg = Debug|x64 + {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|Win32.ActiveCfg = Release|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|Win32.Build.0 = Release|Win32 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|x64.ActiveCfg = Release|x64 {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|x64.Build.0 = Release|x64 - {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|x86.ActiveCfg = Release|x64 + {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|x64 Setup.ActiveCfg = Release|x64 + {746F3632-5BB2-4570-9453-31D6D58A7D8E}.Release|x86 Setup.ActiveCfg = Release|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|Win32.ActiveCfg = Release|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|Win32.Build.0 = Release|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|x64.ActiveCfg = Release|Win32 - {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|x86.ActiveCfg = Release|x64 + {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|x64 Setup.ActiveCfg = Release|Win32 + {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|x86 Setup.ActiveCfg = Release|Win32 + {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.All|x86 Setup.Build.0 = Release|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|Win32.ActiveCfg = Debug|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|Win32.Build.0 = Debug|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|x64.ActiveCfg = Debug|x64 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|x64.Build.0 = Debug|x64 - {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|x86.ActiveCfg = Debug|x64 + {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|Win32.ActiveCfg = Release|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|Win32.Build.0 = Release|Win32 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|x64.ActiveCfg = Release|x64 {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|x64.Build.0 = Release|x64 - {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|x86.ActiveCfg = Release|x64 + {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|x64 Setup.ActiveCfg = Release|x64 + {DEB01ACB-D65F-4A62-AED9-58C1054499E9}.Release|x86 Setup.ActiveCfg = Release|Win32 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|Win32.ActiveCfg = Release|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|x64.ActiveCfg = Release|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|x64.Build.0 = Release|x64 - {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|x86.ActiveCfg = Release|x64 + {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|x64 Setup.ActiveCfg = Release|x64 + {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|x64 Setup.Build.0 = Release|x64 + {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.All|x86 Setup.ActiveCfg = Release|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|Win32.ActiveCfg = Debug|Win32 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|Win32.Build.0 = Debug|Win32 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|x64.ActiveCfg = Debug|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|x64.Build.0 = Debug|x64 - {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|x86.ActiveCfg = Debug|x64 + {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|Win32.ActiveCfg = Release|Win32 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|Win32.Build.0 = Release|Win32 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|x64.ActiveCfg = Release|x64 {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|x64.Build.0 = Release|x64 - {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|x86.ActiveCfg = Release|x64 + {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|x64 Setup.ActiveCfg = Release|x64 + {D07C378A-F5F7-438F-ADF3-4AC4FB1883CD}.Release|x86 Setup.ActiveCfg = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|Win32.ActiveCfg = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|Win32.Build.0 = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|x64.ActiveCfg = Release|Win32 - {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|x86.ActiveCfg = Release|Win32 + {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|x64 Setup.ActiveCfg = Release|Win32 + {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|x86 Setup.ActiveCfg = Release|Win32 + {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.All|x86 Setup.Build.0 = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|Win32.ActiveCfg = Debug|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|Win32.Build.0 = Debug|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|x64.ActiveCfg = Debug|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|x64.Build.0 = Debug|Win32 - {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|x86.ActiveCfg = Debug|Win32 + {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|Win32.ActiveCfg = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|Win32.Build.0 = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|x64.ActiveCfg = Release|Win32 {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|x64.Build.0 = Release|Win32 - {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|x86.ActiveCfg = Release|Win32 + {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|x64 Setup.ActiveCfg = Release|Win32 + {FFF82F9B-6A2B-4BE3-95D8-DC5A4FC71E19}.Release|x86 Setup.ActiveCfg = Release|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|Win32.ActiveCfg = Release|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|x64.ActiveCfg = Release|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|x64.Build.0 = Release|x64 - {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|x86.ActiveCfg = Release|x64 + {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|x64 Setup.ActiveCfg = Release|x64 + {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|x64 Setup.Build.0 = Release|x64 + {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.All|x86 Setup.ActiveCfg = Release|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|Win32.ActiveCfg = Debug|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|Win32.Build.0 = Debug|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|x64.ActiveCfg = Debug|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|x64.Build.0 = Debug|x64 - {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|x86.ActiveCfg = Debug|x64 + {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|Win32.ActiveCfg = Release|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|Win32.Build.0 = Release|Win32 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|x64.ActiveCfg = Release|x64 {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|x64.Build.0 = Release|x64 - {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|x86.ActiveCfg = Release|x64 + {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|x64 Setup.ActiveCfg = Release|x64 + {ABB71A76-42B0-47A4-973A-42E3D920C6FD}.Release|x86 Setup.ActiveCfg = Release|Win32 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|Win32.ActiveCfg = Release Passthrough|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|x64.ActiveCfg = Release Passthrough|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|x64.Build.0 = Release Passthrough|x64 - {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|x86.ActiveCfg = Release Passthrough|x64 + {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|x64 Setup.ActiveCfg = Release Passthrough|x64 + {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|x64 Setup.Build.0 = Release Passthrough|x64 + {4D418176-3B33-47E6-A63E-01BA34ADD21C}.All|x86 Setup.ActiveCfg = Release Passthrough|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|Win32.ActiveCfg = Debug|Win32 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|Win32.Build.0 = Debug|Win32 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|x64.ActiveCfg = Debug|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|x64.Build.0 = Debug|x64 - {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|x86.ActiveCfg = Debug|x64 + {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|Win32.ActiveCfg = Release|Win32 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|Win32.Build.0 = Release|Win32 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|x64.ActiveCfg = Release|x64 {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|x64.Build.0 = Release|x64 - {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|x86.ActiveCfg = Release|x64 + {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|x64 Setup.ActiveCfg = Release|x64 + {4D418176-3B33-47E6-A63E-01BA34ADD21C}.Release|x86 Setup.ActiveCfg = Release|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|Win32.ActiveCfg = Release|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|Win32.Build.0 = Release|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|x64.ActiveCfg = Release|Win32 - {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|x86.ActiveCfg = Release|Win32 + {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|x64 Setup.ActiveCfg = Release|Win32 + {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|x86 Setup.ActiveCfg = Release|Win32 + {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.All|x86 Setup.Build.0 = Release|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Debug|Win32.ActiveCfg = Debug|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Debug|x64.ActiveCfg = Debug|Win32 - {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Debug|x86.ActiveCfg = Debug|Win32 + {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Release|Win32.ActiveCfg = Release|Win32 {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Release|x64.ActiveCfg = Release|Win32 - {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Release|x86.ActiveCfg = Release|Win32 + {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Release|x64 Setup.ActiveCfg = Release|Win32 + {7D3122C7-C9D0-3748-81F8-F0DDCB40BF5E}.Release|x86 Setup.ActiveCfg = Release|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|Win32.ActiveCfg = Release|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|x64.ActiveCfg = Release|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|x64.Build.0 = Release|x64 - {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|x86.ActiveCfg = Release|x64 + {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|x64 Setup.ActiveCfg = Release|x64 + {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|x64 Setup.Build.0 = Release|x64 + {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.All|x86 Setup.ActiveCfg = Release|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|Win32.ActiveCfg = Debug|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|Win32.Build.0 = Debug|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|x64.ActiveCfg = Debug|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|x64.Build.0 = Debug|x64 - {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|x86.ActiveCfg = Debug|x64 + {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|Win32.ActiveCfg = Release|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|Win32.Build.0 = Release|Win32 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|x64.ActiveCfg = Release|x64 {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|x64.Build.0 = Release|x64 - {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|x86.ActiveCfg = Release|x64 + {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|x64 Setup.ActiveCfg = Release|x64 + {EF300386-A8DF-4372-B6D8-FB9BFFCA9AED}.Release|x86 Setup.ActiveCfg = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|Win32.ActiveCfg = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|Win32.Build.0 = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|x64.ActiveCfg = Release|Win32 - {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|x86.ActiveCfg = Release|Win32 + {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|x64 Setup.ActiveCfg = Release|Win32 + {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|x86 Setup.ActiveCfg = Release|Win32 + {B808178B-82F0-4CF4-A2B1-921939FA24D0}.All|x86 Setup.Build.0 = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|Win32.ActiveCfg = Debug|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|Win32.Build.0 = Debug|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|x64.ActiveCfg = Debug|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|x64.Build.0 = Debug|Win32 - {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|x86.ActiveCfg = Debug|Win32 + {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|Win32.ActiveCfg = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|Win32.Build.0 = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|x64.ActiveCfg = Release|Win32 {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|x64.Build.0 = Release|Win32 - {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|x86.ActiveCfg = Release|Win32 + {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|x64 Setup.ActiveCfg = Release|Win32 + {B808178B-82F0-4CF4-A2B1-921939FA24D0}.Release|x86 Setup.ActiveCfg = Release|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|Win32.ActiveCfg = Release|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|x64.ActiveCfg = Release|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|x64.Build.0 = Release|x64 - {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|x86.ActiveCfg = Release|x64 + {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|x64 Setup.ActiveCfg = Release|x64 + {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|x64 Setup.Build.0 = Release|x64 + {9778F1C0-09BC-4698-8EBC-BD982247209A}.All|x86 Setup.ActiveCfg = Release|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|Win32.ActiveCfg = Debug|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|Win32.Build.0 = Debug|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|x64.ActiveCfg = Debug|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|x64.Build.0 = Debug|x64 - {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|x86.ActiveCfg = Debug|x64 + {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {9778F1C0-09BC-4698-8EBC-BD982247209A}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|Win32.ActiveCfg = Release|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|Win32.Build.0 = Release|Win32 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|x64.ActiveCfg = Release|x64 {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|x64.Build.0 = Release|x64 - {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|x86.ActiveCfg = Release|x64 + {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|x64 Setup.ActiveCfg = Release|x64 + {9778F1C0-09BC-4698-8EBC-BD982247209A}.Release|x86 Setup.ActiveCfg = Release|Win32 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|Win32.ActiveCfg = Release|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|x64.ActiveCfg = Release|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|x64.Build.0 = Release|x64 - {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|x86.ActiveCfg = Release|x64 + {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|x64 Setup.ActiveCfg = Release|x64 + {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|x64 Setup.Build.0 = Release|x64 + {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.All|x86 Setup.ActiveCfg = Release|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|Win32.ActiveCfg = Debug|Win32 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|Win32.Build.0 = Debug|Win32 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|x64.ActiveCfg = Debug|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|x64.Build.0 = Debug|x64 - {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|x86.ActiveCfg = Debug|x64 + {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|Win32.ActiveCfg = Release|Win32 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|Win32.Build.0 = Release|Win32 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|x64.ActiveCfg = Release|x64 {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|x64.Build.0 = Release|x64 - {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|x86.ActiveCfg = Release|x64 + {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|x64 Setup.ActiveCfg = Release|x64 + {AFA983D6-4569-4F88-BA94-555ED00FD9A8}.Release|x86 Setup.ActiveCfg = Release|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|Win32.ActiveCfg = Release|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|Win32.Build.0 = Release|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|x64.ActiveCfg = Release|Win32 - {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|x86.ActiveCfg = Release|x64 + {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|x64 Setup.ActiveCfg = Release|Win32 + {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|x86 Setup.ActiveCfg = Release|Win32 + {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.All|x86 Setup.Build.0 = Release|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|Win32.ActiveCfg = Debug|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|Win32.Build.0 = Debug|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|x64.ActiveCfg = Debug|x64 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|x64.Build.0 = Debug|x64 - {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|x86.ActiveCfg = Debug|x64 + {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|Win32.ActiveCfg = Release|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|Win32.Build.0 = Release|Win32 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|x64.ActiveCfg = Release|x64 {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|x64.Build.0 = Release|x64 - {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|x86.ActiveCfg = Release|x64 + {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|x64 Setup.ActiveCfg = Release|x64 + {56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|x86 Setup.ActiveCfg = Release|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|Win32.ActiveCfg = Release|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|Win32.Build.0 = Release|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|x64.ActiveCfg = Release|Win32 - {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|x86.ActiveCfg = Release|x64 + {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|x64 Setup.ActiveCfg = Release|Win32 + {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|x86 Setup.ActiveCfg = Release|Win32 + {990BAA76-89D3-4E38-8479-C7B28784EFC8}.All|x86 Setup.Build.0 = Release|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|Win32.ActiveCfg = Debug|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|Win32.Build.0 = Debug|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|x64.ActiveCfg = Debug|x64 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|x64.Build.0 = Debug|x64 - {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|x86.ActiveCfg = Debug|x64 + {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|Win32.ActiveCfg = Release|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|Win32.Build.0 = Release|Win32 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|x64.ActiveCfg = Release|x64 {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|x64.Build.0 = Release|x64 - {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|x86.ActiveCfg = Release|x64 + {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|x64 Setup.ActiveCfg = Release|x64 + {990BAA76-89D3-4E38-8479-C7B28784EFC8}.Release|x86 Setup.ActiveCfg = Release|Win32 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|Win32.ActiveCfg = Release|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|x64.ActiveCfg = Release|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|x64.Build.0 = Release|x64 - {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|x86.ActiveCfg = Release|x64 + {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|x64 Setup.ActiveCfg = Release|x64 + {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|x64 Setup.Build.0 = Release|x64 + {1E21AFE0-6FDB-41D2-942D-863607C24B91}.All|x86 Setup.ActiveCfg = Release|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|Win32.ActiveCfg = Debug|Win32 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|Win32.Build.0 = Debug|Win32 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|x64.ActiveCfg = Debug|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|x64.Build.0 = Debug|x64 - {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|x86.ActiveCfg = Debug|x64 + {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|Win32.ActiveCfg = Release|Win32 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|Win32.Build.0 = Release|Win32 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|x64.ActiveCfg = Release|x64 {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|x64.Build.0 = Release|x64 - {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|x86.ActiveCfg = Release|x64 + {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|x64 Setup.ActiveCfg = Release|x64 + {1E21AFE0-6FDB-41D2-942D-863607C24B91}.Release|x86 Setup.ActiveCfg = Release|Win32 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|Win32.ActiveCfg = Release|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|x64.ActiveCfg = Release|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|x64.Build.0 = Release|x64 - {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|x86.ActiveCfg = Release|x64 + {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|x64 Setup.ActiveCfg = Release|x64 + {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|x64 Setup.Build.0 = Release|x64 + {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.All|x86 Setup.ActiveCfg = Release|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|Win32.ActiveCfg = Debug|Win32 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|Win32.Build.0 = Debug|Win32 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|x64.ActiveCfg = Debug|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|x64.Build.0 = Debug|x64 - {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|x86.ActiveCfg = Debug|x64 + {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|Win32.ActiveCfg = Release|Win32 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|Win32.Build.0 = Release|Win32 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|x64.ActiveCfg = Release|x64 {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|x64.Build.0 = Release|x64 - {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|x86.ActiveCfg = Release|x64 + {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|x64 Setup.ActiveCfg = Release|x64 + {2E250296-0C08-4342-9C8A-BCBDD0E7DF65}.Release|x86 Setup.ActiveCfg = Release|Win32 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|Win32.ActiveCfg = Release|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|x64.ActiveCfg = Release|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|x64.Build.0 = Release|x64 - {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|x86.ActiveCfg = Release|x64 + {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|x64 Setup.ActiveCfg = Release|x64 + {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|x64 Setup.Build.0 = Release|x64 + {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.All|x86 Setup.ActiveCfg = Release|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|Win32.ActiveCfg = Debug|Win32 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|Win32.Build.0 = Debug|Win32 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|x64.ActiveCfg = Debug|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|x64.Build.0 = Debug|x64 - {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|x86.ActiveCfg = Debug|x64 + {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|Win32.ActiveCfg = Release|Win32 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|Win32.Build.0 = Release|Win32 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|x64.ActiveCfg = Release|x64 {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|x64.Build.0 = Release|x64 - {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|x86.ActiveCfg = Release|x64 + {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|x64 Setup.ActiveCfg = Release|x64 + {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}.Release|x86 Setup.ActiveCfg = Release|Win32 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|Win32.ActiveCfg = Release|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|x64.ActiveCfg = Release|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|x64.Build.0 = Release|x64 - {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|x86.ActiveCfg = Release|x64 + {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|x64 Setup.ActiveCfg = Release|x64 + {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|x64 Setup.Build.0 = Release|x64 + {B4B62169-5AD4-4559-8707-3D933AC5DB39}.All|x86 Setup.ActiveCfg = Release|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|Win32.ActiveCfg = Debug|Win32 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|Win32.Build.0 = Debug|Win32 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|x64.ActiveCfg = Debug|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|x64.Build.0 = Debug|x64 - {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|x86.ActiveCfg = Debug|x64 + {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|Win32.ActiveCfg = Release|Win32 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|Win32.Build.0 = Release|Win32 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|x64.ActiveCfg = Release|x64 {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|x64.Build.0 = Release|x64 - {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|x86.ActiveCfg = Release|x64 + {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|x64 Setup.ActiveCfg = Release|x64 + {B4B62169-5AD4-4559-8707-3D933AC5DB39}.Release|x86 Setup.ActiveCfg = Release|Win32 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|Win32.ActiveCfg = Release|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|x64.ActiveCfg = Release|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|x64.Build.0 = Release|x64 - {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|x86.ActiveCfg = Release|x64 + {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|x64 Setup.ActiveCfg = Release|x64 + {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|x64 Setup.Build.0 = Release|x64 + {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.All|x86 Setup.ActiveCfg = Release|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|Win32.ActiveCfg = Debug|Win32 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|Win32.Build.0 = Debug|Win32 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|x64.ActiveCfg = Debug|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|x64.Build.0 = Debug|x64 - {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|x86.ActiveCfg = Debug|x64 + {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|Win32.ActiveCfg = Release|Win32 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|Win32.Build.0 = Release|Win32 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|x64.ActiveCfg = Release|x64 {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|x64.Build.0 = Release|x64 - {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|x86.ActiveCfg = Release|x64 + {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|x64 Setup.ActiveCfg = Release|x64 + {25BD39B1-C8BF-4676-A738-9CABD9C6BC79}.Release|x86 Setup.ActiveCfg = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|Win32.ActiveCfg = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|Win32.Build.0 = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|x64.ActiveCfg = Release|Win32 - {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|x86.ActiveCfg = Release|Win32 + {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|x64 Setup.ActiveCfg = Release|Win32 + {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|x86 Setup.ActiveCfg = Release|Win32 + {D578E676-7EC8-4548-BD8B-845C635F14AD}.All|x86 Setup.Build.0 = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|Win32.ActiveCfg = Debug|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|Win32.Build.0 = Debug|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|x64.ActiveCfg = Debug|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|x64.Build.0 = Debug|Win32 - {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|x86.ActiveCfg = Debug|Win32 + {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|x64 Setup.ActiveCfg = Debug|Win32 + {D578E676-7EC8-4548-BD8B-845C635F14AD}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|Win32.ActiveCfg = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|Win32.Build.0 = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|x64.ActiveCfg = Release|Win32 {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|x64.Build.0 = Release|Win32 - {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|x86.ActiveCfg = Release|Win32 + {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|x64 Setup.ActiveCfg = Release|Win32 + {D578E676-7EC8-4548-BD8B-845C635F14AD}.Release|x86 Setup.ActiveCfg = Release|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|Win32.ActiveCfg = Release|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64.ActiveCfg = Release|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64.Build.0 = Release|x64 - {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x86.ActiveCfg = Release|x64 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64 Setup.ActiveCfg = Release|x64 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64 Setup.Build.0 = Release|x64 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x86 Setup.ActiveCfg = Release|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Win32.ActiveCfg = Debug|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Win32.Build.0 = Debug|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64.ActiveCfg = Debug|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64.Build.0 = Debug|x64 - {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x86.ActiveCfg = Debug|x64 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Win32.ActiveCfg = Release|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Win32.Build.0 = Release|Win32 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.ActiveCfg = Release|x64 {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.Build.0 = Release|x64 - {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x86.ActiveCfg = Release|x64 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64 Setup.ActiveCfg = Release|x64 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x86 Setup.ActiveCfg = Release|Win32 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|Win32.ActiveCfg = Release|x64 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|x64.ActiveCfg = Release|x64 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|x64.Build.0 = Release|x64 - {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|x86.ActiveCfg = Release|x64 + {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|x64 Setup.ActiveCfg = Release|x64 + {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|x64 Setup.Build.0 = Release|x64 + {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.All|x86 Setup.ActiveCfg = Release|x64 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Debug|Win32.ActiveCfg = Debug|Win32 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Debug|x64.ActiveCfg = Debug|x64 - {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Debug|x86.ActiveCfg = Debug|x64 + {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Release|Win32.ActiveCfg = Release|Win32 {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Release|x64.ActiveCfg = Release|x64 - {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Release|x86.ActiveCfg = Release|x64 + {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Release|x64 Setup.ActiveCfg = Release|x64 + {B889A18E-70A7-44B5-B2C9-47798D4F43B3}.Release|x86 Setup.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|Win32.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|Win32.Build.0 = Release|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|x64.ActiveCfg = Release|Win32 - {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|x86.ActiveCfg = Release|x64 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|x64 Setup.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|x86 Setup.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|x86 Setup.Build.0 = Release|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|Win32.ActiveCfg = Debug|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|x64.ActiveCfg = Debug|x64 - {05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|x86.ActiveCfg = Debug|x64 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|Win32.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|x64.ActiveCfg = Release|x64 - {05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|x86.ActiveCfg = Release|x64 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|x64 Setup.ActiveCfg = Release|x64 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|x86 Setup.ActiveCfg = Release|Win32 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|Win32.ActiveCfg = Release|x64 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|x64.ActiveCfg = Release|x64 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|x64.Build.0 = Release|x64 - {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|x86.ActiveCfg = Release|x64 + {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|x64 Setup.ActiveCfg = Release|x64 + {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|x64 Setup.Build.0 = Release|x64 + {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.All|x86 Setup.ActiveCfg = Release|x64 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Debug|Win32.ActiveCfg = Debug|Win32 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Debug|x64.ActiveCfg = Debug|x64 - {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Debug|x86.ActiveCfg = Debug|x64 + {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Debug|x86 Setup.ActiveCfg = Debug|Win32 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Release|Win32.ActiveCfg = Release|Win32 {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Release|x64.ActiveCfg = Release|x64 - {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Release|x86.ActiveCfg = Release|x64 + {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Release|x64 Setup.ActiveCfg = Release|x64 + {5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}.Release|x86 Setup.ActiveCfg = Release|Win32 {47213370-B933-487D-9F45-BCA26D7E2B6F}.All|Win32.ActiveCfg = Release|x86 {47213370-B933-487D-9F45-BCA26D7E2B6F}.All|x64.ActiveCfg = Release|x86 - {47213370-B933-487D-9F45-BCA26D7E2B6F}.All|x86.ActiveCfg = Release|x86 - {47213370-B933-487D-9F45-BCA26D7E2B6F}.All|x86.Build.0 = Release|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.All|x64 Setup.ActiveCfg = Release|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.All|x86 Setup.ActiveCfg = Release|x86 {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|Win32.ActiveCfg = Debug|x86 {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|x64.ActiveCfg = Debug|x64 - {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|x86.ActiveCfg = Debug|x86 - {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|x86.Build.0 = Debug|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|x64 Setup.Build.0 = Debug|x64 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|x86 Setup.ActiveCfg = Debug|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Debug|x86 Setup.Build.0 = Debug|x86 {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|Win32.ActiveCfg = Release|x86 {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|x64.ActiveCfg = Release|x64 - {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|x86.ActiveCfg = Release|x86 - {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|x86.Build.0 = Release|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|x64 Setup.ActiveCfg = Release|x64 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|x64 Setup.Build.0 = Release|x64 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|x86 Setup.ActiveCfg = Release|x86 + {47213370-B933-487D-9F45-BCA26D7E2B6F}.Release|x86 Setup.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.2010.vcxproj b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.2010.vcxproj index ca533a4cfa..7028e53447 100644 --- a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.2010.vcxproj +++ b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.2010.vcxproj @@ -189,6 +189,9 @@ {b4b62169-5ad4-4559-8707-3d933ac5db39} + + {df018947-0fff-4eb3-bdee-441dc81da7a4} + {70a49bc2-7500-41d0-b75d-edcc5be987a0} From 36f8385bc85b4a34a9787fc0fde7c9c8f0b987e9 Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Tue, 12 Oct 2010 13:19:48 -0400 Subject: [PATCH 028/230] mod_sangoma_codec: update stats to include more verbose rtp tx/rx format information --- .../mod_sangoma_codec/mod_sangoma_codec.c | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c b/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c index 697134b1c8..19f460be31 100644 --- a/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c +++ b/src/mod/codecs/mod_sangoma_codec/mod_sangoma_codec.c @@ -898,37 +898,40 @@ SWITCH_STANDARD_API(sangoma_function) if (sess->encoder.rxrtp) { stats = switch_rtp_get_stats(sess->encoder.rxrtp, NULL); - stream->write_function(stream, "=== Encoder ===\n"); + stream->write_function(stream, "=== %s Encoder ===\n", sess->impl->iananame); - stream->write_function(stream, "Remote address: %s:%d\n\n", switch_rtp_get_remote_host(sess->encoder.rxrtp), switch_rtp_get_remote_port(sess->encoder.rxrtp)); + stream->write_function(stream, "Tx ULAW from %d.%d.%d.%d:%d to %d.%d.%d.%d:%d\n\n", SNGTC_NIPV4(sess->encoder.reply.a.host_ip), sess->encoder.reply.a.host_udp_port, + SNGTC_NIPV4(sess->encoder.reply.a.codec_ip), sess->encoder.reply.a.codec_udp_port); + stream->write_function(stream, "Rx %s at %d.%d.%d.%d:%d from %d.%d.%d.%d:%d\n\n", sess->impl->iananame, SNGTC_NIPV4(sess->encoder.reply.b.host_ip), sess->encoder.reply.b.host_udp_port, + SNGTC_NIPV4(sess->encoder.reply.b.codec_ip), sess->encoder.reply.b.codec_udp_port); - stream->write_function(stream, "-- Encoder Inbound Stats --\n"); + + stream->write_function(stream, "-- Inbound Stats --\n"); stream->write_function(stream, "Rx Discarded: %lu\n", sess->encoder.rxdiscarded); sangoma_print_stats(stream, &stats->inbound); stats = switch_rtp_get_stats(sess->encoder.txrtp, NULL); - stream->write_function(stream, "-- Encoder Outbound Stats --\n"); + stream->write_function(stream, "-- Outbound Stats --\n"); sangoma_print_stats(stream, &stats->outbound); - } else { - stream->write_function(stream, "\n=== No Encoder ===\n\n"); } if (sess->decoder.rxrtp) { stats = switch_rtp_get_stats(sess->decoder.rxrtp, NULL); - stream->write_function(stream, "=== Decoder ===\n"); - stream->write_function(stream, "Remote address: %s:%d\n\n", switch_rtp_get_remote_host(sess->decoder.rxrtp), switch_rtp_get_remote_port(sess->decoder.rxrtp)); + stream->write_function(stream, "=== %s Decoder ===\n", sess->impl->iananame); + stream->write_function(stream, "Tx %s from %d.%d.%d.%d:%d to %d.%d.%d.%d:%d\n\n", sess->impl->iananame, SNGTC_NIPV4(sess->decoder.reply.a.host_ip), sess->decoder.reply.a.host_udp_port, + SNGTC_NIPV4(sess->decoder.reply.a.codec_ip), sess->decoder.reply.a.codec_udp_port); + stream->write_function(stream, "Rx ULAW at %d.%d.%d.%d:%d from %d.%d.%d.%d:%d\n\n", SNGTC_NIPV4(sess->decoder.reply.b.host_ip), sess->decoder.reply.b.host_udp_port, + SNGTC_NIPV4(sess->decoder.reply.b.codec_ip), sess->decoder.reply.b.codec_udp_port); - stream->write_function(stream, "-- Decoder Inbound Stats --\n"); + stream->write_function(stream, "-- Inbound Stats --\n"); stream->write_function(stream, "Rx Discarded: %lu\n", sess->decoder.rxdiscarded); sangoma_print_stats(stream, &stats->inbound); stats = switch_rtp_get_stats(sess->decoder.txrtp, NULL); - stream->write_function(stream, "-- Decoder Outbound Stats --\n"); + stream->write_function(stream, "-- Outbound Stats --\n"); sangoma_print_stats(stream, &stats->outbound); - } else { - stream->write_function(stream, "\n=== No Decoder ===\n\n"); } } else if (!strcasecmp(argv[0], "debug")) { struct sangoma_transcoding_session *sess; From 60c21ddbc2b682fb1c41c7826969de112dd15b19 Mon Sep 17 00:00:00 2001 From: Michal Bielicki Date: Thu, 14 Oct 2010 18:59:42 +0200 Subject: [PATCH 029/230] added amrwb to debian packages and moved from openzap to freetdm --- .../freeswitch-codec-passthru-amrwb.install | 1 + debian/freeswitch-freetdm.conffiles | 6 + debian/freeswitch-freetdm.debhelper.log | 4 + debian/freeswitch-freetdm.install | 10 + .../doc/freeswitch-freetdm/changelog.Debian | 799 ++++++++++++++++++ .../share/doc/freeswitch-freetdm/copyright | 51 ++ 6 files changed, 871 insertions(+) create mode 100644 debian/freeswitch-codec-passthru-amrwb.install create mode 100644 debian/freeswitch-freetdm.conffiles create mode 100644 debian/freeswitch-freetdm.debhelper.log create mode 100644 debian/freeswitch-freetdm.install create mode 100644 debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/changelog.Debian create mode 100644 debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/copyright diff --git a/debian/freeswitch-codec-passthru-amrwb.install b/debian/freeswitch-codec-passthru-amrwb.install new file mode 100644 index 0000000000..022462d001 --- /dev/null +++ b/debian/freeswitch-codec-passthru-amrwb.install @@ -0,0 +1 @@ +opt/freeswitch/mod/mod_amrwb.so* diff --git a/debian/freeswitch-freetdm.conffiles b/debian/freeswitch-freetdm.conffiles new file mode 100644 index 0000000000..f14e37f3db --- /dev/null +++ b/debian/freeswitch-freetdm.conffiles @@ -0,0 +1,6 @@ +opt/freeswitch/conf/tones.conf +opt/freeswitch/conf/autoload_configs/freetdm.conf.xml +opt/freeswitch/conf/pika.conf +opt/freeswitch/conf/freetdm.conf +opt/freeswitch/conf/wanpipe.conf +opt/freeswitch/conf/zt.conf diff --git a/debian/freeswitch-freetdm.debhelper.log b/debian/freeswitch-freetdm.debhelper.log new file mode 100644 index 0000000000..60ff8f97c9 --- /dev/null +++ b/debian/freeswitch-freetdm.debhelper.log @@ -0,0 +1,4 @@ +dh_installdirs +dh_installdocs +dh_installchangelogs +dh_installinit diff --git a/debian/freeswitch-freetdm.install b/debian/freeswitch-freetdm.install new file mode 100644 index 0000000000..cdca887dd3 --- /dev/null +++ b/debian/freeswitch-freetdm.install @@ -0,0 +1,10 @@ +opt/freeswitch/conf/tones.conf +opt/freeswitch/conf/autoload_configs/freetdm.conf.xml +opt/freeswitch/conf/pika.conf +opt/freeswitch/conf/freetdm.conf +opt/freeswitch/conf/wanpipe.conf +opt/freeswitch/conf/zt.conf +opt/freeswitch/lib/libfreetdm.so* +opt/freeswitch/mod/mod_freetdm.so* +opt/freeswitch/mod/ftm*.so* + diff --git a/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/changelog.Debian b/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/changelog.Debian new file mode 100644 index 0000000000..f35e7051b7 --- /dev/null +++ b/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/changelog.Debian @@ -0,0 +1,799 @@ +freeswitch (1.0.7-1headgit1) maverick; urgency=low + * upgrade: Added mod_amrwb + * upgrade version to 1.0.7 ... 1.0.6 was last realease + + -- Michal Bielicki Wed, 13 Oct 2010 22:58:48 -0200 +freeswitch (1.0.6-1ubuntu1) maverick; urgency=low + + [ Gabriel Gunderson ] + * upgrade: Added mod_callcenter and pulled out Python into its own + package. + + [ Mathieu Parent ] + * Updated Uploaders list + * Updated Standards-Version to 3.9.1 + + -- Mathieu Parent Thu, 23 Sep 2010 15:34:00 +0200 + +freeswitch (1.0.4-1ubuntu2) karmic; urgency=low + + * upgrade: Add more verbosity when building to make it easier to find build + errors. + * upgrade: Remove the requirement for EXACTLY automake1.9 and change it to + need atleast automake 1.9 + * upgrade: Add the modules (directory, cluechoo, and valet_parking) to the + build files. These are in the standard build, so they should be here too. + + -- William King Fri, 18 Dec 2009 14:27:42 -0800 + +freeswitch (1.0.4-1ubuntu1) karmic; urgency=low + + * upgrade: Pulling out the sounds into separate source files for easier management. + + -- William King Sun, 15 Nov 2009 16:38:13 -0800 + +freeswitch (1.0.4-1) unstable; urgency=low + + * new + + -- Mike Jerris Mon, 18 Feb 2009 17:39:00 -0500 + +freeswitch (1.0.3-1) unstable; urgency=low + + * build: add targets cd-sounds[-install] and cd-moh[-install] for 48k sounds (r:11151) + * build: autoconf detect odbc library (FSBUILD-8) + * build: fix sound install on windows build (r:11635,11638) + * build: fix configure --sysconfdir (FSBUILD-84) + * build: fix uclibc build (MODLANG-99) + * build: fix adduser in debian (FSBUILD-122, FSBUILD-102) + * core: fix buffering issues (r:11101,11145,11152-11157,11162,11191,11200) + * core: fix c leg no hangup when converting attended to blind transfer before b leg answers (MODENDP-165/r:11061) + * core: fix codec and media handling issues (r:11104) + * core: fix double close of file handles and add recording of native files (r:11108-11113,11482,11483) + * core: fix file resampling issue (r:11090) + * core: fix incorrect call progress timestamps in timetable (r:11186-11187/FSCORE-268) + * core: fix media handling issues (r:11079-11082) + * core: fix multiple 2833 dtmf handling issues (r:11149,11261,11262,11266,11293,11294,11338/FSCORE-266,FSCORE-273) + * core: send more event types verbos bridge,unbridge,park,unpark (r:11097-11098) + * core: Prevent media setup on failed originates (r:11462/FSCORE-279) + * core: fix recorded soundfiles had random data at end of file (r:11491/MODAPP-205) + * core: fix user for windows service (r:11538/FSCORE-277) + * core: modify variable expansion code to expand in more places and to fix potential security issue from injecting variables (r:11569,11570) + * core: look for soundfiles in more locations based on rate (r:11601/MODFORM-23) + * core: state machine veto behavior changed (r:11610) + * core: add enable_file_write_buffering variable (r:11677) + * core: fix garbled audio on media bug during bridge using stateful codecs (FSCORE-288) + * core: fix tone detect running multiple bugs when detecting multiple tones + * core: add {instant_ringback=true} to make ringback not wait for indication to generate ringback + * core: fix segfault from race condition on multiple reloadxml calls (MOODAPP-211) + * core: modify xml locking so phrases do not lock the xml for the duration of playing them + * core: replace resampler with the speexdsp resampler + * core: fix windows calling convention on threads launched that return a value to fix shutdown segfault (FSCORE-298) + * core: do not auto-export origination_caller_id_* to avoid confusion (r:12052) + * core: API visibility support (GCC/SUNCC) (FSCORE-264) + * core: fix leak in exposed event class serialize method (r:12068) + * core: add volume as possible return value from input callback on embedded languages (r:12114) + * core: add resampler to seech handles (r:12141) + * core: add api.getTime to embedded languages (r:12149) + * freeswitch: allow you to specify -htdocs dir at runtime. (r:11614) + * fs_cli: add "debug" command to change the esl debug level at runtime (r:11057) + * iksemel: update to 1.3 (r:11645) + * libesl: fix disconnect failure (r:11078,11083) + * libesl: fix solaris build (r:11067,11068) + * libesl: add c++ wrapper and swigged wrappers for multiple scripting languages + * libg722_1: fix dct4.h code generator to include the "f" (r:11188-11189,11367) + * libilbc: update to new library from Steve Underwood + * mod_amrwb: add amr wideband passthrough codec (r:11971) + * mod_cepstral: fix failure return code handling (MODASRTTS-9) + * mod_conference: add 'conference xml_list' and 'conference [conf_name] xml_list' (r:11062-11063) + * mod_conference: make conference verbose-events param to control if events have all the channel data or not (r:11073-11077) + * mod_conference: add MINTWO flag to end conference when down to 1 participant (r:11523) + * mod_conference: refactor conference record function (r:11626) + * mod_conference: add conference list summary command (MODAPP-197) + * mod_conference: fix Deadlock or coredump on conference commands play, transfer (MODAPP-209) + * mod_dahdi_codec: added (MODCODEC-7) + * mod_dialplan_xml: make previous auto hunt feature optional and off by defaule use auto_hunt=true session or global variable to enable (r:12144) + * mod_dptools: Add failure_causes channel variable (r:12058) + * mod_easyroute: add configuration file example for custom-query (r:11055) + * mod_easyroute: add custom-query configuration option (r:11054) + * mod_easyroute: fix build error when not configured for odbc (r:11478) + * mod_easyroute: fix memory leak (r:11611) + * mod_erlang_event: add ability to spawn a process (module/function) outbound on a specified node. (r:11460,11477) + * mod_erlang_event: Fix some issues with standing up a new outbound listener and cleaning up after a failed session (r:11479) + * mod_erlang_event: Fix setting up a listener for an outbound session if one doesn't already exist (r:11488) + * mod_erlang_event: add "erlang" fscli command (r:11488) + * mod_erlang_event: Monitor spawned outbound processes for premature exits (r:11489) + * mod_erlang_event: Allow the event encoding strategy to be configurable; choices are string or binary (r:11495) + * mod_erlang_event: Allow certain tuple elements to be binaries or strings, to reduce conversion requirements on the erlang side (r:11496) + * mod_erlang_event: Support sending a message to a registered process to request a pid (when spawning won't cut it) (r:11499) + * mod_erlang_event: Ensure events received while a pid session is being created aren't discarded but are queued instead (r:11500) + * mod_erlang_event: Add freeswitch.erl - An erlang module to make talking to mod_erlang_event more painless (r:11525) + * mod_erlang_event: use rpc:call instead of spawn and to make the registered process argument to handlecall optional (r:11542) + * mod_event_socket: add ability to use a comma sep list of events on event-sink create-listener (r:11056) + * mod_event_socket: add debug logging to event-sink (r:11060) + * mod_event_socket: fix race condition (r:11680,12146) + * mod_dptools: add all modifier to break command (r:11557,11558) + * mod_dptools: add sound_test application (r:11658) + * mod_fax: Dont hangup after sending/receiving faxes + * mod_fifo: pause media bugs while not in a bridge (r:11466,11490) + * mod_fifo: allow unpark during chime list playing (r:11555/MODAPP-206) + * mod_fifo: fix outbound fifos doesn't check if the consumer is in the fifo in question. (r:11561/MODAPP-207) + * mod_fifo: Fix segfault when no argument were supplied to fifo_member call (MODAPP-210) + * mod_lcr: added (r:11180,11184,11532,11609) + * mod_limit: fix memory corruption caused by race condition when using limit hash (r:11070-11071) + * mod_limit: Fix transfer bug, fix leak and make the channel hangup if the extension is \!hangup_cause (r:11604,11932) + * mod_limit: add write different channel variables per realm_id (r:11608) + * mod_limit: Make max argument optional on the limit app, set the limit_usage variable to current count after inserting call in the db (r:11955) + * mod_lua: Create empty argv table when no args are passed to a Lua script (r:11559) + * mod_lua: use dll for lua windows build (FSCORE-299) + * mod_openmrcp: removed (r:11176-11179) + * mod_opal: added + * mod_pocketsphinx: fix leak (r:11974) + * mod_portaudio: fix stuck channels on outbound calls (r:11160,11470,11471,11472,11475,11476,11485) + * mod_python: fix build when site dir is not /usr/lib/python2.4 (r:12070) + * mod_say_en: add short form date/time (MODAPP-180) + * mod_sofia: add auto-rtp-bugs profile option to make rtp bug compensation configurable (r :11146-11147) + * mod_sofia: add support in sdp for a=maxptime (r:11103) + * mod_sofia: fix codec change race condition (r:11143) + * mod_sofia: fix notify event wasn't allowing content-length 0 (r:11106/MODENDP-167) + * mod_sofia: fix sending extra sdp in 200 OK when using 100rel in violation of sdp o/a protocol draft-ietf-sipping-sip-offeranswer-10 (r:11088) + * mod_sofia: fix sip_auto_answer=true (r:11069) + * mod_sofia: improve outbound registration error message (r:11059) + * mod_sofia: reset media timeout on re-invite (r:11161) + * mod_sofia: fix segfault due to missing contact header in invite (r:11463/MODENDP-177) + * mod_sofia: allow tag in gateways as well as with direction inbound/outbound (default both) and call counter (r:11468) + * mod_sofia: add support or SLA, works with Polycom and Snom(Sylantro mode). (r:11562/MODENDP-179) + * mod_sofia: tolerate missing user in the request uri (r:11636) + * mod_sofia: Add purpose=gateways and profile=[name] so xml_curl requests make sense (MDXMLINT-46) + * mod_sofia: Add disable-srv and disable-naptr params to sip profiles (default false) (MODENDP-183) + * mod_sofia: add outbound-proxy param (MODENDP-184) + * mod_sofia: fix segfault with stun-enabled=false (SFSIP-120) + * mod_sofia: Profile Name in Expire Event is incorrect (MODENDP-185) + * mod_sofia: add "scrooge" mode to "inbound-codec-negotiation" (r:11881) + * mod_sofia: Add context to reconfig_sofia (r:12080) + * mod_sofia: fix segfault when calling from a Cisco 7940 using bypass_media (FSCORE-301) + * mod_sofia: ilbc to default to 30 if no mode= fmtp is defined on the inbound (r:12110) + * mod_sofia: fix challenge-realm (r:12113) + * mod_sofia: Segmentation fault when running killgw command on sofia profile without specifying a gateway (MODENDP-189) + * mod_sofia: gateways will inherit the context from its parent unless manually provided (r:12138) + * mod_sndfile: Add IMA ADPCM support (MODFORM-22) + * mod_spidermonkey: fix loading of spidermonkey modules (r:11084-11085) + * mod_spidermonkey: block some unwanted behaviours in session.originate + * mod_spidermonkey_socket: fix gc blocking (MODLANG-97) + * mod_xml_rpc: fixed authentication using @domain syntax (r:11064) + * mod_xml_rpc: fix http content types sent in responses (r:11099,11148,11150) + * mod_voicemail: voicemail insert into the proper fields (MODAPP-190) + * mod_voipcodecs: add G.726 24k (r:12083) + * sofia-sip: update to current sofia-sip repository + * spandsp: sync to latest snapshot and fix windows build + * speex: updated to 1.2rc1 + * sqlite: fix random assert on windows (FSCORE-292) + + -- Mike Jerris Mon, 18 Feb 2009 17:39:00 -0500 + +freeswitch (1.0.2-1) unstable; urgency=low + + * all: don't add module interfaces before returning from error conditions in module load functions (MDXMLINT-36) + * all: fixed multiple memory leaks + * all: improved module unloading/reloading support + * build: add support for --switchconfdir (FSBUILD-84) + * build: fixed netbsd build + * build: make freeswitch stop graceflly with /etc/init.d/freeswitch stop on debian add working dir to start-stop-dir so freeswitch dumps core in workdir + * build: multiple packaging fixes + * build: user freeswitch not added to audio group on deb install (FSBUILD-95) + * Configuration: many updates to default configuration + * core: Add ability to choose uuid from originate string, originate_uuid var (use at your own risk) + * core: add bridge_generate_comfort_noise option for bridge to generate comfort noise to the A leg when there is no audio on the B leg + * core: add chan vars to param event during hangup hook + * core: add exec directive to xml preprocessor (not available on windows) + * core: add force_transfer_dialplan and force_transfer_context variables + * core: add hashing to event header lookup + * core: add hits to tone_detect + * core: add last_dtmf_duration variable + * core: add msleep function to swigged languages + * core: add park_after_bridge variable + * core: add per leg timeouts and specific cause codes in reject_on_single_fail + * core: add runtime selection of the module dir (FSCORE-198) + * core: add scheduler support for heartbeat + * core: add session heartbeat feature + * core: add session.destroy psuedo method to sort of destroy a session at least for the sake of FS + * core: add session.unsetInputCallback + * core: add strftime format string validation for user supplied values + * core: add vars param to switch_ivr_originate for recursion (MODAPP-175) + * core: added a "group" concept to the user directory + * core: added ability to do dns lookup to find ip with host: like stun: (FSCORE-219) + * core: added better locking for codec changes during a call + * core: added current_application and current_application_data variables + * core: added error/ magic endpoint so modules can return error causes in situations like sofia_contact + * core: added read_result channel variable + * core: added support for "F" to indicate flash in dtmf (FSCORE-213) + * core: allow calls to be stolen from originate + * core: allow you to get the privacy bits in the caller_profile + * core: change dso code to load symbols local + * core: changes core flags to be array based so we have more + * core: eavesdrop causes the people being eavesdropped on to not hear ach other (MODAPP-140) + * core: expose time table to variable interface via caller field lookup + * core: fix 100% cpu when sending parked call to moh (FSCORE-234) + * core: fix bridge app to make sure both channels are ready for media when one is only in ringing state + * core: fix buffer overflow (FSCORE-188) + * core: fix conference dial by allowing multiple braces in originate, fix bad pointer op (FSCORE-208) + * core: fix double detection of DTMF in IVR (FSCORE-221) + * core: fix hangup_after_bridge is false on a bridge started with the intercept app + * core: fix issue where pid file is accidentally truncated + * core: fix ivr timeout (FSCORE-181) + * core: fix memory leak in alias tab completion code + * core: fix min digits in read app + * core: fix out-of-bounds pointer in variable expansion (FSCORE-171) + * core: fix segfault in media bugs when in bypass media (FSCORE-193) + * core: fix segfault on gtalk to sip calls (FSCORE-212) + * core: fix segfault on reloadxml (FSCORE-176) + * core: fix segfault on trasfering eavesdopping party (FSCORE-210) + * core: fix segfault using switch_system function (FSCORE-196) + * core: fix session.bridge + * core: fix setting effective_caller_id_name / effective_caller_id_number on bridge dialstring (MODAPP-122) + * core: fix stream_raw_write (MODAPP-145) + * core: fix using resampling on ringback file + * core: fixed performance bottleneck in sqlite db's + * core: fixed race in reloadxml + * core: increment app before execute in case it returns to execute it will go to the next item in the list and not the same + * core: ivr menu max_failures and max_timeouts now default to 3 if not specified or invalid (less than 1) values are specified (FSCORE-244) + * core: ivr_menu max-timeouts option, result in ivr_menu_status var (FSCORE-183) + * core: let b legs use park_after_bridge too + * core: make events less verbose unless verbose_events is set + * core: parse private events during originate + * core: pass pdd data to a leg on oubound calls using bridge + * core: prevent crash in crazy situation with xml interface lookup failures (FSCORE-169) + * core: reduce cpu requirement for generated comfort noise + * core: remove interface names from core db on unload + * core: reworked timing resulting in significant performance increase and better rtp timing + * core: rewrite switch_play_and_get_digits (MODAPP-166) + * core: session.recordFile never terminates (MODLANG-79) + * core: session.transfer make dialplan and context optional + * core: set_user app now sets domain vars as well as user vars + * core: tone_detect not triggering app after tone detection (MODAPP-182) + * core: unprivileged user setting bigger stack for switch_system thread failure (FSCORE-197) + * core: user_exists returns false when fetching a user from XML Curl or other xml interfaces + * libesl: added c event socket library and fs_cli + * libsndfile: fix autoconf 2.62 support (LBSNDF-5) + * mod commands: add "all" modifier to "break" command + * mod_celt: added new module + * mod_commands: Add support for more than 2 variables to uuid_setvar_multi (MODAPP-171) + * mod_commands: Add support for passing the cause of hangup to the uuid_kill command (FSCORE-217) + * mod_commands: add attr lookup to user_data + * mod_commands: add domain_exists fsapi command + * mod_commands: add eval fsapi command + * mod_commands: add flush_dtmf app and uuid_flush_dtmf api command + * mod_commands: add fsctl send_sighup, fsctl shutdown asap, unsched_api commands + * mod_commands: add fsctl shutdown [elegant|restart|cancel] + * mod_commands: add new syntax to uuid_setvar to allow you to unset a var. [value] (MODAPP-167) + * mod_commands: add reload fsapi command to reload a module + * mod_commands: add system fsapi and application (MODAPP-138) + * mod_commands: added hupall fsapi command + * mod_commands: added strftime_tz api command + * mod_commands: break all now stops broadcast too + * mod_commands: fix api command sent through sched_api was getting the last char lopped off + * mod_commands: fix race on transfer with -both + * mod_commands: fix system dialplan app problems (MODAPP-86) + * mod_commands: only send content-type on status when it really is http. + * mod_conference: add fsapi to stop async playback too + * mod_conference: add video caps to mod_conference with video follow audio + * mod_conference: better sound prefix handling when using say: and allow say: on kick sounds. + * mod_conference: fix race in record + * mod_conference: fix runaway thread when floor holder has no video and other people do have video + * mod_conference: fix seg when kicking many members quickly (MODAPP-129) + * mod_conference: fix segfault on invalid chat event + * mod_conference: perpetual sound does not auto-mute, you can do that yourself if you want it + * mod_dialplan_xml: add Hunt- vars in dialplan lookup after transfer + * mod_dialplan_xml: fail call on extensions with nested conditions + * mod_dingaling: (LBDING-7) fix segfault on os x + * mod_dingaling: end call on ice timeout + * mod_dingaling: fix presence on jabber to be less protocol ambiguous + * mod_dingaling: fix segfault (LBDING-10) + * mod_dingaling: update to support latest client from google + * mod_dptools: add a mechanism to tell if a file played from sendmsg over event socket + * mod_dptools: add playback_terminator support to phrase and say app + * mod_dptools: add playback_terminator_used variable (MODAPP-132) + * mod_dptools: add presence application + * mod_dptools: fix originate api not parsing users properly (FSCORE-246) + * mod_dptools: fix record and record_session to create directory if it does not exist (FSCORE-250) + * mod_dptools: fixed limit and + parsing bug in record_session app (MODAPP-148) + * mod_dptools: remove_bugs added to remove all media bugs on a session + * mod_erlang_event: add new module + * mod_event_socket: missing : after Content-Length in event socket (MODEVENT-33) + * mod_event_socket: add event socket listener filters + * mod_event_socket: add stateful listener fsapi commands for ajax-y type event interface over http + * mod_event_socket: fix arg parsing errors (MODEVENT-34) + * mod_event_socket: fix shutdown segfault race (MODEVENT-32) + * mod_event_socket: inbound connection to event_socket can now take over an existing channel with 'myevents ' to take on the behaviour of an outbound socket + * mod_event_socket: let any channel get messages + * mod_event_socket: make event socket wait for hangup on outbound mode and send disconnect message + * mod_expr: fix endless loop + * mod_fax: new module + * mod_fifo: add fifo_consumer_wrapup_time var (MODAPP-117) + * mod_fifo: added callback agents + * mod_fifo: honor keyword silence (MODAPP-118) + * mod_flite: added windows build + * mod_fsv: fix in a windows enviroment opening the record file in text mode. (MODAPP-169) + * mod_http: added new module + * mod_java: updated to new module api to support read/write locks on interface + * mod_limit: accept dialplan context for transfer (MODAPP-161) + * mod_limit: added hashtable based limit functions + * mod_limit: prevent empty error log message (MODAPP-134) + * mod_local_stream: add start_local_stream and stop_local_stream fsapi commands to start/stop dynamically (MODFORM-13) + * mod_local_stream: fix leak and improve error checking + * mod_local_stream: fix seg when no timer name specified in config file. (MODFORM-16) + * mod_loopback: add new module + * mod_lua: add local scripts directory support (MODLANG-86) + * mod_lua: don't eval blank string + * mod_lua: fix originate + * mod_lua: fix segfault (MODLANG-77) + * mod_lua: update to lua 5.1.4 (MODLANG-87) + * mod_lumenvox: removed + * mod_managed: new module replaces mod_mono now supports native .net runtime on windows as well + * mod_opal: added to trunk (still very beta) + * mod_perl: fix segfault (MODLANG-77) + * mod_pocketsphinx: fix rpm build + * mod_portaudio: fix cpu race on inbound call to pa when no ring file is set + * mod_radius_cdr: dictionary update for cause code changes (MODEVENT-27) + * mod_radius_cdr: fix unload (MODEVENT-29) + * mod_shout: add stereo recording broadcast support + * mod_shout: added windows build + * mod_shout: fix segfault when recording mp3's (MODFORM-12) + * mod_shout: improved stability of mp3 decoding + * mod_siren: added new module + * mod_sndfile added support to record 16bit for the various rates including 48kHz + * mod_sofia: Add filter to "sofia status profile XXX" (MODENDP-138) + * mod_sofia: Add force-register-db-domain which works in conjunction with force-register-domain. + * mod_sofia: Add optional and tag to tag. + * mod_sofia: Challenge the right realm when to_host is outside the users domain. (MODENDP-136) + * mod_sofia: Improve notify messages through a proxy (MODENDP-147) + * mod_sofia: MWI for multiple domains (MODAPP-126) + * mod_sofia: Move "a=sendrecv" from session to media section of SDP (MODENDP-148) + * mod_sofia: add 200 OK re-invite without sdp + * mod_sofia: add custom sofia::gateway_state event (MODENDP-112) + * mod_sofia: add fire events for the refer SIP NOTIFY event package (MODENDP-152) + * mod_sofia: add more params for xml_curl directory lookup + * mod_sofia: add new auto vals for challenge-realm param + * mod_sofia: add option to turn of auto_restart of sofia profiles on ip change + * mod_sofia: add params to use sip callid as uuid on inbound calls and uuid as sip callid on outbound calls + * mod_sofia: add parsing of Privacy header for privacy info (MODENDP-133) + * mod_sofia: add proto_specific_hangup_cause to both legs + * mod_sofia: add proxy 3pcc mode + * mod_sofia: add redirect variable to channel as well as partner channe (MODENDP-135) + * mod_sofia: add sip-forbid-register to user params to refuse to let a certian user register + * mod_sofia: add sip: into register-proxy when it's not specified + * mod_sofia: add sip_history_info var for inbound invites. + * mod_sofia: add sip_via_protocol variable + * mod_sofia: add sofia xmlstatus (MODENDP-156) + * mod_sofia: add support for params other than Replaces in Refer-To (MODENDP-143) + * mod_sofia: add support for profiles sharing databases so that you can have a domain that uses multiple profiles for split dns type setups + * mod_sofia: add support for refer transfer involving multiple machines + * mod_sofia: add support to send a notify in the invite dialog by specifying the uuid of the call. (SFSIP-92) + * mod_sofia: add suppress_from_cidname var to not have display name in from header (MODENDP-153) + * mod_sofia: added sip_hangup_disposition variable + * mod_sofia: allow send_message and notify events to send a message/notify without a body if needed. + * mod_sofia: append -1 .. -N postfix after any X-headers as vars that have the same name + * mod_sofia: cache auth_gateway_name in sofia for challenged bye + * mod_sofia: cancel proxy or no-media mode if you purposely answer or pre_answer + * mod_sofia: correct result code mapping for Unallocated Number (MODENDP-124) + * mod_sofia: disable 100rel by default + * mod_sofia: don't accept crypto in the RTP/AVP (MODENDP-126) + * mod_sofia: don't put CN in sdp answer if it was not in the offer. + * mod_sofia: fix Incorrect IP address shows up in SDP "o" field when multiple external IPs available and FS not bound to first (MODENDP-132) + * mod_sofia: fix Wrong RTP media port destination after reinvite/UNHOLD (SFSIP-82) + * mod_sofia: fix bug on linksys where they lie about the ptime and handle linksys transfer problem + * mod_sofia: fix chat (send an IM) assumes that the user's profile is the same as their domain, which isn't necessarily so (SFSIP-83) + * mod_sofia: fix dtmf handling of broken info dtmf endpoints + * mod_sofia: fix eyebeam presence to be RFC compliant (MODENDP-144) + * mod_sofia: fix ip change detection when in proxy mode + * mod_sofia: fix register_proxy ignoring the paramaters (MODENDP-121) + * mod_sofia: fix remote session refresh triggers request glare (MODENDP-131) + * mod_sofia: fix rtp auto adjust running when it should not + * mod_sofia: fix rtp sent to wrong port after some re-INVITE scenarios (MODENDP-141) + * mod_sofia: fix sending of cn packets across bridge when we shouldn't + * mod_sofia: fix sqlite issue with select of the sip contact + * mod_sofia: fixed segfault on invalid presence payload + * mod_sofia: gateway ping needs to look for 501 (SFSIP-78) + * mod_sofia: handle multi contact register responses and register timeout better + * mod_sofia: improve gateway resilience + * mod_sofia: log ip and port you get reply to invite from + * mod_sofia: make multiple-registations=true use the contact method and call-id option to do it the old way + * mod_sofia: make proxy mode pull the port from m=image as well + * mod_sofia: make register-proxy preserve the url composed from proxy but target the packets to desired address (MODENDP-121) + * mod_sofia: many fixes for sonus rtp issues silence_when_idle=400 chanvar to send generated silence duing sleeps etc + * mod_sofia: many fixes in presence handling + * mod_sofia: passthrough t.38 fixes + * mod_sofia: pick ipv4 or ipv6 based on sipip instead of having mixed in sdp + * mod_sofia: send NOTIFY on TCP/UDP depending on the SUBSCRIBE (SFSIP-104) + * mod_sofia: setting profile option multiple-registrations=contact key multi reg off the contact string + * mod_sofia: wait for a reply on refer + * mod_soundtouch: fixes and improvements, many options changed (MODAPP-149) + * mod_soundtouch: updated to new module api + * mod_spidermonkey: Segmentation fault in check_hangup_hook at mod_spidermonkey.c:1589 (MODLANG-74) + * mod_spidermonkey: fix bug in apiExecute + * mod_spidermonkey: fix memory pool handling and leaks + * mod_spidermonkey: limit recursion busting through the stack (FSCORE-202) + * mod_spidermonkey: make session.getVariable return blank string not the word false + * mod_spidermonkey_curl: add optional content-type arg + * mod_spidermonkey_odbc: fix numRows and add numCols + * mod_spidermonkey_odbc: fix segfault (MODLANG-75) + * mod_stress: new module for voice stress analysis + * mod_syslog: don't log blank lines (FSCORE-163) + * mod_tone_stream: let silence_stream://0 indicate perpetual silence + * mod_vmd: add new module to detect voicemail "beep" + * mod_voicemail: Add vm_alternate_greet_id param to directory entry (MODAPP-174) + * mod_voicemail: Patch to add voicemail preference controlling date announcement new param 'play-date-announcement' to values 'first' 'last' or 'never' defaults to first to retain previous behavior (MODAPP-121) + * mod_voicemail: Update mwi light after delete vm via web. (MODAPP-124) + * mod_voicemail: add ability to get to options without listening to every saved message (MODAPP-115) + * mod_voicemail: add ability to skip greeting when leaving a voicemail. (MODAPP-181) + * mod_voicemail: add change-pass-key config file option + * mod_voicemail: add forwarding support + * mod_voicemail: add local dtmf driven alternat vm pass + * mod_voicemail: add proper notification of a vm message being too short + * mod_voicemail: add support for auth via a1-hash + * mod_voicemail: add the "storage-dir" parameter to be set on a per-user basis (MODAPP-133) + * mod_voicemail: add voicemail_greeting_path variable + * mod_voicemail: added voicemail_alternate_greet_id variable + * mod_voicemail: allow changing of password from voicemail to update user directory if using non-static config (MODAPP-156) + * mod_voicemail: created email date (int overflow) (MODAPP-125) + * mod_voicemail: don't try to deliver vm when no file was recorded. (MODAPP-133) + * mod_voicemail: fix MWI with xml_curl used for directory (MODAPP-176) + * mod_voicemail: fix Voicemail messages occasionally lost / stranded (MODAPP-178) + * mod_voicemail: fix invalid event after message deleted (MODAPP-170) + * mod_voicemail: fix mwi for phones with multiple registrations problem (MODAPP-153) + * mod_voicemail: fix voicemail segfault on incorrect password (FSCORE-187) + * mod_voicemail: fix voicemail_inject error handling (MODAPP-133) + * mod_voicemail: fix voicemail_inject usage api call + * mod_voicemail: improve error checking (MODAPP-142) + * mod_voicemail: localize notification emails (MODAPP-139) + * mod_voicemail: make more multi-domain friendly (MODAPP-162) + * mod_voicemail: make playback created file macros optional (MODAPP-150) + * mod_voicemail: recognize operator key in more places (MODAPP-159) + * mod_voicemail: web interface displays incorrect created / last heard dates (MODAPP-123) + * mod_wanpipe: removed + * mod_xml_cdr: add https support + * mod_xml_cdr: add optional a-leg prefix to xml cdr filenames (MDXMLINT-39) + * mod_xml_cdr: add support for fallback webserver for cdr posting (FSCORE-238) + * mod_xml_curl: Allow specification of HTTP method, and dynamic expansion of variables in URI. (MDXMLINT-41) + * mod_xml_curl: added redirect following (max 10) + * mod_xml_ldap: almost a complete rewrite of this module + * mod_xml_rpc: allow setting of global realm without a global user (MDXMLINT-45) + * mod_xml_rpc: fix multiple segfaults + * mod_xml_rpc: fix segfault on originate via http + * sofia-sip: updated to 1.12.10 (plus a few patches) + + -- Mike Jerris Mon, 29 Dec 2008 14:46:00 -0500 + +freeswitch (1.0.1-1) unstable; urgency=low + + * FIX: prevent intercept race condition that can also be solved with continue_on_fail=originator_cancel + * FIX: NULL dereference detected by klockwork (www.klockwork.com) + * FIX: don't open failed local stream (MODFORM-9) + * FIX: instability in mod_local_stream in failure scenarios + * FIX: xmlrpc-c build on OS X 10.4 (FSBUILD-47) + * ENHANCEMENT: Added tab completion on many api commands in console + * ENHANCEMENT: polycom BLF support + * FIX: many sip NAT related fixes in mod_sofia + * FIX: support sip unregister with Contact: * + * FIX: multiple segfaults in xmlrpc-c + * FIX: sip unregister event being skipped + * FIX: hangup properly on malformed sip 3pcc calls being used as a way to ping + * ADD: enable-3pcc sofia profile param, it is now disabled by default. + * ADD: presence events to sip proxy mode + * ADD: legs param to cdr_csv + * ADD: support for perl as an embedded lanugage + * ENHANCEMENT: many new api's and functions to the embedded languages including api support, xml interface support, auto start scripts, and many new objects + * CHANGE: python embedded language api changed to match perl, lua, java + * FIX: many stability fixes in embedded langauges perl, lua, java, python + * ADD: failed_xml_cdr magic channel variable + * FIX: access free memory error in mod_sofia when using respond app + * ENHNACEMENT: make global_setvar only have 2 fields so you can set foo=bar=blah w/o quotes + * FIX: mod_spidermonkey keep hangup hook in the session thread + * ENHANCEMENT: mod_ldap added sasl support and search filters + * ADD: answered, waitForAnswer and mediaReady methods to embedded language Session object + * ENHANCEMENT: mod_voicemail param change to allow notification emails using templates + * ADD: per user acl in sofia + * FIX: deadlock in mod_portaudio + * ENHANCEMENT: blank username in sip will trigger a lookup for the user "nobody" + * ADD: import variable to import variables from a peer channel at time of originate + * FIX: api type fix for c++ modules when incorrectly using enums + * FIX: eliminate need for escaped , in [] on originate + * ADD: NDLB-force-rport option to force behavior as if rport was sent in the via + * ENHANCEMENT: honor execute_on_answer on outbound legs too + * ADD: execute_on_ring variable + * FIX: Seg fault in CoreSession() class destructor + * ADD: per channel caller id in originate + * ADD: sip_outgoing_call_id variable + * FIX: multiple memory leaks in mod_sofia + * FIX: find_local_ip IPv6 support + * ADD: variable expansion to on execute vars.(FSCORE-114) + * ADD: count optional arg to show calls and show channels (MODAPP-103) + * FIX: MODEVENT-25 (WSAWOULDBLOCK error on socket send in windows) in event socket + * FIX: multiple fixes to the logic in mod_say_zh + * ADD: inter digit timeout to swigged embedded languages getDigits method. (MODLANG-65) + * ADD: Linksys P-RTP-Stat SIP header values (SFSIP-66) + * FIX: small leak in core + * ADD: progress_timeout var to originate + * UPDATE: portaudio library + * FIX: added timeout to iax read + * ADD: 'pa rescan' to portaudio to look for new devices + * FIX: wait for broadcast to start when starting async hold to avoid race + * FIX: mod_rss, don't always play the first news feed + * FIX: mod_rss inverval to use the session inteval (audio problems on 30ms channels) + * ADD: Path: support in mod_sofia on register + * FIX: mod_shout record stream + * ENHANCEMENT: mod_voicemail support for effective_caller_id_name/number + * ADD: url encode/decode api calls + * FIX: "nua()" in debug information in sofia instead of the real function name + * FIX: better handling of sips: uris + * FIX: don't seg when using more than SWITCH_MAX_CODECS and bump SWITCH_MAX_CODECS to 50 (we have more than 30 in tree) (MODFORM-10) + * ADD: mod_yaml + * FIX: segfault on freeswitch startup if installed directories are removed + * FIX: segfault when intercept with inbound_late_negotiation=true set + * FIX: dont flood logs with eavesdrop messages (MODAPP-101) + * FIX: don't destroy a codec that has not been created (MODAPP-101) + * ENHANCEMENT: allows the "eavesdrop_group" variable to contain several groups, comma separated. (MODAPP-101) + * FIX: cross compile (FSBUILD-53) + * FIX: add header that Nuaunce considers mandatory (MODASRTTS-5) + * ADD: write locks to the core and a function to unregister event bindings (adds better ability to unload modules) + * ENHANCEMENT: make modules unbind events and un-reserve subclasses on module unload + * ADD: removable xml hook bindings + * ADD: EventConsumer object to embedded languages so you can make event handlers + * FIX: sending CN with supress-cng true + * FIX: segfault in the event system when trying to remove NULL event + * ADD: flags to turn off srtp auth and rtp auto adj (FSCORE-149 && MODENDP-115) + * FIX: use lighter math and avoid infinite loop in port allocator (FSCORE-148) + * ENHANCEMENT: let conference pin entry start during prompt (MODAPP-111) + * ADD: mod_pocketsphinx + * FIX: Misuse of SQLRowCount, issues with MSSQL (MODAPP-105) + * FIX: segfaults in mod_python with dtmf callback + * ENHANCEMENT: mod_conference auto-record parameter (MODAPP-112) + * ENHANCEMENT: reload support to many modules + * FIX: mod_sofia add replaces to supported header + * ENHANCEMENT: add args callback to sleep so you can process dtmf and events while "sleeping" + * ADD: mod_flite + * ENHANCEMENT: switch_xml converted back to c code and support double globs on windows + * ENHANCEMENT: mod_sofia support for adding and removing gateways without restarting profiles + * ADD: extract contact header info into A channel when unhandled 3xx response is received (MODENDP-116) + * FIX: outbound event_socket + late negotiation + * ADD: copy_xml_cdr variable + * ADD: silence_stream (like tone_stream but silent) + * ADD: module_exists api call + * ADD: emailer implementation for windows + * ADD: wait_for_silence application + * FIX: no error message generated if OS is unable to load a module ( due to dependency/installation issues ) + * FIX: segfault in media bugs + * FIX: acl lists not correctly matching all ip adresses + * FIX: mod_spidermonkey exit() does not stop script when called from the hangup callback (return "exit" from the callback) + * FIX: mod_syslog works again + * FIX: crash on terminal resize + * FIX: audio problems on big endian + * ENHANCEMENT: Disable multiple registrations on a per-device basis (MODENDP-117) + * ADD: fifo_consumer_exit_key variable (MODAPP-100) + * ADD: cidr based user auth in mod_sofia + * ADD: uuid_send_dtmf fsapi command (MODAPP-114) + * ADD: server registration fiels to sip_registration database (MODENDP-118) + * FIX: use a variable, realm or to host to find gateway when it's not obvious (handles challenged REFER) + * ADD: timeout to curl run in javascript + * ADD: voicemail_inject fsapi command + * ADD: reboot option for sip phones to flush_inboud_reg sofia profile api command + * FIX: add small padding to end of mp3 to avoid cut off mp3 recording + * FIX: patch multiple SDP connection lines in sdp for proxy media mode (MODENDP-109) + * FIX: don't parse ringback varable in proxy situations + * ADD: per call vm recording ext with vm_message_ext variable + * ADD: sip_bye_h prefix to add headers to bye + * ENHANCEMENT: more interfaces available in show fsapi command + * FIX: don't leak in buffers on realloc fail + * FIX: fail out of a conference call if write fails + * ADD: auto ip-change detection + * ADD: mod_snom + * FIX: mod_sofia don't send sipfrag on transfer to cisco so they don't hang up the call + + -- Mike Jerris Thu, 24 Jul 2008 07:00:00 -0500 + +freeswitch (1.0.1~trunk) unstable; urgency=low + + * Updated revision number + * Fixed init problem reported by Jay Binks (FSSCRIPTS-1) + * Added a patch to the debian build system add more features (thanks to Hadley Rich) (FSBUILD-45) + - Added en-us-callie sounds and music on hold packages + - Added recommends and suggests + - Added mod_say_es and mod_say_nl + - Updated descriptions + - Added mod_cdr_csv + * Fixed typos and some errors in the previus patch. + * Modified monit script. Now it should work. + * The debian build system now bootstrap automagically if it's necessary and all scripts are in place. + + -- Massimo Cetra Sun, 6 Jul 2008 16:30:00 +0100 + +freeswitch (1.0.0-1) unstable; urgency=low + + * Enhanced sofia sip nat handling + * Many fixes found by Klockwork (www.klocwork.com) + * Added disable_app_log variable + * Fixed mod_local_stream with rates on windows + * Fixed finding of files in rate dirs on windows + * Fixed memory corruption from sofia_contact function + * Added sofia profile param NDLB-received-in-nat-reg-contact + * Added sofia profile param aggressive-nat-detection + * Fixed video sip calls in proxy media mode + * Added bridge_terminate_key var + * Update xmlrpc-c lib to trunk revision from upstream, fix windows xmlrpc + * Enhanced nat handling in proxy media mode in sip + * Add progress media to timetable so you can calculate pdd + * Fixed seg when using unicast on socket when call has no read_codec + * Fixed missed log events on busy box + * Added -bleg to intercept + * Enhance configure detection of python + * Fixed build on solaris and freebsd for several modules + * Added param "vm-email-only" to make voicemail sent by email only (previously default behavior) + * Added param "vm-mailto-notify" to allow sending a notification email + * Fixed mod_java build + * Fixed mwi failures for some devices that don't subscribe + * Removed fsapi functions (killchan, transfer, session_displace, reject) + * Removed fsapi functions (session_record, broadcast, hold, media) + * Many updates to sofia-sip library including over 100 fixes + + -- Michael Jerris Tue, 27 May 2008 01:30:00 -0400 + +freeswitch (1.0~rc6-1) unstable; urgency=low + + * Changed to not allow pass_2833 on transcoded calls + (it never worked, now it will tell you) + * Enhanced sofia sip nat handling + * Fix libedit build on solaris + * Fix session timers in mod_sofia + * Fix conference fire-call + * Change: add var_event down into the endpoints so chans + with no parents can still pass options + * Added enable-post-var param to xml_rpc + * Fix mod_lua build on solaris + * Many fixes found by Klockwork (www.klocwork.com) + * Add unregister event in mod_sofia + * Enhance python configure detection + * Add vm_boxcount api func + * Fixed att_xfer issue + * Fix sip now includes the Allow-Events header in more places + + -- Michael Jerris Tue, 13 May 2008 02:01:00 -0400 + +freeswitch (1.0~rc5-1) unstable; urgency=low + + * Changed internal state names to avoid confusion + Fixed video negotiation + Enhanced accuracy of windows timer + Fixed mod_ldap build + Added dialplan and context to sql table for channels + Multiple fixes to mod_lua and mod_perl + Fixed logic bug in fifo causing segfault + internal changes to sip stack so we can remove a hash redundant to the stack + Fixed multiple memory leaks in mod_sofia + Fixed event fetch segfault on sip subscribe + Fixed segfault on timer rollover in sofia on 64bit + Fixed audio timing issues in mod_portaudio + Changed names of sip profiles in default config to avoid confusion + Fixed memory usage leak-like behavior when playing files requiring resampling + Removed some unused api's + Fix rtp timeout when playing moh + Removed some un-needed libraries and files from tree + Fixed multiple issues in sip stack including multiple segfaults + Added support for sip transfers on bypass_media and proxy_media calls + Added say application + Fixed --disable-debug configure option + Enhanced switch_cpp wrapper (and perl, python, lua, java) + Fixed segfault on inavalid stun response + Fixed configure help output + Fixed segfault on mp3 playback + Fixed assert on invalid sdp (missing m= line) + Added configurable windows service name + Fixed proxy mode call transition to non proxy call + Fixed solaris build of voipcodecs + Fixed sofia seg when call failure edge case + + -- Michael Jerris Tue, 13 May 2008 02:01:00 -0400 + +freeswitch (1.0~8327) unstable; urgency=low + + * Adding perl and lua separate packages + * Adding mod_voipcodecs + + -- root Tue, 6 May 2008 09:46:26 +0000 + +freeswitch (1.0~rc4-1) unstable; urgency=low + * Add tab completion in cli + Add "inline" dialplan + Fixed segfault in enum + Enhance enum to fork dial equal priority entries + Added auto-reload to enum + Fixed odbc bug is mod_sofia presence handling + Add presence for conference and dial an eavesdrop + Fix stack overflow segfault when recursively parking calls + Fixed race is sofia registration handling + Enhance sofia registration, unregister on keep-alive OPTIONS failure + Added internal routing loop detection/avoidance + Fixed race in bgapi in event socket + Fixed vars to execute apps before bridge "bridge_pre_execute_aleg_app" and "bridge_pre_execute_bleg_app" + Fixed re-setting sound prefix to no prefix after a pharse + Enhanced setting of bracket vars from originate so they show in the CHANNEL_ORIGINATE event + Add "enable-timer" and "enable-100rel" options to turn off default behaviors in sofia + Add originate_timeout to originate vars + Fixed hanging channels in mod_portaudio + Added auto time sync on vps migration to different hardware + Fixed seg on transfer when both legs are not sip + Added configurable dtmf duration defaults + Enhanced voicemail, allow interruption of hello message + Fixed voicemail to not light up light on saved messages + Enhance mod_amr honor disable dtx in fmtp (MODCODEC-3) + Fixed bootstrap to install automake dependencies so you can use tarball without same version of automake installed + Fixed MODLANG-56 (bad audio on originate and javascript streamFile) + Added hold/unhold dialplan apps + Enhanced sofia error checking to outlaw 0.0.0.0 in sofia ip params + Backport fixes from sofia-sip tree + Fixed MSVC build + Fixed segfault on sip SUBSCRIBE with Expires: 0 + Added mod_say_zh + Added --with-pyton and --with-pyton-config configure options + Added mod_lua + Enhanced switch_cpp wrapper in core and normalized interfaces for perl, python, lua, and java + Fixed multiple issues in cpp wrapper and the languages perl, python, lua and java + Added back mod_perl + Added sofia gateway option ping to adjust options ping frequency + Added .net event socket lib to contrib + Fixed passing of exact response codes of sip across a bridge + Added mod_reference, reference endpoint module + Enhanced build so you can now make commented out modules using "make mod_name" + + -- Michael Jerris Wed, 23 Apr 2008 12:58:00 -0400 + +freeswitch (1.0~rc3-1) unstable; urgency=low + * Enhance xml menu system + fixes upstream from sofia-sip library + Enhance mod_fifo + added close method to ODBC spidermonkey class + Fix multiple bugs in the cpp wrapper used in mod_java and mod_python + Fix hung sip channel issue using respond app or on re-invite with bypass media after 1xx or 2xx responses + + -- Michael Jerris Wed, 9 Apr 2008 12:58:22 -0400 + +freeswitch (1.0~rc2-1) unstable; urgency=low + * Fixed speex protocol negotiation issues (8k vs 16k) + Fixed mod_iax race conditions + Fixed ptime negotiation issues when re-packetizing + Added ip based acl lists + * + -- Michael Jerris Wed, 9 Apr 2008 12:58:22 -0400 + +freeswitch (1.0~rc1-1) unstable; urgency=low + * loads of fixes + new cdr-csv module + new spidermonkey-curl module + + -- Michal Bielicki Mon, 14 Jan 2008 23:37:04 +0100 + +freeswitch (1.0~beta3-1) unstable; urgency=low + + * Additional scripts for changing the user to freeswitch + Added Startup Scripts + Monit integration + Settings file for integration into init + init.d file + added user freeswitch to own and run all off freeswitch + cleaned up config file control + new upstream release + split off codec pakcages + split off spidermonkey packages + + -- Michal Bielicki Tue, 27 Nov 2007 13:20:21 +0100 + +freeswitch (1.0~beta2-1) unstable; urgency=low + + * New upstream release + + -- Paul van Genderen Wed, 17 Oct 2007 19:32:09 +0200 + +freeswitch (1.0~beta1-1) unstable; urgency=low + + * New packages. + + -- Robert McQueen Sun, 12 Nov 2006 17:32:23 -0500 diff --git a/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/copyright b/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/copyright new file mode 100644 index 0000000000..45eb67b0c9 --- /dev/null +++ b/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/copyright @@ -0,0 +1,51 @@ +This package was debianized by Michal Bielicki + on Now 25, 2007. + +The current Debian maintainer is Nicholas Amorim + +The source was downloaded from http://www.freewitch.org/ + +Upstream authors: +Anthony Minessale II +Portions created by the Initial Developer are Copyright (C) 2006-2009 +the Initial Developer. All Rights Reserved. + +The PRIMARY AUTHORS are (and/or have been): + + Anthony Minessale II - Primary developer of all core components + and many of the included modules. Much of freeswitch is based on his work. + + Michael Jerris - Windows porter and responsible for the + windows\msvc build system. + +And here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS -- +people who have submitted patches, reported bugs, and generally made Freeswitch +that much better: + + Brian K. West - For countless hours of work on BSD and Mac support, finding countless bugs, and moral support. Xcode project files. + Joshua Colp - For his help making mod_exosip possible (which we are now getting rid of but oh well), + and for just being a swell guy! (until he backstabbed us, c'est la vie) + Michal "cypromis" Bielicki (michal.bielicki AT voiceworks.pl) - Solaris porting, and autotools enhancements, debian, rpm and solaris packaging. + James Martelletti - All around cool guy (mod_syslog) + Johny Kadarisman + Yossi Neiman of Cartis Solutions, Inc. - implementation of mod_cdr (perldd, mysql, csv) + Stefan Knoblich - Various patches and support. Thanks. + Justin Unger - Lots of help with patches and SIP testing. Thanks! + Paul D. Tinsley - Various patches and support. + Ken Rice - - xmlcdr, sofia improvements, load testing. + Neal Horman - conference improvements, switch_ivr menu additions and other tweaks. + Johny Kadarisman - mod_python fixups. + Michael Murdock - testing, documentation, bug finding and usability enhancements. + Matt Klein + Jonas Gauffin - Bugfixes and additions in mod_spidermonkey_odbc + Damjan Jovanovic - mod_java + +A big THANK YOU goes to: + +Justin Cassidy - Build related cleanups and automatic build setup. +Bret McDanel - Javascript Documentation, constant feedback and input, many other things I am sure I am forgetting. + +You are free to distribute this software under the terms of +the MPL Mozilla Public License. On Debian systems, the complete +text of the GNU General Public License can be found in the file +'/usr/share/common-licenses/MPL'. From eb10a9ef8df21fc0e0064fae58bb43a401085a83 Mon Sep 17 00:00:00 2001 From: Michal Bielicki Date: Thu, 14 Oct 2010 19:01:00 +0200 Subject: [PATCH 030/230] updated modules in .debs to sync with .spec. left out flite since it requres more than 384mb to build debs with. --- debian/changelog | 5 +++++ debian/control | 18 ++++++++++++++++ debian/freeswitch.conffiles | 3 --- debian/freeswitch.install | 38 ++++++++++++++++++---------------- debian/rules | 41 ++++++++++++++++++++----------------- 5 files changed, 65 insertions(+), 40 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7f4e8d7749..f35e7051b7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,8 @@ +freeswitch (1.0.7-1headgit1) maverick; urgency=low + * upgrade: Added mod_amrwb + * upgrade version to 1.0.7 ... 1.0.6 was last realease + + -- Michal Bielicki Wed, 13 Oct 2010 22:58:48 -0200 freeswitch (1.0.6-1ubuntu1) maverick; urgency=low [ Gabriel Gunderson ] diff --git a/debian/control b/debian/control index 92b4e6ada5..b3c71417c8 100644 --- a/debian/control +++ b/debian/control @@ -123,6 +123,19 @@ Description: pass through AMR codec support for FreeSWITCH . This package contains the mod_amr codec module. +Package: freeswitch-codec-passthru-amrwb +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch +Description: pass through AMRWB codec support for FreeSWITCH + FreeSWITCH is an open source telephony platform designed to facilitate the + creation of voice and chat driven products scaling from a soft-phone up to a + soft-switch. It can be used as a simple switching engine, a PBX, a media + gateway or a media server to host IVR applications using simple scripts or XML + to control the callflow. + . + This package contains the mod_amrwb codec module. + + Package: freeswitch-codec-passthru-g729 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch @@ -229,3 +242,8 @@ Description: Russian language files for FreeSWITCH . This package contains the mod_say_ru module and available language configuration files. + +Package: freeswitch-freetdm +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch +Description: FreeTDM is a signaling and board API abstraction used mainly by the FreeSWITCH project to place calls in TDM and analog telephony circuits. The library was previously named "OpenZAP". Sangoma has worked along with the FreeSWITCH developers in this library so Sangoma's customers can also use it to do custom development. The library is still under heavy development but the overall API does not change often. The intention of the library is to present a consistent API for different telephony signaling stacks and board I/O APIs. FreeTDM can either be used as a standalone API or along with FreeSWITCH as an endpoint (mod_freetdm). If you want to use it as a part of FreeSWITCH remember following the FreeSWITCH configuration section. diff --git a/debian/freeswitch.conffiles b/debian/freeswitch.conffiles index a6f9ce380f..1d2cd2660c 100644 --- a/debian/freeswitch.conffiles +++ b/debian/freeswitch.conffiles @@ -83,10 +83,8 @@ /opt/freeswitch/conf/ivr_menus/demo_ivr.xml /opt/freeswitch/conf/jingle_profiles/client.xml /opt/freeswitch/conf/jingle_profiles/server.xml -/opt/freeswitch/conf/m3ua.conf /opt/freeswitch/conf/mime.types /opt/freeswitch/conf/notify-voicemail.tpl -/opt/freeswitch/conf/pika.conf /opt/freeswitch/conf/sip_profiles/external/example.xml /opt/freeswitch/conf/sip_profiles/external.xml /opt/freeswitch/conf/sip_profiles/internal/example.xml @@ -98,4 +96,3 @@ /opt/freeswitch/conf/vars.xml /opt/freeswitch/conf/voicemail.tpl /opt/freeswitch/conf/web-vm.tpl -/opt/freeswitch/conf/zt.conf diff --git a/debian/freeswitch.install b/debian/freeswitch.install index 087d167859..aa240a7f5d 100644 --- a/debian/freeswitch.install +++ b/debian/freeswitch.install @@ -1,5 +1,6 @@ opt/freeswitch/bin/freeswitch opt/freeswitch/bin/fs_cli +opt/freeswitch/bin/fs_encode opt/freeswitch/bin/fs_ivrd opt/freeswitch/bin/fsxs opt/freeswitch/bin/gentls_cert @@ -31,7 +32,6 @@ opt/freeswitch/conf/autoload_configs/memcache.conf.xml opt/freeswitch/conf/autoload_configs/modules.conf.xml opt/freeswitch/conf/autoload_configs/nibblebill.conf.xml opt/freeswitch/conf/autoload_configs/opal.conf.xml -opt/freeswitch/conf/autoload_configs/openzap.conf.xml opt/freeswitch/conf/autoload_configs/pocketsphinx.conf.xml opt/freeswitch/conf/autoload_configs/portaudio.conf.xml opt/freeswitch/conf/autoload_configs/post_load_modules.conf.xml @@ -91,11 +91,8 @@ opt/freeswitch/conf/fur_elise.ttml opt/freeswitch/conf/ivr_menus/demo_ivr.xml opt/freeswitch/conf/jingle_profiles/client.xml opt/freeswitch/conf/jingle_profiles/server.xml -opt/freeswitch/conf/m3ua.conf opt/freeswitch/conf/mime.types opt/freeswitch/conf/notify-voicemail.tpl -opt/freeswitch/conf/openzap.conf -opt/freeswitch/conf/pika.conf opt/freeswitch/conf/sip_profiles/external/example.xml opt/freeswitch/conf/sip_profiles/external.xml opt/freeswitch/conf/sip_profiles/internal/example.xml @@ -106,66 +103,71 @@ opt/freeswitch/conf/tetris.ttml opt/freeswitch/conf/tones.conf opt/freeswitch/conf/vars.xml opt/freeswitch/conf/voicemail.tpl -opt/freeswitch/conf/wanpipe.conf opt/freeswitch/conf/web-vm.tpl -opt/freeswitch/conf/zt.conf opt/freeswitch/htdocs/* opt/freeswitch/lib/libfreeswitch*.so* -opt/freeswitch/lib/libopenzap*.so* +opt/freeswitch/mod/mod_avmd.so* +opt/freeswitch/mod/mod_bv.so* opt/freeswitch/mod/mod_callcenter.so* opt/freeswitch/mod/mod_cdr_csv.so* opt/freeswitch/mod/mod_celt.so* opt/freeswitch/mod/mod_cidlookup.so* opt/freeswitch/mod/mod_cluechoo.so* +opt/freeswitch/mod/mod_console.so* +opt/freeswitch/mod/mod_codec2.so* opt/freeswitch/mod/mod_commands.so* opt/freeswitch/mod/mod_conference.so* opt/freeswitch/mod/mod_console.so* opt/freeswitch/mod/mod_curl.so* +opt/freeswitch/mod/mod_db.so* opt/freeswitch/mod/mod_dialplan*.so* opt/freeswitch/mod/mod_dingaling.so* opt/freeswitch/mod/mod_directory.so* +opt/freeswitch/mod/mod_distributor.so* opt/freeswitch/mod/mod_dptools.so* opt/freeswitch/mod/mod_easyroute.so* opt/freeswitch/mod/mod_enum.so* opt/freeswitch/mod/mod_esf.so* opt/freeswitch/mod/mod_event_*.so* opt/freeswitch/mod/mod_expr.so* -opt/freeswitch/mod/mod_spandsp.so* opt/freeswitch/mod/mod_fifo.so* +opt/freeswitch/mod/mod_file_string.so* +opt/freeswitch/mod/mod_flite.so* opt/freeswitch/mod/mod_fsv.so* +opt/freeswitch/mod/mod_hash.so* opt/freeswitch/mod/mod_h26x.so* opt/freeswitch/mod/mod_ilbc.so* opt/freeswitch/mod/mod_lcr.so* -opt/freeswitch/mod/mod_db.so* -opt/freeswitch/mod/mod_hash.so* +opt/freeswitch/mod/mod_limit.so* opt/freeswitch/mod/mod_local_stream.so* opt/freeswitch/mod/mod_logfile.so* opt/freeswitch/mod/mod_loopback.so* +opt/freeswitch/mod/mod_memcache.so* +opt/freeswitch/mod/mod_mp4v.so* opt/freeswitch/mod/mod_native_file.so* opt/freeswitch/mod/mod_nibblebill.so* -opt/freeswitch/mod/mod_openzap.so opt/freeswitch/mod/mod_portaudio.so* +opt/freeswitch/mod/mod_portaudio_stream.so* +opt/freeswitch/mod/mod_redis.so* opt/freeswitch/mod/mod_rss.so* opt/freeswitch/mod/mod_shout.so* +opt/freeswitch/mod/mod_silk.so* opt/freeswitch/mod/mod_siren.so* opt/freeswitch/mod/mod_skinny.so* opt/freeswitch/mod/mod_skypopen.so* opt/freeswitch/mod/mod_sndfile.so* opt/freeswitch/mod/mod_snom.so* opt/freeswitch/mod/mod_sofia.so* +opt/freeswitch/mod/mod_soundtouch.so* +opt/freeswitch/mod/mod_spandsp.sp* opt/freeswitch/mod/mod_speex.so* opt/freeswitch/mod/mod_spy.so* opt/freeswitch/mod/mod_syslog.so* +opt/freeswitch/mod/mod_theora.so* opt/freeswitch/mod/mod_tone_stream.so* opt/freeswitch/mod/mod_tts_commandline.so* +opt/freeswitch/mod/mod_unimrcp.so* opt/freeswitch/mod/mod_valet_parking.so* opt/freeswitch/mod/mod_vmd.so* opt/freeswitch/mod/mod_voicemail.so* opt/freeswitch/mod/mod_xml_*.so* -opt/freeswitch/mod/ozmod_analog_em.so* -opt/freeswitch/mod/ozmod_analog.so* -opt/freeswitch/mod/ozmod_isdn.so* -opt/freeswitch/mod/ozmod_skel.so* -opt/freeswitch/mod/ozmod_ss7_boost.so* -opt/freeswitch/mod/ozmod_wanpipe.so* -opt/freeswitch/mod/ozmod_zt.so* diff --git a/debian/rules b/debian/rules index 114ad64f34..442d82e190 100755 --- a/debian/rules +++ b/debian/rules @@ -6,33 +6,36 @@ export DH_VERBOSE=1 export DH_OPTIONS export DEB_DH_INSTALL_SOURCEDIR=debian/tmp -export PASSTHRU_CODEC_MODULES=codecs/mod_g729 codecs/mod_g723_1 codecs/mod_amr +export PASSTHRU_CODEC_MODULES=codecs/mod_g729 codecs/mod_g723_1 codecs/mod_amr codecs/mod_amrwb # Modules listed by those built by default, then those that are added in this package -export APPLICATIONS_MODULES=applications/mod_cluechoo applications/mod_commands applications/mod_conference applications/mod_dptools \ - applications/mod_enum applications/mod_esf applications/mod_expr applications/mod_fifo applications/mod_fsv \ - applications/mod_hash applications/mod_db applications/mod_valet_parking applications/mod_voicemail applications/mod_rss \ - applications/mod_spandsp applications/mod_cidlookup applications/mod_curl applications/mod_easyroute \ - applications/mod_lcr applications/mod_nibblebill applications/mod_snom \ - applications/mod_spy applications/mod_vmd applications/mod_directory applications/mod_callcenter -export ASR_TTS_MODULES=asr_tts/mod_tts_commandline -export CODECS_MODULES=codecs/mod_ilbc codecs/mod_h26x codecs/mod_speex codecs/mod_siren codecs/mod_celt -export DIALPLANS_MODULES=dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml +export APPLICATION_MODULES_AE= applications/mod_avmd applications/mod_callcenter applications/mod_cidlookup applications/mod_cluechoo \ + applications/mod_commands applications/mod_conference applications/mod_db applications/mod_directory \ + applications/mod_distributor applications/mod_dptools applications/mod_easyroute applications/mod_enum \ + applications/mod_esf applications/mod_expr +export APPLICATION_MODULES_FM= applications/mod_fifo applications/mod_fsv applications/mod_hash applications/mod_lcr applications/mod_limit \ + applications/mod_memcache +export APPLICATION_MODULES_NY= applications/mod_nibblebill applications/mod_redis applications/mod_rss applications/mod_snom \ + applications/mod_soundtouch applications/mod_spandsp applications/mod_spy applications/mod_stress \ + applications/mod_valet_parking applications/mod_vmd applications/mod_voicemail + +export APPLICATIONS_MODULES= $(APPLICATION_MODULES_AE) $(APPLICATION_MODULES_FM) $(APPLICATION_MODULES_NY) $(APPLICATION_MODULES_VZ) +export ASR_TTS_MODULES= asr_tts/mod_pocketsphinx asr_tts/mod_unimrcp +export CODECS_MODULES= codecs/mod_bv codecs/mod_h26x codecs/mod_speex codecs/mod_celt codecs/mod_codec2 codecs/mod_ilbc codecs/mod_mp4v \ + codecs/mod_silk codecs/mod_siren codecs/mod_theora +export DIALPLANS_MODULES= dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml export DIRECTORIES_MODULES= -export DOTNET_MODULES= -export ENDPOINTS_MODULES=endpoints/mod_dingaling endpoints/mod_portaudio endpoints/mod_sofia \ - endpoints/mod_loopback ../../libs/openzap/mod_openzap endpoints/mod_skypopen \ - endpoints/mod_skinny +export ENDPOINTS_MODULES= endpoints/mod_dingaling endpoints/mod_portaudio endpoints/mod_sofia \ + endpoints/mod_loopback ../../libs/frieetdm/mod_freetdm endpoints/mod_skypopen \ + endpoints/mod_skinny export EVENT_HANDLERS_MODULES=event_handlers/mod_event_multicast event_handlers/mod_event_socket event_handlers/mod_cdr_csv -export FORMATS_MODULES=formats/mod_local_stream formats/mod_native_file formats/mod_sndfile formats/mod_tone_stream formats/mod_shout +export FORMATS_MODULES= formats/mod_file_string formats/mod_local_stream formats/mod_native_file formats/mod_portaudio_stream \ + formats/mod_shout formats/mod_sndfile formats/mod_tone_stream export LANGUAGES_MODULES=languages/mod_spidermonkey languages/mod_perl languages/mod_lua languages/mod_python export LOGGERS_MODULES=loggers/mod_console loggers/mod_logfile loggers/mod_syslog export SAY_MODULES=say/mod_say_en say/mod_say_it say/mod_say_de say/mod_say_fr say/mod_say_es say/mod_say_nl say/mod_say_ru export TIMERS_MODULES= -export DISABLED_MODULES=applications/mod_memcache applications/mod_soundtouch directories/mod_ldap languages/mod_java \ - asr_tts/mod_cepstral asr_tts/mod_lumenvox endpoints/mod_wanpipe \ - event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf export XML_INT_MODULES=xml_int/mod_xml_rpc xml_int/mod_xml_curl xml_int/mod_xml_cdr -export MYMODULES=$(PASSTHRU_CODEC_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(DIRECTORIES_MODULES) $(DOTNET_MODULES) $(ENDPOINTS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(TIMERS_MODULES) $(XML_INT_MODULES) +export MYMODULES=$(PASSTHRU_CODEC_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(DIRECTORIES_MODULES) $(ENDPOINTS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(TIMERS_MODULES) $(XML_INT_MODULES) export MODULES=$(MYMODULES) ifndef AUTOCONF From ea5a8c91f6427a3f12048609ec95000ecbab9b30 Mon Sep 17 00:00:00 2001 From: Michal Bielicki Date: Thu, 14 Oct 2010 22:29:29 +0200 Subject: [PATCH 031/230] more deb packaging cleanups --- debian/changelog | 5 + debian/freeswitch-freetdm.debhelper.log | 4 - .../doc/freeswitch-freetdm/changelog.Debian | 799 ------------------ .../share/doc/freeswitch-freetdm/copyright | 51 -- debian/freeswitch.install | 2 - debian/rules | 6 +- 6 files changed, 7 insertions(+), 860 deletions(-) delete mode 100644 debian/freeswitch-freetdm.debhelper.log delete mode 100644 debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/changelog.Debian delete mode 100644 debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/copyright diff --git a/debian/changelog b/debian/changelog index f35e7051b7..2965a92381 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,13 @@ freeswitch (1.0.7-1headgit1) maverick; urgency=low * upgrade: Added mod_amrwb + * switched from openzap to freetdm + * added codec2 theora and other codecs + * mod:soundtouch does not build since soundtouch lib is broken on debian + * mod_flite does not build (requires massive memory for flite to build) * upgrade version to 1.0.7 ... 1.0.6 was last realease -- Michal Bielicki Wed, 13 Oct 2010 22:58:48 -0200 + freeswitch (1.0.6-1ubuntu1) maverick; urgency=low [ Gabriel Gunderson ] diff --git a/debian/freeswitch-freetdm.debhelper.log b/debian/freeswitch-freetdm.debhelper.log deleted file mode 100644 index 60ff8f97c9..0000000000 --- a/debian/freeswitch-freetdm.debhelper.log +++ /dev/null @@ -1,4 +0,0 @@ -dh_installdirs -dh_installdocs -dh_installchangelogs -dh_installinit diff --git a/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/changelog.Debian b/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/changelog.Debian deleted file mode 100644 index f35e7051b7..0000000000 --- a/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/changelog.Debian +++ /dev/null @@ -1,799 +0,0 @@ -freeswitch (1.0.7-1headgit1) maverick; urgency=low - * upgrade: Added mod_amrwb - * upgrade version to 1.0.7 ... 1.0.6 was last realease - - -- Michal Bielicki Wed, 13 Oct 2010 22:58:48 -0200 -freeswitch (1.0.6-1ubuntu1) maverick; urgency=low - - [ Gabriel Gunderson ] - * upgrade: Added mod_callcenter and pulled out Python into its own - package. - - [ Mathieu Parent ] - * Updated Uploaders list - * Updated Standards-Version to 3.9.1 - - -- Mathieu Parent Thu, 23 Sep 2010 15:34:00 +0200 - -freeswitch (1.0.4-1ubuntu2) karmic; urgency=low - - * upgrade: Add more verbosity when building to make it easier to find build - errors. - * upgrade: Remove the requirement for EXACTLY automake1.9 and change it to - need atleast automake 1.9 - * upgrade: Add the modules (directory, cluechoo, and valet_parking) to the - build files. These are in the standard build, so they should be here too. - - -- William King Fri, 18 Dec 2009 14:27:42 -0800 - -freeswitch (1.0.4-1ubuntu1) karmic; urgency=low - - * upgrade: Pulling out the sounds into separate source files for easier management. - - -- William King Sun, 15 Nov 2009 16:38:13 -0800 - -freeswitch (1.0.4-1) unstable; urgency=low - - * new - - -- Mike Jerris Mon, 18 Feb 2009 17:39:00 -0500 - -freeswitch (1.0.3-1) unstable; urgency=low - - * build: add targets cd-sounds[-install] and cd-moh[-install] for 48k sounds (r:11151) - * build: autoconf detect odbc library (FSBUILD-8) - * build: fix sound install on windows build (r:11635,11638) - * build: fix configure --sysconfdir (FSBUILD-84) - * build: fix uclibc build (MODLANG-99) - * build: fix adduser in debian (FSBUILD-122, FSBUILD-102) - * core: fix buffering issues (r:11101,11145,11152-11157,11162,11191,11200) - * core: fix c leg no hangup when converting attended to blind transfer before b leg answers (MODENDP-165/r:11061) - * core: fix codec and media handling issues (r:11104) - * core: fix double close of file handles and add recording of native files (r:11108-11113,11482,11483) - * core: fix file resampling issue (r:11090) - * core: fix incorrect call progress timestamps in timetable (r:11186-11187/FSCORE-268) - * core: fix media handling issues (r:11079-11082) - * core: fix multiple 2833 dtmf handling issues (r:11149,11261,11262,11266,11293,11294,11338/FSCORE-266,FSCORE-273) - * core: send more event types verbos bridge,unbridge,park,unpark (r:11097-11098) - * core: Prevent media setup on failed originates (r:11462/FSCORE-279) - * core: fix recorded soundfiles had random data at end of file (r:11491/MODAPP-205) - * core: fix user for windows service (r:11538/FSCORE-277) - * core: modify variable expansion code to expand in more places and to fix potential security issue from injecting variables (r:11569,11570) - * core: look for soundfiles in more locations based on rate (r:11601/MODFORM-23) - * core: state machine veto behavior changed (r:11610) - * core: add enable_file_write_buffering variable (r:11677) - * core: fix garbled audio on media bug during bridge using stateful codecs (FSCORE-288) - * core: fix tone detect running multiple bugs when detecting multiple tones - * core: add {instant_ringback=true} to make ringback not wait for indication to generate ringback - * core: fix segfault from race condition on multiple reloadxml calls (MOODAPP-211) - * core: modify xml locking so phrases do not lock the xml for the duration of playing them - * core: replace resampler with the speexdsp resampler - * core: fix windows calling convention on threads launched that return a value to fix shutdown segfault (FSCORE-298) - * core: do not auto-export origination_caller_id_* to avoid confusion (r:12052) - * core: API visibility support (GCC/SUNCC) (FSCORE-264) - * core: fix leak in exposed event class serialize method (r:12068) - * core: add volume as possible return value from input callback on embedded languages (r:12114) - * core: add resampler to seech handles (r:12141) - * core: add api.getTime to embedded languages (r:12149) - * freeswitch: allow you to specify -htdocs dir at runtime. (r:11614) - * fs_cli: add "debug" command to change the esl debug level at runtime (r:11057) - * iksemel: update to 1.3 (r:11645) - * libesl: fix disconnect failure (r:11078,11083) - * libesl: fix solaris build (r:11067,11068) - * libesl: add c++ wrapper and swigged wrappers for multiple scripting languages - * libg722_1: fix dct4.h code generator to include the "f" (r:11188-11189,11367) - * libilbc: update to new library from Steve Underwood - * mod_amrwb: add amr wideband passthrough codec (r:11971) - * mod_cepstral: fix failure return code handling (MODASRTTS-9) - * mod_conference: add 'conference xml_list' and 'conference [conf_name] xml_list' (r:11062-11063) - * mod_conference: make conference verbose-events param to control if events have all the channel data or not (r:11073-11077) - * mod_conference: add MINTWO flag to end conference when down to 1 participant (r:11523) - * mod_conference: refactor conference record function (r:11626) - * mod_conference: add conference list summary command (MODAPP-197) - * mod_conference: fix Deadlock or coredump on conference commands play, transfer (MODAPP-209) - * mod_dahdi_codec: added (MODCODEC-7) - * mod_dialplan_xml: make previous auto hunt feature optional and off by defaule use auto_hunt=true session or global variable to enable (r:12144) - * mod_dptools: Add failure_causes channel variable (r:12058) - * mod_easyroute: add configuration file example for custom-query (r:11055) - * mod_easyroute: add custom-query configuration option (r:11054) - * mod_easyroute: fix build error when not configured for odbc (r:11478) - * mod_easyroute: fix memory leak (r:11611) - * mod_erlang_event: add ability to spawn a process (module/function) outbound on a specified node. (r:11460,11477) - * mod_erlang_event: Fix some issues with standing up a new outbound listener and cleaning up after a failed session (r:11479) - * mod_erlang_event: Fix setting up a listener for an outbound session if one doesn't already exist (r:11488) - * mod_erlang_event: add "erlang" fscli command (r:11488) - * mod_erlang_event: Monitor spawned outbound processes for premature exits (r:11489) - * mod_erlang_event: Allow the event encoding strategy to be configurable; choices are string or binary (r:11495) - * mod_erlang_event: Allow certain tuple elements to be binaries or strings, to reduce conversion requirements on the erlang side (r:11496) - * mod_erlang_event: Support sending a message to a registered process to request a pid (when spawning won't cut it) (r:11499) - * mod_erlang_event: Ensure events received while a pid session is being created aren't discarded but are queued instead (r:11500) - * mod_erlang_event: Add freeswitch.erl - An erlang module to make talking to mod_erlang_event more painless (r:11525) - * mod_erlang_event: use rpc:call instead of spawn and to make the registered process argument to handlecall optional (r:11542) - * mod_event_socket: add ability to use a comma sep list of events on event-sink create-listener (r:11056) - * mod_event_socket: add debug logging to event-sink (r:11060) - * mod_event_socket: fix race condition (r:11680,12146) - * mod_dptools: add all modifier to break command (r:11557,11558) - * mod_dptools: add sound_test application (r:11658) - * mod_fax: Dont hangup after sending/receiving faxes - * mod_fifo: pause media bugs while not in a bridge (r:11466,11490) - * mod_fifo: allow unpark during chime list playing (r:11555/MODAPP-206) - * mod_fifo: fix outbound fifos doesn't check if the consumer is in the fifo in question. (r:11561/MODAPP-207) - * mod_fifo: Fix segfault when no argument were supplied to fifo_member call (MODAPP-210) - * mod_lcr: added (r:11180,11184,11532,11609) - * mod_limit: fix memory corruption caused by race condition when using limit hash (r:11070-11071) - * mod_limit: Fix transfer bug, fix leak and make the channel hangup if the extension is \!hangup_cause (r:11604,11932) - * mod_limit: add write different channel variables per realm_id (r:11608) - * mod_limit: Make max argument optional on the limit app, set the limit_usage variable to current count after inserting call in the db (r:11955) - * mod_lua: Create empty argv table when no args are passed to a Lua script (r:11559) - * mod_lua: use dll for lua windows build (FSCORE-299) - * mod_openmrcp: removed (r:11176-11179) - * mod_opal: added - * mod_pocketsphinx: fix leak (r:11974) - * mod_portaudio: fix stuck channels on outbound calls (r:11160,11470,11471,11472,11475,11476,11485) - * mod_python: fix build when site dir is not /usr/lib/python2.4 (r:12070) - * mod_say_en: add short form date/time (MODAPP-180) - * mod_sofia: add auto-rtp-bugs profile option to make rtp bug compensation configurable (r :11146-11147) - * mod_sofia: add support in sdp for a=maxptime (r:11103) - * mod_sofia: fix codec change race condition (r:11143) - * mod_sofia: fix notify event wasn't allowing content-length 0 (r:11106/MODENDP-167) - * mod_sofia: fix sending extra sdp in 200 OK when using 100rel in violation of sdp o/a protocol draft-ietf-sipping-sip-offeranswer-10 (r:11088) - * mod_sofia: fix sip_auto_answer=true (r:11069) - * mod_sofia: improve outbound registration error message (r:11059) - * mod_sofia: reset media timeout on re-invite (r:11161) - * mod_sofia: fix segfault due to missing contact header in invite (r:11463/MODENDP-177) - * mod_sofia: allow tag in gateways as well as with direction inbound/outbound (default both) and call counter (r:11468) - * mod_sofia: add support or SLA, works with Polycom and Snom(Sylantro mode). (r:11562/MODENDP-179) - * mod_sofia: tolerate missing user in the request uri (r:11636) - * mod_sofia: Add purpose=gateways and profile=[name] so xml_curl requests make sense (MDXMLINT-46) - * mod_sofia: Add disable-srv and disable-naptr params to sip profiles (default false) (MODENDP-183) - * mod_sofia: add outbound-proxy param (MODENDP-184) - * mod_sofia: fix segfault with stun-enabled=false (SFSIP-120) - * mod_sofia: Profile Name in Expire Event is incorrect (MODENDP-185) - * mod_sofia: add "scrooge" mode to "inbound-codec-negotiation" (r:11881) - * mod_sofia: Add context to reconfig_sofia (r:12080) - * mod_sofia: fix segfault when calling from a Cisco 7940 using bypass_media (FSCORE-301) - * mod_sofia: ilbc to default to 30 if no mode= fmtp is defined on the inbound (r:12110) - * mod_sofia: fix challenge-realm (r:12113) - * mod_sofia: Segmentation fault when running killgw command on sofia profile without specifying a gateway (MODENDP-189) - * mod_sofia: gateways will inherit the context from its parent unless manually provided (r:12138) - * mod_sndfile: Add IMA ADPCM support (MODFORM-22) - * mod_spidermonkey: fix loading of spidermonkey modules (r:11084-11085) - * mod_spidermonkey: block some unwanted behaviours in session.originate - * mod_spidermonkey_socket: fix gc blocking (MODLANG-97) - * mod_xml_rpc: fixed authentication using @domain syntax (r:11064) - * mod_xml_rpc: fix http content types sent in responses (r:11099,11148,11150) - * mod_voicemail: voicemail insert into the proper fields (MODAPP-190) - * mod_voipcodecs: add G.726 24k (r:12083) - * sofia-sip: update to current sofia-sip repository - * spandsp: sync to latest snapshot and fix windows build - * speex: updated to 1.2rc1 - * sqlite: fix random assert on windows (FSCORE-292) - - -- Mike Jerris Mon, 18 Feb 2009 17:39:00 -0500 - -freeswitch (1.0.2-1) unstable; urgency=low - - * all: don't add module interfaces before returning from error conditions in module load functions (MDXMLINT-36) - * all: fixed multiple memory leaks - * all: improved module unloading/reloading support - * build: add support for --switchconfdir (FSBUILD-84) - * build: fixed netbsd build - * build: make freeswitch stop graceflly with /etc/init.d/freeswitch stop on debian add working dir to start-stop-dir so freeswitch dumps core in workdir - * build: multiple packaging fixes - * build: user freeswitch not added to audio group on deb install (FSBUILD-95) - * Configuration: many updates to default configuration - * core: Add ability to choose uuid from originate string, originate_uuid var (use at your own risk) - * core: add bridge_generate_comfort_noise option for bridge to generate comfort noise to the A leg when there is no audio on the B leg - * core: add chan vars to param event during hangup hook - * core: add exec directive to xml preprocessor (not available on windows) - * core: add force_transfer_dialplan and force_transfer_context variables - * core: add hashing to event header lookup - * core: add hits to tone_detect - * core: add last_dtmf_duration variable - * core: add msleep function to swigged languages - * core: add park_after_bridge variable - * core: add per leg timeouts and specific cause codes in reject_on_single_fail - * core: add runtime selection of the module dir (FSCORE-198) - * core: add scheduler support for heartbeat - * core: add session heartbeat feature - * core: add session.destroy psuedo method to sort of destroy a session at least for the sake of FS - * core: add session.unsetInputCallback - * core: add strftime format string validation for user supplied values - * core: add vars param to switch_ivr_originate for recursion (MODAPP-175) - * core: added a "group" concept to the user directory - * core: added ability to do dns lookup to find ip with host: like stun: (FSCORE-219) - * core: added better locking for codec changes during a call - * core: added current_application and current_application_data variables - * core: added error/ magic endpoint so modules can return error causes in situations like sofia_contact - * core: added read_result channel variable - * core: added support for "F" to indicate flash in dtmf (FSCORE-213) - * core: allow calls to be stolen from originate - * core: allow you to get the privacy bits in the caller_profile - * core: change dso code to load symbols local - * core: changes core flags to be array based so we have more - * core: eavesdrop causes the people being eavesdropped on to not hear ach other (MODAPP-140) - * core: expose time table to variable interface via caller field lookup - * core: fix 100% cpu when sending parked call to moh (FSCORE-234) - * core: fix bridge app to make sure both channels are ready for media when one is only in ringing state - * core: fix buffer overflow (FSCORE-188) - * core: fix conference dial by allowing multiple braces in originate, fix bad pointer op (FSCORE-208) - * core: fix double detection of DTMF in IVR (FSCORE-221) - * core: fix hangup_after_bridge is false on a bridge started with the intercept app - * core: fix issue where pid file is accidentally truncated - * core: fix ivr timeout (FSCORE-181) - * core: fix memory leak in alias tab completion code - * core: fix min digits in read app - * core: fix out-of-bounds pointer in variable expansion (FSCORE-171) - * core: fix segfault in media bugs when in bypass media (FSCORE-193) - * core: fix segfault on gtalk to sip calls (FSCORE-212) - * core: fix segfault on reloadxml (FSCORE-176) - * core: fix segfault on trasfering eavesdopping party (FSCORE-210) - * core: fix segfault using switch_system function (FSCORE-196) - * core: fix session.bridge - * core: fix setting effective_caller_id_name / effective_caller_id_number on bridge dialstring (MODAPP-122) - * core: fix stream_raw_write (MODAPP-145) - * core: fix using resampling on ringback file - * core: fixed performance bottleneck in sqlite db's - * core: fixed race in reloadxml - * core: increment app before execute in case it returns to execute it will go to the next item in the list and not the same - * core: ivr menu max_failures and max_timeouts now default to 3 if not specified or invalid (less than 1) values are specified (FSCORE-244) - * core: ivr_menu max-timeouts option, result in ivr_menu_status var (FSCORE-183) - * core: let b legs use park_after_bridge too - * core: make events less verbose unless verbose_events is set - * core: parse private events during originate - * core: pass pdd data to a leg on oubound calls using bridge - * core: prevent crash in crazy situation with xml interface lookup failures (FSCORE-169) - * core: reduce cpu requirement for generated comfort noise - * core: remove interface names from core db on unload - * core: reworked timing resulting in significant performance increase and better rtp timing - * core: rewrite switch_play_and_get_digits (MODAPP-166) - * core: session.recordFile never terminates (MODLANG-79) - * core: session.transfer make dialplan and context optional - * core: set_user app now sets domain vars as well as user vars - * core: tone_detect not triggering app after tone detection (MODAPP-182) - * core: unprivileged user setting bigger stack for switch_system thread failure (FSCORE-197) - * core: user_exists returns false when fetching a user from XML Curl or other xml interfaces - * libesl: added c event socket library and fs_cli - * libsndfile: fix autoconf 2.62 support (LBSNDF-5) - * mod commands: add "all" modifier to "break" command - * mod_celt: added new module - * mod_commands: Add support for more than 2 variables to uuid_setvar_multi (MODAPP-171) - * mod_commands: Add support for passing the cause of hangup to the uuid_kill command (FSCORE-217) - * mod_commands: add attr lookup to user_data - * mod_commands: add domain_exists fsapi command - * mod_commands: add eval fsapi command - * mod_commands: add flush_dtmf app and uuid_flush_dtmf api command - * mod_commands: add fsctl send_sighup, fsctl shutdown asap, unsched_api commands - * mod_commands: add fsctl shutdown [elegant|restart|cancel] - * mod_commands: add new syntax to uuid_setvar to allow you to unset a var. [value] (MODAPP-167) - * mod_commands: add reload fsapi command to reload a module - * mod_commands: add system fsapi and application (MODAPP-138) - * mod_commands: added hupall fsapi command - * mod_commands: added strftime_tz api command - * mod_commands: break all now stops broadcast too - * mod_commands: fix api command sent through sched_api was getting the last char lopped off - * mod_commands: fix race on transfer with -both - * mod_commands: fix system dialplan app problems (MODAPP-86) - * mod_commands: only send content-type on status when it really is http. - * mod_conference: add fsapi to stop async playback too - * mod_conference: add video caps to mod_conference with video follow audio - * mod_conference: better sound prefix handling when using say: and allow say: on kick sounds. - * mod_conference: fix race in record - * mod_conference: fix runaway thread when floor holder has no video and other people do have video - * mod_conference: fix seg when kicking many members quickly (MODAPP-129) - * mod_conference: fix segfault on invalid chat event - * mod_conference: perpetual sound does not auto-mute, you can do that yourself if you want it - * mod_dialplan_xml: add Hunt- vars in dialplan lookup after transfer - * mod_dialplan_xml: fail call on extensions with nested conditions - * mod_dingaling: (LBDING-7) fix segfault on os x - * mod_dingaling: end call on ice timeout - * mod_dingaling: fix presence on jabber to be less protocol ambiguous - * mod_dingaling: fix segfault (LBDING-10) - * mod_dingaling: update to support latest client from google - * mod_dptools: add a mechanism to tell if a file played from sendmsg over event socket - * mod_dptools: add playback_terminator support to phrase and say app - * mod_dptools: add playback_terminator_used variable (MODAPP-132) - * mod_dptools: add presence application - * mod_dptools: fix originate api not parsing users properly (FSCORE-246) - * mod_dptools: fix record and record_session to create directory if it does not exist (FSCORE-250) - * mod_dptools: fixed limit and + parsing bug in record_session app (MODAPP-148) - * mod_dptools: remove_bugs added to remove all media bugs on a session - * mod_erlang_event: add new module - * mod_event_socket: missing : after Content-Length in event socket (MODEVENT-33) - * mod_event_socket: add event socket listener filters - * mod_event_socket: add stateful listener fsapi commands for ajax-y type event interface over http - * mod_event_socket: fix arg parsing errors (MODEVENT-34) - * mod_event_socket: fix shutdown segfault race (MODEVENT-32) - * mod_event_socket: inbound connection to event_socket can now take over an existing channel with 'myevents ' to take on the behaviour of an outbound socket - * mod_event_socket: let any channel get messages - * mod_event_socket: make event socket wait for hangup on outbound mode and send disconnect message - * mod_expr: fix endless loop - * mod_fax: new module - * mod_fifo: add fifo_consumer_wrapup_time var (MODAPP-117) - * mod_fifo: added callback agents - * mod_fifo: honor keyword silence (MODAPP-118) - * mod_flite: added windows build - * mod_fsv: fix in a windows enviroment opening the record file in text mode. (MODAPP-169) - * mod_http: added new module - * mod_java: updated to new module api to support read/write locks on interface - * mod_limit: accept dialplan context for transfer (MODAPP-161) - * mod_limit: added hashtable based limit functions - * mod_limit: prevent empty error log message (MODAPP-134) - * mod_local_stream: add start_local_stream and stop_local_stream fsapi commands to start/stop dynamically (MODFORM-13) - * mod_local_stream: fix leak and improve error checking - * mod_local_stream: fix seg when no timer name specified in config file. (MODFORM-16) - * mod_loopback: add new module - * mod_lua: add local scripts directory support (MODLANG-86) - * mod_lua: don't eval blank string - * mod_lua: fix originate - * mod_lua: fix segfault (MODLANG-77) - * mod_lua: update to lua 5.1.4 (MODLANG-87) - * mod_lumenvox: removed - * mod_managed: new module replaces mod_mono now supports native .net runtime on windows as well - * mod_opal: added to trunk (still very beta) - * mod_perl: fix segfault (MODLANG-77) - * mod_pocketsphinx: fix rpm build - * mod_portaudio: fix cpu race on inbound call to pa when no ring file is set - * mod_radius_cdr: dictionary update for cause code changes (MODEVENT-27) - * mod_radius_cdr: fix unload (MODEVENT-29) - * mod_shout: add stereo recording broadcast support - * mod_shout: added windows build - * mod_shout: fix segfault when recording mp3's (MODFORM-12) - * mod_shout: improved stability of mp3 decoding - * mod_siren: added new module - * mod_sndfile added support to record 16bit for the various rates including 48kHz - * mod_sofia: Add filter to "sofia status profile XXX" (MODENDP-138) - * mod_sofia: Add force-register-db-domain which works in conjunction with force-register-domain. - * mod_sofia: Add optional and tag to tag. - * mod_sofia: Challenge the right realm when to_host is outside the users domain. (MODENDP-136) - * mod_sofia: Improve notify messages through a proxy (MODENDP-147) - * mod_sofia: MWI for multiple domains (MODAPP-126) - * mod_sofia: Move "a=sendrecv" from session to media section of SDP (MODENDP-148) - * mod_sofia: add 200 OK re-invite without sdp - * mod_sofia: add custom sofia::gateway_state event (MODENDP-112) - * mod_sofia: add fire events for the refer SIP NOTIFY event package (MODENDP-152) - * mod_sofia: add more params for xml_curl directory lookup - * mod_sofia: add new auto vals for challenge-realm param - * mod_sofia: add option to turn of auto_restart of sofia profiles on ip change - * mod_sofia: add params to use sip callid as uuid on inbound calls and uuid as sip callid on outbound calls - * mod_sofia: add parsing of Privacy header for privacy info (MODENDP-133) - * mod_sofia: add proto_specific_hangup_cause to both legs - * mod_sofia: add proxy 3pcc mode - * mod_sofia: add redirect variable to channel as well as partner channe (MODENDP-135) - * mod_sofia: add sip-forbid-register to user params to refuse to let a certian user register - * mod_sofia: add sip: into register-proxy when it's not specified - * mod_sofia: add sip_history_info var for inbound invites. - * mod_sofia: add sip_via_protocol variable - * mod_sofia: add sofia xmlstatus (MODENDP-156) - * mod_sofia: add support for params other than Replaces in Refer-To (MODENDP-143) - * mod_sofia: add support for profiles sharing databases so that you can have a domain that uses multiple profiles for split dns type setups - * mod_sofia: add support for refer transfer involving multiple machines - * mod_sofia: add support to send a notify in the invite dialog by specifying the uuid of the call. (SFSIP-92) - * mod_sofia: add suppress_from_cidname var to not have display name in from header (MODENDP-153) - * mod_sofia: added sip_hangup_disposition variable - * mod_sofia: allow send_message and notify events to send a message/notify without a body if needed. - * mod_sofia: append -1 .. -N postfix after any X-headers as vars that have the same name - * mod_sofia: cache auth_gateway_name in sofia for challenged bye - * mod_sofia: cancel proxy or no-media mode if you purposely answer or pre_answer - * mod_sofia: correct result code mapping for Unallocated Number (MODENDP-124) - * mod_sofia: disable 100rel by default - * mod_sofia: don't accept crypto in the RTP/AVP (MODENDP-126) - * mod_sofia: don't put CN in sdp answer if it was not in the offer. - * mod_sofia: fix Incorrect IP address shows up in SDP "o" field when multiple external IPs available and FS not bound to first (MODENDP-132) - * mod_sofia: fix Wrong RTP media port destination after reinvite/UNHOLD (SFSIP-82) - * mod_sofia: fix bug on linksys where they lie about the ptime and handle linksys transfer problem - * mod_sofia: fix chat (send an IM) assumes that the user's profile is the same as their domain, which isn't necessarily so (SFSIP-83) - * mod_sofia: fix dtmf handling of broken info dtmf endpoints - * mod_sofia: fix eyebeam presence to be RFC compliant (MODENDP-144) - * mod_sofia: fix ip change detection when in proxy mode - * mod_sofia: fix register_proxy ignoring the paramaters (MODENDP-121) - * mod_sofia: fix remote session refresh triggers request glare (MODENDP-131) - * mod_sofia: fix rtp auto adjust running when it should not - * mod_sofia: fix rtp sent to wrong port after some re-INVITE scenarios (MODENDP-141) - * mod_sofia: fix sending of cn packets across bridge when we shouldn't - * mod_sofia: fix sqlite issue with select of the sip contact - * mod_sofia: fixed segfault on invalid presence payload - * mod_sofia: gateway ping needs to look for 501 (SFSIP-78) - * mod_sofia: handle multi contact register responses and register timeout better - * mod_sofia: improve gateway resilience - * mod_sofia: log ip and port you get reply to invite from - * mod_sofia: make multiple-registations=true use the contact method and call-id option to do it the old way - * mod_sofia: make proxy mode pull the port from m=image as well - * mod_sofia: make register-proxy preserve the url composed from proxy but target the packets to desired address (MODENDP-121) - * mod_sofia: many fixes for sonus rtp issues silence_when_idle=400 chanvar to send generated silence duing sleeps etc - * mod_sofia: many fixes in presence handling - * mod_sofia: passthrough t.38 fixes - * mod_sofia: pick ipv4 or ipv6 based on sipip instead of having mixed in sdp - * mod_sofia: send NOTIFY on TCP/UDP depending on the SUBSCRIBE (SFSIP-104) - * mod_sofia: setting profile option multiple-registrations=contact key multi reg off the contact string - * mod_sofia: wait for a reply on refer - * mod_soundtouch: fixes and improvements, many options changed (MODAPP-149) - * mod_soundtouch: updated to new module api - * mod_spidermonkey: Segmentation fault in check_hangup_hook at mod_spidermonkey.c:1589 (MODLANG-74) - * mod_spidermonkey: fix bug in apiExecute - * mod_spidermonkey: fix memory pool handling and leaks - * mod_spidermonkey: limit recursion busting through the stack (FSCORE-202) - * mod_spidermonkey: make session.getVariable return blank string not the word false - * mod_spidermonkey_curl: add optional content-type arg - * mod_spidermonkey_odbc: fix numRows and add numCols - * mod_spidermonkey_odbc: fix segfault (MODLANG-75) - * mod_stress: new module for voice stress analysis - * mod_syslog: don't log blank lines (FSCORE-163) - * mod_tone_stream: let silence_stream://0 indicate perpetual silence - * mod_vmd: add new module to detect voicemail "beep" - * mod_voicemail: Add vm_alternate_greet_id param to directory entry (MODAPP-174) - * mod_voicemail: Patch to add voicemail preference controlling date announcement new param 'play-date-announcement' to values 'first' 'last' or 'never' defaults to first to retain previous behavior (MODAPP-121) - * mod_voicemail: Update mwi light after delete vm via web. (MODAPP-124) - * mod_voicemail: add ability to get to options without listening to every saved message (MODAPP-115) - * mod_voicemail: add ability to skip greeting when leaving a voicemail. (MODAPP-181) - * mod_voicemail: add change-pass-key config file option - * mod_voicemail: add forwarding support - * mod_voicemail: add local dtmf driven alternat vm pass - * mod_voicemail: add proper notification of a vm message being too short - * mod_voicemail: add support for auth via a1-hash - * mod_voicemail: add the "storage-dir" parameter to be set on a per-user basis (MODAPP-133) - * mod_voicemail: add voicemail_greeting_path variable - * mod_voicemail: added voicemail_alternate_greet_id variable - * mod_voicemail: allow changing of password from voicemail to update user directory if using non-static config (MODAPP-156) - * mod_voicemail: created email date (int overflow) (MODAPP-125) - * mod_voicemail: don't try to deliver vm when no file was recorded. (MODAPP-133) - * mod_voicemail: fix MWI with xml_curl used for directory (MODAPP-176) - * mod_voicemail: fix Voicemail messages occasionally lost / stranded (MODAPP-178) - * mod_voicemail: fix invalid event after message deleted (MODAPP-170) - * mod_voicemail: fix mwi for phones with multiple registrations problem (MODAPP-153) - * mod_voicemail: fix voicemail segfault on incorrect password (FSCORE-187) - * mod_voicemail: fix voicemail_inject error handling (MODAPP-133) - * mod_voicemail: fix voicemail_inject usage api call - * mod_voicemail: improve error checking (MODAPP-142) - * mod_voicemail: localize notification emails (MODAPP-139) - * mod_voicemail: make more multi-domain friendly (MODAPP-162) - * mod_voicemail: make playback created file macros optional (MODAPP-150) - * mod_voicemail: recognize operator key in more places (MODAPP-159) - * mod_voicemail: web interface displays incorrect created / last heard dates (MODAPP-123) - * mod_wanpipe: removed - * mod_xml_cdr: add https support - * mod_xml_cdr: add optional a-leg prefix to xml cdr filenames (MDXMLINT-39) - * mod_xml_cdr: add support for fallback webserver for cdr posting (FSCORE-238) - * mod_xml_curl: Allow specification of HTTP method, and dynamic expansion of variables in URI. (MDXMLINT-41) - * mod_xml_curl: added redirect following (max 10) - * mod_xml_ldap: almost a complete rewrite of this module - * mod_xml_rpc: allow setting of global realm without a global user (MDXMLINT-45) - * mod_xml_rpc: fix multiple segfaults - * mod_xml_rpc: fix segfault on originate via http - * sofia-sip: updated to 1.12.10 (plus a few patches) - - -- Mike Jerris Mon, 29 Dec 2008 14:46:00 -0500 - -freeswitch (1.0.1-1) unstable; urgency=low - - * FIX: prevent intercept race condition that can also be solved with continue_on_fail=originator_cancel - * FIX: NULL dereference detected by klockwork (www.klockwork.com) - * FIX: don't open failed local stream (MODFORM-9) - * FIX: instability in mod_local_stream in failure scenarios - * FIX: xmlrpc-c build on OS X 10.4 (FSBUILD-47) - * ENHANCEMENT: Added tab completion on many api commands in console - * ENHANCEMENT: polycom BLF support - * FIX: many sip NAT related fixes in mod_sofia - * FIX: support sip unregister with Contact: * - * FIX: multiple segfaults in xmlrpc-c - * FIX: sip unregister event being skipped - * FIX: hangup properly on malformed sip 3pcc calls being used as a way to ping - * ADD: enable-3pcc sofia profile param, it is now disabled by default. - * ADD: presence events to sip proxy mode - * ADD: legs param to cdr_csv - * ADD: support for perl as an embedded lanugage - * ENHANCEMENT: many new api's and functions to the embedded languages including api support, xml interface support, auto start scripts, and many new objects - * CHANGE: python embedded language api changed to match perl, lua, java - * FIX: many stability fixes in embedded langauges perl, lua, java, python - * ADD: failed_xml_cdr magic channel variable - * FIX: access free memory error in mod_sofia when using respond app - * ENHNACEMENT: make global_setvar only have 2 fields so you can set foo=bar=blah w/o quotes - * FIX: mod_spidermonkey keep hangup hook in the session thread - * ENHANCEMENT: mod_ldap added sasl support and search filters - * ADD: answered, waitForAnswer and mediaReady methods to embedded language Session object - * ENHANCEMENT: mod_voicemail param change to allow notification emails using templates - * ADD: per user acl in sofia - * FIX: deadlock in mod_portaudio - * ENHANCEMENT: blank username in sip will trigger a lookup for the user "nobody" - * ADD: import variable to import variables from a peer channel at time of originate - * FIX: api type fix for c++ modules when incorrectly using enums - * FIX: eliminate need for escaped , in [] on originate - * ADD: NDLB-force-rport option to force behavior as if rport was sent in the via - * ENHANCEMENT: honor execute_on_answer on outbound legs too - * ADD: execute_on_ring variable - * FIX: Seg fault in CoreSession() class destructor - * ADD: per channel caller id in originate - * ADD: sip_outgoing_call_id variable - * FIX: multiple memory leaks in mod_sofia - * FIX: find_local_ip IPv6 support - * ADD: variable expansion to on execute vars.(FSCORE-114) - * ADD: count optional arg to show calls and show channels (MODAPP-103) - * FIX: MODEVENT-25 (WSAWOULDBLOCK error on socket send in windows) in event socket - * FIX: multiple fixes to the logic in mod_say_zh - * ADD: inter digit timeout to swigged embedded languages getDigits method. (MODLANG-65) - * ADD: Linksys P-RTP-Stat SIP header values (SFSIP-66) - * FIX: small leak in core - * ADD: progress_timeout var to originate - * UPDATE: portaudio library - * FIX: added timeout to iax read - * ADD: 'pa rescan' to portaudio to look for new devices - * FIX: wait for broadcast to start when starting async hold to avoid race - * FIX: mod_rss, don't always play the first news feed - * FIX: mod_rss inverval to use the session inteval (audio problems on 30ms channels) - * ADD: Path: support in mod_sofia on register - * FIX: mod_shout record stream - * ENHANCEMENT: mod_voicemail support for effective_caller_id_name/number - * ADD: url encode/decode api calls - * FIX: "nua()" in debug information in sofia instead of the real function name - * FIX: better handling of sips: uris - * FIX: don't seg when using more than SWITCH_MAX_CODECS and bump SWITCH_MAX_CODECS to 50 (we have more than 30 in tree) (MODFORM-10) - * ADD: mod_yaml - * FIX: segfault on freeswitch startup if installed directories are removed - * FIX: segfault when intercept with inbound_late_negotiation=true set - * FIX: dont flood logs with eavesdrop messages (MODAPP-101) - * FIX: don't destroy a codec that has not been created (MODAPP-101) - * ENHANCEMENT: allows the "eavesdrop_group" variable to contain several groups, comma separated. (MODAPP-101) - * FIX: cross compile (FSBUILD-53) - * FIX: add header that Nuaunce considers mandatory (MODASRTTS-5) - * ADD: write locks to the core and a function to unregister event bindings (adds better ability to unload modules) - * ENHANCEMENT: make modules unbind events and un-reserve subclasses on module unload - * ADD: removable xml hook bindings - * ADD: EventConsumer object to embedded languages so you can make event handlers - * FIX: sending CN with supress-cng true - * FIX: segfault in the event system when trying to remove NULL event - * ADD: flags to turn off srtp auth and rtp auto adj (FSCORE-149 && MODENDP-115) - * FIX: use lighter math and avoid infinite loop in port allocator (FSCORE-148) - * ENHANCEMENT: let conference pin entry start during prompt (MODAPP-111) - * ADD: mod_pocketsphinx - * FIX: Misuse of SQLRowCount, issues with MSSQL (MODAPP-105) - * FIX: segfaults in mod_python with dtmf callback - * ENHANCEMENT: mod_conference auto-record parameter (MODAPP-112) - * ENHANCEMENT: reload support to many modules - * FIX: mod_sofia add replaces to supported header - * ENHANCEMENT: add args callback to sleep so you can process dtmf and events while "sleeping" - * ADD: mod_flite - * ENHANCEMENT: switch_xml converted back to c code and support double globs on windows - * ENHANCEMENT: mod_sofia support for adding and removing gateways without restarting profiles - * ADD: extract contact header info into A channel when unhandled 3xx response is received (MODENDP-116) - * FIX: outbound event_socket + late negotiation - * ADD: copy_xml_cdr variable - * ADD: silence_stream (like tone_stream but silent) - * ADD: module_exists api call - * ADD: emailer implementation for windows - * ADD: wait_for_silence application - * FIX: no error message generated if OS is unable to load a module ( due to dependency/installation issues ) - * FIX: segfault in media bugs - * FIX: acl lists not correctly matching all ip adresses - * FIX: mod_spidermonkey exit() does not stop script when called from the hangup callback (return "exit" from the callback) - * FIX: mod_syslog works again - * FIX: crash on terminal resize - * FIX: audio problems on big endian - * ENHANCEMENT: Disable multiple registrations on a per-device basis (MODENDP-117) - * ADD: fifo_consumer_exit_key variable (MODAPP-100) - * ADD: cidr based user auth in mod_sofia - * ADD: uuid_send_dtmf fsapi command (MODAPP-114) - * ADD: server registration fiels to sip_registration database (MODENDP-118) - * FIX: use a variable, realm or to host to find gateway when it's not obvious (handles challenged REFER) - * ADD: timeout to curl run in javascript - * ADD: voicemail_inject fsapi command - * ADD: reboot option for sip phones to flush_inboud_reg sofia profile api command - * FIX: add small padding to end of mp3 to avoid cut off mp3 recording - * FIX: patch multiple SDP connection lines in sdp for proxy media mode (MODENDP-109) - * FIX: don't parse ringback varable in proxy situations - * ADD: per call vm recording ext with vm_message_ext variable - * ADD: sip_bye_h prefix to add headers to bye - * ENHANCEMENT: more interfaces available in show fsapi command - * FIX: don't leak in buffers on realloc fail - * FIX: fail out of a conference call if write fails - * ADD: auto ip-change detection - * ADD: mod_snom - * FIX: mod_sofia don't send sipfrag on transfer to cisco so they don't hang up the call - - -- Mike Jerris Thu, 24 Jul 2008 07:00:00 -0500 - -freeswitch (1.0.1~trunk) unstable; urgency=low - - * Updated revision number - * Fixed init problem reported by Jay Binks (FSSCRIPTS-1) - * Added a patch to the debian build system add more features (thanks to Hadley Rich) (FSBUILD-45) - - Added en-us-callie sounds and music on hold packages - - Added recommends and suggests - - Added mod_say_es and mod_say_nl - - Updated descriptions - - Added mod_cdr_csv - * Fixed typos and some errors in the previus patch. - * Modified monit script. Now it should work. - * The debian build system now bootstrap automagically if it's necessary and all scripts are in place. - - -- Massimo Cetra Sun, 6 Jul 2008 16:30:00 +0100 - -freeswitch (1.0.0-1) unstable; urgency=low - - * Enhanced sofia sip nat handling - * Many fixes found by Klockwork (www.klocwork.com) - * Added disable_app_log variable - * Fixed mod_local_stream with rates on windows - * Fixed finding of files in rate dirs on windows - * Fixed memory corruption from sofia_contact function - * Added sofia profile param NDLB-received-in-nat-reg-contact - * Added sofia profile param aggressive-nat-detection - * Fixed video sip calls in proxy media mode - * Added bridge_terminate_key var - * Update xmlrpc-c lib to trunk revision from upstream, fix windows xmlrpc - * Enhanced nat handling in proxy media mode in sip - * Add progress media to timetable so you can calculate pdd - * Fixed seg when using unicast on socket when call has no read_codec - * Fixed missed log events on busy box - * Added -bleg to intercept - * Enhance configure detection of python - * Fixed build on solaris and freebsd for several modules - * Added param "vm-email-only" to make voicemail sent by email only (previously default behavior) - * Added param "vm-mailto-notify" to allow sending a notification email - * Fixed mod_java build - * Fixed mwi failures for some devices that don't subscribe - * Removed fsapi functions (killchan, transfer, session_displace, reject) - * Removed fsapi functions (session_record, broadcast, hold, media) - * Many updates to sofia-sip library including over 100 fixes - - -- Michael Jerris Tue, 27 May 2008 01:30:00 -0400 - -freeswitch (1.0~rc6-1) unstable; urgency=low - - * Changed to not allow pass_2833 on transcoded calls - (it never worked, now it will tell you) - * Enhanced sofia sip nat handling - * Fix libedit build on solaris - * Fix session timers in mod_sofia - * Fix conference fire-call - * Change: add var_event down into the endpoints so chans - with no parents can still pass options - * Added enable-post-var param to xml_rpc - * Fix mod_lua build on solaris - * Many fixes found by Klockwork (www.klocwork.com) - * Add unregister event in mod_sofia - * Enhance python configure detection - * Add vm_boxcount api func - * Fixed att_xfer issue - * Fix sip now includes the Allow-Events header in more places - - -- Michael Jerris Tue, 13 May 2008 02:01:00 -0400 - -freeswitch (1.0~rc5-1) unstable; urgency=low - - * Changed internal state names to avoid confusion - Fixed video negotiation - Enhanced accuracy of windows timer - Fixed mod_ldap build - Added dialplan and context to sql table for channels - Multiple fixes to mod_lua and mod_perl - Fixed logic bug in fifo causing segfault - internal changes to sip stack so we can remove a hash redundant to the stack - Fixed multiple memory leaks in mod_sofia - Fixed event fetch segfault on sip subscribe - Fixed segfault on timer rollover in sofia on 64bit - Fixed audio timing issues in mod_portaudio - Changed names of sip profiles in default config to avoid confusion - Fixed memory usage leak-like behavior when playing files requiring resampling - Removed some unused api's - Fix rtp timeout when playing moh - Removed some un-needed libraries and files from tree - Fixed multiple issues in sip stack including multiple segfaults - Added support for sip transfers on bypass_media and proxy_media calls - Added say application - Fixed --disable-debug configure option - Enhanced switch_cpp wrapper (and perl, python, lua, java) - Fixed segfault on inavalid stun response - Fixed configure help output - Fixed segfault on mp3 playback - Fixed assert on invalid sdp (missing m= line) - Added configurable windows service name - Fixed proxy mode call transition to non proxy call - Fixed solaris build of voipcodecs - Fixed sofia seg when call failure edge case - - -- Michael Jerris Tue, 13 May 2008 02:01:00 -0400 - -freeswitch (1.0~8327) unstable; urgency=low - - * Adding perl and lua separate packages - * Adding mod_voipcodecs - - -- root Tue, 6 May 2008 09:46:26 +0000 - -freeswitch (1.0~rc4-1) unstable; urgency=low - * Add tab completion in cli - Add "inline" dialplan - Fixed segfault in enum - Enhance enum to fork dial equal priority entries - Added auto-reload to enum - Fixed odbc bug is mod_sofia presence handling - Add presence for conference and dial an eavesdrop - Fix stack overflow segfault when recursively parking calls - Fixed race is sofia registration handling - Enhance sofia registration, unregister on keep-alive OPTIONS failure - Added internal routing loop detection/avoidance - Fixed race in bgapi in event socket - Fixed vars to execute apps before bridge "bridge_pre_execute_aleg_app" and "bridge_pre_execute_bleg_app" - Fixed re-setting sound prefix to no prefix after a pharse - Enhanced setting of bracket vars from originate so they show in the CHANNEL_ORIGINATE event - Add "enable-timer" and "enable-100rel" options to turn off default behaviors in sofia - Add originate_timeout to originate vars - Fixed hanging channels in mod_portaudio - Added auto time sync on vps migration to different hardware - Fixed seg on transfer when both legs are not sip - Added configurable dtmf duration defaults - Enhanced voicemail, allow interruption of hello message - Fixed voicemail to not light up light on saved messages - Enhance mod_amr honor disable dtx in fmtp (MODCODEC-3) - Fixed bootstrap to install automake dependencies so you can use tarball without same version of automake installed - Fixed MODLANG-56 (bad audio on originate and javascript streamFile) - Added hold/unhold dialplan apps - Enhanced sofia error checking to outlaw 0.0.0.0 in sofia ip params - Backport fixes from sofia-sip tree - Fixed MSVC build - Fixed segfault on sip SUBSCRIBE with Expires: 0 - Added mod_say_zh - Added --with-pyton and --with-pyton-config configure options - Added mod_lua - Enhanced switch_cpp wrapper in core and normalized interfaces for perl, python, lua, and java - Fixed multiple issues in cpp wrapper and the languages perl, python, lua and java - Added back mod_perl - Added sofia gateway option ping to adjust options ping frequency - Added .net event socket lib to contrib - Fixed passing of exact response codes of sip across a bridge - Added mod_reference, reference endpoint module - Enhanced build so you can now make commented out modules using "make mod_name" - - -- Michael Jerris Wed, 23 Apr 2008 12:58:00 -0400 - -freeswitch (1.0~rc3-1) unstable; urgency=low - * Enhance xml menu system - fixes upstream from sofia-sip library - Enhance mod_fifo - added close method to ODBC spidermonkey class - Fix multiple bugs in the cpp wrapper used in mod_java and mod_python - Fix hung sip channel issue using respond app or on re-invite with bypass media after 1xx or 2xx responses - - -- Michael Jerris Wed, 9 Apr 2008 12:58:22 -0400 - -freeswitch (1.0~rc2-1) unstable; urgency=low - * Fixed speex protocol negotiation issues (8k vs 16k) - Fixed mod_iax race conditions - Fixed ptime negotiation issues when re-packetizing - Added ip based acl lists - * - -- Michael Jerris Wed, 9 Apr 2008 12:58:22 -0400 - -freeswitch (1.0~rc1-1) unstable; urgency=low - * loads of fixes - new cdr-csv module - new spidermonkey-curl module - - -- Michal Bielicki Mon, 14 Jan 2008 23:37:04 +0100 - -freeswitch (1.0~beta3-1) unstable; urgency=low - - * Additional scripts for changing the user to freeswitch - Added Startup Scripts - Monit integration - Settings file for integration into init - init.d file - added user freeswitch to own and run all off freeswitch - cleaned up config file control - new upstream release - split off codec pakcages - split off spidermonkey packages - - -- Michal Bielicki Tue, 27 Nov 2007 13:20:21 +0100 - -freeswitch (1.0~beta2-1) unstable; urgency=low - - * New upstream release - - -- Paul van Genderen Wed, 17 Oct 2007 19:32:09 +0200 - -freeswitch (1.0~beta1-1) unstable; urgency=low - - * New packages. - - -- Robert McQueen Sun, 12 Nov 2006 17:32:23 -0500 diff --git a/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/copyright b/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/copyright deleted file mode 100644 index 45eb67b0c9..0000000000 --- a/debian/freeswitch-freetdm/usr/share/doc/freeswitch-freetdm/copyright +++ /dev/null @@ -1,51 +0,0 @@ -This package was debianized by Michal Bielicki - on Now 25, 2007. - -The current Debian maintainer is Nicholas Amorim - -The source was downloaded from http://www.freewitch.org/ - -Upstream authors: -Anthony Minessale II -Portions created by the Initial Developer are Copyright (C) 2006-2009 -the Initial Developer. All Rights Reserved. - -The PRIMARY AUTHORS are (and/or have been): - - Anthony Minessale II - Primary developer of all core components - and many of the included modules. Much of freeswitch is based on his work. - - Michael Jerris - Windows porter and responsible for the - windows\msvc build system. - -And here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS -- -people who have submitted patches, reported bugs, and generally made Freeswitch -that much better: - - Brian K. West - For countless hours of work on BSD and Mac support, finding countless bugs, and moral support. Xcode project files. - Joshua Colp - For his help making mod_exosip possible (which we are now getting rid of but oh well), - and for just being a swell guy! (until he backstabbed us, c'est la vie) - Michal "cypromis" Bielicki (michal.bielicki AT voiceworks.pl) - Solaris porting, and autotools enhancements, debian, rpm and solaris packaging. - James Martelletti - All around cool guy (mod_syslog) - Johny Kadarisman - Yossi Neiman of Cartis Solutions, Inc. - implementation of mod_cdr (perldd, mysql, csv) - Stefan Knoblich - Various patches and support. Thanks. - Justin Unger - Lots of help with patches and SIP testing. Thanks! - Paul D. Tinsley - Various patches and support. - Ken Rice - - xmlcdr, sofia improvements, load testing. - Neal Horman - conference improvements, switch_ivr menu additions and other tweaks. - Johny Kadarisman - mod_python fixups. - Michael Murdock - testing, documentation, bug finding and usability enhancements. - Matt Klein - Jonas Gauffin - Bugfixes and additions in mod_spidermonkey_odbc - Damjan Jovanovic - mod_java - -A big THANK YOU goes to: - -Justin Cassidy - Build related cleanups and automatic build setup. -Bret McDanel - Javascript Documentation, constant feedback and input, many other things I am sure I am forgetting. - -You are free to distribute this software under the terms of -the MPL Mozilla Public License. On Debian systems, the complete -text of the GNU General Public License can be found in the file -'/usr/share/common-licenses/MPL'. diff --git a/debian/freeswitch.install b/debian/freeswitch.install index aa240a7f5d..f0c6fa830a 100644 --- a/debian/freeswitch.install +++ b/debian/freeswitch.install @@ -100,7 +100,6 @@ opt/freeswitch/conf/sip_profiles/internal-ipv6.xml opt/freeswitch/conf/sip_profiles/internal.xml opt/freeswitch/conf/skinny_profiles/internal.xml opt/freeswitch/conf/tetris.ttml -opt/freeswitch/conf/tones.conf opt/freeswitch/conf/vars.xml opt/freeswitch/conf/voicemail.tpl opt/freeswitch/conf/web-vm.tpl @@ -158,7 +157,6 @@ opt/freeswitch/mod/mod_skypopen.so* opt/freeswitch/mod/mod_sndfile.so* opt/freeswitch/mod/mod_snom.so* opt/freeswitch/mod/mod_sofia.so* -opt/freeswitch/mod/mod_soundtouch.so* opt/freeswitch/mod/mod_spandsp.sp* opt/freeswitch/mod/mod_speex.so* opt/freeswitch/mod/mod_spy.so* diff --git a/debian/rules b/debian/rules index 442d82e190..0c1aae9654 100755 --- a/debian/rules +++ b/debian/rules @@ -15,7 +15,7 @@ export APPLICATION_MODULES_AE= applications/mod_avmd applications/mod_callcenter export APPLICATION_MODULES_FM= applications/mod_fifo applications/mod_fsv applications/mod_hash applications/mod_lcr applications/mod_limit \ applications/mod_memcache export APPLICATION_MODULES_NY= applications/mod_nibblebill applications/mod_redis applications/mod_rss applications/mod_snom \ - applications/mod_soundtouch applications/mod_spandsp applications/mod_spy applications/mod_stress \ + applications/mod_spandsp applications/mod_spy applications/mod_stress \ applications/mod_valet_parking applications/mod_vmd applications/mod_voicemail export APPLICATIONS_MODULES= $(APPLICATION_MODULES_AE) $(APPLICATION_MODULES_FM) $(APPLICATION_MODULES_NY) $(APPLICATION_MODULES_VZ) @@ -23,7 +23,6 @@ export ASR_TTS_MODULES= asr_tts/mod_pocketsphinx asr_tts/mod_unimrcp export CODECS_MODULES= codecs/mod_bv codecs/mod_h26x codecs/mod_speex codecs/mod_celt codecs/mod_codec2 codecs/mod_ilbc codecs/mod_mp4v \ codecs/mod_silk codecs/mod_siren codecs/mod_theora export DIALPLANS_MODULES= dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml -export DIRECTORIES_MODULES= export ENDPOINTS_MODULES= endpoints/mod_dingaling endpoints/mod_portaudio endpoints/mod_sofia \ endpoints/mod_loopback ../../libs/frieetdm/mod_freetdm endpoints/mod_skypopen \ endpoints/mod_skinny @@ -33,9 +32,8 @@ export FORMATS_MODULES= formats/mod_file_string formats/mod_local_stream formats export LANGUAGES_MODULES=languages/mod_spidermonkey languages/mod_perl languages/mod_lua languages/mod_python export LOGGERS_MODULES=loggers/mod_console loggers/mod_logfile loggers/mod_syslog export SAY_MODULES=say/mod_say_en say/mod_say_it say/mod_say_de say/mod_say_fr say/mod_say_es say/mod_say_nl say/mod_say_ru -export TIMERS_MODULES= export XML_INT_MODULES=xml_int/mod_xml_rpc xml_int/mod_xml_curl xml_int/mod_xml_cdr -export MYMODULES=$(PASSTHRU_CODEC_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(DIRECTORIES_MODULES) $(ENDPOINTS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(TIMERS_MODULES) $(XML_INT_MODULES) +export MYMODULES=$(PASSTHRU_CODEC_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(ENDPOINTS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(XML_INT_MODULES) export MODULES=$(MYMODULES) ifndef AUTOCONF From 3da5dd0e362256f4550ff35c3da6ec9312060058 Mon Sep 17 00:00:00 2001 From: Michal Bielicki Date: Thu, 14 Oct 2010 22:47:08 +0200 Subject: [PATCH 032/230] typo in debian rules file made freetdm disappear --- debian/rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/rules b/debian/rules index 0c1aae9654..0e5f4a3d88 100755 --- a/debian/rules +++ b/debian/rules @@ -24,7 +24,7 @@ export CODECS_MODULES= codecs/mod_bv codecs/mod_h26x codecs/mod_speex codecs/mod codecs/mod_silk codecs/mod_siren codecs/mod_theora export DIALPLANS_MODULES= dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml export ENDPOINTS_MODULES= endpoints/mod_dingaling endpoints/mod_portaudio endpoints/mod_sofia \ - endpoints/mod_loopback ../../libs/frieetdm/mod_freetdm endpoints/mod_skypopen \ + endpoints/mod_loopback ../../libs/freetdm/mod_freetdm endpoints/mod_skypopen \ endpoints/mod_skinny export EVENT_HANDLERS_MODULES=event_handlers/mod_event_multicast event_handlers/mod_event_socket event_handlers/mod_cdr_csv export FORMATS_MODULES= formats/mod_file_string formats/mod_local_stream formats/mod_native_file formats/mod_portaudio_stream \ From 5b7ba536d70cd0e4f312063b71abc33e5b8c30bd Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Thu, 14 Oct 2010 16:32:31 -0500 Subject: [PATCH 033/230] move to proper location --- Freeswitch.2010.sln | 2 +- {Setup => w32/Setup}/Setup.wixproj | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename {Setup => w32/Setup}/Setup.wixproj (100%) diff --git a/Freeswitch.2010.sln b/Freeswitch.2010.sln index 4b67f51114..5722802839 100644 --- a/Freeswitch.2010.sln +++ b/Freeswitch.2010.sln @@ -705,7 +705,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_h323", "src\mod\endpoin EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_distributor", "src\mod\applications\mod_distributor\mod_distributor.2010.vcxproj", "{5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F}" EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup", "Setup\Setup.wixproj", "{47213370-B933-487D-9F45-BCA26D7E2B6F}" +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup", "w32\Setup\Setup.wixproj", "{47213370-B933-487D-9F45-BCA26D7E2B6F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Setup/Setup.wixproj b/w32/Setup/Setup.wixproj similarity index 100% rename from Setup/Setup.wixproj rename to w32/Setup/Setup.wixproj From 1752405754633af7282af3b82043487d567fed7e Mon Sep 17 00:00:00 2001 From: Michal Bielicki Date: Fri, 15 Oct 2010 01:07:15 +0200 Subject: [PATCH 034/230] added include path for openjdk6 includes on debian --- libs/esl/java/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/esl/java/Makefile b/libs/esl/java/Makefile index a1e5f93294..9474a83276 100644 --- a/libs/esl/java/Makefile +++ b/libs/esl/java/Makefile @@ -1,4 +1,4 @@ -LOCAL_CFLAGS=-I../src/include -I/usr/java/jdk1.6.0_14/include -I/usr/java/jdk1.6.0_14/include/linux +LOCAL_CFLAGS=-I../src/include -I/usr/java/jdk1.6.0_14/include -I/usr/java/jdk1.6.0_14/include/linux -I/usr/lib/jvm/java-6-openjdk/include/ GCC_WARNING_JUNK=-w CLASSES=org/freeswitch/esl/* From 2fe0e00e4556a34bd5cc2873ad57afbbc9691b4d Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 14 Oct 2010 18:52:14 -0500 Subject: [PATCH 035/230] update dmachine code --- src/switch_ivr_async.c | 71 ++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 299c24d4c4..dae7ee07e6 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -223,11 +223,11 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_bind(switch_ivr_dmachine_t * } if (binding->is_regex) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Digit parser %s: binding realm: %s regex: %s key: %.4d callback: %p data: %p\n", - dmachine->name, realm, digits, key, (void *)(intptr_t) callback, user_data); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Digit parser %s: binding %s/%s/%d callback: %p data: %p\n", + dmachine->name, digits, realm, key, (void *)(intptr_t) callback, user_data); } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Digit parser %s: binding realm %s digits: %4s key: %.4d callback: %p data: %p\n", - dmachine->name, realm, digits, key, (void *)(intptr_t) callback, user_data); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Digit parser %s: binding %s/%s/%d callback: %p data: %p\n", + dmachine->name, digits, realm, key, (void *)(intptr_t) callback, user_data); } return SWITCH_STATUS_SUCCESS; @@ -244,60 +244,61 @@ typedef enum { static dm_match_t switch_ivr_dmachine_check_match(switch_ivr_dmachine_t *dmachine, switch_bool_t is_timeout) { dm_match_t best = DM_MATCH_NONE; - switch_ivr_dmachine_binding_t *bp, *exact_bp = NULL; - int exact_count = 0, partial_count = 0, both_count = 0; + switch_ivr_dmachine_binding_t *bp, *exact_bp = NULL, *partial_bp = NULL, *both_bp = NULL, *r_bp = NULL; - if (!dmachine->cur_digit_len || !dmachine->realm) goto end; for(bp = dmachine->realm->binding_list; bp; bp = bp->next) { - if (bp->is_regex) { switch_status_t r_status = switch_regex_match(dmachine->digits, bp->digits); if (r_status == SWITCH_STATUS_SUCCESS) { if (is_timeout) { best = DM_MATCH_EXACT; - exact_count++; exact_bp = bp; break; } best = DM_MATCH_PARTIAL; - partial_count++; - continue; } } else { + if (!exact_bp && !strcmp(bp->digits, dmachine->digits)) { - exact_bp = bp; best = DM_MATCH_EXACT; - exact_count++; - continue; + exact_bp = bp; } - if (!strncmp(dmachine->digits, bp->digits, strlen(dmachine->digits))) { - if (best == DM_MATCH_EXACT) { - if (is_timeout) { - best = DM_MATCH_EXACT; - exact_count++; - exact_bp = bp; - } else { - best = DM_MATCH_BOTH; - both_count++; - } + if (!(both_bp && partial_bp) && !strncmp(dmachine->digits, bp->digits, strlen(dmachine->digits))) { + if (exact_bp) { + best = DM_MATCH_BOTH; + both_bp = bp; } else { best = DM_MATCH_PARTIAL; - partial_count++; + partial_bp = bp; } - break; } + + if (both_bp && exact_bp && partial_bp) break; } } end: + + if (is_timeout) { + if (both_bp) { + r_bp = both_bp; + } else if (partial_bp) { + r_bp = partial_bp; + } + } + + if (best == DM_MATCH_EXACT && exact_bp) { + r_bp = exact_bp; + } - if (!both_count && exact_bp) { - dmachine->last_matching_binding = exact_bp; + + if (r_bp) { + dmachine->last_matching_binding = r_bp; switch_set_string(dmachine->last_matching_digits, dmachine->digits); best = DM_MATCH_EXACT; } @@ -343,7 +344,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t * switch_bool_t is_timeout = switch_ivr_dmachine_check_timeout(dmachine); dm_match_t is_match = switch_ivr_dmachine_check_match(dmachine, is_timeout); switch_status_t r; - + int clear = 0; + if (zstr(dmachine->digits) && !is_timeout) { r = SWITCH_STATUS_SUCCESS; } else if (dmachine->cur_digit_len > dmachine->max_digit_len) { @@ -362,7 +364,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t * dmachine->is_match = 1; dmachine->match.type = DM_MATCH_POSITIVE; - + if (dmachine->last_matching_binding->callback) { dmachine->last_matching_binding->callback(&dmachine->match); } @@ -371,10 +373,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t * dmachine->match.user_data = dmachine->user_data; dmachine->match_callback(&dmachine->match); } - + clear++; } else if (is_timeout) { r = SWITCH_STATUS_TIMEOUT; - } else if (dmachine->cur_digit_len == dmachine->max_digit_len) { + } else if (is_match == DM_MATCH_NONE && dmachine->cur_digit_len == dmachine->max_digit_len) { r = SWITCH_STATUS_NOTFOUND; } else { r = SWITCH_STATUS_SUCCESS; @@ -390,9 +392,11 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t * dmachine->match.user_data = dmachine->user_data; dmachine->nonmatch_callback(&dmachine->match); } + + clear++; } - if (r != SWITCH_STATUS_SUCCESS) { + if (clear) { switch_ivr_dmachine_clear(dmachine); } @@ -414,6 +418,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_feed(switch_ivr_dmachine_t * SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_clear(switch_ivr_dmachine_t *dmachine) { + memset(dmachine->digits, 0, sizeof(dmachine->digits)); dmachine->cur_digit_len = 0; dmachine->last_digit_time = 0; From ac19f73cc4c965413821b0432bdff5e908e0593f Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 14 Oct 2010 18:58:28 -0500 Subject: [PATCH 036/230] refactor conference to use switch_ivr_dmachine for the digit parsing controls are now bound to each member separately based on conference_controls channel var, then the caller-controls param in the profile or a default to "default" please test and report any issues in jira http://jira.freeswitch.org --- .../mod_conference/mod_conference.c | 377 ++++++++---------- 1 file changed, 159 insertions(+), 218 deletions(-) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 31d2158f78..fef059cf07 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -97,29 +97,6 @@ static struct { switch_event_node_t *node; } globals; -typedef enum { - CALLER_CONTROL_MUTE, - CALLER_CONTROL_MUTE_ON, - CALLER_CONTROL_MUTE_OFF, - CALLER_CONTROL_DEAF_MUTE, - CALLER_CONTROL_ENERGY_UP, - CALLER_CONTROL_ENERGY_EQU_CONF, - CALLER_CONTROL_ENERGY_DN, - CALLER_CONTROL_VOL_TALK_UP, - CALLER_CONTROL_VOL_TALK_ZERO, - CALLER_CONTROL_VOL_TALK_DN, - CALLER_CONTROL_VOL_LISTEN_UP, - CALLER_CONTROL_VOL_LISTEN_ZERO, - CALLER_CONTROL_VOL_LISTEN_DN, - CALLER_CONTROL_HANGUP, - CALLER_CONTROL_MENU, - CALLER_CONTROL_DIAL, - CALLER_CONTROL_EVENT, - CALLER_CONTROL_LOCK, - CALLER_CONTROL_TRANSFER, - CALLER_CONTROL_EXEC_APP -} caller_control_t; - /* forward declaration for conference_obj and caller_control */ struct conference_member; typedef struct conference_member conference_member_t; @@ -133,15 +110,7 @@ typedef struct call_list call_list_t; struct caller_control_actions; -typedef struct caller_control_fn_table { - char *key; - char *digits; - caller_control_t action; - void (*handler) (conference_member_t *, struct caller_control_actions *); -} caller_control_fn_table_t; - typedef struct caller_control_actions { - caller_control_fn_table_t *fndesc; char *binded_dtmf; void *data; } caller_control_action_t; @@ -271,12 +240,12 @@ typedef struct conference_obj { uint32_t max_members; char *maxmember_sound; uint32_t announce_count; - switch_ivr_digit_stream_parser_t *dtmf_parser; char *pin; char *pin_sound; char *bad_pin_sound; char *profile_name; char *domain; + char *caller_controls; uint32_t flags; member_flag_t mflags; switch_call_cause_t bridge_hangup_cause; @@ -362,8 +331,6 @@ struct conference_member { uint32_t resample_out_len; conference_file_node_t *fnode; conference_relationship_t *relationships; - switch_ivr_digit_stream_parser_t *dtmf_parser; - switch_ivr_digit_stream_t *digit_stream; switch_speech_handle_t lsh; switch_speech_handle_t *sh; uint32_t verbose_events; @@ -371,6 +338,7 @@ struct conference_member { uint32_t avg_itt; uint32_t avg_tally; struct conference_member *next; + switch_ivr_dmachine_t *dmachine; }; /* Record Node */ @@ -414,6 +382,7 @@ static void conference_send_all_dtmf(conference_member_t *member, conference_obj static switch_status_t conference_say(conference_obj_t *conference, const char *text, uint32_t leadin); static void conference_list(conference_obj_t *conference, switch_stream_handle_t *stream, char *delim); static conference_obj_t *conference_find(char *name); +static void member_bind_controls(conference_member_t *member, const char *controls); SWITCH_STANDARD_API(conf_api_main); @@ -656,6 +625,7 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe char msg[512]; /* conference count announcement */ call_list_t *call_list = NULL; switch_channel_t *channel; + const char *controls = NULL; switch_assert(conference != NULL); switch_assert(member != NULL); @@ -765,6 +735,24 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe } switch_channel_clear_app_flag_key("conf_silent", channel, CONF_SILENT_REQ); + + + switch_ivr_dmachine_create(&member->dmachine, "mod_conference", NULL, 500, 0, NULL, NULL, NULL); + + controls = switch_channel_get_variable(channel, "conference_controls"); + + if (zstr(controls)) { + controls = conference->caller_controls; + } + + if (zstr(controls)) { + controls = "default"; + } + + if (strcasecmp(controls, "none")) { + member_bind_controls(member, controls); + } + } unlock_member(member); switch_mutex_unlock(member->audio_out_mutex); @@ -795,6 +783,8 @@ static switch_status_t conference_del_member(conference_obj_t *conference, confe member->sh = NULL; unlock_member(member); + switch_ivr_dmachine_destroy(&member->dmachine); + switch_mutex_lock(conference->mutex); switch_mutex_lock(conference->member_mutex); switch_mutex_lock(member->audio_in_mutex); @@ -1462,8 +1452,6 @@ static void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, v switch_thread_rwlock_unlock(conference->rwlock); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Write Lock OFF\n"); - switch_ivr_digit_stream_parser_destroy(conference->dtmf_parser); - if (conference->sh) { switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE; switch_core_speech_close(&conference->lsh, &flags); @@ -1693,6 +1681,7 @@ static void conference_loop_fn_volume_talk_zero(conference_member_t *member, cal switch_snprintf(msg, sizeof(msg), "Volume level %d", member->volume_out_level); conference_member_say(member, msg, 0); + } static void conference_loop_fn_volume_talk_dn(conference_member_t *member, caller_control_action_t *action) @@ -2307,29 +2296,6 @@ static void launch_conference_loop_input(conference_member_t *member, switch_mem switch_thread_create(&thread, thd_attr, conference_loop_input, member, pool); } -static caller_control_fn_table_t ccfntbl[] = { - {"mute", "0", CALLER_CONTROL_MUTE, conference_loop_fn_mute_toggle}, - {"mute on", NULL, CALLER_CONTROL_MUTE_ON, conference_loop_fn_mute_on}, - {"mute off", NULL, CALLER_CONTROL_MUTE_OFF, conference_loop_fn_mute_off}, - {"deaf mute", "*", CALLER_CONTROL_DEAF_MUTE, conference_loop_fn_deafmute_toggle}, - {"energy up", "9", CALLER_CONTROL_ENERGY_UP, conference_loop_fn_energy_up}, - {"energy equ", "8", CALLER_CONTROL_ENERGY_EQU_CONF, conference_loop_fn_energy_equ_conf}, - {"energy dn", "7", CALLER_CONTROL_ENERGY_DN, conference_loop_fn_energy_dn}, - {"vol talk up", "3", CALLER_CONTROL_VOL_TALK_UP, conference_loop_fn_volume_talk_up}, - {"vol talk zero", "2", CALLER_CONTROL_VOL_TALK_ZERO, conference_loop_fn_volume_talk_zero}, - {"vol talk dn", "1", CALLER_CONTROL_VOL_TALK_DN, conference_loop_fn_volume_talk_dn}, - {"vol listen up", "6", CALLER_CONTROL_VOL_LISTEN_UP, conference_loop_fn_volume_listen_up}, - {"vol listen zero", "5", CALLER_CONTROL_VOL_LISTEN_ZERO, conference_loop_fn_volume_listen_zero}, - {"vol listen dn", "4", CALLER_CONTROL_VOL_LISTEN_DN, conference_loop_fn_volume_listen_dn}, - {"hangup", "#", CALLER_CONTROL_HANGUP, conference_loop_fn_hangup}, - {"event", NULL, CALLER_CONTROL_EVENT, conference_loop_fn_event}, - {"lock", NULL, CALLER_CONTROL_LOCK, conference_loop_fn_lock_toggle}, - {"transfer", NULL, CALLER_CONTROL_TRANSFER, conference_loop_fn_transfer}, - {"execute_application", NULL, CALLER_CONTROL_EXEC_APP, conference_loop_fn_exec_app} -}; - -#define CCFNTBL_QTY (sizeof(ccfntbl)/sizeof(ccfntbl[0])) - /* marshall frames from the conference (or file or tts output) to the call leg */ /* NB. this starts the input thread after some initial setup for the call leg */ static void conference_loop_output(conference_member_t *member) @@ -2400,13 +2366,6 @@ static void conference_loop_output(conference_member_t *member) /* Start the input thread */ launch_conference_loop_input(member, switch_core_session_get_pool(member->session)); - /* build a digit stream object */ - if (member->conference->dtmf_parser != NULL - && switch_ivr_digit_stream_new(member->conference->dtmf_parser, &member->digit_stream) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, - "Danger Will Robinson, there is no digit parser stream object\n"); - } - if ((call_list = switch_channel_get_private(channel, "_conference_autocall_list_"))) { const char *cid_name = switch_channel_get_variable(channel, "conference_auto_outcall_caller_id_name"); const char *cid_num = switch_channel_get_variable(channel, "conference_auto_outcall_caller_id_number"); @@ -2457,9 +2416,7 @@ static void conference_loop_output(conference_member_t *member) while (switch_test_flag(member, MFLAG_RUNNING) && switch_test_flag(member, MFLAG_ITHREAD) && switch_channel_ready(channel)) { char dtmf[128] = ""; - char *digit; switch_event_t *event; - caller_control_action_t *caller_action = NULL; int use_timer = 0; switch_buffer_t *use_buffer = NULL; uint32_t mux_used = 0; @@ -2513,40 +2470,13 @@ static void conference_loop_output(conference_member_t *member) if (switch_test_flag(member, MFLAG_DIST_DTMF)) { conference_send_all_dtmf(member, member->conference, dtmf); - } else { - if (member->conference->dtmf_parser != NULL) { - for (digit = dtmf; *digit && caller_action == NULL; digit++) { - caller_action = (caller_control_action_t *) - switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, member->digit_stream, *digit); - } - } + } else if (member->dmachine) { + switch_ivr_dmachine_feed(member->dmachine, dtmf, NULL); } - /* otherwise, clock the parser so that it can handle digit timeout detection */ - } else if (member->conference->dtmf_parser != NULL) { - caller_action = (caller_control_action_t *) switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, member->digit_stream, '\0'); + } else if (member->dmachine) { + switch_ivr_dmachine_ping(member->dmachine, NULL); } - /* if a caller action has been detected, handle it */ - if (caller_action != NULL && caller_action->fndesc != NULL && caller_action->fndesc->handler != NULL) { - char *param = NULL; - - if (caller_action->fndesc->action != CALLER_CONTROL_MENU) { - param = caller_action->data; - } -#ifdef INTENSE_DEBUG - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), - SWITCH_LOG_INFO, - "executing caller control '%s' param '%s' on call '%u, %s\n", - caller_action->fndesc->key, param ? param : "none", member->id, switch_channel_get_name(channel)); -#endif - - caller_action->fndesc->handler(member, caller_action); - - /* set up for next pass */ - caller_action = NULL; - } - - use_buffer = NULL; mux_used = (uint32_t) switch_buffer_inuse(member->mux_buffer); @@ -2656,10 +2586,6 @@ static void conference_loop_output(conference_member_t *member) } /* Rinse ... Repeat */ - if (member->digit_stream != NULL) { - switch_ivr_digit_stream_destroy(&member->digit_stream); - } - switch_clear_flag_locked(member, MFLAG_RUNNING); switch_core_timer_destroy(&timer); @@ -4375,8 +4301,9 @@ static switch_status_t conf_api_sub_transfer(conference_obj_t *conference, switc if ((profiles = switch_xml_child(cfg, "profiles"))) { xml_cfg.profile = switch_xml_find_child(profiles, "profile", "name", profile_name); } - - xml_cfg.controls = switch_xml_child(cfg, "caller-controls"); + + /* Create the conference object. */ + new_conference = conference_new(conf_name, xml_cfg, pool); /* Release the config registry handle */ if (cxml) { @@ -4384,9 +4311,6 @@ static switch_status_t conf_api_sub_transfer(conference_obj_t *conference, switc cxml = NULL; } - /* Create the conference object. */ - new_conference = conference_new(conf_name, xml_cfg, pool); - if (!new_conference) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); if (pool != NULL) { @@ -5455,8 +5379,6 @@ SWITCH_STANDARD_APP(conference_function) xml_cfg.profile = switch_xml_find_child(profiles, "profile", "name", profile_name); } - xml_cfg.controls = switch_xml_child(cfg, "caller-controls"); - /* if this is a bridging call, and it's not a duplicate, build a */ /* conference object, and skip pin handling, and locked checking */ @@ -5788,9 +5710,6 @@ SWITCH_STANDARD_APP(conference_function) switch_buffer_destroy(&member.resample_buffer); switch_buffer_destroy(&member.audio_buffer); switch_buffer_destroy(&member.mux_buffer); - if (conference && member.dtmf_parser != conference->dtmf_parser) { - switch_ivr_digit_stream_parser_destroy(member.dtmf_parser); - } if (conference) { switch_mutex_lock(conference->mutex); @@ -5939,88 +5858,6 @@ static switch_status_t chat_send(const char *proto, const char *from, const char return SWITCH_STATUS_SUCCESS; } -static switch_status_t conf_default_controls(conference_obj_t *conference) -{ - switch_status_t status = SWITCH_STATUS_FALSE; - uint32_t i; - caller_control_action_t *action; - - switch_assert(conference != NULL); - - for (i = 0, status = SWITCH_STATUS_SUCCESS; status == SWITCH_STATUS_SUCCESS && i < CCFNTBL_QTY; i++) { - if (!zstr(ccfntbl[i].digits)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, - "Installing default caller control action '%s' bound to '%s'.\n", ccfntbl[i].key, ccfntbl[i].digits); - action = (caller_control_action_t *) switch_core_alloc(conference->pool, sizeof(caller_control_action_t)); - if (action != NULL) { - action->fndesc = &ccfntbl[i]; - action->data = NULL; - status = switch_ivr_digit_stream_parser_set_event(conference->dtmf_parser, ccfntbl[i].digits, action); - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "unable to alloc memory for caller control binding '%s' to '%s'\n", ccfntbl[i].key, ccfntbl[i].digits); - status = SWITCH_STATUS_MEMERR; - } - } - } - - return status; -} - -static switch_status_t conference_new_install_caller_controls_custom(conference_obj_t *conference, switch_xml_t xml_controls, switch_xml_t xml_menus) -{ - switch_status_t status = SWITCH_STATUS_FALSE; - switch_xml_t xml_kvp; - - switch_assert(conference != NULL); - - if (!xml_controls) { - return status; - } - - /* parse the controls tree for caller control digit strings */ - for (xml_kvp = switch_xml_child(xml_controls, "control"); xml_kvp; xml_kvp = xml_kvp->next) { - char *key = (char *) switch_xml_attr(xml_kvp, "action"); - char *val = (char *) switch_xml_attr(xml_kvp, "digits"); - char *data = (char *) switch_xml_attr_soft(xml_kvp, "data"); - - if (!zstr(key) && !zstr(val)) { - uint32_t i; - - /* scan through all of the valid actions, and if found, */ - /* set the new caller control action digit string, then */ - /* stop scanning the table, and go to the next xml kvp. */ - for (i = 0, status = SWITCH_STATUS_NOOP; i < CCFNTBL_QTY && status == SWITCH_STATUS_NOOP; i++) { - - if (strcasecmp(ccfntbl[i].key, key) == 0) { - - caller_control_action_t *action; - - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Installing caller control action '%s' bound to '%s'.\n", key, val); - action = (caller_control_action_t *) switch_core_alloc(conference->pool, sizeof(caller_control_action_t)); - if (action != NULL) { - action->fndesc = &ccfntbl[i]; - action->data = (void *) switch_core_strdup(conference->pool, data); - action->binded_dtmf = switch_core_strdup(conference->pool, val); - status = switch_ivr_digit_stream_parser_set_event(conference->dtmf_parser, val, action); - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "unable to alloc memory for caller control binding '%s' to '%s'\n", ccfntbl[i].key, ccfntbl[i].digits); - status = SWITCH_STATUS_MEMERR; - } - } - } - if (status == SWITCH_STATUS_NOOP) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Invalid caller control action name '%s'.\n", key); - } - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Invalid caller control config entry pair action = '%s' digits = '%s'\n", key, val); - } - } - - return status; -} - static conference_obj_t *conference_find(char *name) { conference_obj_t *conference; @@ -6263,7 +6100,8 @@ static conference_obj_t *conference_new(char *name, conf_xml_cfg_t cfg, switch_m conference->comfort_noise_level = comfort_noise_level; conference->caller_id_name = switch_core_strdup(conference->pool, caller_id_name); conference->caller_id_number = switch_core_strdup(conference->pool, caller_id_number); - + conference->caller_controls = switch_core_strdup(conference->pool, caller_controls); + if (!zstr(perpetual_sound)) { conference->perpetual_sound = switch_core_strdup(conference->pool, perpetual_sound); @@ -6387,7 +6225,6 @@ static conference_obj_t *conference_new(char *name, conf_xml_cfg_t cfg, switch_m } conference->rate = rate; conference->interval = interval; - conference->dtmf_parser = NULL; conference->eflags = 0xFFFFFFFF; if (!zstr(suppress_events)) { @@ -6405,27 +6242,6 @@ static conference_obj_t *conference_new(char *name, conf_xml_cfg_t cfg, switch_m conference->verbose_events = 1; } - /* caller control configuration chores */ - if (switch_ivr_digit_stream_parser_new(conference->pool, &conference->dtmf_parser) == SWITCH_STATUS_SUCCESS) { - - /* if no controls, or default controls specified, install default */ - if (caller_controls == NULL || *caller_controls == '\0' || strcasecmp(caller_controls, "default") == 0) { - status = conf_default_controls(conference); - } else if (strcasecmp(caller_controls, "none") != 0) { - /* try to build caller control if the group has been specified and != "none" */ - switch_xml_t xml_controls = switch_xml_find_child(cfg.controls, "group", "name", caller_controls); - status = conference_new_install_caller_controls_custom(conference, xml_controls, NULL); - - if (status != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to install caller controls group '%s'\n", caller_controls); - } - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No caller controls installed.\n"); - } - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to allocate caller control digit parser.\n"); - } - /* 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); @@ -6540,6 +6356,131 @@ static void send_presence(switch_event_types_t id) } } +typedef void (*conf_key_callback_t) (conference_member_t *, struct caller_control_actions *); + +typedef struct { + conference_member_t *member; + caller_control_action_t action; + conf_key_callback_t handler; +} key_binding_t; + + +static switch_status_t dmachine_dispatcher(switch_ivr_dmachine_match_t *match) +{ + key_binding_t *binding = match->user_data; + + if (!binding) return SWITCH_STATUS_FALSE; + + binding->handler(binding->member, &binding->action); + switch_set_flag_locked(binding->member, MFLAG_FLUSH_BUFFER); + + return SWITCH_STATUS_SUCCESS; +} + +static void do_binding(conference_member_t *member, conf_key_callback_t handler, const char *digits, void *data) +{ + key_binding_t *binding; + + binding = switch_core_alloc(member->pool, sizeof(*binding)); + binding->member = member; + + binding->action.binded_dtmf = switch_core_strdup(member->pool, digits); + + if (data) { + binding->action.data = switch_core_strdup(member->pool, (char *)data); + } + + binding->handler = handler; + switch_ivr_dmachine_bind(member->dmachine, "conf", digits, 0, dmachine_dispatcher, binding); + +} + +struct _mapping { + const char *name; + conf_key_callback_t handler; +}; + +static struct _mapping control_mappings[] = { + {"mute", conference_loop_fn_mute_toggle}, + {"mute on", conference_loop_fn_mute_on}, + {"mute off", conference_loop_fn_mute_off}, + {"deaf mute", conference_loop_fn_deafmute_toggle}, + {"energy up", conference_loop_fn_energy_up}, + {"energy equ", conference_loop_fn_energy_equ_conf}, + {"energy dn", conference_loop_fn_energy_dn}, + {"vol talk up", conference_loop_fn_volume_talk_up}, + {"vol talk zero", conference_loop_fn_volume_talk_zero}, + {"vol talk dn", conference_loop_fn_volume_talk_dn}, + {"vol listen up", conference_loop_fn_volume_listen_up}, + {"vol listen zero", conference_loop_fn_volume_listen_zero}, + {"vol listen dn", conference_loop_fn_volume_listen_dn}, + {"hangup", conference_loop_fn_hangup}, + {"event", conference_loop_fn_event}, + {"lock", conference_loop_fn_lock_toggle}, + {"transfer", conference_loop_fn_transfer}, + {"execute_application", conference_loop_fn_exec_app} +}; +#define MAPPING_LEN (sizeof(control_mappings)/sizeof(control_mappings[0])) + +static void member_bind_controls(conference_member_t *member, const char *controls) +{ + switch_xml_t cxml, cfg, xgroups, xcontrol; + switch_event_t *params; + int i; + + switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Conf-Name", member->conference->name); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Action", "request-controls"); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Controls", controls); + + if (!(cxml = switch_xml_open_cfg(global_cf_name, &cfg, params))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", global_cf_name); + goto end; + } + + if (!(xgroups = switch_xml_child(cfg, "caller-controls"))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't find caller-controls in %s\n", global_cf_name); + goto end; + } + + if (!(xgroups = switch_xml_find_child(xgroups, "group", "name", controls))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't find caller-controls in %s\n", global_cf_name); + goto end; + } + + + for (xcontrol = switch_xml_child(xgroups, "control"); xcontrol; xcontrol = xcontrol->next) { + const char *key = switch_xml_attr(xcontrol, "action"); + const char *digits = switch_xml_attr(xcontrol, "digits"); + const char *data = switch_xml_attr_soft(xcontrol, "data"); + + if (zstr(key) || zstr(digits)) continue; + + for(i = 0; i < MAPPING_LEN; i++) { + if (!strcasecmp(key, control_mappings[i].name)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s binding '%s' to '%s'\n", + switch_core_session_get_name(member->session), digits, key); + + do_binding(member, control_mappings[i].handler, digits, (void *) data); + } + } + } + + end: + + /* Release the config registry handle */ + if (cxml) { + switch_xml_free(cxml); + cxml = NULL; + } + + if (params) switch_event_destroy(¶ms); + +} + + + + /* Called by FreeSWITCH when the module loads */ SWITCH_MODULE_LOAD_FUNCTION(mod_conference_load) { From 4d5389bd94438b4cdd3bd2389804a79dd9bfcc79 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 14 Oct 2010 20:07:26 -0500 Subject: [PATCH 037/230] FS-2781 --- src/mod/applications/mod_conference/mod_conference.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index fef059cf07..b9127c9f2f 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -682,7 +682,7 @@ static switch_status_t conference_add_member(conference_obj_t *conference, confe conference_stop_file(conference, FILE_STOP_ASYNC); } - if (!switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ)) { + if (!switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ) && !zstr(conference->enter_sound)) { 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); } @@ -2868,6 +2868,10 @@ static switch_status_t conference_play_file(conference_obj_t *conference, char * switch_assert(conference != NULL); + if (zstr(file)) { + return SWITCH_STATUS_NOTFOUND; + } + switch_mutex_lock(conference->mutex); switch_mutex_lock(conference->member_mutex); count = conference->count; From f6bcf830112e9778a2b79471810e7fc3fbf3dad6 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 14 Oct 2010 20:56:19 -0500 Subject: [PATCH 038/230] expand vars in data element --- .../mod_conference/mod_conference.c | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index b9127c9f2f..4cbb052994 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -112,7 +112,8 @@ struct caller_control_actions; typedef struct caller_control_actions { char *binded_dtmf; - void *data; + char *data; + char *expanded_data; } caller_control_action_t; typedef struct caller_control_menu_info { @@ -1790,7 +1791,7 @@ static void conference_loop_fn_event(conference_member_t *member, caller_control conference_add_event_member_data(member, event); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "dtmf"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "DTMF-Key", action->binded_dtmf); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Data", action->data); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Data", action->expanded_data); switch_event_fire(&event); } } @@ -1809,12 +1810,12 @@ static void conference_loop_fn_transfer(conference_member_t *member, caller_cont if (test_eflag(member->conference, EFLAG_DTMF) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { conference_add_event_member_data(member, event); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "transfer"); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Dialplan", action->data); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Dialplan", action->expanded_data); switch_event_fire(&event); } switch_clear_flag_locked(member, MFLAG_RUNNING); - if ((mydata = switch_core_session_strdup(member->session, action->data))) { + 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) { exten = argv[0]; @@ -1827,7 +1828,7 @@ static void conference_loop_fn_transfer(conference_member_t *member, caller_cont } } else { - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, "Empty transfer string [%s]\n", (char *) action->data); + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, "Empty transfer string [%s]\n", (char *) action->expanded_data); goto done; } } else { @@ -1853,14 +1854,16 @@ static void conference_loop_fn_exec_app(conference_member_t *member, caller_cont switch_event_t *event = NULL; switch_channel_t *channel = NULL; + if (!action->expanded_data) return; + if (test_eflag(member->conference, EFLAG_DTMF) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { conference_add_event_member_data(member, event); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "execute_app"); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", action->data); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", action->expanded_data); switch_event_fire(&event); } - if ((mydata = switch_core_session_strdup(member->session, action->data))) { + 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]; @@ -1870,7 +1873,8 @@ static void conference_loop_fn_exec_app(conference_member_t *member, caller_cont } } else { - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, "Empty execute app string [%s]\n", (char *) action->data); + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, "Empty execute app string [%s]\n", + (char *) action->expanded_data); goto done; } } else { @@ -1882,6 +1886,7 @@ static void conference_loop_fn_exec_app(conference_member_t *member, caller_cont switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, "Unable to find application.\n"); goto done; } + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_DEBUG, "Execute app: %s, %s\n", app, arg); channel = switch_core_session_get_channel(member->session); @@ -1892,6 +1897,7 @@ static void conference_loop_fn_exec_app(conference_member_t *member, caller_cont switch_core_session_set_read_codec(member->session, &member->read_codec); switch_channel_clear_app_flag(channel, CF_APP_TAGGED); done: + return; } @@ -6372,16 +6378,30 @@ typedef struct { static switch_status_t dmachine_dispatcher(switch_ivr_dmachine_match_t *match) { key_binding_t *binding = match->user_data; + switch_channel_t *channel; if (!binding) return SWITCH_STATUS_FALSE; + channel = switch_core_session_get_channel(binding->member->session); + switch_channel_set_variable(channel, "conference_last_matching_digits", match->match_digits); + + if (binding->action.data) { + binding->action.expanded_data = switch_channel_expand_variables(channel, binding->action.data); + } + binding->handler(binding->member, &binding->action); + + if (binding->action.expanded_data != binding->action.data) { + free(binding->action.expanded_data); + binding->action.expanded_data = NULL; + } + switch_set_flag_locked(binding->member, MFLAG_FLUSH_BUFFER); return SWITCH_STATUS_SUCCESS; } -static void do_binding(conference_member_t *member, conf_key_callback_t handler, const char *digits, void *data) +static void do_binding(conference_member_t *member, conf_key_callback_t handler, const char *digits, const char *data) { key_binding_t *binding; @@ -6391,7 +6411,7 @@ static void do_binding(conference_member_t *member, conf_key_callback_t handler, binding->action.binded_dtmf = switch_core_strdup(member->pool, digits); if (data) { - binding->action.data = switch_core_strdup(member->pool, (char *)data); + binding->action.data = switch_core_strdup(member->pool, data); } binding->handler = handler; @@ -6465,7 +6485,7 @@ static void member_bind_controls(conference_member_t *member, const char *contro switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s binding '%s' to '%s'\n", switch_core_session_get_name(member->session), digits, key); - do_binding(member, control_mappings[i].handler, digits, (void *) data); + do_binding(member, control_mappings[i].handler, digits, data); } } } From fe9921c9b0371d7836624c14779b3f9f67d76847 Mon Sep 17 00:00:00 2001 From: Michal Bielicki Date: Fri, 15 Oct 2010 04:17:27 +0200 Subject: [PATCH 039/230] unimrcp does not build on debian, will have to further analyse --- debian/freeswitch.conffiles | 1 - debian/freeswitch.install | 1 - debian/rules | 9 ++++----- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/debian/freeswitch.conffiles b/debian/freeswitch.conffiles index 1d2cd2660c..20da33de15 100644 --- a/debian/freeswitch.conffiles +++ b/debian/freeswitch.conffiles @@ -92,7 +92,6 @@ /opt/freeswitch/conf/sip_profiles/internal.xml /opt/freeswitch/conf/skinny_profiles/internal.xml /opt/freeswitch/conf/tetris.ttml -/opt/freeswitch/conf/tones.conf /opt/freeswitch/conf/vars.xml /opt/freeswitch/conf/voicemail.tpl /opt/freeswitch/conf/web-vm.tpl diff --git a/debian/freeswitch.install b/debian/freeswitch.install index f0c6fa830a..4462b71ef7 100644 --- a/debian/freeswitch.install +++ b/debian/freeswitch.install @@ -164,7 +164,6 @@ opt/freeswitch/mod/mod_syslog.so* opt/freeswitch/mod/mod_theora.so* opt/freeswitch/mod/mod_tone_stream.so* opt/freeswitch/mod/mod_tts_commandline.so* -opt/freeswitch/mod/mod_unimrcp.so* opt/freeswitch/mod/mod_valet_parking.so* opt/freeswitch/mod/mod_vmd.so* opt/freeswitch/mod/mod_voicemail.so* diff --git a/debian/rules b/debian/rules index 0e5f4a3d88..c7719045e2 100755 --- a/debian/rules +++ b/debian/rules @@ -19,13 +19,12 @@ export APPLICATION_MODULES_NY= applications/mod_nibblebill applications/mod_redi applications/mod_valet_parking applications/mod_vmd applications/mod_voicemail export APPLICATIONS_MODULES= $(APPLICATION_MODULES_AE) $(APPLICATION_MODULES_FM) $(APPLICATION_MODULES_NY) $(APPLICATION_MODULES_VZ) -export ASR_TTS_MODULES= asr_tts/mod_pocketsphinx asr_tts/mod_unimrcp +export ASR_TTS_MODULES= asr_tts/mod_pocketsphinx export CODECS_MODULES= codecs/mod_bv codecs/mod_h26x codecs/mod_speex codecs/mod_celt codecs/mod_codec2 codecs/mod_ilbc codecs/mod_mp4v \ codecs/mod_silk codecs/mod_siren codecs/mod_theora export DIALPLANS_MODULES= dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml -export ENDPOINTS_MODULES= endpoints/mod_dingaling endpoints/mod_portaudio endpoints/mod_sofia \ - endpoints/mod_loopback ../../libs/freetdm/mod_freetdm endpoints/mod_skypopen \ - endpoints/mod_skinny +export ENDPOINTS_MODULES= endpoints/mod_dingaling endpoints/mod_portaudio endpoints/mod_sofia endpoints/mod_loopback \ + ../../libs/freetdm/mod_freetdm endpoints/mod_skypopen endpoints/mod_skinny export EVENT_HANDLERS_MODULES=event_handlers/mod_event_multicast event_handlers/mod_event_socket event_handlers/mod_cdr_csv export FORMATS_MODULES= formats/mod_file_string formats/mod_local_stream formats/mod_native_file formats/mod_portaudio_stream \ formats/mod_shout formats/mod_sndfile formats/mod_tone_stream @@ -33,7 +32,7 @@ export LANGUAGES_MODULES=languages/mod_spidermonkey languages/mod_perl languages export LOGGERS_MODULES=loggers/mod_console loggers/mod_logfile loggers/mod_syslog export SAY_MODULES=say/mod_say_en say/mod_say_it say/mod_say_de say/mod_say_fr say/mod_say_es say/mod_say_nl say/mod_say_ru export XML_INT_MODULES=xml_int/mod_xml_rpc xml_int/mod_xml_curl xml_int/mod_xml_cdr -export MYMODULES=$(PASSTHRU_CODEC_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(ENDPOINTS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(XML_INT_MODULES) +export MYMODULES= $(ENDPOINTS_MODULES) $(PASSTHRU_CODEC_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(XML_INT_MODULES) export MODULES=$(MYMODULES) ifndef AUTOCONF From df5b3498ed0fe9d8f0bbdfcff15daf0544dbf153 Mon Sep 17 00:00:00 2001 From: Marc Olivier Chouinard Date: Thu, 14 Oct 2010 22:36:51 -0400 Subject: [PATCH 040/230] mod_voicemail: FS-1776 Add support for per user operator exten override param vm-operator-extension --- src/mod/applications/mod_voicemail/mod_voicemail.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/mod/applications/mod_voicemail/mod_voicemail.c b/src/mod/applications/mod_voicemail/mod_voicemail.c index 758e5dcf25..b2796bed7f 100644 --- a/src/mod/applications/mod_voicemail/mod_voicemail.c +++ b/src/mod/applications/mod_voicemail/mod_voicemail.c @@ -2893,6 +2893,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_p char *read_flags = NORMAL_FLAG_STRING; int priority = 3; int email_attach = 1; + char *operator_ext = NULL; char buf[2]; char key_buf[80]; char *greet_path = NULL; @@ -2973,6 +2974,8 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_p vm_enabled = !switch_false(val); } else if (!strcasecmp(var, "vm-message-ext")) { vm_ext = switch_core_session_strdup(session, val); + } else if (!strcasecmp(var, "vm-operator-extension")) { + operator_ext = switch_core_session_strdup(session, val); } } } @@ -3089,12 +3092,13 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_p greet_key_press: if (switch_stristr(buf, profile->login_keys)) { voicemail_check_main(session, profile, domain_name, id, 0); - } else if (!zstr(profile->operator_ext) && !zstr(profile->operator_key) && !strcasecmp(buf, profile->operator_key) ) { + } else if ((!zstr(profile->operator_ext) || !zstr(operator_ext)) && !zstr(profile->operator_key) && !strcasecmp(buf, profile->operator_key) ) { int argc; char *argv[4]; char *mycmd; - if (!zstr(profile->operator_ext) && (mycmd = switch_core_session_strdup(session, profile->operator_ext))) { + if ((!zstr(operator_ext) && (mycmd = switch_core_session_strdup(session, operator_ext))) || + (!zstr(profile->operator_ext) && (mycmd = switch_core_session_strdup(session, profile->operator_ext)))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); if (argc >= 1 && argc <= 4) { switch_ivr_session_transfer(session, argv[0], argv[1], argv[2]); From 1368684460de9bbb25e91e2e17b3e127855d7fed Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Thu, 14 Oct 2010 22:25:44 -0500 Subject: [PATCH 041/230] continuation of msbuild enabled automated installers for Win32/X64 --- w32/Setup/Product.wxs | 51 ++++++++++++++ w32/Setup/Setup.wixproj | 152 ++++++++++++++++++++-------------------- 2 files changed, 127 insertions(+), 76 deletions(-) create mode 100644 w32/Setup/Product.wxs diff --git a/w32/Setup/Product.wxs b/w32/Setup/Product.wxs new file mode 100644 index 0000000000..aa49748a67 --- /dev/null +++ b/w32/Setup/Product.wxs @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/w32/Setup/Setup.wixproj b/w32/Setup/Setup.wixproj index 03fd60966a..6e59ed618d 100644 --- a/w32/Setup/Setup.wixproj +++ b/w32/Setup/Setup.wixproj @@ -12,26 +12,26 @@ bin\x86\Debug\ obj\X86\$(Configuration)\ - Debug;FreeSWITCHConfFilesDir=..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\Win32\debug\sounds; + Debug;FreeSWITCHConfFilesDir=..\..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\..\Win32\debug\sounds; bin\x86\release\ obj\X86\$(Configuration)\ - Debug;FreeSWITCHConfFilesDir=..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\Win32\release\sounds; + Debug;FreeSWITCHConfFilesDir=..\..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\..\Win32\release\sounds; bin\x64\Debug\ obj\X64\$(Configuration)\ - Debug;FreeSWITCHConfFilesDir=..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\x64\debug\sounds; + Debug;FreeSWITCHConfFilesDir=..\..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\..\x64\debug\sounds; bin\x64\Release\ obj\X64\$(Configuration)\ - Debug;FreeSWITCHConfFilesDir=..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\x64\release\sounds; + Debug;FreeSWITCHConfFilesDir=..\..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\..\x64\release\sounds; @@ -39,7 +39,7 @@ - + libbroadvoice {cf70f278-3364-4395-a2e1-23501c9b8ad2} True @@ -48,7 +48,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + libteletone {89385c74-5860-4174-9caf-a39e7c48909c} True @@ -57,7 +57,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + libspandsp {1cbb0077-18c5-455f-801c-0a0ce7b0bbf5} True @@ -66,7 +66,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + libaprutil {f057da7f-79e5-4b00-845c-ef446ef055e3} True @@ -75,7 +75,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + libapr {f6c55d93-b927-4483-bb69-15aef3dd2dff} True @@ -84,7 +84,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + js {204fa0de-305d-4414-ae2e-f195a23f390d} True @@ -93,7 +93,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + libeay32 {d331904d-a00a-4694-a5a3-fcff64ab5dbe} True @@ -102,7 +102,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + openssl __Libraries\openssl\openssl_ {25bd39b1-c8bf-4676-a738-9cabd9c6bc79} True @@ -111,7 +111,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + ssleay32 {b4b62169-5ad4-4559-8707-3d933ac5db39} True @@ -120,7 +120,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + pocketsphinx {94001a0e-a837-445c-8004-f918f10d0226} True @@ -129,7 +129,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + sphinxbase {2f025ead-99bd-40f5-b2cc-f0a28cad7f2d} True @@ -138,7 +138,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + mod_avmd {990baa76-89d3-4e38-8479-c7b28784efc8} True @@ -147,7 +147,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_commands {30a5b29c-983e-4580-9fd0-d647ccdcc7eb} True @@ -156,7 +156,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_conference {c24fb505-05d7-4319-8485-7540b44c8603} True @@ -165,7 +165,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_curl {ef300386-a8df-4372-b6d8-fb9bffca9aed} True @@ -174,7 +174,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_db {f6a33240-8f29-48bd-98f0-826995911799} True @@ -183,7 +183,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_dptools {b5881a85-fe70-4f64-8607-2caae52669c6} True @@ -192,7 +192,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_enum {71a967d5-0e99-4cef-a587-98836ee6f2ef} True @@ -201,7 +201,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_esf {3850d93a-5f24-4922-bc1c-74d08c37c256} True @@ -210,7 +210,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_expr {65a6273d-fcab-4c55-b09e-65100141a5d4} True @@ -219,7 +219,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_fifo {75df7f29-2fbf-47f7-b5af-5b4952dc1abd} True @@ -228,7 +228,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_fsv {e3246d17-e29b-4ab5-962a-c69b0c5837bb} True @@ -237,7 +237,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_lcr {1a3793d1-05d1-4b57-9b0f-5af3e79dc439} True @@ -246,7 +246,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_nibblebill {3c977801-fe88-48f2-83d3-fa2ebff6688e} True @@ -255,7 +255,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_rss {b69247fa-ecd6-40ed-8e44-5ca6c3baf9a4} True @@ -264,7 +264,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_snom {2a3d00c6-588d-4e86-81ac-9ef5ede86e03} True @@ -273,7 +273,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_spandsp {1e21afe0-6fdb-41d2-942d-863607c24b91} True @@ -282,7 +282,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_valet_parking {432db165-1eb2-4781-a9c0-71e62610b20a} True @@ -291,7 +291,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_vmd {14e4a972-9cfb-436d-b0a5-4943f3f80d47} True @@ -300,7 +300,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_voicemail {d7f1e3f2-a3f4-474c-8555-15122571af52} True @@ -309,7 +309,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_pocketsphinx {2286da73-9fc5-45bc-a508-85994c3317ab} True @@ -318,7 +318,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_unimrcp {d07c378a-f5f7-438f-adf3-4ac4fb1883cd} True @@ -327,7 +327,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_amr {8deb383c-4091-4f42-a56f-c9e46d552d79} True @@ -336,7 +336,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_celt {4d418176-3b33-47e6-a63e-01ba34add21c} True @@ -345,7 +345,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_g723_1 {fea1eef7-876f-48de-88bf-c0e3e606d758} True @@ -354,7 +354,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_g729 {1d95cd95-0de2-48c3-ac23-d5c7d1c9c0f0} True @@ -363,7 +363,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_ilbc {d3ec0aff-76fc-4210-a825-9a17410660a3} True @@ -372,7 +372,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_silk {afa983d6-4569-4f88-ba94-555ed00fd9a8} True @@ -381,7 +381,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_siren {0b6c905b-142e-4999-b39d-92ff7951e921} True @@ -390,7 +390,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_speex {5580d60e-0f77-4716-9cd4-b8e5986fa375} True @@ -399,7 +399,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_dialplan_directory {a27cca23-1541-4337-81a4-f0a6413078a0} True @@ -408,7 +408,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_dialplan_xml {07113b25-d3af-4e04-ba77-4cd1171f022c} True @@ -417,7 +417,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_loopback {b3f424ec-3d8f-417c-b244-3919d5e1a577} True @@ -426,7 +426,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_PortAudio {5fd31a25-5d83-4794-8bee-904dad84ce71} True @@ -435,7 +435,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_sofia {0df3abd0-ddc0-4265-b778-07c66780979b} True @@ -444,7 +444,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_event_multicast {784113ef-44d9-4949-835d-7065d3c7ad08} True @@ -453,7 +453,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_event_socket {05515420-16de-4e63-be73-85be85ba5142} True @@ -462,7 +462,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_file_string {70564d74-199a-4452-9c60-19ed5f242f0d} True @@ -471,7 +471,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_local_stream {2ca40887-1622-46a1-a7f9-17fd7e7e545b} True @@ -480,7 +480,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_native_file {9254c4b0-6f60-42b6-bb3a-36d63fc001c7} True @@ -489,7 +489,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_sndfile {afac0568-7548-42d5-9f6a-8d3400a1e4f6} True @@ -498,7 +498,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_tone_stream {6ff941ac-82c5-429f-aa4c-ad2fb9e5da52} True @@ -507,7 +507,7 @@ Binaries;Content;Satellites MODLOCATION - + lua51 {d0b36172-cd76-454a-9b89-990025266c2a} True @@ -516,7 +516,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + mod_lua {7b077e7f-1be7-4291-ab86-55e527b25cac} True @@ -525,7 +525,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_managed {7b42bda1-72c0-4378-a9b6-5c530f8cd61e} True @@ -534,7 +534,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_console {1c453396-d912-4213-89fd-9b489162b7b5} True @@ -543,7 +543,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_logfile {d0bcac02-d94b-46b8-9b49-cddcc2bd7909} True @@ -552,7 +552,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_say_de {5bc072db-3826-48ea-af34-fe32aa01e83b} True @@ -561,7 +561,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_say_en {988cacf7-3fcb-4992-be69-77872ae67dc8} True @@ -570,7 +570,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_say_es {fa429e98-8b03-45e6-a096-a4bc5e821de4} True @@ -579,7 +579,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_say_fr {06e3a538-ab32-44f2-b477-755ff9cb5d37} True @@ -588,7 +588,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_say_it {6d1bec70-4dcd-4fe9-adbd-4a43a67e4d05} True @@ -597,7 +597,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_say_nl {a4b122cf-5196-476b-8c0e-d8bd59ac3c14} True @@ -606,7 +606,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_say_ru {0382e8fd-cfdc-41c0-8b03-792c7c84fc31} True @@ -615,7 +615,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_say_zh {b6a9fb7a-1cc4-442b-812d-ec33e4e4a36e} True @@ -624,7 +624,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_xml_cdr {08dad348-9e0a-4a2e-97f1-f1e7e24a7836} True @@ -633,7 +633,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_xml_curl {ab91a099-7690-4ecf-8994-e458f4ea1ed4} True @@ -642,7 +642,7 @@ Binaries;Content;Satellites MODLOCATION - + mod_xml_rpc {cbec7225-0c21-4da8-978e-1f158f8ad950} True @@ -651,7 +651,7 @@ Binaries;Content;Satellites MODLOCATION - + FreeSwitchConsole {1af3a893-f7be-43dd-b697-8ab2397c0d67} True @@ -660,7 +660,7 @@ Binaries;Content;Satellites INSTALLLOCATION - + FreeSwitchCoreLib {202d7a4e-760d-4d0e-afa1-d7459ced30ff} True @@ -681,8 +681,8 @@ - "$(WIX)bin\heat.exe" dir "..\..\..\..\conf" -cg FreeSWITCHConfFiles -gg -scom -sreg -sfrag -srd -dr CONFLOCATION -var var.FreeSWITCHConfFilesDir -out "$(ProjectDir)Fragments\FreeSWITCHConfFiles.wxs" -"$(WIX)bin\heat.exe" dir "..\..\..\..\Win32\Release\sounds" -cg FreeSWITCHSoundFiles8 -gg -scom -sreg -sfrag -srd -dr SOUNDLOCATION -var var.FreeSWITCHSoundFilesDir -out "$(ProjectDir)Fragments\FreeSWITCHSoundFiles8.wxs" + "$(WIX)bin\heat.exe" dir "..\..\..\..\..\conf" -cg FreeSWITCHConfFiles -gg -scom -sreg -sfrag -srd -dr CONFLOCATION -var var.FreeSWITCHConfFilesDir -out "$(ProjectDir)Fragments\FreeSWITCHConfFiles.wxs" +"$(WIX)bin\heat.exe" dir "..\..\..\..\..\Win32\Release\sounds" -cg FreeSWITCHSoundFiles8 -gg -scom -sreg -sfrag -srd -dr SOUNDLOCATION -var var.FreeSWITCHSoundFilesDir -out "$(ProjectDir)Fragments\FreeSWITCHSoundFiles8.wxs" + + + + From dc40a7789c5edbcded79b14a57e8527beb5a0426 Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Sun, 17 Oct 2010 16:19:38 -0400 Subject: [PATCH 066/230] Arrays are 0 indexed in C, duh --- src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c index f2a20f34c9..8565e1afa7 100644 --- a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c +++ b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c @@ -1041,7 +1041,7 @@ static int read_cookie_from_file(char *filename) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to read cookie file %s : %d.\n", filename, errno); } - cookie[MAXATOMLEN+1] = '\0'; + cookie[MAXATOMLEN] = '\0'; /* replace any end of line characters with a null */ if ((end = strchr(cookie, '\n'))) { From 81a9f8ef1e216edaece16a765f1dfa98807f02ff Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sun, 17 Oct 2010 16:13:47 -0500 Subject: [PATCH 067/230] timeout instantly when you have exact match and are equal to max digits --- src/switch_ivr_async.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 964a77ec79..7959d319ab 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -281,6 +281,7 @@ static dm_match_t switch_ivr_dmachine_check_match(switch_ivr_dmachine_t *dmachin if (!exact_bp && !strcmp(bp->digits, dmachine->digits)) { best = DM_MATCH_EXACT; exact_bp = bp; + if (dmachine->cur_digit_len == dmachine->max_digit_len) break; } if (!(both_bp && partial_bp) && !strncmp(dmachine->digits, bp->digits, strlen(dmachine->digits))) { From afb00ef5a11cb78d0c62a23e4856289a5d475f25 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sun, 17 Oct 2010 18:52:03 -0500 Subject: [PATCH 068/230] tweaks --- src/switch_ivr_async.c | 10 +++++----- src/switch_ivr_play_say.c | 8 ++++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 7959d319ab..40214c423d 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -383,7 +383,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t * if (dmachine->last_matching_binding->callback) { s = dmachine->last_matching_binding->callback(&dmachine->match); - + switch(s) { case SWITCH_STATUS_CONTINUE: r = SWITCH_STATUS_SUCCESS; @@ -391,7 +391,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t * case SWITCH_STATUS_SUCCESS: break; default: - r = SWITCH_STATUS_NOTFOUND; + r = SWITCH_STATUS_BREAK; break; } } @@ -407,7 +407,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t * case SWITCH_STATUS_SUCCESS: break; default: - r = SWITCH_STATUS_NOTFOUND; + r = SWITCH_STATUS_BREAK; break; } @@ -422,7 +422,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t * r = SWITCH_STATUS_SUCCESS; } - if (r != SWITCH_STATUS_FOUND && r != SWITCH_STATUS_SUCCESS) { + if (r != SWITCH_STATUS_FOUND && r != SWITCH_STATUS_SUCCESS && r != SWITCH_STATUS_BREAK) { switch_set_string(dmachine->last_failed_digits, dmachine->digits); dmachine->match.match_digits = dmachine->last_failed_digits; @@ -439,7 +439,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_ping(switch_ivr_dmachine_t * case SWITCH_STATUS_SUCCESS: break; default: - r = SWITCH_STATUS_NOTFOUND; + r = SWITCH_STATUS_BREAK; break; } diff --git a/src/switch_ivr_play_say.c b/src/switch_ivr_play_say.c index c99745d57c..b1b20ec6fb 100644 --- a/src/switch_ivr_play_say.c +++ b/src/switch_ivr_play_say.c @@ -1130,6 +1130,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess uint32_t pos = 0; switch_core_file_seek(fh, &pos, 0, SEEK_SET); switch_core_file_seek(fh, &pos, sample_start, SEEK_CUR); + switch_clear_flag(fh, SWITCH_FILE_SEEK); } if (switch_core_file_get_string(fh, SWITCH_AUDIO_COL_STR_TITLE, &p) == SWITCH_STATUS_SUCCESS) { @@ -1319,6 +1320,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess } } + fh->offset_pos += asis ? bread : bread / 2; + if (bread < framelen) { memset(abuf + bread, 255, framelen - bread); } @@ -1338,9 +1341,12 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess } switch_buffer_write(fh->audio_buffer, abuf, asis ? olen : olen * 2); olen = switch_buffer_read(fh->audio_buffer, abuf, framelen); + fh->offset_pos += olen / 2; + if (!asis) { olen /= 2; } + } if (done || olen <= 0) { @@ -1455,7 +1461,6 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess } more_data = 0; - write_frame.samples = (uint32_t) olen; if (asis) { @@ -1480,7 +1485,6 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess switch_change_sln_volume(write_frame.data, write_frame.datalen / 2, fh->vol); } - fh->offset_pos += write_frame.samples / 2; status = switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0); if (timeout_samples) { From 1ffff099c164244b25429a0b726639c167d179f1 Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Mon, 18 Oct 2010 03:18:35 -0400 Subject: [PATCH 069/230] Avoid checking the lengh of a null string. --- src/mod/event_handlers/mod_erlang_event/ei_helpers.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mod/event_handlers/mod_erlang_event/ei_helpers.c b/src/mod/event_handlers/mod_erlang_event/ei_helpers.c index 9935aff075..aca2497052 100644 --- a/src/mod/event_handlers/mod_erlang_event/ei_helpers.c +++ b/src/mod/event_handlers/mod_erlang_event/ei_helpers.c @@ -377,10 +377,11 @@ switch_status_t initialise_ei(struct ei_cnode_s *ec) // init the resolver res_init(); } - if (!zstr_buf(_res.dnsrch[0])) { + if (_res.dnsrch[0] && !zstr_buf(_res.dnsrch[0])) { strncat(thishostname, ".", 1); strncat(thishostname, _res.dnsrch[0], EI_MAXHOSTNAMELEN - strlen(thishostname)); } + } snprintf(thisnodename, MAXNODELEN + 1, "%s@%s", prefs.nodename, thishostname); } From 5fea197b78c7bbefe399241f3aaa78731503902a Mon Sep 17 00:00:00 2001 From: Geovani Ricardo Wiedenhoft Date: Mon, 18 Oct 2010 16:17:43 -0200 Subject: [PATCH 070/230] Added mod_khomp Endpoint. This module has been developed to make a nice, affordable brazilian board called Khomp (http://www.khomp.com.br) compatible with FreeSWITCH. Supported boards: - FXS - FXO - E1 - GSM (boards and usb devices) - Passive record - kommuter --- .../mod_khomp/Install/files/khomp.conf.xml | 549 +++ src/mod/endpoints/mod_khomp/Makefile | 41 + .../endpoints/mod_khomp/commons/atomic.hpp | 189 + .../mod_khomp/commons/config_commons.hpp | 69 + .../mod_khomp/commons/config_options.cpp | 710 ++++ .../mod_khomp/commons/config_options.hpp | 286 ++ .../commons/configurator/configfile.cpp | 241 ++ .../commons/configurator/configfile.hpp | 90 + .../mod_khomp/commons/configurator/option.cpp | 185 + .../mod_khomp/commons/configurator/option.hpp | 122 + .../commons/configurator/restriction.cpp | 353 ++ .../commons/configurator/restriction.hpp | 321 ++ .../commons/configurator/section.cpp | 130 + .../commons/configurator/section.hpp | 226 ++ .../endpoints/mod_khomp/commons/flagger.hpp | 102 + .../endpoints/mod_khomp/commons/format.cpp | 331 ++ .../endpoints/mod_khomp/commons/format.hpp | 512 +++ .../commons/freeswitch/saved_condition.cpp | 62 + .../commons/freeswitch/saved_condition.hpp | 136 + .../commons/freeswitch/simple_lock.hpp | 177 + .../mod_khomp/commons/freeswitch/thread.hpp | 327 ++ .../endpoints/mod_khomp/commons/function.hpp | 337 ++ .../mod_khomp/commons/initializer.hpp | 80 + .../endpoints/mod_khomp/commons/k3lapi.cpp | 313 ++ .../endpoints/mod_khomp/commons/k3lapi.hpp | 408 ++ .../endpoints/mod_khomp/commons/k3lutil.cpp | 234 ++ .../endpoints/mod_khomp/commons/k3lutil.hpp | 82 + .../endpoints/mod_khomp/commons/logger.hpp | 644 ++++ .../mod_khomp/commons/noncopyable.hpp | 54 + .../mod_khomp/commons/refcounter.hpp | 263 ++ src/mod/endpoints/mod_khomp/commons/regex.cpp | 148 + src/mod/endpoints/mod_khomp/commons/regex.hpp | 252 ++ .../mod_khomp/commons/ringbuffer.cpp | 575 +++ .../mod_khomp/commons/ringbuffer.hpp | 416 ++ .../mod_khomp/commons/saved_condition.cpp | 46 + .../mod_khomp/commons/saved_condition.hpp | 61 + .../mod_khomp/commons/scoped_lock.hpp | 95 + .../mod_khomp/commons/simple_lock.hpp | 104 + .../endpoints/mod_khomp/commons/strings.cpp | 247 ++ .../endpoints/mod_khomp/commons/strings.hpp | 106 + .../mod_khomp/commons/tagged_union.hpp | 307 ++ .../endpoints/mod_khomp/commons/thread.hpp | 103 + src/mod/endpoints/mod_khomp/commons/timer.cpp | 352 ++ src/mod/endpoints/mod_khomp/commons/timer.hpp | 224 ++ src/mod/endpoints/mod_khomp/commons/types.hpp | 81 + .../endpoints/mod_khomp/commons/variant.hpp | 127 + .../endpoints/mod_khomp/commons/verbose.cpp | 3188 +++++++++++++++ .../endpoints/mod_khomp/commons/verbose.hpp | 505 +++ src/mod/endpoints/mod_khomp/docs/Manual.html | 1093 ++++++ src/mod/endpoints/mod_khomp/docs/Manual.pdf | Bin 0 -> 470261 bytes src/mod/endpoints/mod_khomp/docs/README.html | 39 + src/mod/endpoints/mod_khomp/docs/README.pdf | Bin 0 -> 399117 bytes .../endpoints/mod_khomp/docs/README_en.html | 40 + .../endpoints/mod_khomp/docs/README_en.pdf | Bin 0 -> 314411 bytes .../endpoints/mod_khomp/docs/User_Guide.html | 1099 ++++++ .../endpoints/mod_khomp/docs/User_Guide.pdf | Bin 0 -> 509827 bytes .../mod_khomp/include/applications.h | 962 +++++ src/mod/endpoints/mod_khomp/include/cli.h | 1143 ++++++ src/mod/endpoints/mod_khomp/include/defs.h | 211 + src/mod/endpoints/mod_khomp/include/frame.h | 160 + src/mod/endpoints/mod_khomp/include/globals.h | 119 + src/mod/endpoints/mod_khomp/include/k3l.h | 1996 ++++++++++ .../endpoints/mod_khomp/include/khomp_pvt.h | 1289 +++++++ .../mod_khomp/include/khomp_pvt_fxo.h | 376 ++ .../mod_khomp/include/khomp_pvt_gsm.h | 332 ++ .../mod_khomp/include/khomp_pvt_kxe1.h | 1122 ++++++ .../mod_khomp/include/khomp_pvt_passive.h | 304 ++ src/mod/endpoints/mod_khomp/include/lock.h | 86 + src/mod/endpoints/mod_khomp/include/logger.h | 141 + src/mod/endpoints/mod_khomp/include/opt.h | 250 ++ .../endpoints/mod_khomp/include/revision.h | 1 + src/mod/endpoints/mod_khomp/include/spec.h | 98 + src/mod/endpoints/mod_khomp/include/utils.h | 772 ++++ src/mod/endpoints/mod_khomp/install.sh | 93 + src/mod/endpoints/mod_khomp/mod_khomp.cpp | 1509 ++++++++ .../endpoints/mod_khomp/src/applications.cpp | 968 +++++ src/mod/endpoints/mod_khomp/src/cli.cpp | 2408 ++++++++++++ src/mod/endpoints/mod_khomp/src/frame.cpp | 124 + src/mod/endpoints/mod_khomp/src/globals.cpp | 66 + src/mod/endpoints/mod_khomp/src/khomp_pvt.cpp | 2516 ++++++++++++ .../endpoints/mod_khomp/src/khomp_pvt_fxo.cpp | 791 ++++ .../endpoints/mod_khomp/src/khomp_pvt_gsm.cpp | 565 +++ .../mod_khomp/src/khomp_pvt_kxe1.cpp | 3425 +++++++++++++++++ .../mod_khomp/src/khomp_pvt_passive.cpp | 288 ++ src/mod/endpoints/mod_khomp/src/lock.cpp | 138 + src/mod/endpoints/mod_khomp/src/logger.cpp | 437 +++ src/mod/endpoints/mod_khomp/src/opt.cpp | 772 ++++ src/mod/endpoints/mod_khomp/src/spec.cpp | 885 +++++ src/mod/endpoints/mod_khomp/src/utils.cpp | 393 ++ .../mod_khomp/support/config_defaults.cpp | 50 + .../mod_khomp/support/config_defaults.hpp | 75 + .../mod_khomp/support/klog-config.cpp | 122 + .../mod_khomp/support/klog-config.hpp | 69 + .../mod_khomp/support/klog-options.cpp | 158 + .../mod_khomp/support/klog-options.hpp | 81 + .../endpoints/mod_khomp/tools/getversion.sh | 51 + 96 files changed, 42128 insertions(+) create mode 100644 src/mod/endpoints/mod_khomp/Install/files/khomp.conf.xml create mode 100644 src/mod/endpoints/mod_khomp/Makefile create mode 100644 src/mod/endpoints/mod_khomp/commons/atomic.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/config_commons.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/config_options.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/config_options.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/configurator/configfile.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/configurator/configfile.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/configurator/option.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/configurator/option.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/configurator/restriction.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/configurator/restriction.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/configurator/section.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/configurator/section.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/flagger.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/format.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/format.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/freeswitch/saved_condition.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/freeswitch/saved_condition.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/freeswitch/simple_lock.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/freeswitch/thread.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/function.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/initializer.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/k3lapi.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/k3lapi.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/k3lutil.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/k3lutil.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/logger.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/noncopyable.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/refcounter.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/regex.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/regex.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/ringbuffer.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/ringbuffer.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/saved_condition.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/saved_condition.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/scoped_lock.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/simple_lock.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/strings.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/strings.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/tagged_union.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/thread.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/timer.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/timer.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/types.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/variant.hpp create mode 100644 src/mod/endpoints/mod_khomp/commons/verbose.cpp create mode 100644 src/mod/endpoints/mod_khomp/commons/verbose.hpp create mode 100644 src/mod/endpoints/mod_khomp/docs/Manual.html create mode 100644 src/mod/endpoints/mod_khomp/docs/Manual.pdf create mode 100644 src/mod/endpoints/mod_khomp/docs/README.html create mode 100644 src/mod/endpoints/mod_khomp/docs/README.pdf create mode 100644 src/mod/endpoints/mod_khomp/docs/README_en.html create mode 100644 src/mod/endpoints/mod_khomp/docs/README_en.pdf create mode 100644 src/mod/endpoints/mod_khomp/docs/User_Guide.html create mode 100644 src/mod/endpoints/mod_khomp/docs/User_Guide.pdf create mode 100644 src/mod/endpoints/mod_khomp/include/applications.h create mode 100644 src/mod/endpoints/mod_khomp/include/cli.h create mode 100644 src/mod/endpoints/mod_khomp/include/defs.h create mode 100644 src/mod/endpoints/mod_khomp/include/frame.h create mode 100644 src/mod/endpoints/mod_khomp/include/globals.h create mode 100644 src/mod/endpoints/mod_khomp/include/k3l.h create mode 100644 src/mod/endpoints/mod_khomp/include/khomp_pvt.h create mode 100644 src/mod/endpoints/mod_khomp/include/khomp_pvt_fxo.h create mode 100644 src/mod/endpoints/mod_khomp/include/khomp_pvt_gsm.h create mode 100644 src/mod/endpoints/mod_khomp/include/khomp_pvt_kxe1.h create mode 100644 src/mod/endpoints/mod_khomp/include/khomp_pvt_passive.h create mode 100644 src/mod/endpoints/mod_khomp/include/lock.h create mode 100644 src/mod/endpoints/mod_khomp/include/logger.h create mode 100644 src/mod/endpoints/mod_khomp/include/opt.h create mode 100644 src/mod/endpoints/mod_khomp/include/revision.h create mode 100644 src/mod/endpoints/mod_khomp/include/spec.h create mode 100644 src/mod/endpoints/mod_khomp/include/utils.h create mode 100755 src/mod/endpoints/mod_khomp/install.sh create mode 100644 src/mod/endpoints/mod_khomp/mod_khomp.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/applications.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/cli.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/frame.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/globals.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/khomp_pvt.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/khomp_pvt_fxo.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/khomp_pvt_gsm.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/khomp_pvt_kxe1.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/khomp_pvt_passive.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/lock.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/logger.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/opt.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/spec.cpp create mode 100644 src/mod/endpoints/mod_khomp/src/utils.cpp create mode 100644 src/mod/endpoints/mod_khomp/support/config_defaults.cpp create mode 100644 src/mod/endpoints/mod_khomp/support/config_defaults.hpp create mode 100644 src/mod/endpoints/mod_khomp/support/klog-config.cpp create mode 100644 src/mod/endpoints/mod_khomp/support/klog-config.hpp create mode 100644 src/mod/endpoints/mod_khomp/support/klog-options.cpp create mode 100644 src/mod/endpoints/mod_khomp/support/klog-options.hpp create mode 100755 src/mod/endpoints/mod_khomp/tools/getversion.sh diff --git a/src/mod/endpoints/mod_khomp/Install/files/khomp.conf.xml b/src/mod/endpoints/mod_khomp/Install/files/khomp.conf.xml new file mode 100644 index 0000000000..7255fb8555 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/Install/files/khomp.conf.xml @@ -0,0 +1,549 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mod/endpoints/mod_khomp/Makefile b/src/mod/endpoints/mod_khomp/Makefile new file mode 100644 index 0000000000..94923c7cda --- /dev/null +++ b/src/mod/endpoints/mod_khomp/Makefile @@ -0,0 +1,41 @@ +MODNAME := mod_khomp +VERBOSE := 1 + +ifeq ($(strip $(FREESWITCH_PATH)),) + BASE := ../../../../ +else + BASE := $(FREESWITCH_PATH) +endif + +curr_dir := $(shell pwd) + +versions := -DFS_VERSION_MAJOR=$(shell bash $(curr_dir)/tools/getversion.sh "SWITCH_VERSION_MAJOR" $(BASE)) -DFS_VERSION_MINOR=$(shell bash $(curr_dir)/tools/getversion.sh "SWITCH_VERSION_MINOR" $(BASE)) -DFS_VERSION_MICRO=$(shell bash $(curr_dir)/tools/getversion.sh "SWITCH_VERSION_MICRO" $(BASE)) + +LOCAL_CFLAGS = -I./ -I./include -I./commons -I./support -D_REENTRANT -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DK3L_HOSTSYSTEM -DCOMMONS_LIBRARY_USING_FREESWITCH -g -ggdb #-DDEBUG_FLAGS +LOCAL_CFLAGS += $(versions) + +LOCAL_LDFLAGS = -lk3l + +LOCAL_OBJS = ./commons/k3lapi.o ./commons/k3lutil.o ./commons/config_options.o ./commons/format.o ./commons/strings.o ./commons/ringbuffer.o ./commons/verbose.o ./commons/saved_condition.o ./commons/regex.o ./commons/timer.o ./commons/configurator/configfile.o ./commons/configurator/option.o ./commons/configurator/section.o ./commons/configurator/restriction.o +LOCAL_OBJS += ./support/klog-config.o ./support/klog-options.o ./support/config_defaults.o +LOCAL_OBJS += ./src/globals.o ./src/opt.o ./src/frame.o ./src/utils.o ./src/lock.o ./src/spec.o ./src/applications.o ./src/khomp_pvt_fxo.o ./src/khomp_pvt_gsm.o ./src/khomp_pvt_kxe1.o ./src/khomp_pvt_passive.o ./src/khomp_pvt.o ./src/logger.o ./src/cli.o + +conf_file_name := khomp.conf.xml +conf_file_dir := $(curr_dir)/Install/files +conf_file_dir_alt := $(curr_dir)/conf +conf_file_install = $(sysconfdir)/autoload_configs + +include $(BASE)/build/modmake.rules + +depend_install: + @echo "Copy $(conf_file_name)" + @if test -d $(conf_file_install) ; then \ + if test -f $(conf_file_dir)/$(conf_file_name) ; then \ + cp $(conf_file_dir)/$(conf_file_name) $(conf_file_install)/$(conf_file_name).new ;\ + else \ + cp $(conf_file_dir_alt)/$(conf_file_name) $(conf_file_install)/$(conf_file_name).new ;\ + fi; \ + if test ! -f "$(conf_file_install)/$(conf_file_name)" ; then \ + mv $(conf_file_install)/$(conf_file_name).new $(conf_file_install)/$(conf_file_name) ;\ + fi; \ + fi; diff --git a/src/mod/endpoints/mod_khomp/commons/atomic.hpp b/src/mod/endpoints/mod_khomp/commons/atomic.hpp new file mode 100644 index 0000000000..daa598c9b4 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/atomic.hpp @@ -0,0 +1,189 @@ +/* + KHOMP generic endpoint/channel library. + + This code was based on FreeBSD 7.X SVN (sys/i386/include/atomic.h), + with changes regarding optimizations and generalizations, and a + remake of the interface to fit use C++ features. + + Code is distributed under original license. + Original copyright follows: + + * Copyright (c) 1998 Doug Rabson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + +*/ + +#ifndef _ATOMIC_HPP_ +#define _ATOMIC_HPP_ + +namespace Atomic +{ + // Macros used to insert compare and exchange instructions easily into functions. + + #define MAKE_CMPXCHG_FUNCTION(INS, PTR, EXP, VAL, TYPE) \ + PunnedType pexp; pexp.valtype = EXP; \ + PunnedType pval; pval.valtype = VAL; \ + TYPE vexp = *(pexp.podtype); \ + TYPE vval = *(pval.podtype); \ + TYPE res; \ + unsigned char chg = 0; \ + asm volatile("lock;" INS "sete %1;" \ + : "=a" (res), /* 0 */ \ + "=q" (chg), /* 1 */ \ + "=m" (*(unsigned char **)(PTR)) /* 2 */ \ + : "r" (vval), /* 3 */ \ + "a" (vexp), /* 4 */ \ + "m" (*(unsigned char **)(PTR)) /* 5 */ \ + : "memory"); \ + *(pexp.podtype) = res; \ + return (chg != 0 ? true : false); + + #define MAKE_CMPXCHG8B_FUNCTION(PTR,EXP,VAL) \ + PunnedType pexp; pexp.valtype = EXP; \ + PunnedType pval; pval.valtype = VAL; \ + unsigned long long vexp = *(pexp.podtype); \ + unsigned long long vval = *(pval.podtype); \ + unsigned long long res = (unsigned long long)exp; \ + unsigned char chg = 0; \ + asm volatile("lock; cmpxchg8b %2; sete %1;" \ + : "+A" (vexp), /* 0 (result) */ \ + "=q" (chg) /* 1 */ \ + : "m" (*(unsigned char**)(PTR)), /* 2 */ \ + "b" ((unsigned long)(vval)), \ + "c" ((unsigned long)(vval >> 32))); \ + *(pexp.podtype) = vexp; \ + return (chg != 0 ? true : false); + + // Types used for making CMPXCHG instructions independent from base type. + + template < typename ValType, typename PodType > + union PunnedTypeTemplate + { + ValType * valtype; + PodType * podtype; + }; + + template < int SizeOfType, typename ReturnType > + struct HelperCreateCAS; + + template < typename ValType > + struct HelperCreateCAS<4, ValType> + { + #if !defined(__LP64__) && !defined(__LP64) + typedef unsigned long BaseType; + #else + typedef unsigned int BaseType; + #endif + + typedef PunnedTypeTemplate< ValType, BaseType > PunnedType; + + inline static bool apply(volatile void *p, ValType * exp, ValType now) + { + #if !defined(__LP64__) && !defined(__LP64) + MAKE_CMPXCHG_FUNCTION("cmpxchgl %3,%5;", p, exp, &now, BaseType); + #else + MAKE_CMPXCHG_FUNCTION("cmpxchgl %k3,%5;", p, exp, &now, BaseType); + #endif + } + }; + + template < typename ValType > + struct HelperCreateCAS<8, ValType> + { + #if !defined(__LP64__) && !defined(__LP64) + typedef unsigned long long BaseType; + #else + typedef unsigned long BaseType; + #endif + + typedef PunnedTypeTemplate< ValType, BaseType > PunnedType; + + inline static volatile ValType apply(volatile void *p, ValType * exp, ValType now) + { + #if !defined(__LP64__) && !defined(__LP64) + MAKE_CMPXCHG8B_FUNCTION(p, exp, &now); + #else + MAKE_CMPXCHG_FUNCTION("cmpxchgq %3,%5;", p, exp, &now, BaseType); + #endif + } + + }; + + // The CAS function itself. + + template < typename ValType > + inline bool doCAS(volatile ValType * p, ValType * o, ValType n) + { + return HelperCreateCAS::apply(static_cast(p), o, n); + }; + + template < typename ValType > + inline bool doCAS(volatile ValType * p, ValType o, ValType n) + { + return HelperCreateCAS::apply(static_cast(p), &o, n); + }; + + #undef MAKE_CMPXCHG_32_FUNCTION + #undef MAKE_CMPXCHG_64_FUNCTION + + #define MAKE_LOCKED_TEMPLATE(NAME) \ + template < typename ValType > inline void do##NAME(volatile ValType * p, ValType v); \ + template < typename ValType > inline void do##NAME(volatile ValType * p); + + #define MAKE_LOCKED_FUNCTION(NAME, TYPE, INS, CONS, VAL) \ + template < > inline void do##NAME < TYPE > (volatile TYPE * p, TYPE v){ asm volatile("lock;" INS : "=m" (*p) : CONS (VAL), "m" (*p)); } \ + template < > inline void do##NAME < TYPE > (volatile TYPE * p) { asm volatile("lock;" INS : "=m" (*p) : CONS (1), "m" (*p)); } + + #define MAKE_LOCKED_FUNCTIONS(NAME, TYPE, INS, CONS, VAL) \ + MAKE_LOCKED_FUNCTION(NAME, TYPE, INS, CONS, VAL) \ + MAKE_LOCKED_FUNCTION(NAME, unsigned TYPE, INS, CONS, VAL) + + MAKE_LOCKED_TEMPLATE(Add); + MAKE_LOCKED_TEMPLATE(Sub); + MAKE_LOCKED_TEMPLATE(SetBits); + MAKE_LOCKED_TEMPLATE(ClearBits); + + MAKE_LOCKED_FUNCTIONS(Add, int, "addl %1,%0", "ir", v); + MAKE_LOCKED_FUNCTIONS(Sub, int, "subl %1,%0", "ir", v); + MAKE_LOCKED_FUNCTIONS(SetBits, int, "orl %1,%0", "ir", v); + MAKE_LOCKED_FUNCTIONS(ClearBits, int, "andl %1,%0", "ir", ~v); + + #if !defined(__LP64__) && !defined(__LP64) + + MAKE_LOCKED_FUNCTIONS(Add, long, "addl %1,%0", "ir", v); + MAKE_LOCKED_FUNCTIONS(Sub, long, "subl %1,%0", "ir", v); + MAKE_LOCKED_FUNCTIONS(SetBits, long, "orl %1,%0", "ir", v); + MAKE_LOCKED_FUNCTIONS(ClearBits, long, "andl %1,%0", "ir", ~v); + + #else + + MAKE_LOCKED_FUNCTIONS(Add, long, "addq %1,%0", "ir", v); + MAKE_LOCKED_FUNCTIONS(Sub, long, "subq %1,%0", "ir", v); + MAKE_LOCKED_FUNCTIONS(SetBits, long, "orq %1,%0", "ir", v); + MAKE_LOCKED_FUNCTIONS(ClearBits, long, "andq %1,%0", "ir", ~v); + + #endif +}; + +#endif /* _ATOMIC_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/config_commons.hpp b/src/mod/endpoints/mod_khomp/commons/config_commons.hpp new file mode 100644 index 0000000000..de8f327df4 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/config_commons.hpp @@ -0,0 +1,69 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _CONFIG_COMMONS_HPP_ +#define _CONFIG_COMMONS_HPP_ + +/****************************************************************************/ +/* ASTERISK */ +#if defined(COMMONS_LIBRARY_USING_ASTERISK) + #define COMMONS_IMPLEMENTATION asterisk +/****************************************************************************/ +/* CALLWEAVER */ +#elif defined(COMMONS_LIBRARY_USING_CALLWEAVER) + #define COMMONS_IMPLEMENTATION callweaver +/****************************************************************************/ +/* FREESWITCH */ +#elif defined(COMMONS_LIBRARY_USING_FREESWITCH) + #define COMMONS_IMPLEMENTATION freeswitch +/****************************************************************************/ +/* GNU/LINUX (generic) */ +#elif defined(COMMONS_LIBRARY_USING_GNU_LINUX) + #define COMMONS_IMPLEMENTATION gnulinux +/****************************************************************************/ +#else + #error Unknown implementation selected. Please define COMMONS_LIBRARY_USING_* correctly. +#endif + +#define COMMONS_INCLUDE(file) + +#endif /* _CONFIG_COMMONS_HPP_ */ + diff --git a/src/mod/endpoints/mod_khomp/commons/config_options.cpp b/src/mod/endpoints/mod_khomp/commons/config_options.cpp new file mode 100644 index 0000000000..5383855f65 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/config_options.cpp @@ -0,0 +1,710 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +ConfigOption::ConfigOption(std::string name, const ConfigOption::StringType & value, const ConfigOption::StringType defvalue, string_allowed_type allowed, bool list_me) +: _my_name(name), _value_data(new StringData(const_cast(value), defvalue, allowed), true), + _list_me(list_me), _values(NULL), _loaded(false) +{}; + +ConfigOption::ConfigOption(std::string name, const ConfigOption::StringType & value, const ConfigOption::StringType defvalue, bool list_me) +: _my_name(name), _value_data(new StringData(const_cast(value), defvalue, string_allowed_type()), true), + _list_me(list_me), _values(NULL), _loaded(false) +{}; + +ConfigOption::ConfigOption(std::string name, const ConfigOption::SignedIntType & value, const ConfigOption::SignedIntType defvalue, + ConfigOption::SignedIntType min, ConfigOption::SignedIntType max, ConfigOption::SignedIntType step, bool list_me) +: _my_name(name), _value_data(new SignedIntData(const_cast(value), defvalue, Range(min, max, step)), true), + _list_me(list_me), _values(NULL), _loaded(false) +{}; + +ConfigOption::ConfigOption(std::string name, const ConfigOption::UnsignedIntType & value, const ConfigOption::UnsignedIntType defvalue, + ConfigOption::UnsignedIntType min, ConfigOption::UnsignedIntType max, ConfigOption::UnsignedIntType step, bool list_me) +: _my_name(name), _value_data(new UnsignedIntData(const_cast(value), defvalue, Range(min, max, step)), true), + _list_me(list_me), _values(NULL), _loaded(false) +{}; + +ConfigOption::ConfigOption(std::string name, const ConfigOption::BooleanType & value, const ConfigOption::BooleanType defvalue, bool list_me) +: _my_name(name), _value_data(new BooleanData(const_cast(value), defvalue), true), + _list_me(list_me), _values(NULL), _loaded(false) +{}; + +ConfigOption::ConfigOption(std::string name, ConfigOption::FunctionType fun, std::string defvalue, string_allowed_type allowed, bool list_me) +: _my_name(name), _value_data(new FunctionData(fun, defvalue, allowed), true), + _list_me(list_me), _values(NULL), _loaded(false) +{}; + +ConfigOption::ConfigOption(std::string name, ConfigOption::FunctionType fun, std::string defvalue, bool list_me) +: _my_name(name), _value_data(new FunctionData(fun, defvalue, string_allowed_type()), true), + _list_me(list_me), _values(NULL), _loaded(false) +{}; + +ConfigOption::ConfigOption(const ConfigOption & o) +: _my_name(o._my_name), _value_data(o._value_data), + _list_me(o._list_me), _values(o._values), _loaded(o._loaded) +{}; + +ConfigOption::~ConfigOption(void) +{ + if (_values) + { + for (unsigned int i = 0; _values[i] != NULL; i++) + delete _values[i]; + + delete[] _values; + _values = NULL; + } +}; + +void ConfigOption::set(ConfigOption::StringType value) +{ + switch (_value_data.which()) + { + case ID_STRING: + { + try + { + StringData & tmp = _value_data.get(); + + if (tmp.string_allowed.empty()) + { + tmp.string_val = value; + _loaded = true; + } + else + { + if (tmp.string_allowed.find(value) != tmp.string_allowed.end()) + { + tmp.string_val = value; + _loaded = true; + return; + } + + std::string allowed_string; + + for (string_allowed_type::iterator i = tmp.string_allowed.begin(); i != tmp.string_allowed.end(); i++) + { + allowed_string += " '"; + allowed_string += (*i); + allowed_string += "'"; + } + + throw ConfigProcessFailure(STG(FMT("value '%s' not allowed for option '%s' (allowed values:%s)") + % value % _my_name % allowed_string)); + } + break; + } + catch(ValueType::InvalidType & e) + { + throw; + } + } + + case ID_FUN: + { + try + { + FunctionData & tmp = _value_data.get(); + tmp.fun_val(value); + _loaded = true; + break; + } + catch(ValueType::InvalidType & e) + { + throw; + } + + } + + default: + { + throw ConfigProcessFailure(STG(FMT("option '%s' is not of type string, nor function defined") % _my_name)); + } + } +} + +void ConfigOption::set(ConfigOption::SignedIntType value) +{ + try + { + SignedIntData & tmp = _value_data.get(); + + if (value < tmp.sint_Range.minimum) + throw ConfigProcessFailure(STG(FMT("value '%d' out-of-Range for option '%s' (too low)") % value % _my_name)); + + if (value > tmp.sint_Range.maximum) + throw ConfigProcessFailure(STG(FMT("value '%d' out-of-Range for option '%s' (too high)") % value % _my_name)); + + if (((value - tmp.sint_Range.minimum) % tmp.sint_Range.step) != 0) + throw ConfigProcessFailure(STG(FMT("value '%d' out-of-Range for option '%s' (outside allowed step)") % value % _my_name)); + + tmp.sint_val = value; + _loaded = true; + } + catch(ValueType::InvalidType & e) + { + throw; + } +} + +void ConfigOption::set(ConfigOption::UnsignedIntType value) +{ + try + { + UnsignedIntData & tmp = _value_data.get(); + + if (value < tmp.uint_Range.minimum) + throw ConfigProcessFailure(STG(FMT("value '%d' out-of-Range for option '%s' (too low)") % value % _my_name)); + + if (value > tmp.uint_Range.maximum) + throw ConfigProcessFailure(STG(FMT("value '%d' out-of-Range for option '%s' (too high)") % value % _my_name)); + + if (((value - tmp.uint_Range.minimum) % tmp.uint_Range.step) != 0) + throw ConfigProcessFailure(STG(FMT("value '%d' out-of-Range for option '%s' (outside allowed step)") % value % _my_name)); + + tmp.uint_val = value; + _loaded = true; + } + catch(ValueType::InvalidType & e) + { + throw; + } +} + +void ConfigOption::set(ConfigOption::BooleanType value) +{ + try + { + BooleanData & tmp = _value_data.get(); + tmp.bool_val = value; + _loaded = true; + } + catch(ValueType::InvalidType & e) + { + throw; + } +} + +std::string & ConfigOption::name(void) { return _my_name; }; + +ConfigOption::value_id_type ConfigOption::type(void) +{ + return (value_id_type) _value_data.which(); +}; + +const char ** ConfigOption::values(void) +{ + if (_values != NULL) + return _values; + + switch ((value_id_type) _value_data.which()) + { + case ConfigOption::ID_BOOL: + { + _values = new const char*[3]; + + _values[0] = strdup("yes"); + _values[1] = strdup("no"); + _values[2] = NULL; + + return _values; + } + + case ConfigOption::ID_SINT: + { + try + { + SignedIntData & tmp = _value_data.get(); + + + unsigned int count = ((tmp.sint_Range.maximum - tmp.sint_Range.minimum) / tmp.sint_Range.step) + 1; + unsigned int index = 0; + + _values = new const char*[count + 1]; + + for (SignedIntType i = tmp.sint_Range.minimum; i <= tmp.sint_Range.maximum; i += tmp.sint_Range.step, index++) + _values[index] = strdup(STG(FMT("%d") % i).c_str()); + + _values[index] = NULL; + + return _values; + } + catch(ValueType::InvalidType & e) + { + throw; + } + } + + case ConfigOption::ID_UINT: + { + try + { + UnsignedIntData & tmp = _value_data.get(); + + unsigned int count = ((tmp.uint_Range.maximum - tmp.uint_Range.minimum) / tmp.uint_Range.step) + 1; + unsigned int index = 0; + + _values = new const char*[count + 1]; + + for (UnsignedIntType i = tmp.uint_Range.minimum; i <= tmp.uint_Range.maximum; i += tmp.uint_Range.step, index++) + _values[index] = strdup(STG(FMT("%d") % i).c_str()); + + _values[index] = NULL; + + return _values; + } + catch(ValueType::InvalidType & e) + { + throw; + } + } + + case ConfigOption::ID_STRING: + { + try + { + StringData & tmp = _value_data.get(); + + _values = new const char*[ tmp.string_allowed.size() + 1 ]; + + unsigned int index = 0; + + for (string_allowed_type::iterator i = tmp.string_allowed.begin(); i != tmp.string_allowed.end(); i++, index++) + _values[index] = strdup((*i).c_str()); + + _values[index] = NULL; + + return _values; + } + catch(ValueType::InvalidType & e) + { + throw; + } + } + + case ConfigOption::ID_FUN: + { + try + { + FunctionData & tmp = _value_data.get(); + + _values = new const char*[ tmp.fun_allowed.size() + 1 ]; + + unsigned int index = 0; + + for (string_allowed_type::iterator i = tmp.fun_allowed.begin(); i != tmp.fun_allowed.end(); i++, index++) + _values[index] = strdup((*i).c_str()); + + _values[index] = NULL; + return _values; + } + catch(ValueType::InvalidType & e) + { + throw; + } + + } + + default: + throw ConfigProcessFailure(STG(FMT("unknown type identifier '%d'") % _value_data.which())); + } +}; + +void ConfigOption::reset(void) +{ + _loaded = false; +}; + +void ConfigOption::commit(void) +{ + if (_loaded) + return; + + switch ((value_id_type) _value_data.which()) + { + case ConfigOption::ID_BOOL: + { + try + { + BooleanData & tmp = _value_data.get(); + tmp.bool_val = tmp.bool_default; + } + catch(ValueType::InvalidType & e) + { + throw; + } + + break; + } + + case ConfigOption::ID_SINT: + { + try + { + SignedIntData & tmp = _value_data.get(); + tmp.sint_val = tmp.sint_default; + } + catch(ValueType::InvalidType & e) + { + throw; + } + break; + } + + case ConfigOption::ID_UINT: + { + try + { + UnsignedIntData & tmp = _value_data.get(); + tmp.uint_val = tmp.uint_default; + } + catch(ValueType::InvalidType & e) + { + throw; + } + break; + } + + case ConfigOption::ID_STRING: + { + try + { + StringData & tmp = _value_data.get(); + tmp.string_val = tmp.string_default; + } + catch(ValueType::InvalidType & e) + { + throw; + } + break; + } + + case ConfigOption::ID_FUN: + { + try + { + FunctionData & tmp = _value_data.get(); + tmp.fun_val(tmp.fun_default); + } + catch(ValueType::InvalidType & e) + { + throw; + } + break; + } + + default: + throw ConfigProcessFailure(STG(FMT("unknown type identifier '%d'") % _value_data.which())); + } + + _loaded = true; +}; + +void ConfigOption::copy_from(ConfigOption & src) +{ + if (src._value_data.which() != _value_data.which()) + throw ConfigProcessFailure(STG(FMT("unable to copy options, source type differs from destination."))); + + if (!src._loaded) + return; + + switch ((value_id_type) _value_data.which()) + { + case ConfigOption::ID_BOOL: + { + try + { + BooleanData & stmp = src._value_data.get(); + BooleanData & dtmp = _value_data.get(); + /* do not copy references, but values.. */ + bool tmpval = stmp.bool_val; + dtmp.bool_val = tmpval; + } + catch(ValueType::InvalidType & e) + { + throw; + } + + break; + } + + case ConfigOption::ID_SINT: + { + try + { + SignedIntData & stmp = src._value_data.get(); + SignedIntData & dtmp = _value_data.get(); + /* do not copy references, but values.. */ + int tmpval = stmp.sint_val; + dtmp.sint_val = tmpval; + } + catch(ValueType::InvalidType & e) + { + throw; + } + + break; + } + + case ConfigOption::ID_UINT: + { + try + { + UnsignedIntData & stmp = src._value_data.get(); + UnsignedIntData & dtmp = _value_data.get(); + /* do not copy references, but values.. */ + unsigned int tmpval = stmp.uint_val; + dtmp.uint_val = tmpval; + } + catch(ValueType::InvalidType & e) + { + throw; + } + + + break; + } + + case ConfigOption::ID_STRING: + { + try + { + StringData & stmp = src._value_data.get(); + StringData & dtmp = _value_data.get(); + /* do not copy references, but values.. */ + std::string tmpval = stmp.string_val; + dtmp.string_val = tmpval; + } + catch(ValueType::InvalidType & e) + { + throw; + } + + break; + } + + case ConfigOption::ID_FUN: + { + /* TO IMPLEMENT (NEEDS ANOTHER METHOD ON FUNCTION FOR GETTING VALUE) */ + +// FunctionData & tmp = boost::get(_value_data); +// +// if (!tmp.loaded) +// { +// tmp.fun_val(tmp.fun_default); +// tmp.loaded = true; +// } + break; + } + + default: + throw ConfigProcessFailure(STG(FMT("unknown type identifier '%d'") % _value_data.which())); + } + + _loaded = true; +}; + +/*********************************/ + +bool ConfigOptions::add(ConfigOption option) +{ + //option_map_type::iterator iter2 = _map.begin(); + + //boost::tie(iter2, ok2) + std::pair ret = _map.insert(option_pair_type(option.name(), option)); + + return ret.second; +} + +bool ConfigOptions::synonym(std::string equiv_opt, std::string main_opt) +{ + //syn_option_map_type::iterator iter = _syn_map.begin(); + + //boost::tie(iter, ok) + std::pair ret = _syn_map.insert(syn_option_pair_type(equiv_opt, main_opt)); + + return ret.second; +} + +ConfigOptions::string_set ConfigOptions::options(void) +{ + string_set res; + + for (option_map_type::iterator i = _map.begin(); i != _map.end(); i++) + res.insert((*i).first); + + return res; +} + +void ConfigOptions::process(const char * name, const char * value) +{ + option_map_type::iterator iter = find_option(name); + + if (iter == _map.end()) + throw ConfigProcessFailure(STG(FMT("unknown option '%s'") % name)); + + try + { + switch ((*iter).second.type()) + { + case ConfigOption::ID_SINT: + set((*iter).first, Strings::toulong(value)); + return; + case ConfigOption::ID_UINT: + set((*iter).first, Strings::tolong(value)); + return; + case ConfigOption::ID_BOOL: + set((*iter).first, Strings::toboolean(value)); + return; + case ConfigOption::ID_STRING: + case ConfigOption::ID_FUN: + set((*iter).first, std::string(value)); + return; + default: + throw ConfigProcessFailure(STG(FMT("unknown type identifier '%d'") % (*iter).second.type())); + } + } + catch (Strings::invalid_value & e) + { + throw ConfigProcessFailure(STG(FMT("invalid value '%s' for option '%s'") % value % name)); + } +} + +const char ** ConfigOptions::values(const char * name) +{ + option_map_type::iterator iter = find_option(name); + + if (iter == _map.end()) + throw ConfigProcessFailure(STG(FMT("unknown option '%s'") % name)); + + return (*iter).second.values(); +} + +const char ** ConfigOptions::values(void) +{ + if (_values != NULL) + return _values; + + unsigned int count = 0; + + for (option_map_type::iterator i = _map.begin(); i != _map.end(); i++) + if ((*i).second.list_me()) + ++count; + + _values = new const char*[ count + 1 ]; + + unsigned int index = 0; + + for (option_map_type::iterator i = _map.begin(); i != _map.end(); i++) + { + if ((*i).second.list_me()) + { + _values[index] = strdup((*i).first.c_str()); + ++index; + } + } + + _values[index] = NULL; + + return _values; +} + +void ConfigOptions::reset(void) +{ + for (option_map_type::iterator i = _map.begin(); i != _map.end(); i++) + (*i).second.reset(); +} + +ConfigOptions::messages_type ConfigOptions::commit(void) +{ + messages_type msgs; + + for (option_map_type::iterator i = _map.begin(); i != _map.end(); i++) + { + try + { + (*i).second.commit(); + } + catch (ConfigProcessFailure & e) + { + msgs.push_back(e.msg); + } + } + + return msgs; +} + +bool ConfigOptions::loaded(std::string name) +{ + option_map_type::iterator iter = find_option(name); + + if (iter == _map.end()) + return false; + + return iter->second.loaded(); +} + +void ConfigOptions::copy_from(ConfigOptions & source, std::string name) +{ + option_map_type::iterator iter_src = source.find_option(name); + option_map_type::iterator iter_dst = find_option(name); + + if (iter_src == source._map.end()) + throw ConfigProcessFailure(STG(FMT("unknown option '%s' on source") % name)); + + if (iter_dst == _map.end()) + throw ConfigProcessFailure(STG(FMT("unknown option '%s' on destination") % name)); + + iter_dst->second.copy_from(iter_src->second); +} + +ConfigOptions::option_map_type::iterator ConfigOptions::find_option(std::string name) +{ + syn_option_map_type::iterator syn_iter = _syn_map.find(name); + + if (syn_iter != _syn_map.end()) + name = syn_iter->second; + + option_map_type::iterator iter = _map.find(name); + + return iter; +} diff --git a/src/mod/endpoints/mod_khomp/commons/config_options.hpp b/src/mod/endpoints/mod_khomp/commons/config_options.hpp new file mode 100644 index 0000000000..3cfe2e1c78 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/config_options.hpp @@ -0,0 +1,286 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include +#include + +#include + +#include +#include +#include + +#ifndef _CONFIG_OPTIONS_HPP_ +#define _CONFIG_OPTIONS_HPP_ + +struct ConfigProcessFailure +{ + ConfigProcessFailure(std::string _msg): msg(_msg) {}; + std::string msg; +}; + +struct ConfigOption +{ + typedef int SignedIntType; + typedef unsigned int UnsignedIntType; + typedef bool BooleanType; + typedef std::string StringType; + + typedef Function::Function1 < void, std::string > FunctionType; + + typedef std::set < StringType > string_allowed_type; + + /* this should reflect 'variant.which()'! */ + typedef enum + { + ID_SINT = 0, + ID_UINT = 1, + ID_BOOL = 2, + ID_STRING = 3, + ID_FUN = 4, + } + value_id_type; + + template < typename number_type > + struct Range + { + Range(number_type _minimum, number_type _maximum, number_type _step) + : minimum(_minimum), maximum(_maximum), step(_step) {}; + + number_type minimum, maximum, step; + }; + + struct SignedIntData : public VariantBaseType < void > + { + SignedIntData(SignedIntType & _sint_val, SignedIntType _sint_default, Range< SignedIntType > _sint_Range) + : sint_val(_sint_val), sint_default(_sint_default), sint_Range(_sint_Range) {}; + + int which() + { + return ID_SINT; + } + + SignedIntType & sint_val; + SignedIntType sint_default; + Range sint_Range; + }; + + struct UnsignedIntData : public VariantBaseType < void > + { + UnsignedIntData(UnsignedIntType & _uint_val, UnsignedIntType _uint_default, Range< UnsignedIntType > _uint_Range) + : uint_val(_uint_val), uint_default(_uint_default), uint_Range(_uint_Range) {}; + + int which() + { + return ID_UINT; + } + + UnsignedIntType & uint_val; + UnsignedIntType uint_default; + Range uint_Range; + }; + + struct BooleanData : public VariantBaseType < void > + { + BooleanData(BooleanType & _bool_val, BooleanType _bool_default) + : bool_val(_bool_val), bool_default(_bool_default) {}; + + int which() + { + return ID_BOOL; + } + + BooleanType & bool_val; + BooleanType bool_default; + }; + + struct StringData : public VariantBaseType < void > + { + StringData(std::string & _string_val, std::string _string_default, string_allowed_type _string_allowed) + : string_val(_string_val), string_default(_string_default), string_allowed(_string_allowed) {}; + + int which() + { + return ID_STRING; + } + + std::string & string_val; + std::string string_default; + string_allowed_type string_allowed; + }; + + struct FunctionData : public VariantBaseType < void > + { + FunctionData(FunctionType _fun_val, std::string _fun_default, string_allowed_type _fun_allowed) + : fun_val(_fun_val), fun_default(_fun_default), fun_allowed(_fun_allowed) {}; + + int which() + { + return ID_FUN; + } + + FunctionType fun_val; + std::string fun_default; + string_allowed_type fun_allowed; + }; + + + typedef Variant < VariantBaseType < void > > ValueType; + + ConfigOption(std::string, const StringType &, const StringType, string_allowed_type allowed, bool list_me = true); + ConfigOption(std::string, const StringType &, const StringType = "", bool list_me = true); + ConfigOption(std::string, const SignedIntType &, const SignedIntType = 0, SignedIntType min = -INT_MAX, SignedIntType max = INT_MAX, SignedIntType step = 1, bool list_me = true); + ConfigOption(std::string, const UnsignedIntType &, const UnsignedIntType = 0, UnsignedIntType min = 0, UnsignedIntType max = UINT_MAX, UnsignedIntType step = 1, bool list_me = true); + ConfigOption(std::string, const BooleanType &, const BooleanType = false, bool list_me = true); + ConfigOption(std::string, FunctionType, std::string defvalue, string_allowed_type allowed, bool list_me = true); + ConfigOption(std::string, FunctionType, std::string defvalue = "", bool list_me = true); + + ConfigOption(const ConfigOption & o); + + ~ConfigOption(void); + + void set(StringType value); + + void set(SignedIntType value); + void set(UnsignedIntType value); + void set(BooleanType value); + + BooleanType get_bool(){ return _value_data.get().bool_val; } + std::string get_str(){ return _value_data.get().string_val; } + SignedIntType get_sint(){ return _value_data.get().sint_val; } + UnsignedIntType get_uint(){ return _value_data.get().uint_val; } + + std::string & name(void); + value_id_type type(void); + + const char ** values(void); + + void reset(void); + void commit(void); + + bool list_me(void) { return _list_me; }; + bool loaded(void) { return _loaded; }; + + void copy_from(ConfigOption &); + + protected: + std::string _my_name; + ValueType _value_data; + + bool _list_me; + const char ** _values; + bool _loaded; +}; + +struct ConfigOptions +{ + typedef std::vector < std::string > messages_type; + + ConfigOptions(void): _values(NULL) {}; + + typedef std::set < std::string > string_set; + + typedef std::map < std::string, ConfigOption > option_map_type; + typedef std::pair < std::string, ConfigOption > option_pair_type; + + typedef std::map < std::string, std::string > syn_option_map_type; + typedef std::pair < std::string, std::string > syn_option_pair_type; + + bool add(ConfigOption option); + + /* only valid in "process" (for backwards compatibility config files) */ + bool synonym(std::string, std::string); + + template + void set(std::string name, ValueType value) + { + option_map_type::iterator iter = _map.find(name); + + if (iter == _map.end()) + throw ConfigProcessFailure(STG(FMT("unknown option: %s") % name)); + + (*iter).second.set(value); + } + + std::string get(std::string name) + { + option_map_type::iterator iter = _map.find(name); + + if (iter == _map.end()) + throw ConfigProcessFailure(STG(FMT("unknown option: %s") % name)); + + switch((*iter).second.type()) + { + case ConfigOption::ID_BOOL: return (*iter).second.get_bool() ? "yes" : "no"; + case ConfigOption::ID_STRING: return (*iter).second.get_str(); + case ConfigOption::ID_UINT: return STG(FMT("%d") % (*iter).second.get_uint()); + case ConfigOption::ID_SINT: return STG(FMT("%d") % (*iter).second.get_sint()); + case ConfigOption::ID_FUN: return ""; + } + } + + string_set options(void); + + void process(const char *, const char *); /* process option from file */ + + void reset(void); /* reset loaded opts */ + messages_type commit(void); /* set defaults */ + + const char ** values(const char *); /* option value */ + const char ** values(void); /* values from options */ + + bool loaded(std::string); /* return if config was loaded */ + + void copy_from(ConfigOptions &, std::string); + + protected: + option_map_type::iterator find_option(std::string); + + protected: + option_map_type _map; + syn_option_map_type _syn_map; + + const char ** _values; +}; + +#endif /* _CONFIG_OPTIONS_HPP_ */ + diff --git a/src/mod/endpoints/mod_khomp/commons/configurator/configfile.cpp b/src/mod/endpoints/mod_khomp/commons/configurator/configfile.cpp new file mode 100644 index 0000000000..6aa2e59201 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/configurator/configfile.cpp @@ -0,0 +1,241 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ +#include + +#include + +#if _MSC_VER >= 1400 +#undef close +#endif + +void Configfile::ignore(std::string str) +{ + _ignores.insert(str); +}; + +bool Configfile::select(Section **ptr, std::string str) +{ + /* default section == this! */ + *ptr = this; + + /* always success by default */ + return true; +}; + +bool Configfile::adjust(Section * section, std::string & opt, std::string & val) +{ + return section->load(opt, val); +}; + +bool Configfile::deserialize(std::ifstream& fd) +{ + Section * section = NULL; + + /* default selection! */ + if (!select(§ion)) + { + _errors.push_back("default selection has failed!"); + return false; + } + + size_t count = 0; + + while (fd.good()) + { + std::string str; + + /* read one line! */ + std::getline(fd, str); + + size_t lst = str.size() - 1; + + if (str.size() >= 1 && str[lst] == '\r') //cuida das quebras de linha do tipo \r\n + { + str.erase(lst,1); + --lst; + } + + /* empty line! */ + if (str.size() == 0) + continue; + + /* comment! */ + if (str[0] == '#') + continue; + + ++count; + + if (str[0] == '[' && str[lst] == ']') + { + str.erase(0,1); --lst; + str.erase(lst,1); --lst; + + if (!select(§ion, str)) + { + _errors.push_back(STG(FMT("erroneous section '%s'") % str)); + + /* ignore this section */ + section = NULL; + continue; + } + } + else + { + std::string::size_type pos = str.find('='); + + if (pos == std::string::npos) + { + _errors.push_back(STG(FMT("erroneous separator '%s'") % str)); + continue; + }; + + if (section == NULL) + { + _errors.push_back(STG(FMT("no section for option '%s'") % str)); + continue; + } + + std::string opt(str.substr(0,pos)); + std::string val(str.substr(pos+1)); + + if (_ignores.find(opt) != _ignores.end()) + continue; + + if (val == "@") val = ""; + + if (adjust(section, opt, val)) + continue; + + _errors.push_back(STG(FMT("option '%s' does " + "not exist or '%s' is not a valid value (at section '%s')") + % opt % val % section->name())); + } + } + + // retorna 'true' se arquivo tinha alguma coisa valida. + return (count != 0); +} + +bool Configfile::obtain() +{ + std::ifstream fd(_filename.c_str()); + + if (!fd.is_open()) + { + _errors.push_back(STG(FMT("unable to open file '%s': %s") + % _filename % strerror(errno))); + return false; + }; + + if (!deserialize(fd)) + { + fd.close(); + return false; + } + + fd.close(); + return true; +}; + +void Configfile::recurse(std::ofstream& fd, Section * section) +{ + typedef Section::SectionMap::iterator section_iter; + typedef Section::OptionMap::iterator option_iter; + + for (option_iter i = section->option_begin(); i != section->option_end(); i++) + { + std::string res; + + if ((*i).second.store(res)) + { + if (res == "") res = "@"; + fd << (*i).first << "=" << res << std::endl; + } + } + + if (!section->recursive()) + return; + + for (section_iter j = section->section_begin(); j != section->section_end(); j++) + recurse(fd, (*j).second); +} + +bool Configfile::serialize(std::ofstream& fd) +{ + recurse(fd, this); + return true; +} + +bool Configfile::provide() +{ + std::string tmp(_filename); + tmp += ".new"; + + std::ofstream fd(tmp.c_str()); + + if (!fd.good()) + { + _errors.push_back(STG(FMT("unable to open file '%s': %s") + % tmp % strerror(errno))); + return false; + } + + if (!serialize(fd)) + { + fd.close(); + return false; + } + + fd.close(); + + if (rename(tmp.c_str(), _filename.c_str()) != 0) + { + _errors.push_back(STG(FMT("unable to replace config file '%s': %s") + % _filename % strerror(errno))); + return false; + } + + return true; +} + +#if _MSC_VER >= 1400 +#define close _close +#endif \ No newline at end of file diff --git a/src/mod/endpoints/mod_khomp/commons/configurator/configfile.hpp b/src/mod/endpoints/mod_khomp/commons/configurator/configfile.hpp new file mode 100644 index 0000000000..61f42469af --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/configurator/configfile.hpp @@ -0,0 +1,90 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include +#include +#include + +#include + +#include + +#ifndef _CONFIG_CONFIGFILE_HPP_ +#define _CONFIG_CONFIGFILE_HPP_ + +struct Configfile: public Section +{ + typedef std::list < std::string > ErrorVector; + typedef std::set < std::string > NameSet; + + Configfile(std::string name, std::string desc) + : Section(name, desc), _good(false) {}; + + virtual ~Configfile() {}; + + bool good() { return _good; }; + std::string & filename() { return _filename; }; + + ErrorVector & errors() { return _errors; }; + + void ignore(std::string); + + virtual bool obtain(); + virtual bool provide(); + + protected: + virtual bool select(Section **, std::string str = ""); + virtual bool adjust(Section *, std::string & opt, std::string & val); + + virtual bool deserialize(std::ifstream &); + virtual bool serialize(std::ofstream &); + + void recurse(std::ofstream &, Section *); + + protected: + bool _good; + ErrorVector _errors; + NameSet _ignores; + std::string _filename; +}; + +#endif /* _CONFIG_CONFIGFILE_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/configurator/option.cpp b/src/mod/endpoints/mod_khomp/commons/configurator/option.cpp new file mode 100644 index 0000000000..083883e63f --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/configurator/option.cpp @@ -0,0 +1,185 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +bool Option::equals(std::string & value) +{ + switch (_restriction.numeral()) + { + case Restriction::N_UNIQUE: + { + Restriction::Value my_value; + + if (!_restriction.get(Restriction::F_USER, my_value)) + return false; + + return (my_value == value); + } + case Restriction::N_MULTIPLE: + { + Restriction::Vector my_values; + + if (!_restriction.get(Restriction::F_USER, my_values)) + return false; + + for (Restriction::Vector::iterator i = my_values.begin(); i != my_values.end(); i++) + { + if ((*i) == value) + return true; + } + + return false; + } + } + + return false; +} + +bool Option::load(std::string & value) +{ + bool ret = _restriction.set(Restriction::F_FILE, value); + + if (ret) _modified = false; + + return ret; +} + +bool Option::change(std::string & value) +{ + bool ret = _restriction.set(Restriction::F_FILE, value); + + if (ret) _modified = true; + + return ret; +} + +bool Option::store(std::string & value) +{ + switch (_restriction.numeral()) + { + case Restriction::N_UNIQUE: + return _restriction.get(Restriction::F_FILE, value); + + case Restriction::N_MULTIPLE: + { + Restriction::Vector values; + + if (!_restriction.get(Restriction::F_FILE, values)) + return false; + + Strings::Merger strs; + + for (Restriction::Vector::iterator i = values.begin(); i != values.end(); i++) + strs.add(*i); + + value = strs.merge(","); + + return true; + } + + default: + return false; + } +} + +Option::Flags Option::set(const char * value) +{ + std::string str_value(value); + return set(str_value); +} + + +Option::Flags Option::set(Restriction::Value & value) +{ + Restriction::Value last_value, curr_value; + Flags flags; + + bool ret1 = _restriction.get(Restriction::F_USER, last_value); + + if (!_restriction.set(Restriction::F_USER, value)) + return flags; + + flags[F_ADJUSTED] = true; + + bool ret2 = _restriction.get(Restriction::F_USER, curr_value); + + if (!ret1 || (ret2 && (last_value != curr_value))) + { + flags[F_MODIFIED] = true; + _modified = true; + } + + return flags; +} + +Option::Flags Option::set(Restriction::Vector & values) +{ + Restriction::Vector last_values, curr_values; + Flags flags; + + bool ret1 = _restriction.get(Restriction::F_USER, last_values); + + if (!_restriction.set(Restriction::F_USER, values)) + return flags; + + flags[F_ADJUSTED] = true; + + bool ret2 = _restriction.get(Restriction::F_USER, curr_values); + + if (!ret1 || (ret2 && (last_values != curr_values))) + { + flags[F_MODIFIED] = true; + _modified = true; + } + + return flags; +} + +bool Option::get(Restriction::Value & value) +{ + return _restriction.get(Restriction::F_USER, value); +} + +bool Option::get(Restriction::Vector & values) +{ + return _restriction.get(Restriction::F_USER, values); +} diff --git a/src/mod/endpoints/mod_khomp/commons/configurator/option.hpp b/src/mod/endpoints/mod_khomp/commons/configurator/option.hpp new file mode 100644 index 0000000000..8aa103a0cc --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/configurator/option.hpp @@ -0,0 +1,122 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +#include +#include +#include + +#include + +#include + +#ifndef _CONFIG_OPTION_HPP_ +#define _CONFIG_OPTION_HPP_ + +struct Option +{ + enum FlagTypes + { + F_MODIFIED = 0x0, /* if option was modified */ + F_ADJUSTED = 0x1, /* if option was correctly formated */ + }; + + struct Flags: public std::vector + { + Flags(): std::vector(2) {}; + }; + + typedef Restriction::Value Value; + typedef Restriction::Vector Vector; + + /* exception */ + struct InvalidDefaultValue + { + InvalidDefaultValue(std::string name, std::string value) + : _name(name), _value(value) {}; + + std::string & name() { return _name; }; + std::string & value() { return _value; }; + + protected: + std::string _name; + std::string _value; + }; + + Option(std::string name, std::string desc, std::string defvalue, Restriction restriction) + : _name(name), _desc(desc), _restriction(restriction), _modified(true) + { + std::string value(defvalue); + + if (!(set(value)[F_ADJUSTED])) + throw InvalidDefaultValue(name, defvalue); + } + + const std::string & name() { return _name; }; + const std::string & description() { return _desc; }; + + Restriction & restriction() { return _restriction; }; + bool modified() { return _modified; }; + + public: + bool load(std::string &); + bool change(std::string &); + bool store(std::string &); + + Flags set(const char *); + Flags set(Value &); + Flags set(Vector &); + + bool get(Value &); + bool get(Vector &); + + bool equals(std::string &); + + protected: + std::string _name; + std::string _desc; + + Restriction _restriction; + bool _modified; +}; + +#endif /* _CONFIG_OPTION_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/configurator/restriction.cpp b/src/mod/endpoints/mod_khomp/commons/configurator/restriction.cpp new file mode 100644 index 0000000000..9653a7c608 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/configurator/restriction.cpp @@ -0,0 +1,353 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include + +#include +#include + +#include + +/* internal helper! */ +bool Restriction::equalNumber(const double a, const double b) +{ + char tmp1[64]; + char tmp2[64]; + + snprintf(tmp1, sizeof(tmp1), "%.3f", a); + snprintf(tmp2, sizeof(tmp2), "%.3f", b); + + if (strncmp(tmp1, tmp2, sizeof(tmp1))) + return false; + + return true; +} + +/* process value to our internal representation */ + +bool Restriction::process(Restriction::Format fmt, + const Restriction::Value & value, Restriction::Value & final) +{ + switch (_bounds) + { + case B_RANGE: + { + if (_kind != K_NUMBER) + return false; + + std::string tmpvalue; + + Restriction::Value::const_iterator itr = value.begin(); + Restriction::Value::const_iterator end = value.end(); + + tmpvalue.reserve(value.size()); + + // f*cking dot/comma notation! + for (; itr != end; ++itr) + tmpvalue += ((*itr) != ',' ? (*itr) : '.'); + + try + { + double newvalue = Strings::todouble(tmpvalue); + + if (newvalue < _init && newvalue > _fini) + return false; + + double res = (newvalue - _init) / _step; + + if (!equalNumber(res, rint(res))) + return false; + + final = value; + return true; + } + catch (...) + { + return false; + } + } + + case B_LIST: + for (List::iterator i = _list.begin(); i != _list.end(); i++) + { + Value & tmp = (*i); + + if (tmp == value) + { + final = value; + return true; + } + } + return false; + + case B_MAPS: + switch (fmt) + { + case F_USER: + { + Map::iterator i = _map_from_usr.find(std::string(value)); + + if (i == _map_from_usr.end()) + return false; + + Value & tmp = (*i).second; + + final = tmp; + return true; + } + + case F_FILE: + { + Map::iterator i = _map_from_cfg.find(std::string(value)); + + if (i == _map_from_cfg.end()) + return false; + + final = value; + return true; + } + + default: + break; + } + return false; + + case B_FREE: + final = value; + return true; + + default: + break; + } + + return false; +} + +/* unprocess the value (outputs the external representation) */ + +bool Restriction::unprocess(Restriction::Format fmt, + const Restriction::Value & value, Restriction::Value & final) +{ + switch (_bounds) + { + case B_MAPS: + + switch (fmt) + { + case F_USER: + { + Map::iterator i = _map_from_cfg.find(std::string(value)); + + if (i == _map_from_cfg.end()) + return false; + + final = (*i).second; + return true; + } + default: + break; + } + + default: + final = value; + return true; + } +} + +/***************************** *****************************/ + +bool Restriction::get(Restriction::Format fmt, Restriction::Value & value) +{ + if (_numeral != N_UNIQUE) + return false; + + if (!unprocess(fmt, _value._unique, value)) + return false; + + return true; +} + +bool Restriction::get(Restriction::Format fmt, Restriction::Vector & values) +{ + if (_numeral != N_MULTIPLE) + return false; + + List & my_values = _value._multiple; + + for (List::iterator i = my_values.begin(); i != my_values.end(); i++) + { + Value & value = (*i); + Value final; + + if (!unprocess(fmt, value, final)) + return false; + + values.push_back(final); + }; + + return true; +} + +/***************************** *****************************/ + +bool Restriction::set(Restriction::Format fmt, Restriction::Value &value) +{ + switch (_numeral) + { + case N_UNIQUE: + { + Value final; + + if (!process(fmt, value, final)) + return false; + + _value._unique = final; + return true; + } + + case N_MULTIPLE: + { + if (value == "@" || value == "#" || value == "") + { + _value._multiple.clear(); + return true; + } + + Strings::vector_type values; + Strings::tokenize(value, values, ","); + + return set(fmt, values); + } + + default: + return false; + } +} + +bool Restriction::set(Restriction::Format fmt, Restriction::Vector & values) +{ + if (_numeral != N_MULTIPLE) + return false; + + if (values.empty()) + { + _value._multiple.clear(); + } + else + { + /* list needed to store temporary values */ + List finals; + + for (Vector::iterator i = values.begin(); i != values.end(); i++) + { + Value & value = (*i); + Value final; + + if (!process(fmt, value, final)) + return false; + + finals.push_back(final); + } + + List & lst = _value._multiple; + + /* need to clear values set before */ + lst.clear(); + + for (List::iterator i = finals.begin(); i != finals.end(); i++) + { + Value value = (*i); + lst.push_back(value); + } + }; + + return true; +} + +/***************************** *****************************/ + +void Restriction::allowed(Restriction::Vector &vals) +{ + switch (_bounds) + { + case B_FREE: + return; + + case B_LIST: + for (List::iterator i = _list.begin(); i != _list.end(); i++) + vals.push_back((*i)); + break; + + case B_MAPS: + for (Map::iterator i = _map_from_usr.begin(); i != _map_from_usr.end(); i++) + vals.push_back((*i).first); + break; + + case B_RANGE: + { + if (_kind != K_NUMBER) + return; + + // is there any fraction? + bool has_fraction = (!equalNumber(_init, rint(_init))) || (!equalNumber(_fini, rint(_fini))) || (!equalNumber(_step, rint(_step))); + + const char * format = (has_fraction ? "%.2f" : "%02.0f"); + + for (double i = _init; i <= _fini; i += _step) + { + char tmp[32]; + snprintf(tmp, sizeof(tmp), format, i); + vals.push_back(std::string(tmp)); + } + break; + } + + default: + break; + } +} + +void Restriction::init_class() +{ + _value._unique.clear(); + _value._multiple.clear(); +} diff --git a/src/mod/endpoints/mod_khomp/commons/configurator/restriction.hpp b/src/mod/endpoints/mod_khomp/commons/configurator/restriction.hpp new file mode 100644 index 0000000000..0815ede3db --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/configurator/restriction.hpp @@ -0,0 +1,321 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +#include +#include +#include +#include + +#ifndef _CONFIG_RESTRICTION_HPP_ +#define _CONFIG_RESTRICTION_HPP_ + +struct Restriction +{ + /* generic types */ + enum Format + { + F_USER, + F_FILE + }; + + enum Kind + { +// K_INTEGER, +// K_FLOAT, + K_STRING, + K_NUMBER // = K_INTEGER // compatibility + }; + + enum Bounds + { + B_FREE, + B_RANGE, + B_LIST, + B_MAPS + }; + + enum Numeral + { + N_UNIQUE, + N_MULTIPLE + }; + + typedef std::string Value; + + /* types used for data input */ + struct Pair + { + const char *pretty; + const char *value; + }; + + typedef std::pair < Value, Value > PairMap; + typedef std::list < PairMap > ListMap; + + /* types used internally */ + typedef std::map < Value, Value > Map; + typedef std::vector < Value > Vector; + + typedef std::list < Value > List; + typedef std::pair < Value, Value > MapPair; + + struct Generic + { + Value _unique; + List _multiple; + }; + + Restriction(Kind kind, Numeral num) + : _kind(kind), _bounds(B_FREE), _numeral(num), _unit(""), + _init(-1), _fini(-1), _step(-1) + { + init_class(); + } + +/* + Restriction(Kind kind, Numeral num, + int init, int fini, int step = 1) + : _kind(kind), _bounds(B_RANGE), _numeral(num), _unit(unit), + _iinit(init), _ifini(fini), _istep(step), + _finit(-1), _ffini(-1), _fstep(-1) + { + init_class(); + } + + Restriction(Kind kind, Numeral num, + const char *unit, int init, int fini, int step = 1) + : _kind(kind), _bounds(B_RANGE), _numeral(num), _unit(unit), + _iinit(init), _ifini(fini), _istep(step), + _finit(-1), _ffini(-1), _fstep(-1) + { + init_class(); + } + + Restriction(Kind kind, Numeral num, + std::string unit, int init, int fini, int step = 1) + : _kind(kind), _bounds(B_RANGE), _numeral(num), _unit(unit), + _iinit(init), _ifini(fini), _istep(step), + _finit(-1), _ffini(-1), _fstep(-1) + { + init_class(); + } + + Restriction(Kind kind, Numeral num, + float init, float fini, float step = 1) + : _kind(kind), _bounds(B_RANGE), _numeral(num), _unit(unit), + _iinit(-1), _ifini(-1), _istep(-1) + _finit(init), _ffini(fini), _fstep(step), + { + init_class(); + } + + Restriction(Kind kind, Numeral num, + const char *unit, float init, float fini, float step = 1.0) + : _kind(kind), _bounds(B_RANGE), _numeral(num), _unit(unit), + _iinit(-1), _ifini(-1), _istep(-1) + _finit(init), _ffini(fini), _fstep(step), + { + init_class(); + } + + Restriction(Kind kind, Numeral num, + std::string unit, float init, float fini, float step = 1.0) + : _kind(kind), _bounds(B_RANGE), _numeral(num), _unit(unit), + _iinit(-1), _ifini(-1), _istep(-1) + _finit(init), _ffini(fini), _fstep(step), + { + init_class(); + } +*/ + + Restriction(Kind kind, Numeral num, + double init, double fini, double step = 1) + : _kind(kind), _bounds(B_RANGE), _numeral(num), _unit(""), + _init(init), _fini(fini), _step(step) + { + init_class(); + } + + Restriction(Kind kind, Numeral num, + const char *unit, double init, double fini, double step = 1.0) + : _kind(kind), _bounds(B_RANGE), _numeral(num), _unit(unit), + _init(init), _fini(fini), _step(step) + { + init_class(); + } + + Restriction(Kind kind, Numeral num, + std::string unit, double init, double fini, double step = 1.0) + : _kind(kind), _bounds(B_RANGE), _numeral(num), _unit(unit), + _init(init), _fini(fini), _step(step) + { + init_class(); + } + + Restriction(Kind kind, Numeral num, + const char *first, ...) + : _kind(kind), _bounds(B_LIST), _numeral(num), _unit(""), + _init(-1), _fini(-1), _step(-1) + { + _list.push_back(std::string(first)); + + va_list ap; + va_start(ap, first); + + while (true) + { + const char *arg = va_arg(ap, const char *); + + if (arg == NULL) break; + + _list.push_back(std::string(arg)); + } + + init_class(); + } + + Restriction(Kind kind, const char *unit, Numeral num, + const char *first, ...) + : _kind(kind), _bounds(B_LIST), _numeral(num), _unit(unit), + _init(-1), _fini(-1), _step(-1) + { + _list.push_back(std::string(first)); + + va_list ap; + va_start(ap, first); + + while (true) + { + const char *arg = va_arg(ap, const char *); + + if (arg == NULL) break; + + _list.push_back(std::string(arg)); + } + + init_class(); + } + + Restriction(Kind kind, Numeral num, + const struct Pair first, ...) + : _kind(kind), _bounds(B_MAPS), _numeral(num), _unit(""), + _init(-1), _fini(-1), _step(-1) + { + _map_from_usr.insert(MapPair(Value(first.pretty), Value(first.value))); + _map_from_cfg.insert(MapPair(Value(first.value), Value(first.pretty))); + + va_list ap; + va_start(ap, first); + + while (true) + { + Pair arg = va_arg(ap, Pair); + + if (arg.pretty == NULL) break; + + _map_from_usr.insert(MapPair(Value(arg.pretty), Value(arg.value))); + _map_from_cfg.insert(MapPair(Value(arg.value), Value(arg.pretty))); + } + + init_class(); + } + + Restriction(Kind kind, Numeral num, List list) + : _kind(kind), _bounds(B_LIST), _numeral(num), _unit(""), + _init(-1), _fini(-1), _step(-1), _list(list) + { + init_class(); + } + + Restriction(Kind kind, Numeral num, ListMap map) + : _kind(kind), _bounds(B_MAPS), _numeral(num), _unit(""), + _init(-1), _fini(-1), _step(-1) + { + for (ListMap::iterator i = map.begin(); i != map.end(); i++) + { + _map_from_usr.insert(MapPair(Value((*i).first), Value((*i).second))); + _map_from_cfg.insert(MapPair(Value((*i).second), Value((*i).first))); + } + + init_class(); + } + + Kind kind() { return _kind; }; + Bounds bounds() { return _bounds; }; + Numeral numeral() { return _numeral; }; + + Value unit() { return _unit; }; + + bool set(Format, Vector &); + bool set(Format, Value &); + + bool get(Format, Vector &); + bool get(Format, Value &); + + void allowed(Vector &); + + private: + bool process(Format, const Value &, Value &); + bool unprocess(Format, const Value &, Value &); + void init_class(); + + bool equalNumber(const double, const double); + + protected: + Kind _kind; + Bounds _bounds; + Numeral _numeral; + + Value _unit; + + double _init, _fini, _step; + + Map _map_from_usr, + _map_from_cfg; + + List _list; + + Generic _value; +}; + +#endif /* _CONFIG_RESTRICTION_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/configurator/section.cpp b/src/mod/endpoints/mod_khomp/commons/configurator/section.cpp new file mode 100644 index 0000000000..5d26858054 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/configurator/section.cpp @@ -0,0 +1,130 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +void Section::options(Section::OptionVector & vec) +{ + for (OptionMap::iterator it = _options.begin(); it != _options.end();) + { + vec.push_back(&((*it).second)); + ++it; + } +} + +void Section::sections(Section::SectionVector & vec) +{ + for (SectionMap::iterator it = _sections.begin(); it != _sections.end();) + { + vec.push_back((*it).second); + ++it; + } +} + +/*********/ + +Option * Section::option_find(std::string & str, bool recurse) +{ + OptionMap::iterator i = _options.find(str); + + if (i == _options.end()) + { + if (!recurse) + throw not_found(); + + for (SectionMap::iterator i = _sections.begin(); i != _sections.end(); i++) + { + try + { + return i->second->option_find(str, recurse); + } + catch (not_found & e) + { + /* keep looping! */ + }; + } + + throw not_found(); + } + + return &((*i).second); +} + +Option * Section::option_find(const char * str, bool recurse) +{ + std::string sstr(str); + return option_find(sstr, recurse); +} + +/*********/ + +Section * Section::section_find(std::string & str, bool recurse) +{ + SectionMap::iterator i = _sections.find(str); + + if (i == _sections.end()) + { + if (!recurse) + throw not_found(); + + for (SectionMap::iterator i = _sections.begin(); i != _sections.end(); i++) + { + try + { + return i->second->section_find(str, recurse); + } + catch (not_found & e) + { + /* keep looping! */ + }; + } + + throw not_found(); + } + + return ((*i).second); +} + +Section * Section::section_find(const char * str, bool recurse) +{ + std::string sstr(str); + return section_find(sstr, recurse); +} diff --git a/src/mod/endpoints/mod_khomp/commons/configurator/section.hpp b/src/mod/endpoints/mod_khomp/commons/configurator/section.hpp new file mode 100644 index 0000000000..fdb782308a --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/configurator/section.hpp @@ -0,0 +1,226 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include +#include +#include +#include + +#include + +#ifndef _CONFIG_SECTION_HPP_ +#define _CONFIG_SECTION_HPP_ + +struct Section +{ + typedef std::map < std::string, Option > OptionMap; + typedef std::vector< Option * > OptionVector; + + typedef std::map < std::string, Section * > SectionMap; + typedef std::vector < Section * > SectionVector; + + struct not_found {}; /* exception */ + +// protected: + Section(std::string name, std::string desc, bool recursive = true) + : _name(name), _description(desc), _recursive(recursive) {}; + + void add(Option o) + { + _options.insert(std::pair(o.name(), o)); + }; + + void del(std::string name) + { + _options.erase(name); + }; + + void add(Section *s) + { + _sections.insert(std::pair(s->name(), s)); + }; + + public: + const std::string & name() { return _name; }; + const std::string & description() { return _description; }; + const bool & recursive() { return _recursive; }; + + OptionMap::iterator option_begin() { return _options.begin(); }; + OptionMap::iterator option_end() { return _options.end(); }; + + SectionMap::iterator section_begin() { return _sections.begin(); }; + SectionMap::iterator section_end() { return _sections.end(); }; + + /**/ + + Option * option_find(const char *, bool recurse = false); + Section * section_find(const char *, bool recurse = false); + + Option * option_find(std::string &, bool recurse = false); + Section * section_find(std::string &, bool recurse = false); + + /**/ + + void options(OptionVector &); + void sections(SectionVector &); + + /**/ + + template + bool search_and_apply(std::string &key, std::string &value, F f) + { + OptionMap::iterator i = _options.find(key); + + if (i != _options.end()) + return f((*i).second); + + if (!_recursive) + return false; + + return (find_if(_sections.begin(), _sections.end(), f) != _sections.end()); + } + + private: + struct key_value + { + key_value(std::string &k, std::string &v): _k(k), _v(v) {}; + std::string & _k, & _v; + }; + + struct load_section: protected key_value + { + load_section(std::string &k, std::string &v): key_value(k,v) {}; + + bool operator()(Option &o) { return o.load(_v); }; + bool operator()(SectionMap::value_type &v) { return v.second->load(_k,_v); }; + }; + + struct change_section: protected key_value + { + change_section(std::string &k, std::string &v): key_value(k,v) {}; + + bool operator()(Option &o) { return o.change(_v); }; + bool operator()(SectionMap::value_type &v) { return v.second->change(_k,_v); }; + }; + + struct store_section: protected key_value + { + store_section(std::string &k, std::string &v): key_value(k,v) {}; + + bool operator()(Option &o) { return o.store(_v); }; + bool operator()(SectionMap::value_type &v) { return v.second->store(_k,_v); }; + }; + + struct set_section: protected key_value + { + set_section(std::string &k, std::string &v): key_value(k,v) {}; + + bool operator()(Option &o) { return (o.set(_v))[Option::F_ADJUSTED]; }; + bool operator()(SectionMap::value_type &v) { return v.second->set(_k,_v); }; + }; + + struct get_section: protected key_value + { + get_section(std::string &k, std::string &v): key_value(k,v) {}; + + bool operator()(Option &o) { return o.get(_v); }; + bool operator()(SectionMap::value_type &v) { return v.second->get(_k,_v); }; + }; + + struct modified_section + { + bool operator()(OptionMap::value_type &v) { return v.second.modified(); }; + bool operator()(SectionMap::value_type &v) { return v.second->modified(); }; + }; + + public: + bool load(const char * key, std::string value) + { + std::string skey(key); + return search_and_apply(skey, value, load_section(skey, value)); + } + + bool load(std::string &key, std::string &value) + { + return search_and_apply(key, value, load_section(key, value)); + } + + bool change(std::string &key, std::string &value) + { + return search_and_apply(key, value, change_section(key, value)); + } + + bool store(std::string &key, std::string &value) + { + return search_and_apply(key, value, store_section(key, value)); + } + + bool set(std::string &key, std::string &value) + { + return search_and_apply(key, value, set_section(key, value)); + } + + bool get(std::string &key, std::string &value) + { + return search_and_apply(key, value, get_section(key, value)); + } + + bool modified() + { + return ((find_if(_options.begin(), _options.end(), modified_section()) != _options.end()) || + (find_if(_sections.begin(), _sections.end(), modified_section()) != _sections.end())); + } + + private: + Section() {}; + + protected: + std::string _name; + std::string _description; + + OptionMap _options; + SectionMap _sections; + + bool _recursive; +}; + +#endif /* _CONFIG_SECTION_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/flagger.hpp b/src/mod/endpoints/mod_khomp/commons/flagger.hpp new file mode 100644 index 0000000000..49a4adda0f --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/flagger.hpp @@ -0,0 +1,102 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +#include + +#ifndef _FLAGGER_HPP_ +#define _FLAGGER_HPP_ + +template < typename Flag > +struct Flagger +{ + protected: + struct Bool + { + Bool(): value(false) {}; + Bool(bool &v): value(v) {}; + + bool value; + }; + + typedef std::map< Flag, Bool > Map; + + public: + typedef Initializer< Flag > InitFlags; + + Flagger() {}; + + Flagger(InitFlags flags) + { + for (typename InitFlags::iterator i = flags.begin(); i != flags.end(); i++) + { + Flag & flag = (*i); + _map[flag].value = true; + }; + }; + + void set(Flag elt, bool value = true) + { + _map[elt].value = value; + } + + bool is_set(Flag elt) + { + return _map[elt].value; + } + + Flagger & operator&(Flag elt) + { + set(elt); + return *this; + }; + + bool operator[](Flag elt) + { + return is_set(elt); + }; + + protected: + Map _map; +}; + +#endif /* _FLAGGER_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/format.cpp b/src/mod/endpoints/mod_khomp/commons/format.cpp new file mode 100644 index 0000000000..20f79204ec --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/format.cpp @@ -0,0 +1,331 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include "format.hpp" +//#include + +Format::Format(const char * format_string, bool raise_exception) +: _format(format_string), _valid(true), _raise(raise_exception) +{ + initialize(format_string); +} + +/* +Format::Format(std::string & format_string, bool raise_exception) +: _format(NULL), _valid(true), _raise(raise_exception) +{ + initialize(format_string.c_str()); +} +*/ + +Format::Format(std::string format_string, bool raise_exception) +: _format(format_string), _valid(true), _raise(raise_exception) +{ + initialize(format_string.c_str()); +} + +void Format::initialize(const char * format_string) +{ + std::string txt; + + const char * ptr = format_string; + + while (*ptr != '\0') + { + if (*ptr != '%') + { + txt += *ptr; + ++ptr; + continue; + } + + const char * ptr2 = ptr+1; + + if (*ptr2 == '%') + { + txt += *ptr; + + ptr += 2; + continue; + } + + if (!txt.empty()) + push_argument(txt, T_LITERAL); + + std::string arg(1, *ptr); + + ++ptr; + + bool finished = false; + + short long_count = 0; + short short_count = 0; + + while(*ptr != '\0' && !finished) + { + switch (*ptr) + { + case ' ': + // uncomplete format with ' ', make it a literal. + arg += *ptr; + push_argument(arg, T_LITERAL); + finished = true; + break; + + case '%': + // uncomplete format with '%', make it a literal and start a new format. + push_argument(arg, T_LITERAL); + arg += *ptr; + break; + + case 'h': + short_count = std::min(short_count+1, 2); + long_count = 0; + arg += *ptr; + break; + + case 'l': + long_count = std::min(long_count+1, 2); + short_count = 0; + arg += *ptr; + break; + + case 'd': + case 'i': + arg += *ptr; + switch (long_count - short_count) + { + case 2: + push_argument(arg, T_SIGNED_LONG_LONG); + break; + case 1: + push_argument(arg, T_SIGNED_LONG); + break; + case 0: + push_argument(arg, T_SIGNED_INT); + break; + case -1: + push_argument(arg, T_SIGNED_SHORT); + break; + case -2: + push_argument(arg, T_SIGNED_SHORT_SHORT); + break; + default: + break; + } + finished = true; + break; + + case 'o': + case 'u': + case 'x': + case 'X': + arg += *ptr; + switch (long_count - short_count) + { + case 2: + push_argument(arg, T_UNSIGNED_LONG_LONG); + break; + case 1: + push_argument(arg, T_UNSIGNED_LONG); + break; + case 0: + push_argument(arg, T_UNSIGNED_INT); + break; + case -1: + push_argument(arg, T_UNSIGNED_SHORT); + break; + case -2: + push_argument(arg, T_UNSIGNED_SHORT_SHORT); + break; + default: + break; + } + finished = true; + break; + + case 'e': + case 'E': + case 'f': + case 'F': + case 'g': + case 'G': + case 'a': + case 'A': + arg += *ptr; + push_argument(arg, T_FLOAT); + finished = true; + break; + + case 'c': + arg += *ptr; + push_argument(arg, T_CHAR); + finished = true; + break; + + case 's': + arg += *ptr; + push_argument(arg, T_STRING); + finished = true; + break; + + case 'p': + arg += *ptr; + push_argument(arg, T_POINTER); + finished = true; + break; + + case 'C': + case 'S': + case 'm': + case 'n': // unsupported for now. + arg += *ptr; + push_argument(arg, T_ANYTHING); + finished = true; + break; + + default: + arg += *ptr; + break; + } + + ++ptr; + } + + if (!arg.empty()) + push_argument(arg, T_LITERAL); + } + + if (!txt.empty()) + push_argument(txt, T_LITERAL); +} + +void Format::mark_invalid(std::string & msg) +{ + if (_valid) + { + _valid = false; + + std::string finalmsg; + + finalmsg += "** INVALID FORMAT: "; + finalmsg += msg; + finalmsg += " **"; + + _result = finalmsg; + } +} + +void Format::raise_check(void) +{ + if (!_valid && _raise) + throw InvalidFormat(_result); +} + +bool Format::validity_check(void) +{ + raise_check(); + + return _valid; +} + +const Format::Argument * Format::next_argument(void) +{ +// std::cerr << "size: " << _args.size() << std::endl; + + while (true) + { +// std::cerr << "loop size: " << _args.size() << std::endl; + + if (_args.empty()) + return NULL; // throw NoArgumentLeft(); + + const Argument & top = _args.front(); + + if (top.type() == T_LITERAL) + { +// std::cerr << "top type == LITERAL, looping..." << std::endl; + _result += top.fmts(); + pop_argument(); + } + else + { +// std::cerr << "top type: " << top.type() << std::endl; + return ⊤ + } + } +} + +void Format::pop_argument(void) +{ + _args.pop(); +} + +void Format::push_argument(std::string & data, Format::Type type) +{ +// std::cerr << "pushing type (" << type << ") with format (" << data << ")" << std::endl; + + _args.push(Argument(data, type)); + data.clear(); +} + +std::string Format::str() +{ + if (!validity_check()) + return _result; + + if (next_argument() == NULL) + return _result; + + std::string msg; + + msg += "too few arguments passed for format '"; + msg += _format; + msg += "' ("; + msg += _format; + msg += ")"; + + mark_invalid(msg); + + return _result; +} + + diff --git a/src/mod/endpoints/mod_khomp/commons/format.hpp b/src/mod/endpoints/mod_khomp/commons/format.hpp new file mode 100644 index 0000000000..b1ebe74396 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/format.hpp @@ -0,0 +1,512 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _FORMAT_H_ +#define _FORMAT_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef WIN32 // WINDOWS +#include +#endif + + +/* macros used for shortening lines and making the code clearer */ +#define STG(x) (x).str() +#define FMT(x) Format(x) + +struct Format +{ + static const unsigned int strings_base_length = 64; + static const unsigned int generic_base_length = 64; + + struct InvalidFormat + { + InvalidFormat(std::string msg) : _msg(msg) {} + + std::string _msg; + }; + + explicit Format(const char * format_string, bool raise_exception = false); + explicit Format(std::string format_string, bool raise_exception = false); + + void initialize(const char *); + + std::string str(void); + + //////////////////////////////////////////////////////////// + + protected: + + enum Type + { + T_ANYTHING = 1, + + T_SIGNED_SHORT, + T_SIGNED_SHORT_SHORT, + T_SIGNED_INT, + T_SIGNED_LONG, + T_SIGNED_LONG_LONG, + + T_UNSIGNED_SHORT, + T_UNSIGNED_SHORT_SHORT, + T_UNSIGNED_INT, + T_UNSIGNED_LONG, + T_UNSIGNED_LONG_LONG, + + T_FLOAT, + T_CHAR, + + T_POINTER, + T_STRING, + + T_LITERAL + }; + + struct Argument + { + Argument(std::string fmts, Type type) + : _fmts(fmts), _type(type) {}; + + Type type(void) const { return _type; } + const std::string & fmts(void) const { return _fmts; } + + protected: + std::string _fmts; + Type _type; + }; + + typedef std::queue < Argument > ArgumentQueue; + + //////////////////////////////////////////////////////////// + + public: + + template < typename V > + Format & operator%( V value ) + { + if (!validity_check()) + return *this; + + const Argument * top = next_argument(); + + if (top == NULL) + { + std::string msg; + + msg += "too many arguments passed for format '"; + msg += _format; + msg += "'"; + + mark_invalid(msg); + } + else + { + char temp[generic_base_length]; + + if (!generic_verify(value, top->type())) + { + std::string msg; + + msg += "type mismatch: got type '"; + msg += typeid(value).name(); + msg += "' in format '"; + msg += top->fmts(); + msg += "' ("; + msg += _format; + msg += ")"; + + mark_invalid(msg); + return *this; + } + + snprintf(temp, sizeof(temp), top->fmts().c_str(), value); + _result += temp; + + pop_argument(); + } + + raise_check(); + return *this; + } + + template < typename V > + Format & operator%( V * value ) + { + if (!validity_check()) + return *this; + + const Argument * top = next_argument(); + + if (top == NULL) + { + std::string msg; + + msg += "too many arguments passed for format '"; + msg += _format; + msg += "'"; + + mark_invalid(msg); + } + else + { + switch (top->type()) + { + case T_POINTER: + { + char temp[generic_base_length]; + snprintf(temp, sizeof(temp), top->fmts().c_str(), value); + _result += temp; + break; + } + + case T_STRING: + { + if ((typeid(const char) == typeid(V)) || + (typeid(char) == typeid(V)) || + (typeid(const unsigned char) == typeid(V)) || + (typeid(unsigned char) == typeid(V)) || + (typeid(const void) == typeid(V)) || + (typeid(void) == typeid(V))) + { + int len = strlen((const char*)value)+strings_base_length+1; + + char * temp = new char[len]; + + snprintf(temp, len, top->fmts().c_str(), value); + _result += temp; + + delete[] temp; + } + else + { + std::string msg; + + msg += "type mismatch: got type '"; + msg += typeid(value).name(); + msg += "' in string format ("; + msg += _format; + msg += ")"; + + mark_invalid(msg); + } + break; + } + + default: + { + std::string msg; + + msg += "type mismatch: got pointer/string type in format '"; + msg += top->fmts(); + msg += "' ("; + msg += _format; + msg += ")"; + + mark_invalid(msg); + break; + } + } + + pop_argument(); + } + + raise_check(); + return *this; + } + +/* + Format & operator%( std::string value ) + { + return operator%(value); + } +*/ + + Format & operator%( const std::string value ) + { + if (!validity_check()) + return *this; + + const Argument * top = next_argument(); + + if (top == NULL) + { + std::string msg; + + msg += "too many arguments passed for format '"; + msg += _format; + msg += "'"; + + mark_invalid(msg); + } + else + { + if (top->type() == T_STRING) + { + int len = value.length()+strings_base_length+1; + + char * temp = new char[len]; + + snprintf(temp, len, top->fmts().c_str(), value.c_str()); + _result += temp; + + delete[] temp; + } + else + { + std::string msg; + + msg += "type mismatch: got string type in format '"; + msg += top->fmts(); + msg += "' ("; + msg += _format; + msg += ")"; + + mark_invalid(msg); + } + + pop_argument(); + } + + raise_check(); + return *this; + } + + protected: + + template < typename V > + bool number_verify_signed_short( V value ) + { + return + ((typeid(V) == typeid(short int) || + typeid(V) == typeid(short) || + typeid(V) == typeid(const short int) || + typeid(V) == typeid(const short) || + typeid(V) == typeid(volatile short int) || + typeid(V) == typeid(volatile short)) && + sizeof(V) == sizeof(short)); + } + + template < typename V > + bool number_verify_unsigned_short( V value ) + { + return + ((typeid(V) == typeid(unsigned short int) || + typeid(V) == typeid(unsigned short) || + typeid(V) == typeid(const unsigned short int) || + typeid(V) == typeid(const unsigned short) || + typeid(V) == typeid(volatile unsigned short int) || + typeid(V) == typeid(volatile unsigned short)) && + sizeof(V) == sizeof(unsigned short)); + } + + template < typename V > + bool number_verify_signed_long( V value ) + { + return + ((typeid(V) == typeid(long int) || + typeid(V) == typeid(long) || + typeid(V) == typeid(const long int) || + typeid(V) == typeid(const long) || + typeid(V) == typeid(volatile long int) || + typeid(V) == typeid(volatile long)) && + sizeof(V) == sizeof(long)); + } + + template < typename V > + bool number_verify_unsigned_long( V value ) + { + return + ((typeid(V) == typeid(unsigned long int) || + typeid(V) == typeid(unsigned long) || + typeid(V) == typeid(const unsigned long int) || + typeid(V) == typeid(const unsigned long) || + typeid(V) == typeid(volatile unsigned long int) || + typeid(V) == typeid(volatile unsigned long)) && + sizeof(V) == sizeof(long long)); + } + + template < typename V > + bool number_verify_signed_long_long( V value ) + { + return + ((typeid(V) == typeid(long long int) || + typeid(V) == typeid(long long) || + typeid(V) == typeid(const long long int) || + typeid(V) == typeid(const long long) || + typeid(V) == typeid(volatile long long) || + typeid(V) == typeid(volatile long long int)) && + sizeof(V) == sizeof(long long)); + } + + template < typename V > + bool number_verify_unsigned_long_long( V value ) + { + return + ((typeid(V) == typeid(unsigned long long int) || + typeid(V) == typeid(unsigned long long) || + typeid(V) == typeid(const unsigned long long int) || + typeid(V) == typeid(const unsigned long long) || + typeid(V) == typeid(volatile unsigned long long) || + typeid(V) == typeid(volatile unsigned long long int)) && + sizeof(V) == sizeof(unsigned long long)); + } + + template < typename V > + bool number_verify_signed_int( V value ) + { + return + (sizeof(V) <= sizeof(int) || + typeid(V) == typeid(int) || + typeid(V) == typeid(const int) || + typeid(V) == typeid(volatile int)); + } + + template < typename V > + bool number_verify_unsigned_int( V value ) + { + return + (sizeof(V) <= sizeof(unsigned int) || + typeid(V) == typeid(unsigned int) || + typeid(V) == typeid(const unsigned int) || + typeid(V) == typeid(volatile unsigned int)); + } + + template < typename V > + bool generic_verify( V value, Type type ) + { + switch (type) + { + /* EXCEPTION: consider any number an valid input. */ + case T_SIGNED_INT: + case T_UNSIGNED_INT: + return + (number_verify_signed_int(value) || + number_verify_unsigned_int(value) || + number_verify_signed_long(value) || + number_verify_unsigned_long(value) || + number_verify_signed_short(value) || + number_verify_unsigned_short(value)); + + case T_SIGNED_SHORT_SHORT: + return (typeid(V) == typeid(char) || typeid(V) == typeid(const char)); + + case T_SIGNED_SHORT: + return number_verify_signed_short(value); + + case T_SIGNED_LONG: + return number_verify_signed_long(value); + + case T_SIGNED_LONG_LONG: + return number_verify_signed_long_long(value); + + case T_UNSIGNED_SHORT_SHORT: + return (typeid(V) == typeid(unsigned char) || typeid(V) == typeid(unsigned char)); + + case T_UNSIGNED_SHORT: + return number_verify_unsigned_short(value); + + case T_UNSIGNED_LONG: + return number_verify_unsigned_long(value); + + case T_UNSIGNED_LONG_LONG: + return number_verify_unsigned_long_long(value); + + case T_FLOAT: + return (typeid(V) == typeid(float)) || (typeid(V) == typeid(double) || + typeid(V) == typeid(const float)) || (typeid(V) == typeid(const double)); + + case T_CHAR: + return (typeid(V) == typeid(char)) || (typeid(V) == typeid(unsigned char) || + typeid(V) == typeid(const char)) || (typeid(V) == typeid(const unsigned char)); + + case T_POINTER: + case T_STRING: + return false; + + case T_ANYTHING: + return true; + + case T_LITERAL: + return false; + } + + return false; + }; + + void mark_invalid(std::string &); + + bool validity_check(void); + void raise_check(void); + +/* + struct NoArgumentLeft + { + NoArgumentLeft(): empty(0) {}; + + unsigned int empty; + }; +*/ + + const Argument * next_argument(void); + + void pop_argument(void); + void push_argument(std::string & data, Type type); + + private: + std::string _format; + + bool _valid; + bool _raise; + + std::string _result; + ArgumentQueue _args; +}; + +#endif /* _FORMAT_H_ */ + diff --git a/src/mod/endpoints/mod_khomp/commons/freeswitch/saved_condition.cpp b/src/mod/endpoints/mod_khomp/commons/freeswitch/saved_condition.cpp new file mode 100644 index 0000000000..29169f3d54 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/freeswitch/saved_condition.cpp @@ -0,0 +1,62 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include "saved_condition.hpp" + +bool SavedCondition::wait(unsigned int msec) +{ + bool ret = true; + + switch_mutex_lock(_mutex); + + if (!_signaled) + { + /* msec * 1000 = The amount of time in microseconds to wait. */ + if (switch_thread_cond_timedwait(_condition, _mutex, (switch_interval_time_t)msec * 1000) != 0) + ret = false; + } + + _signaled = false; + + switch_mutex_unlock(_mutex); + + return ret; +} diff --git a/src/mod/endpoints/mod_khomp/commons/freeswitch/saved_condition.hpp b/src/mod/endpoints/mod_khomp/commons/freeswitch/saved_condition.hpp new file mode 100644 index 0000000000..8acf0f3e0b --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/freeswitch/saved_condition.hpp @@ -0,0 +1,136 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _SAVED_CONDITION_ +#define _SAVED_CONDITION_ + +#include + +extern "C" +{ + #include +} + +struct SavedCondition : public SavedConditionCommon// : public RefCounter < SavedCondition > +{ + typedef switch_thread_cond_t BaseConditionType; + typedef switch_mutex_t BaseMutexType; + + SavedCondition(switch_memory_pool_t *pool=NULL): + _pool(pool), + _can_delete_pool(false) + { + if(!_pool) + { + switch_core_new_memory_pool(&_pool); + _can_delete_pool = true; + } + + switch_thread_cond_create(&_condition, _pool); + switch_mutex_init(&_mutex, SWITCH_MUTEX_DEFAULT, _pool); + } + + //SavedCondition(const SavedCondition &); + ~SavedCondition() + { + switch_thread_cond_destroy(_condition); + switch_mutex_destroy(_mutex); + + if(_can_delete_pool) + switch_core_destroy_memory_pool(&_pool); + } + + void signal(void) + { + switch_mutex_lock(_mutex); + + _signaled = true; + switch_thread_cond_signal(_condition); + + switch_mutex_unlock(_mutex); + } + + void broadcast(void) + { + switch_mutex_lock(_mutex); + + _signaled = true; + switch_thread_cond_broadcast(_condition); + + switch_mutex_unlock(_mutex); + } + + void wait(void) + { + switch_mutex_lock(_mutex); + + if (!_signaled) + switch_thread_cond_wait(_condition, _mutex); + + _signaled = false; + + switch_mutex_unlock(_mutex); + } + + bool wait(unsigned int); + + void reset(void) + { + switch_mutex_lock(_mutex); + + _signaled = false; + + switch_mutex_unlock(_mutex); + } + + BaseMutexType * mutex() { return _mutex; }; + BaseConditionType * condition() { return _condition; }; + + protected: + + BaseConditionType *_condition; + BaseMutexType *_mutex; + switch_memory_pool_t *_pool; + bool _can_delete_pool; +}; + +#endif /* _SAVED_CONDITION_ */ + diff --git a/src/mod/endpoints/mod_khomp/commons/freeswitch/simple_lock.hpp b/src/mod/endpoints/mod_khomp/commons/freeswitch/simple_lock.hpp new file mode 100644 index 0000000000..530d912ee1 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/freeswitch/simple_lock.hpp @@ -0,0 +1,177 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _SIMPLE_LOCK_HPP_ +#define _SIMPLE_LOCK_HPP_ + +#include + +extern "C" +{ + #include +} + +template < typename Implementor > +struct SimpleLockBasic: public SimpleLockCommon < Implementor > +{ + typedef SimpleLockCommon < Implementor > Super; + typedef typename Super::Result Result; + + typedef switch_mutex_t BaseMutexType; + + SimpleLockBasic(switch_memory_pool_t *pool = NULL) + : _pool(pool), _can_delete_pool( (_pool == NULL) ) + + { + if(!_pool) + switch_core_new_memory_pool(&_pool); + + //switch_mutex_init(&_mutex, SWITCH_MUTEX_DEFAULT, _pool); + switch_mutex_init(&_mutex, SWITCH_MUTEX_NESTED, _pool); + } + + virtual ~SimpleLockBasic() + { + /* do nothing */ + }; + + void unreference() + { + switch_mutex_destroy(_mutex); + + if (_can_delete_pool) + switch_core_destroy_memory_pool(&_pool); + } + + Result trylock() + { + switch (switch_mutex_trylock(_mutex)) + { + case SWITCH_STATUS_SUCCESS: + return Super::SUCCESS; + case SWITCH_STATUS_FALSE: + case SWITCH_STATUS_TERM: + case SWITCH_STATUS_NOTIMPL: + case SWITCH_STATUS_MEMERR: + case SWITCH_STATUS_GENERR: + case SWITCH_STATUS_SOCKERR: + case SWITCH_STATUS_NOTFOUND: + case SWITCH_STATUS_UNLOAD: + case SWITCH_STATUS_NOUNLOAD: + case SWITCH_STATUS_NOT_INITALIZED: + return Super::FAILURE; + //case SWITCH_STATUS_INUSE: + default: + return Super::ISINUSE; + } + } + + void unlock() + { + switch_mutex_unlock(_mutex); + } + + BaseMutexType * mutex() { return _mutex; }; + + protected: + BaseMutexType *_mutex; + switch_memory_pool_t *_pool; + bool _can_delete_pool; +}; + +struct SimpleLock: public SimpleLockBasic < SimpleLock > +{ + typedef SimpleLockBasic < SimpleLock > Super; + typedef Super::Result Result; + + SimpleLock(switch_memory_pool_t *pool = NULL) + : Super(pool) {}; + + Result lock() + { + switch (switch_mutex_lock(_mutex)) + { + case SWITCH_STATUS_SUCCESS: + return Super::SUCCESS; + case SWITCH_STATUS_FALSE: + case SWITCH_STATUS_TERM: + case SWITCH_STATUS_NOTIMPL: + case SWITCH_STATUS_MEMERR: + case SWITCH_STATUS_GENERR: + case SWITCH_STATUS_SOCKERR: + case SWITCH_STATUS_NOTFOUND: + case SWITCH_STATUS_UNLOAD: + case SWITCH_STATUS_NOUNLOAD: + case SWITCH_STATUS_NOT_INITALIZED: + return Super::FAILURE; + //case SWITCH_STATUS_INUSE: + default: + return Super::ISINUSE; + } + } +}; + +template < unsigned int Retries = 10, unsigned int Interval = 50 > +struct SimpleNonBlockLock: public SimpleLockBasic < SimpleNonBlockLock < Retries, Interval > > +{ + typedef SimpleLockBasic < SimpleNonBlockLock < Retries, Interval > > Super; + typedef typename Super::Result Result; + + SimpleNonBlockLock(switch_memory_pool_t *pool = NULL) + : Super(pool) {}; + + inline Result lock() + { + for (unsigned int i = 0; i < Retries; i++) + { + Result ret = Super::trylock(); + + if (ret != Super::ISINUSE) + return ret; + + usleep(Interval * 1000); + } + + return Super::ISINUSE; + } +}; + +#endif /* _SIMPLE_LOCK_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/freeswitch/thread.hpp b/src/mod/endpoints/mod_khomp/commons/freeswitch/thread.hpp new file mode 100644 index 0000000000..af50240307 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/freeswitch/thread.hpp @@ -0,0 +1,327 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _THREAD_HPP_ +#define _THREAD_HPP_ + +#include + +extern "C" +{ + #include +} + +struct Thread : ThreadCommon +{ + typedef switch_thread_t BaseThreadType; + + template + struct ThreadData : ThreadDataCommon + { + ThreadData(T data, A arg) : _data(data), _arg(arg) {} + + int run() + { + return _data(_arg); + } + + T _data; + A _arg; + }; + + template + struct ThreadData < T, R, void > : ThreadDataCommon + { + ThreadData(T data) : _data(data) {} + + int run() + { + return _data(); + } + + T _data; + }; + + template + struct ThreadData < T, void, A > : ThreadDataCommon + { + ThreadData(T data, A arg) : _data(data), _arg(arg) {} + + int run() + { + _data(_arg); + return 0; + } + + T _data; + A _arg; + }; + + + template + struct ThreadData < T, void, void > : ThreadDataCommon + { + ThreadData(T data) : _data(data) {} + + int run() + { + _data(); + return 0; + } + + T _data; + }; + + template + Thread(T obj, switch_memory_pool_t *pool=NULL) : + _thread_info(new ThreadData::Return, void>(obj)), + _pool(pool), + _can_delete_pool(false) + { + if(!_pool) + { + switch_core_new_memory_pool(&_pool); + _can_delete_pool = true; + } + + _thread_info->_thread = this; + _thread_info->_self = NULL; + _thread_info->_attribute = NULL; + + if(switch_threadattr_create( + (switch_threadattr_t **)&_thread_info->_attribute, _pool) != 0) + { + _thread_info->_attribute = NULL; + return; + } + + switch_threadattr_stacksize_set( + (switch_threadattr_t *)_thread_info->_attribute, + SWITCH_THREAD_STACKSIZE); + + if(!priority()) + { + _thread_info->_attribute = NULL; + } + + } + + template + Thread(T obj, A arg, switch_memory_pool_t *pool=NULL) : + _thread_info(new ThreadData::Return, A>(obj, arg)), + _pool(pool), + _can_delete_pool(false) + { + if(!_pool) + { + switch_core_new_memory_pool(&_pool); + _can_delete_pool = true; + } + + _thread_info->_thread = this; + _thread_info->_self = NULL; + _thread_info->_attribute = NULL; + + if(switch_threadattr_create( + (switch_threadattr_t **)&_thread_info->_attribute, _pool) != 0) + { + _thread_info->_attribute = NULL; + return; + } + + switch_threadattr_stacksize_set( + (switch_threadattr_t *)_thread_info->_attribute, + SWITCH_THREAD_STACKSIZE); + + if(!priority()) + { + _thread_info->_attribute = NULL; + } + + } + + ~Thread() + { + if(_thread_info) + delete _thread_info; + + if (_can_delete_pool) + switch_core_destroy_memory_pool(&_pool); + } + + void detach(bool d = true) + { + if(!_thread_info->_attribute) + return; + + /* Non-zero if detached threads should be created. */ + switch_threadattr_detach_set( + (switch_threadattr_t *)_thread_info->_attribute, d ? 1 : 0); + } + + bool start() + { + if(!_pool || !_thread_info->_attribute) + return false; + + switch_thread_create((switch_thread_t**)&_thread_info->_self, + (switch_threadattr_t *)_thread_info->_attribute, + run, + _thread_info, + _pool); + + if(!_thread_info->_self) + return false; + + return true; + } + + int join() + { + /* + * block until the desired thread stops executing. + * @param retval The return value from the dead thread. + * @param thd The thread to join + * + * SWITCH_DECLARE(switch_status_t) switch_thread_join(switch_status_t *retval, switch_thread_t *thd); + */ + + if(!_thread_info->_self) + return -2; + + int retval = 0; + + if(switch_thread_join((switch_status_t*)&retval, + (switch_thread_t *)_thread_info->_self) != 0) + return -1; + + return retval; + } + + BaseThreadType * self() + { + //switch_thread_self(); + //apr_os_thread_current(); + return (BaseThreadType *)_thread_info->_self; + } + +private: + void exit(int status) + { + /** + * stop the current thread + * @param thd The thread to stop + * @param retval The return value to pass back to any thread that cares + */ + //SWITCH_DECLARE(switch_status_t) switch_thread_exit(switch_thread_t *thd, switch_status_t retval); + switch_thread_exit((switch_thread_t *)_thread_info->_self, (switch_status_t)status); + + } + +#ifndef WIN32 + struct apr_threadattr_t { + apr_pool_t *pool; + pthread_attr_t attr; + }; +#endif + + bool priority() + { +#ifndef WIN32 + struct sched_param param; + + struct apr_threadattr_t *myattr = (struct apr_threadattr_t *)_thread_info->_attribute; + + if (pthread_attr_setschedpolicy( + (pthread_attr_t *)&myattr->attr, SCHED_RR) < 0) + return false; + + if (pthread_attr_getschedparam( + (pthread_attr_t *)&myattr->attr, ¶m) < 0) + return false; + + param.sched_priority = sched_get_priority_max(SCHED_RR); + + if (pthread_attr_setschedparam( + (pthread_attr_t *)&myattr->attr, ¶m) < 0) + return false; + +#endif + return true; + +/* + //BUG in Freeswitch + if(switch_threadattr_priority_increase( + (switch_threadattr_t *)_thread_info->_attribute) != 0) + return false; + + return true; +*/ + } + + +protected: + ThreadDataCommon * _thread_info; + switch_memory_pool_t *_pool; + bool _can_delete_pool; + +protected: + + static void *SWITCH_THREAD_FUNC run(BaseThreadType *thread, void * obj) + { + //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, + // "Starting new Thread\n"); + + ThreadDataCommon * data = (ThreadDataCommon *)obj; + int retval = data->run(); + + //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, + // "Stopping new Thread = %d\n", retval); + + ((Thread *)(data->_thread))->exit(retval); + + return NULL; + } + +}; + + +#endif /* _THREAD_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/function.hpp b/src/mod/endpoints/mod_khomp/commons/function.hpp new file mode 100644 index 0000000000..c448299acd --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/function.hpp @@ -0,0 +1,337 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the "LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +#ifndef _FUNCTION_HPP_ +#define _FUNCTION_HPP_ + +namespace Function +{ + struct EmptyFunction {}; + + /**/ + + template < typename FunctionTraits > + struct StorageBase: NEW_REFCOUNTER(StorageBase < FunctionTraits >) + { + typedef typename FunctionTraits::BaseType BaseType; + + typedef typename FunctionTraits::FunType FunType; + typedef typename FunctionTraits::ObjType ObjType; + + template < typename Functor > + StorageBase(Functor f) + : _object(reinterpret_cast(new Functor(f))), + _function(reinterpret_cast(&(Functor::operator()))), + _malloced(true) + {}; + + template < typename Functor > + StorageBase(Functor & f, bool malloced) + : _object(reinterpret_cast((malloced ? new Functor(f) : &f))), + _function(reinterpret_cast(&(Functor::operator()))), + _malloced(malloced) + {}; + + StorageBase() + : _object(reinterpret_cast(0)), + _function(reinterpret_cast(0)), + _malloced(false) + {}; + + StorageBase(const StorageBase & o) + : INC_REFCOUNTER(o, StorageBase < FunctionTraits >), + _object(o._object), _function(o._function), _malloced(o._malloced) + {}; + + virtual ~StorageBase() {}; + + void unreference() + { + // TODO: will this work if we delete a different type? // + if (_malloced) + delete _object; + }; + + template < typename Functor > + void operator=(Functor f) + { + _object = reinterpret_cast(new Functor(f)), + _function = reinterpret_cast(&(Functor::operator())); + _malloced = false; + } + + protected: + ObjType _object; + FunType _function; + bool _malloced; + }; + + /**/ + + template < typename R > + struct VTable0 + { + R operator()(void) { return R(); }; + }; + + template < > + struct VTable0< void > + { + void operator()(void) { return; }; + }; + + template < typename R > + struct Function0Traits + { + typedef VTable0 BaseType; + + typedef R (BaseType::* FunType)(void); + typedef BaseType * ObjType; + }; + + /**/ + + template < typename R, typename A0 > + struct VTable1 + { + R operator()(A0 a0) { return R(); }; + }; + + template < typename A0 > + struct VTable1< void, A0 > + { + void operator()(A0 a0) { return; }; + }; + + template < typename R, typename A0 > + struct Function1Traits + { + typedef VTable1 BaseType; + + typedef R (BaseType::* FunType)(A0); + typedef BaseType * ObjType; + }; + + /**/ + + template < typename R, typename A0, typename A1 > + struct VTable2 + { + R operator()(A0 a0, A1) { return R(); }; + }; + + template < typename A0, typename A1 > + struct VTable2< void, A0, A1 > + { + void operator()(A0 a0, A1 a1) { return; }; + }; + + template < typename R, typename A0, typename A1 > + struct Function2Traits + { + typedef VTable2 BaseType; + + typedef R (BaseType::* FunType)(A0, A1); + typedef BaseType * ObjType; + }; + + /**/ + + template < typename R, typename A0, typename A1, typename A2 > + struct VTable3 + { + R operator()(A0 a0, A1 a1, A2 a2) { return R(); }; + }; + + template < typename A0, typename A1, typename A2 > + struct VTable3< void, A0, A1, A2 > + { + void operator()(A0 a0, A1 a1, A2 a2) { return; }; + }; + + template < typename R, typename A0, typename A1, typename A2 > + struct Function3Traits + { + typedef VTable3 BaseType; + + typedef R (BaseType::* FunType)(A0, A1, A2); + typedef BaseType * ObjType; + }; + + /**/ + + template < typename R, typename A0, typename A1, typename A2, typename A3 > + struct VTable4 + { + R operator()(A0 a0, A1 a1, A2 a2, A3 a3) { return R(); }; + }; + + template < typename A0, typename A1, typename A2, typename A3 > + struct VTable4< void, A0, A1, A2, A3 > + { + void operator()(A0 a0, A1 a1, A2 a2, A3 a3) { return; }; + }; + + template < typename R, typename A0, typename A1, typename A2, typename A3 > + struct Function4Traits + { + typedef VTable4 BaseType; + + typedef R (BaseType::* FunType)(A0, A1, A2, A3); + typedef BaseType * ObjType; + }; + + /**/ + + template < typename R, typename A0 > + struct Function0 : public StorageBase < Function0Traits < R > > + { + typedef StorageBase < Function0Traits < R > > Storage; + + template < typename Functor > + Function0(Functor f): Storage(f) {}; + + template < typename Functor > + Function0(Functor & f, bool m): Storage(f, m) {}; + + Function0() {}; + + R operator()(void) + { + if (reinterpret_cast(Storage::_object) == 0) + throw EmptyFunction(); + + return ((Storage::_object)->*(Storage::_function))(); + } + }; + + template < typename R, typename A0 > + struct Function1 : public StorageBase < Function1Traits < R, A0 > > + { + typedef StorageBase < Function1Traits < R, A0 > > Storage; + + template < typename Functor > + Function1(Functor f): Storage(f) {}; + + template < typename Functor > + Function1(Functor & f, bool m): Storage(f, m) {}; + + Function1() {}; + + R operator()(A0 a0) + { + if (reinterpret_cast(Storage::_object) == 0) + throw EmptyFunction(); + + return ((Storage::_object)->*(Storage::_function))(a0); + } + }; + + template < typename R, typename A0, typename A1 > + struct Function2 : public StorageBase < Function2Traits < R, A0, A1 > > + { + typedef StorageBase < Function2Traits < R, A0, A1 > > Storage; + + template < typename Functor > + Function2(Functor f): Storage(f) {}; + + template < typename Functor > + Function2(Functor & f, bool m): Storage(f, m) {}; + + Function2() {}; + + R operator()(A0 a0, A1 a1) + { + if (reinterpret_cast(Storage::_object) == 0) + throw EmptyFunction(); + + return ((Storage::_object)->*(Storage::_function))(a0, a1); + } + }; + + template < typename R, typename A0, typename A1, typename A2 > + struct Function3 : public StorageBase < Function3Traits < R, A0, A1, A2 > > + { + typedef StorageBase < Function3Traits < R, A0, A1, A2 > > Storage; + + template < typename Functor > + Function3(Functor f): Storage(f) {}; + + template < typename Functor > + Function3(Functor & f, bool m): Storage(f, m) {}; + + Function3() {}; + + R operator()(A0 a0, A1 a1, A2 a2) + { + if (reinterpret_cast(Storage::_object) == 0) + throw EmptyFunction(); + + return ((Storage::_object)->*(Storage::_function))(a0, a1, a2); + } + }; + + template < typename R, typename A0, typename A1, typename A2, typename A3 > + struct Function4 : public StorageBase < Function4Traits < R, A0, A1, A2, A3 > > + { + typedef StorageBase < Function4Traits < R, A0, A1, A2, A3 > > Storage; + + template < typename Functor > + Function4(Functor f): Storage(f) {}; + + template < typename Functor > + Function4(Functor & f, bool m): Storage(f, m) {}; + + Function4() {}; + + R operator()(A0 a0, A1 a1, A2 a2, A3 a3) + { + if (reinterpret_cast(Storage::_object) == 0) + throw EmptyFunction(); + + return ((Storage::_object)->*(Storage::_function))(a0, a1, a2, a3); + } + }; +}; + +#endif /* _FUNCTION_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/initializer.hpp b/src/mod/endpoints/mod_khomp/commons/initializer.hpp new file mode 100644 index 0000000000..e0e110d49c --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/initializer.hpp @@ -0,0 +1,80 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +#ifndef _INITIALIZER_HPP_ +#define _INITIALIZER_HPP_ + +template < typename Type > +struct Initializer: public std::vector< Type > +{ + typedef std::vector< Type > super; + + Initializer(Type e) { push_back(e); }; + Initializer(Type & e) { push_back(e); }; + + Initializer & operator&(Initializer v) + { + insert(super::end(), v.begin(), v.end()); + return *this; + }; + + Initializer & operator&(Initializer & v) + { + insert(super::end(), v.begin(), v.end()); + return *this; + }; + + Initializer & operator&(Type v) + { + insert(super::end(), v); + return *this; + }; + + Initializer & operator&(Type & v) + { + insert(super::end(), v); + return *this; + }; +}; + +#endif /* _INITIALIZER_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/k3lapi.cpp b/src/mod/endpoints/mod_khomp/commons/k3lapi.cpp new file mode 100644 index 0000000000..f5afa1348f --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/k3lapi.cpp @@ -0,0 +1,313 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +#include +#include + +K3LAPI::K3LAPI(bool has_exceptions) +: _has_exceptions(has_exceptions), + _device_count(0), _channel_count(0), _link_count(0), + _device_config(0), _channel_config(0), _link_config(0) +{}; + +/* initialize the whole thing! */ + +void K3LAPI::start(void) +{ + /* tie the used k3l to the compiled k3l version */ + char *ret = k3lStart(k3lApiMajorVersion, k3lApiMinorVersion, 0); //k3lApiBuildVersion); + + if (ret && *ret) + throw start_failed(ret); + + /* call init automagically */ + init(); +} + +void K3LAPI::stop(void) +{ + k3lStop(); + fini(); +} + +/* envio de comandos para placa */ + +void K3LAPI::mixer(int32 dev, int32 obj, byte track, KMixerSource src, int32 index) +{ + KMixerCommand mix; + + mix.Track = track; + mix.Source = src; + mix.SourceIndex = index; + + command(dev, obj, CM_MIXER, (const char *) &mix); +} + +void K3LAPI::mixerRecord(int32 dev, int32 obj, byte track, KMixerSource src, int32 index) +{ + /* estes buffers *NAO PODEM SER ESTATICOS*! */ + char cmd[] = { 0x3f, 0x03, (char)obj, (char)track, 0xff, 0xff }; + + switch (src) + { + case kmsChannel: + cmd[4] = 0x05; + cmd[5] = (char)index; + break; + + case kmsNoDelayChannel: + cmd[4] = 0x0a; + cmd[5] = (char)index; + break; + + case kmsGenerator: + cmd[4] = 0x09; + + switch ((KMixerTone)index) + { + case kmtSilence: + cmd[5] = 0x0F; + break; + case kmtDial: + cmd[5] = 0x08; + break; + case kmtBusy: + cmd[5] = 0x0D; + break; + + case kmtFax: + case kmtVoice: + case kmtEndOf425: + case kmtCollect: + case kmtEndOfDtmf: + /* TODO: exception, unable to generate */ + break; + } + break; + + case kmsCTbus: + case kmsPlay: + /* TODO: exception, not implemented! */ + break; + } + + int32 dsp = get_dsp(dev, DSP_AUDIO); + + raw_command(dev, dsp, cmd, sizeof(cmd)); +} + +void K3LAPI::mixerCTbus(int32 dev, int32 obj, byte track, KMixerSource src, int32 index) +{ + KMixerCommand mix; + + mix.Track = track; + mix.Source = src; + mix.SourceIndex = index; + + command(dev, obj, CM_MIXER_CTBUS, (const char *) &mix); +} + +void K3LAPI::command(int32 dev, int32 obj, int32 code, std::string & str) +{ + command(dev, obj, code, str.c_str()); +} + +void K3LAPI::command (int32 dev, int32 obj, int32 code, const char * parms) +{ + K3L_COMMAND cmd; + + cmd.Cmd = code; + cmd.Object = obj; + cmd.Params = (byte *)parms; + + int32 rc = k3lSendCommand(dev, &cmd); + + if (rc != ksSuccess) + throw failed_command(code, dev, obj, rc); +} + +void K3LAPI::raw_command(int32 dev, int32 dsp, std::string & str) +{ + raw_command(dev, dsp, str.data(), str.size()); +} + +void K3LAPI::raw_command(int32 dev, int32 dsp, const char * cmds, int32 size) +{ + std::string str(cmds, size); + + int32 rc = k3lSendRawCommand(dev, dsp, (void *)cmds, size); + + if (rc != ksSuccess) + throw failed_raw_command(dev, dsp, rc); +} + +KLibraryStatus K3LAPI::get_param(K3L_EVENT *ev, const char *name, std::string &res) +{ + char tmp_param[256]; + memset((void*)tmp_param, 0, sizeof(tmp_param)); + + int32 rc = k3lGetEventParam (ev, (sbyte *)name, (sbyte *)tmp_param, sizeof(tmp_param)-1); + + if (rc != ksSuccess) + return (KLibraryStatus)rc; + + res.append(tmp_param, strlen(tmp_param)); + return ksSuccess; +} + +std::string K3LAPI::get_param(K3L_EVENT *ev, const char *name) +{ + std::string res; + + KLibraryStatus rc = get_param(ev, name, res); + + if (rc != ksSuccess) + throw get_param_failed(name, rc); + + return res; +} + +void K3LAPI::init(void) +{ + if (_device_count != 0) return; + + _device_count = k3lGetDeviceCount(); + + _device_type = new KDeviceType[_device_count]; + _device_config = new device_conf_type[_device_count]; + _channel_config = new channel_ptr_conf_type[_device_count]; + _link_config = new link_ptr_conf_type[_device_count]; + _channel_count = new unsigned int[_device_count]; + _link_count = new unsigned int[_device_count]; + + for (unsigned int dev = 0; dev < _device_count; dev++) + { + KLibraryStatus ret = ksSuccess; + + _device_type[dev] = (KDeviceType) k3lGetDeviceType(dev); + + /* caches each device config */ + ret = (KLibraryStatus)k3lGetDeviceConfig(dev, ksoDevice + dev, &(_device_config[dev]), sizeof(_device_config[dev])); + + if (ret != ksSuccess) + throw start_failed(STG(FMT("k3lGetDeviceConfig(dev=%d): %s") % dev % Verbose::status(ret))); + + /* adjust channel/link count for device */ + _channel_count[dev] = _device_config[dev].ChannelCount; + _link_count[dev] = _device_config[dev].LinkCount; + + /* caches each channel config */ + _channel_config[dev] = new channel_conf_type[_channel_count[dev]]; + + for (unsigned int obj = 0; obj < _channel_count[dev]; obj++) + { + ret = (KLibraryStatus)k3lGetDeviceConfig(dev, ksoChannel + obj, &(_channel_config[dev][obj]), sizeof(_channel_config[dev][obj])); + + if (ret != ksSuccess) + throw start_failed(STG(FMT("k3lGetDeviceConfig(dev=%d,chan=%d): %s") % dev % obj % Verbose::status(ret))); + } + + /* adjust link count for device */ + _link_count[dev] = _device_config[dev].LinkCount; + + /* caches each link config */ + _link_config[dev] = new link_conf_type[_link_count[dev]]; + + for (unsigned int obj = 0; obj < _link_count[dev]; obj++) + { + ret = (KLibraryStatus)k3lGetDeviceConfig(dev, ksoLink + obj, &(_link_config[dev][obj]), sizeof(_link_config[dev][obj])); + + if (ret != ksSuccess) + throw start_failed(STG(FMT("k3lGetDeviceConfig(dev=%d,link=%d): %s") % dev % obj % Verbose::status(ret))); + } + } +} + +void K3LAPI::fini(void) +{ + for (unsigned int dev = 0; dev < _device_count; dev++) + { + if (_channel_config[dev]) + { + delete[] _channel_config[dev]; + _channel_config[dev] = NULL; + } + + if (_link_config[dev]) + { + delete[] _link_config[dev]; + _link_config[dev] = NULL; + } + } + + _device_count = 0; + + if (_device_type) { delete[] _device_type; _device_type = NULL; } + if (_device_config) { delete[] _device_config; _device_config = NULL; } + if (_channel_config) { delete[] _channel_config; _channel_config = NULL; } + if (_link_config) { delete[] _link_config; _link_config = NULL; } + if (_channel_count) { delete[] _channel_count; _channel_count = NULL; } + if (_link_count) { delete[] _link_count; _link_count = NULL; } +} + +int32 K3LAPI::get_dsp(int32 dev, K3LAPI::DspType type) +{ + switch (device_type(dev)) + { + case kdtFXO: + case kdtFXOVoIP: +#if K3L_AT_LEAST(1,6,0) + case kdtGSM: + case kdtGSMSpx: +#endif +#if K3L_AT_LEAST(2,1,0) + case kdtGSMUSB: + case kdtGSMUSBSpx: +#endif + return 0; + + default: + return (type == DSP_AUDIO ? 1 : 0); + } +} + diff --git a/src/mod/endpoints/mod_khomp/commons/k3lapi.hpp b/src/mod/endpoints/mod_khomp/commons/k3lapi.hpp new file mode 100644 index 0000000000..596548405b --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/k3lapi.hpp @@ -0,0 +1,408 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +#include + +/* if using full k3l.h (for softpbx), version already defined. */ +#ifndef k3lApiMajorVersion +# include +#endif + +#ifdef __GNUC_PREREQ +#if __GNUC_PREREQ(4,3) +#include +#endif +#endif + +#include + +#ifndef _K3LAPI_HPP_ +#define _K3LAPI_HPP_ + +struct K3LAPI +{ + /* exceptions */ + + struct start_failed + { + start_failed(const char * _msg) : msg(_msg) {}; + start_failed(std::string _msg) : msg(_msg) {}; + std::string msg; + }; + + struct failed_command + { + failed_command(int32 _code, unsigned short _dev, unsigned short _obj, int32 _rc) + : code(_code), dev(_dev), obj(_obj), rc(_rc) {}; + + int32 code; + unsigned short dev; + unsigned short obj; + int32 rc; + }; + + struct failed_raw_command + { + failed_raw_command(unsigned short _dev, unsigned short _dsp, int32 _rc) + : dev(_dev), dsp(_dsp), rc(_rc) {}; + + unsigned short dev; + unsigned short dsp; + int32 rc; + }; + + struct invalid_device + { + invalid_device(int32 _device) + : device(_device) {}; + + int32 device; + }; + + struct invalid_channel + { + invalid_channel(int32 _device, int32 _channel) + : device(_device), channel(_channel) {}; + + int32 device, channel; + }; + + struct invalid_link + { + invalid_link(unsigned int _device, unsigned int _link) + : device(_device), link(_link) {}; + + int32 device, link; + }; + + struct get_param_failed + { + get_param_failed(std::string _name, int32 _rc) + : name(_name), rc((KLibraryStatus)_rc) {}; + + std::string name; + KLibraryStatus rc; + }; + + typedef K3L_DEVICE_CONFIG device_conf_type; + typedef K3L_CHANNEL_CONFIG channel_conf_type; + typedef K3L_CHANNEL_CONFIG * channel_ptr_conf_type; + typedef K3L_LINK_CONFIG link_conf_type; + typedef K3L_LINK_CONFIG * link_ptr_conf_type; + + /* constructors/destructors */ + + K3LAPI(bool has_exceptions = false); + virtual ~K3LAPI() {}; + + /* (init|final)ialize the whole thing! */ + + void start(void); + void stop(void); + + /* verificacao de intervalos */ + + inline bool valid_device(int32 dev) + { + return (dev >= 0 && dev < ((int32)_device_count)); + } + + inline bool valid_channel(int32 dev, int32 obj) + { + return (valid_device(dev) && obj >= 0 && obj < ((int32)_channel_count[dev])); + } + + inline bool valid_link(int32 dev, int32 obj) + { + return (valid_device(dev) && obj >= 0 && obj < ((int32)_link_count[dev])); + } + + /*! + \brief High level object identifier + Since Khomp works with an object concept, this is used to map the + object id with its proper type. + */ + struct target + { + /*! The types a target can have */ + typedef enum { DEVICE, CHANNEL, MIXER, LINK } target_type; + + target(K3LAPI & k3lapi, target_type type_init, int32 device_value, int32 object_value) + : type(type_init), + device((unsigned short)device_value), + object((unsigned short)object_value) + { + switch (type_init) + { + case DEVICE: + if (!k3lapi.valid_device(device_value)) + throw invalid_device(device_value); + break; + + case CHANNEL: + case MIXER: + if (!k3lapi.valid_channel(device_value, object_value)) + throw invalid_channel(device_value, object_value); + break; + + case LINK: + if (!k3lapi.valid_link(device_value, object_value)) + throw invalid_link(device_value, object_value); + break; + } + + }; + + const target_type type; + + const unsigned short device; + const unsigned short object; + }; + + /* envio de comandos para placa (geral) */ + + void raw_command(int32 dev, int32 dsp, std::string & str); + void raw_command(int32 dev, int32 dsp, const char * cmds, int32 size); + + /* obter dados 'cacheados' (geral) */ + + inline unsigned int device_count(void) + { + return _device_count; + } + + /* envio de comandos para placa (sem identificadores) */ + + void mixer(int32 dev, int32 obj, byte track, KMixerSource src, int32 index); + void mixerRecord(int32 dev, int32 obj, byte track, KMixerSource src, int32 index); + void mixerCTbus(int32 dev, int32 obj, byte track, KMixerSource src, int32 index); + + void command (int32 dev, int32 obj, int32 code, std::string & str); + void command (int32 dev, int32 obj, int32 code, const char * parms = NULL); + + /* obter dados 'cacheados' (sem identificadores) */ + + inline unsigned int channel_count(int32 dev) + { + if (!valid_device(dev)) + { + if (_has_exceptions) + throw invalid_device(dev); + else + return 0; + } + + return _channel_count[dev]; + } + + inline unsigned int link_count(int32 dev) + { + if (!valid_device(dev)) + { + if (_has_exceptions) + throw invalid_device(dev); + else + return 0; + } + + return _link_count[dev]; + } + + inline uint32 channel_stats(int32 dev, int32 obj, uint32 index) + { + if (!valid_channel(dev, obj)) + { + if (_has_exceptions) + throw invalid_channel(dev, obj); + else + return 0; + } + + uint32 res_value = (uint32)-1; + stt_code stt_res = ksFail; + +#if K3L_AT_LEAST(2,1,0) + stt_res = k3lGetChannelStats(dev, obj, index, &res_value); +#endif + + if(stt_res != ksSuccess) + { + return (uint32)-1; + } + + return res_value; + } + + KDeviceType device_type(int32 dev) + { + if (!valid_device(dev)) + { + if (_has_exceptions) + throw invalid_device(dev); + else + return kdtDevTypeCount; + } + + return _device_type[dev]; + } + + + K3L_DEVICE_CONFIG & device_config(int32 dev) + { + if (!valid_device(dev)) + throw invalid_device(dev); + + return _device_config[dev]; + } + + K3L_CHANNEL_CONFIG & channel_config(int32 dev, int32 obj) + { + if (!valid_channel(dev, obj)) + throw invalid_channel(dev, obj); + + return _channel_config[dev][obj]; + } + + K3L_LINK_CONFIG & link_config(int32 dev, int32 obj) + { + if (!valid_link(dev, obj)) + throw invalid_channel(dev, obj); + + return _link_config[dev][obj]; + } + + /* envio de comandos para placa (com identificadores) */ + + void mixer(target & tgt, byte track, KMixerSource src, int32 index) + { + mixer((int32)tgt.device, (int32)tgt.object, track, src, index); + } + + void mixerRecord(target & tgt, byte track, KMixerSource src, int32 index) + { + mixerRecord((int32)tgt.device, (int32)tgt.object, track, src, index); + } + + void mixerCTbus(target & tgt, byte track, KMixerSource src, int32 index) + { + mixerCTbus((int32)tgt.device, (int32)tgt.object, track, src, index); + } + + void command (target & tgt, int32 code, std::string & str) + { + command((int32)tgt.device, (int32)tgt.object, code, str); + }; + + void command (target & tgt, int32 code, const char * parms = NULL) + { + command((int32)tgt.device, (int32)tgt.object, code, parms); + }; + + /* obter dados 'cacheados' (com indentificadores) */ + + inline unsigned int channel_count(target & tgt) + { + return _channel_count[tgt.device]; + } + + inline unsigned int link_count(target & tgt) + { + return _link_count[tgt.device]; + } + + KDeviceType device_type(target & tgt) + { + return _device_type[tgt.device]; + } + + + K3L_DEVICE_CONFIG & device_config(target & tgt) + { + return _device_config[tgt.device]; + } + + K3L_CHANNEL_CONFIG & channel_config(target & tgt) + { + return _channel_config[tgt.device][tgt.object]; + } + + K3L_LINK_CONFIG & link_config(target & tgt) + { + return _link_config[tgt.device][tgt.object]; + } + + /* pega valores em strings de eventos */ + + KLibraryStatus get_param(K3L_EVENT *ev, const char *name, std::string &res); + std::string get_param(K3L_EVENT *ev, const char *name); + + /* inicializa valores em cache */ + + void init(void); + void fini(void); + + /* utilidades diversas e informacoes */ + + enum DspType + { + DSP_AUDIO, + DSP_SIGNALING, + }; + + int32 get_dsp(int32, DspType); + + protected: + + const bool _has_exceptions; + + unsigned int _device_count; + unsigned int * _channel_count; + unsigned int * _link_count; + + device_conf_type * _device_config; + channel_ptr_conf_type * _channel_config; + link_ptr_conf_type * _link_config; + KDeviceType * _device_type; +}; + +#endif /* _K3LAPI_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/k3lutil.cpp b/src/mod/endpoints/mod_khomp/commons/k3lutil.cpp new file mode 100644 index 0000000000..83ac82efae --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/k3lutil.cpp @@ -0,0 +1,234 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +std::string K3LUtil::channelStatus(int32 dev, int32 channel, + Verbose::Presentation fmt) +{ + try + { + K3L_CHANNEL_CONFIG & config = _k3lapi.channel_config(dev, channel); + K3L_CHANNEL_STATUS status; + + KLibraryStatus ret = (KLibraryStatus) k3lGetDeviceStatus (dev, + channel + ksoChannel, &status, sizeof(status)); + + switch (ret) + { + case ksSuccess: return Verbose::channelStatus(config.Signaling, + status.AddInfo, fmt); + default: return (fmt == Verbose::EXACT ? "" + : "Unknown (fail)"); + } + } + catch(K3LAPI::invalid_channel & e) + { + return (fmt == Verbose::EXACT ? "" : "Unknown (fail)"); + } +} + +std::string K3LUtil::callStatus(int32 dev, int32 channel, + Verbose::Presentation fmt) +{ + K3L_CHANNEL_STATUS status; + + KLibraryStatus ret = (KLibraryStatus) k3lGetDeviceStatus(dev, + channel + ksoChannel, &status, sizeof(status)); + + switch (ret) + { + case ksSuccess: return Verbose::callStatus(status.CallStatus, fmt); + default: return (fmt == Verbose::EXACT ? "" + : "Unknown (fail)"); + } +} + +std::string K3LUtil::linkStatus(int32 dev, int32 link, + Verbose::Presentation fmt, KSignaling sig) +{ + try + { + if (sig == ksigInactive) + { + K3L_LINK_CONFIG & config = _k3lapi.link_config(dev, link); + sig = config.Signaling; + } + + K3L_LINK_STATUS status; + + KLibraryStatus ret = (KLibraryStatus) k3lGetDeviceStatus (dev, + link + ksoLink, &status, sizeof(status)); + + switch (ret) + { + case ksSuccess: return Verbose::linkStatus(sig, status.E1, fmt); + default: return (fmt == Verbose::EXACT ? + "" : "Unknown (failure)"); + } + } + catch(K3LAPI::invalid_channel & e) + { + return (fmt == Verbose::EXACT ? "" + : "Unknown (failure)"); + } +} + +std::string K3LUtil::getLinkStatus(int32 dev, int32 link, + Verbose::Presentation fmt) +{ + switch (_k3lapi.device_type(dev)) + { +#if K3L_AT_LEAST(1,6,0) + case kdtFXS: + case kdtFXSSpx: + return linkStatus(dev, link, fmt, ksigAnalogTerminal); + +#if K3L_AT_LEAST(2,1,0) + case kdtE1FXSSpx: + if (link == 1) + return linkStatus(dev, link, fmt, ksigAnalogTerminal); +#endif +#endif + default: + break; + } + + K3L_LINK_CONFIG & conf = _k3lapi.link_config(dev, link); + + std::string res = linkStatus(dev, link, fmt); + + if (conf.ReceivingClock & 0x01) + res += (fmt == Verbose::EXACT ? ",sync" : " (sync)"); + + return res; +} + +unsigned int K3LUtil::physicalLinkCount(int32 dev, bool count_virtual) +{ + unsigned int number = 0; + + try + { + switch (_k3lapi.device_type(dev)) + { +#if K3L_AT_LEAST(1,6,0) + case kdtFXS: + number = (count_virtual ? (_k3lapi.channel_count(dev) < 50 ? 1 : 2) : 0); + break; + + case kdtFXSSpx: + number = (count_virtual ? (_k3lapi.channel_count(dev) < 30 ? 1 : 2) : 0); + break; +#endif + +#if K3L_AT_LEAST(2,1,0) + case kdtE1FXSSpx: + number = (count_virtual ? 2 : 1); + break; +#endif + + /* E1 boards */ + case kdtE1: + case kdtE1Spx: + case kdtE1IP: + number = _k3lapi.link_count(dev); + break; + + case kdtPR: + case kdtE1GW: + number = 1; + break; + +#if K3L_AT_LEAST(1,6,0) + case kdtFXO: + case kdtFXOVoIP: + case kdtGSM: + case kdtGSMSpx: +#else + case kdtFX: + case kdtFXVoIP: +#endif + case kdtConf: + case kdtGWIP: +#if K3L_AT_LEAST(2,1,0) + case kdtGSMUSB: + case kdtGSMUSBSpx: + case kdtReserved1: // just to avoid warnings. + case kdtDevTypeCount: // just to avoid warnings. +#endif + number = 0; + break; + } + } + catch(K3LAPI::invalid_device & e) + { + return 0; + } + + return number; +} + + +K3LUtil::ErrorCountType K3LUtil::linkErrorCount(int32 dev, int32 link, + Verbose::Presentation fmt) +{ + ErrorCountType result; + K3L_LINK_ERROR_COUNTER status; + + KLibraryStatus ret = (KLibraryStatus) k3lGetDeviceStatus (dev, + link + ksoLinkMon, &status, sizeof(status)); + + switch (ret) + { + case ksSuccess: + for (unsigned int i = klecChangesToLock; i < klecCount; i++) + { + result.push_back(ErrorCountPairType(Verbose::linkErrorCounter + ((KLinkErrorCounter)i, fmt), status.ErrorCounters[i])); + } + /* fall */ + + default: + return result; + } +} + diff --git a/src/mod/endpoints/mod_khomp/commons/k3lutil.hpp b/src/mod/endpoints/mod_khomp/commons/k3lutil.hpp new file mode 100644 index 0000000000..e547f3df6e --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/k3lutil.hpp @@ -0,0 +1,82 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include +#include + +#include +#include + +#ifndef _K3LUTIL_HPP_ +#define _K3LUTIL_HPP_ + +struct K3LUtil +{ + typedef std::pair < std::string, unsigned int > ErrorCountPairType; + typedef std::list < ErrorCountPairType > ErrorCountType; + + K3LUtil(K3LAPI & k3lapi): _k3lapi(k3lapi) {}; + + std::string callStatus(int32 dev, int32 channel, + Verbose::Presentation fmt = Verbose::HUMAN); + + std::string channelStatus(int32, int32, + Verbose::Presentation fmt = Verbose::HUMAN); + + std::string linkStatus(int32, int32, + Verbose::Presentation fmt = Verbose::HUMAN, + KSignaling sig = ksigInactive); + + std::string getLinkStatus(int32, int32, + Verbose::Presentation fmt = Verbose::HUMAN); + + unsigned int physicalLinkCount(int32 dev, bool count_virtual = false); + + ErrorCountType linkErrorCount(int32, int32, + Verbose::Presentation fmt = Verbose::HUMAN); + + protected: + K3LAPI & _k3lapi; +}; + +#endif /* _K3LUTIL_HPP_ */ + diff --git a/src/mod/endpoints/mod_khomp/commons/logger.hpp b/src/mod/endpoints/mod_khomp/commons/logger.hpp new file mode 100644 index 0000000000..6fcf7bffe3 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/logger.hpp @@ -0,0 +1,644 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#if defined(COMMONS_LIBRARY_USING_ASTERISK) +extern "C" +{ + #include +} +#elif defined(COMMONS_LIBRARY_USING_CALLWEAVER) +extern "C" +{ + #include +} +#elif defined(COMMONS_LIBRARY_USING_FREESWITCH) +extern "C" +{ + #include +} +#endif +/* + +******************************************************************************** +***************************** 'Logger' user manual ***************************** +******************************************************************************** + +* Description: + +This class does the management of log messages for applications. It works with +the following axioms: + +<*> There are several class of messages. +<*> There are some outputs, which may be files, sockets, or a console device. +<*> There are options for classes, for outputs and for the association of both. + +The last rule also shows the order in which options are processed: first the +'classes' options are processed, then 'output' options are processed, and then +the options for the tuple '(class, output)' are processed. + +The options are mapped like this: + + -> options [prefix, flags] + -> options [prefix] +( , ) -> options [prefix, flags] + + - "prefix" means a fixed string prefix before the real message. + - "flags" means auxiliary flags (DATETIME, THREADID) which are + used to add information based on OS or process context info. + +* Example of use: + +typedef enum +{ + C_DBG_FUNC, + C_DBG_LOCK, + C_WARNING, + C_ERROR, + C_CLI, +} +AstClassId; + +typedef enum +{ + F_CONSOLE, + F_GENERIC, + F_TRACE, +} +AstOutputId; + +// used to indicate the console log // +struct AstConsoleLog {}; + +struct AstPrinter: public Logger::DefaultPrinter +{ + typedef Logger::DefaultPrinter Super; + + using namespace Tagged; + + using Super::operator()(int); + + // just 2 type of descriptors // + typedef Union < int, Union < AstConsoleLog > > Container; + + ast_printer(std::string & msg): Super(msg) {}; + + bool operator()(const AstConsoleLog & log) + { + ast_console_puts(_msg.c_str()); + return true; + }; + +#if 0 + bool operator()(int log) + { + return Super::operator()(log); + }; +#endif +}; + +bool start_log() +{ + typedef Logger::Manager LogManager; + + LogManager logger; + + // shortcut definition // + typedef LogManager::Option LogOption; + + FILE * log_file = fopen( "output.log", "a"); + + if (!log_file) + return false; + + logger.add( F_CONSOLE, AstConsoleLog(), "chan_khomp: "); + logger.add( F_GENERIC, log_file); + + logger.classe( C_WARNING ) + & LogOption(F_CONSOLE, "WARNING: ", LogOption::Flags(LogOption::Flag(LogOption::DATETIME))) + & LogOption(F_GENERIC, "W: ", LogOption::Flags(LogOption::Flag(LogOption::DATETIME))) + + logger.classe( C_DBG_LOCK ).enabled(false); + + logger.classe( C_DBG_LOCK ) + & LogOption(F_GENERIC, "L: ", LogOption::Flags + (LogOption::flag_type(LogOption::ENABLED) & + LogOption::flag_type(LogOption::DATETIME)) + + logger(C_WARNING, "eu sou uma mensagem de warning"); + + logger.classe(C_WARNING).set(F_GENERIC, LogOption::ENABLED, true); + logger.classe(C_WARNING).set(F_CONSOLE, LogOption::ENABLED, false); + + logger.classe(C_CLI).prefix(""); + + return true; +} + +void message_the_user(int fd) +{ + logger(C_CLI, fd, "eu sou uma mensagem de cli!"); + logger(C_WARNING, "eu sou um warning"); +} + +******************************************************************************** +******************************************************************************** + +Now, the code..! + +*/ + +#ifndef _LOGGER_HPP_ +#define _LOGGER_HPP_ + +#include + +struct Logger +{ + /*** a base struct for printing messages in many ways ***/ + + struct DefaultPrinter + { + typedef Tagged::Union < int, Tagged::Union < FILE *, Tagged::Union < std::ostream * > > > BaseType; + + typedef bool ReturnType; + + DefaultPrinter(std::string & msg): _msg(msg) {}; + + bool operator()(std::ostream * out) + { + (*out) << _msg; + out->flush(); + + return out->good(); + } + + bool operator()(FILE * out) + { + if (fputs(_msg.c_str(), out) < 0) + return false; + + if (fflush(out) < 0) + return false; + + return true; + } + + bool operator()(int out) + { +#ifndef KWIN32 + return (write(out, _msg.c_str(), _msg.size()) == (int)_msg.size()); +#else + // no need for file descriptors on windows + return false; +#endif + } + + std::string & msg() { return _msg; } + + protected: + std::string & _msg; + }; + + /*** manage the printing of messages ***/ + + template + struct Manager + { + typedef typename Printer::BaseType BaseType; + + protected: + /* holds a stream, and an optimal message prefix */ + struct OutputOptions + { + OutputOptions(BaseType & stream, std::string & prefix) + : _stream(stream), _prefix(prefix) {}; + + BaseType _stream; + std::string _prefix; + LockType _lock; + }; + + typedef std::map < OutputId, OutputOptions > OutputMap; + + public: + + /* print in a specific 'message class' */ + struct ClassType + { + ClassType(void) + : _enabled(true) + {}; + +// ClassType(ClassType & o) +// : _stream_map(o._stream_map), _prefix(o.prefix), +// _lock(o._lock),_enabled(o._enabled) +// {}; + + /* initializes the options of the (class, stream) pair */ + struct Option + { + typedef enum { ENABLED, DATETIME, THREADID, DATETIMEMS } EnumType; + + typedef Flagger< EnumType > Flags; + typedef typename Flags::InitFlags InitFlags; + + Option(OutputId output, const char * prefix, + Flags flags = InitFlags(ENABLED)) + : _output(output), _prefix(prefix), _flags(flags) {}; + + Option(OutputId output, std::string prefix, + Flags flags = InitFlags(ENABLED)) + : _output(output), _prefix(prefix), _flags(flags) {}; + + Option(OutputId output, + Flags flags = InitFlags(ENABLED)) + : _output(output), _flags(flags) {}; + + OutputId _output; + std::string _prefix; + Flags _flags; + }; + + protected: + + /* holds a prefix and a activation status */ + struct OptionContainer + { + OptionContainer(std::string prefix, typename Option::Flags flags) + : _prefix(prefix), _flags(flags) {}; + + std::string _prefix; + typename Option::Flags _flags; + }; + + typedef std::multimap < OutputId, OptionContainer > OptionMap; + + /* utility function for printing */ + bool print(std::string & msg, BaseType & stream, LockType & lock) + { + lock.lock(); + + Printer p(msg); + bool ret = stream.visit(p); + + lock.unlock(); + + return ret; + }; + +/* + bool print(std::string & msg, BaseType & stream, LockType & lock) + { + lock.lock(); + + Printer p(msg); + bool ret = stream.visit(p); + + lock.unlock(); + + return ret; + }; +*/ + + public: + ClassType & operator&(const Option & value) + { + add(value._output, value._prefix, value._flags); + return *this; + } + + void add(OutputId output_id, std::string prefix, + typename Option::Flags flags) + { + typedef std::pair < OutputId, OptionContainer > pair_type; + _stream_map.insert(pair_type(output_id, OptionContainer(prefix, flags))); + } + + /* get and set methods for active mode */ + void set(OutputId id, typename Option::EnumType flag, bool value = true) + { + typename OptionMap::iterator iter = _stream_map.find(id); + + if (iter == _stream_map.end()) + return; + + (*iter).second._flags.set(flag, value); + } + + bool get(OutputId idx, typename Option::EnumType flag) + { + typename OptionMap::iterator iter = _stream_map.find(idx); + + if (iter == _stream_map.end()) + return false; + + return (*iter).second._flags.is_set(flag); + } + + /* get/adjust the enable/disable value for the class */ + void enabled(bool enabled) { _enabled = enabled; }; + bool enabled() { return _enabled; }; + + /* get/adjust the classe prefix */ + void prefix(const char * prefix) { _prefix = prefix; } + void prefix(std::string & prefix) { _prefix = prefix; } + std::string & prefix() { return _prefix; } + + /* printing function (operator, actually) */ + bool operator()(OutputMap & out_map, std::string & msg) + { + if (!_enabled) + return true; + + typedef typename OptionMap::iterator Iter; + + bool ret = true; + + for (Iter iter = _stream_map.begin(); iter != _stream_map.end(); iter++) + { + OptionContainer & opt = (*iter).second; + + if (!opt._flags[Option::ENABLED]) + continue; + + typename OutputMap::iterator out_iter = out_map.find((*iter).first); + + /* this stream have been added already? if not, skip! */ + if (out_iter == out_map.end()) + continue; + + /* final message */ + std::string out_msg; + + if (opt._flags[Option::DATETIME]) + { +#if defined(COMMONS_LIBRARY_USING_ASTERISK) +#if ASTERISK_AT_LEAST(1,6,0) + struct timeval tv; + struct ast_tm lt; + + gettimeofday(&tv, NULL); + +#else + time_t tv; + struct tm lt; + + time (&tv); +#endif + +#if ASTERISK_AT_LEAST(1,4,5) + ast_localtime (&tv, <, NULL); +#else + localtime_r (&tv, <); +#endif + + out_msg += STG(FMT("[%04d-%02d-%02d %02d:%02d:%02d] ") + % (lt.tm_year + 1900) % (lt.tm_mon + 1) % lt.tm_mday % lt.tm_hour + % lt.tm_min % lt.tm_sec); + +#elif defined(COMMONS_LIBRARY_USING_CALLWEAVER) + time_t tv; + struct tm lt; + + time (&tv); + + localtime_r (&tv, <); + + out_msg += STG(FMT("[%04d-%02d-%02d %02d:%02d:%02d] ") + % (lt.tm_year + 1900) % (lt.tm_mon + 1) % lt.tm_mday % lt.tm_hour + % lt.tm_min % lt.tm_sec); + +#elif defined(COMMONS_LIBRARY_USING_FREESWITCH) + time_t tv; + struct tm lt; + + time (&tv); + + localtime_r (&tv, <); + + out_msg += STG(FMT("[%04d-%02d-%02d %02d:%02d:%02d] ") + % (lt.tm_year + 1900) % (lt.tm_mon + 1) % lt.tm_mday % lt.tm_hour + % lt.tm_min % lt.tm_sec); + +#endif + } + + if (opt._flags[Option::DATETIMEMS]) + { +#if defined(COMMONS_LIBRARY_USING_ASTERISK) +#if ASTERISK_AT_LEAST(1,6,0) + struct timeval tv; + struct ast_tm lt; + + gettimeofday(&tv, NULL); + +#else + time_t tv; + struct tm lt; + + time (&tv); +#endif + +#if ASTERISK_AT_LEAST(1,4,5) + ast_localtime (&tv, <, NULL); +#else + localtime_r (&tv, <); +#endif + +#if ASTERISK_AT_LEAST(1,6,0) + out_msg += STG(FMT("[%04d-%02d-%02d %02d:%02d:%02d:%04d] ") + % (lt.tm_year + 1900) % (lt.tm_mon + 1) % lt.tm_mday % lt.tm_hour % lt.tm_min + % lt.tm_sec % (tv.tv_usec / 1000)); +#else + out_msg += STG(FMT("[%04d-%02d-%02d %02d:%02d:%02d:%04d] ") + % (lt.tm_year + 1900) % (lt.tm_mon + 1) % lt.tm_mday % lt.tm_hour % lt.tm_min + % lt.tm_sec % (tv * 1000)); +#endif + +#elif defined(COMMONS_LIBRARY_USING_CALLWEAVER) + time_t tv; + struct tm lt; + + time (&tv); + + localtime_r (&tv, <); + + out_msg += STG(FMT("[%04d-%02d-%02d %02d:%02d:%02d:%04d] ") + % (lt.tm_year + 1900) % (lt.tm_mon + 1) % lt.tm_mday % lt.tm_hour % lt.tm_min + % lt.tm_sec % (tv * 1000)); + +#elif defined(COMMONS_LIBRARY_USING_FREESWITCH) + time_t tv; + struct tm lt; + + time (&tv); + + localtime_r (&tv, <); + + out_msg += STG(FMT("[%04d-%02d-%02d %02d:%02d:%02d:%04d] ") + % (lt.tm_year + 1900) % (lt.tm_mon + 1) % lt.tm_mday % lt.tm_hour % lt.tm_min + % lt.tm_sec % (tv * 1000)); + +#endif + } + + OutputOptions & out_opt = (*out_iter).second; + + if (opt._flags[Option::THREADID]) + { +#if defined (COMMONS_LIBRARY_USING_ASTERISK) || defined(COMMONS_LIBRARY_USING_CALLWEAVER) || defined(COMMONS_LIBRARY_USING_FREESWITCH) + out_msg += STG(FMT("t=%08p ") % ((void*)pthread_self())); +#endif + } + + out_msg += _prefix; + out_msg += out_opt._prefix; + out_msg += opt._prefix; + out_msg += msg; + out_msg += "\n"; + + ret |= print(out_msg, out_opt._stream, out_opt._lock); + } + + return ret; + } + + bool operator()(BaseType & stream, std::string & msg) + { + std::string final_msg; + + final_msg += _prefix; + final_msg += msg; + final_msg += "\n"; + + return print(final_msg, stream, _lock); + } + + protected: + OptionMap _stream_map; + std::string _prefix; + LockType _lock; + bool _enabled; + }; + + /* util declaration */ + typedef typename ClassType::Option Option; + + /* class_id_type -> ClassType mapper */ + typedef std::map < ClassId, ClassType > ClassMap; + + /* local option pair */ + typedef std::pair < OutputId, OutputOptions > OutputOptionPair; + + void add(OutputId output, BaseType stream, const char * prefix = "") + { + std::string str_prefix(prefix); + + _output_map.insert(OutputOptionPair(output, OutputOptions(stream, str_prefix))); + } + + void add(OutputId output, BaseType stream, std::string prefix) + { + _output_map.insert(OutputOptionPair(output, OutputOptions(stream, prefix))); + } + + ClassType & classe(ClassId classeid) + { + return _classe_map[classeid]; + } + + bool operator()(ClassId classeid, const char * msg) + { + std::string str_msg(msg); + return _classe_map[classeid](_output_map, str_msg); + } + + bool operator()(ClassId classeid, std::string & msg) + { + return _classe_map[classeid](_output_map, msg); + } + + bool operator()(ClassId classeid, Format fmt) + { + std::string str_fmt = STG(fmt); + return _classe_map[classeid](_output_map, str_fmt); + } + + bool operator()(ClassId classeid, BaseType stream, const char * msg) + { + std::string str_msg(msg); + return _classe_map[classeid](stream, str_msg); + } + + bool operator()(ClassId classeid, BaseType stream, std::string & msg) + { + return _classe_map[classeid](stream, msg); + } + + bool operator()(ClassId classeid, BaseType stream, Format fmt) + { + std::string str_fmt = STG(fmt); + return _classe_map[classeid](stream, str_fmt); + } + + protected: + ClassMap _classe_map; + OutputMap _output_map; + }; + + private: + Logger(); +}; + +#endif /* _LOGGER_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/noncopyable.hpp b/src/mod/endpoints/mod_khomp/commons/noncopyable.hpp new file mode 100644 index 0000000000..d32faa8913 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/noncopyable.hpp @@ -0,0 +1,54 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _NONCOPYABLE_HPP_ +#define _NONCOPYABLE_HPP_ + +struct NonCopyable +{ + NonCopyable() {}; + private: + NonCopyable(NonCopyable const &) { }; + NonCopyable & operator=(NonCopyable const &) { return *this; }; +}; + +#endif /* _NONCOPYABLE_HPP_ */ + diff --git a/src/mod/endpoints/mod_khomp/commons/refcounter.hpp b/src/mod/endpoints/mod_khomp/commons/refcounter.hpp new file mode 100644 index 0000000000..6ba8ae8b2f --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/refcounter.hpp @@ -0,0 +1,263 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the "LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +/* This struct uses static polymorphism, and derived classes should implement * + * the "unreference()" method, which should release all resources when called */ + +#ifndef _REFCOUNTER_HPP_ +#define _REFCOUNTER_HPP_ + +#define NEW_REFCOUNTER(...) public ReferenceCounter< __VA_ARGS__ > +#define INC_REFCOUNTER(o, ...) ReferenceCounter< __VA_ARGS__ >(static_cast< const ReferenceCounter < __VA_ARGS__ > & >(o)) + +#include + +#include +#include + +#ifdef DEBUG +# include +#endif + +struct ReferenceData: public NonCopyable +{ + ReferenceData() + : _data_count(1) + {}; + + inline unsigned int increment(void) + { + if (!_data_count) + abort(); + + Atomic::doAdd(&_data_count); + + return _data_count; + } + + inline unsigned int decrement(void) + { + if (!_data_count) + abort(); + + Atomic::doSub(&_data_count); + return _data_count; + } + + volatile unsigned int _data_count; +}; + +template < typename T > +struct ReferenceCounter +{ + typedef T Type; + + ReferenceCounter(bool create_counter = true) + : _reference_count(0) + { + reference_restart(create_counter); + +#ifdef DEBUG + std::cerr << ((void*)this) << ": ReferenceCounter() [ref_count=" + << (_reference_count ? (*_reference_count) : -1) << "]" << std::endl; +#endif + }; + + ReferenceCounter(const ReferenceCounter & o) + : _reference_count(0) + { + reference_reflect(o); + +#ifdef DEBUG + std::cerr << ((void*)this) << ": ReferenceCounter(" << ((void*)(&o)) << ") [ref_count=" + << (_reference_count ? (*_reference_count) : -1) << "]" << std::endl; +#endif + }; + + virtual ~ReferenceCounter() + { +#ifdef DEBUG + std::cerr << ((void*)this) << ": ~ReferenceCounter() [ref_count=" + << (_reference_count ? (*_reference_count) : -1) << "]" << std::endl; +#endif + reference_disconnect(_reference_count); + } + + ReferenceCounter & operator=(const ReferenceCounter & o) + { + reference_reflect(o); + +#ifdef DEBUG + std::cerr << ((void*)this) << ": ReferenceCounter::operator=(" << ((void*)(&o)) << ") [ref_count=" + << (_reference_count ? (*_reference_count) : -1) << "]" << std::endl; +#endif + + return *this; + }; + + protected: + inline void reference_restart(bool create_counter = false) + { + ReferenceData * oldref = _reference_count; + + _reference_count = (create_counter ? new ReferenceData() : 0); + + if (oldref) reference_disconnect(oldref); + } + + inline void reference_reflect(const ReferenceCounter & other) + { + ReferenceData * newref = other._reference_count; + ReferenceData * oldref = _reference_count; + + /* NOTE: increment before, avoid our reference being zero, even * + * for a short period of time. */ + + if (newref) newref->increment(); + + _reference_count = newref; + + if (oldref) reference_disconnect(oldref); + }; + + inline void reference_disconnect(ReferenceData *& counter) + { + if (counter) + { + unsigned int result = counter->decrement(); + + if (!result) + { + static_cast< Type * >(this)->unreference(); + delete counter; + } + + counter = 0; + } + }; + + private: + ReferenceData * _reference_count; +}; + +template < typename T > +struct ReferenceContainer: NEW_REFCOUNTER(ReferenceContainer< T >) +{ + /* type */ + typedef T Type; + + /* shorthand */ + typedef ReferenceCounter < ReferenceContainer< Type > > Counter; + + // TODO: make this a generic exception someday + struct NotFound {}; + + ReferenceContainer() + : Counter(false), + _reference_value(0) + {}; + + ReferenceContainer(Type * value) + : _reference_value(value) + {}; + + ReferenceContainer(const ReferenceContainer & value) + : Counter(false), + _reference_value(0) + { + operator()(value); + }; + + virtual ~ReferenceContainer() + {}; + + ReferenceContainer operator=(const ReferenceContainer & value) + { + operator()(value); + return *this; + }; + + /**/ + + void unreference() + { + if (_reference_value) + { + delete _reference_value; + _reference_value = 0; + } + } + + // simulates a copy constructor + void operator()(const ReferenceContainer & value) + { + Counter::reference_reflect(value); + + _reference_value = const_cast(value._reference_value); + }; + + // shortcut for operator below + void operator=(const Type * value) + { + operator()(value); + }; + + // accept value (pointer)! + void operator()(const Type * value) + { + Counter::reference_restart((value != 0)); + + _reference_value = const_cast(value); + }; + + // return value (pointer)! + Type * operator()(void) + { + return _reference_value; + }; + + protected: + Type * _reference_value; + + protected: +}; + +#endif /* _REFCOUNTER_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/regex.cpp b/src/mod/endpoints/mod_khomp/commons/regex.cpp new file mode 100644 index 0000000000..61f941c214 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/regex.cpp @@ -0,0 +1,148 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +#include + +void Regex::Expression::initialize(void) +{ + unsigned int tmplen = strlen(_expression); + + bool extflag = (_flags & E_EXTENDED); + + for (unsigned int i = 0; i < tmplen; ++i) + { + switch (_expression[i]) + { + case '\\': + ++i; + + if (!extflag && i < tmplen) + if (_expression[i] == '(') + ++_subcounter; + + break; + + case '(': + if (extflag) + ++_subcounter; + + default: + break; + } + } + + _errorstate = regcomp(&_comp_regex, _expression, _flags); +} + +std::string Regex::Expression::regerror_as_string(void) +{ + unsigned int count = regerror(_errorstate, &_comp_regex, 0, 0) + 1; + + char * msg = new char[count]; + + regerror(_errorstate, &_comp_regex, msg, count); + + std::string tmp(msg, count); + + delete[] msg; + + return tmp; +} + +void Regex::Match::initialize(void) +{ + if (_expression.valid()) + { + _subcounter = (_expression.subcount() + 2); // 0 + N.. + invalid + _submatches = new regmatch_t[_subcounter]; + _have_match = (regexec(_expression.repr(), _basestring.c_str(), + _subcounter, _submatches, _flags) == 0); + } +} + +std::string Regex::Match::replace(std::string rep, unsigned int index) +{ + ReplaceMap tmp; + tmp.insert(ReplacePair(index,rep)); + return replace(tmp); +} + +std::string Regex::Match::replace(Regex::ReplaceMap & map) +{ + if (!_have_match) + return _basestring; + + std::string buffer = _basestring; + + try + { + if (_submatches[0].rm_so != 0 && (map.find(0) != map.end())) + return _basestring.replace(_submatches[0].rm_so, _submatches[0].rm_eo - _submatches[0].rm_so, map.find(0)->second); + + for (unsigned int n = 1; (_submatches[n].rm_so != -1) && (n < _subcounter); n++) + { + //// s f RRR s f RRR s f RRRR s f + //// XXXYYY(ZZZ)AAA(BBB)CCCEEE(FFFF)GGGG + + bool globalsubs = false; + + if (map.find(n) == map.end()) + { + if (map.find(UINT_MAX) == map.end()) + continue; + + globalsubs = true; + } + + buffer = buffer.replace(_submatches[n].rm_so, + _submatches[n].rm_eo - _submatches[n].rm_so, + map.find((globalsubs ? UINT_MAX : n))->second); + } + } + catch (std::out_of_range e) + { + return ""; + } + + return buffer; +} diff --git a/src/mod/endpoints/mod_khomp/commons/regex.hpp b/src/mod/endpoints/mod_khomp/commons/regex.hpp new file mode 100644 index 0000000000..daf20147a8 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/regex.hpp @@ -0,0 +1,252 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#ifndef _REGEX_HPP_ +#define _REGEX_HPP_ + +struct Regex +{ + enum + { + E_EXTENDED = REG_EXTENDED, + E_IGNORE_CASE = REG_ICASE, + E_NO_SUB_MATCH = REG_NOSUB, + E_EXPLICIT_NEWLINE = REG_NEWLINE, + }; + + enum + { + M_NO_BEGIN_OF_LINE = REG_NOTBOL, + M_NO_END_OF_LINE = REG_NOTEOL, + }; + + enum + { + /* mark replace for full match (submatch "0"). */ + REP_BASE = 0u, + /* mark global string for replace. */ + REP_ALL = UINT_MAX, + }; + + typedef std::pair < unsigned int, std::string > ReplacePair; + typedef std::map < unsigned int, std::string > ReplaceMap; + + struct Expression : public NonCopyable + { + Expression(const char * expression, unsigned int flags = 0) + : _expression(expression), _alloced(false), + _subcounter(0), _errorstate(INT_MAX), _flags(flags) + { + initialize(); + } + + Expression(std::string & expression, unsigned int flags = 0) + : _expression(strdup(expression.c_str())), _alloced(true), + _subcounter(0), _errorstate(INT_MAX), _flags(flags) + { + initialize(); + } + + ~Expression() + { + if (_errorstate != INT_MAX) + regfree(&_comp_regex); + + if (_alloced) + { + delete _expression; + _expression = 0; + } + } + + bool valid(void) { return (_errorstate == 0); } + + unsigned int subcount(void) { return _subcounter; } + const regex_t * repr(void) { return &_comp_regex; } + + std::string error(void) + { + switch (_errorstate) + { + case 0: return ""; + case INT_MAX: return "uninitialized"; + default: return regerror_as_string(); + } + } + + private: + void initialize(void); + std::string regerror_as_string(void); + + protected: + const char * _expression; + bool _alloced; + + unsigned int _subcounter; + + int _errorstate; + regex_t _comp_regex; + + unsigned int _flags; + }; + + struct Match: NEW_REFCOUNTER(Match) + { + Match(const char * basestring, Expression & expression, unsigned int flags = 0) + : _basestring(basestring), _expression(expression), _subcounter(0), _submatches(0), + _have_match(false), _flags(flags) + { + initialize(); + } + + Match(std::string & basestring, Expression & expression, unsigned int flags = 0) + : _basestring(basestring), _expression(expression), _subcounter(0), _submatches(0), + _have_match(false), _flags(flags) + { + initialize(); + } + + Match(const Match & o) + : INC_REFCOUNTER(o, Match), + _basestring(o._basestring), _expression(o._expression), + _subcounter(o._subcounter), _submatches(o._submatches), + _have_match(o._have_match), _flags(o._flags) + { + } + + void unreference() + { + delete[] _submatches; + } + + bool matched(void) + { + return _have_match; + } + + bool matched(unsigned int number) + { + if (_have_match && number < _subcounter) + return (_submatches[number].rm_so != -1); + + return false; + } + + std::string submatch(int number) + { + if (!matched(number)) + return ""; + + return _basestring.substr(_submatches[number].rm_so, + _submatches[number].rm_eo - _submatches[number].rm_so); + } + + /** + * \brief gets a map with all matches + * \return std::map with all matches + * \note index 0 in map, is the complete string + * \author Eduardo Nunes Pereira + * + * If fails the empty map is returned + */ + std::map obtain_match_map() + { + int match_counter = 0; + std::map tmp_map; + while(matched(match_counter)) + { + tmp_map.insert(std::make_pair(match_counter,submatch(match_counter))); + match_counter++; + } + + return tmp_map; + } + + /** + * \brief replaces strings matched by parentesis + * \param each item of the vector is a parentesis replaced + * \return string replaced + * \note The overload method match only one string in parentesis. + * \author Eduardo Nunes Pereira + * + * If fails the empty string is returned. + */ + std::string replace(ReplaceMap &); + std::string replace(std::string, unsigned int index = REP_BASE); + + std::string operator[](int number) + { + return submatch(number); + } + + // NOTE: there is already a way to get subcount defined on EXPRESSION class! + + private: + void initialize(void); + + protected: + std::string _basestring; + Expression & _expression; + + unsigned int _subcounter; + regmatch_t * _submatches; + + bool _have_match; + unsigned int _flags; + }; +}; + +#endif /* _REGEX_HPP_ */ + diff --git a/src/mod/endpoints/mod_khomp/commons/ringbuffer.cpp b/src/mod/endpoints/mod_khomp/commons/ringbuffer.cpp new file mode 100644 index 0000000000..428bd29221 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/ringbuffer.cpp @@ -0,0 +1,575 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +/********** BUFFER FUNCTIONS **********/ + +/* writes everything or nothing */ +bool Ringbuffer_traits::traits_provide(char * buffer, const char * value, unsigned int amount, bool skip_overwrite) +{ + /* avoid using different values */ + Buffer_table cache = _pointers; + + const unsigned int reader = cache.reader.complete; + const unsigned int writer = cache.writer.complete; + + const unsigned int dest = cache.writer.complete - 1; + + const bool reader_less = cache.reader.complete < cache.writer.complete; + + if (amount >= _size) + return false; + + bool ret = true; + + /* should we go around the buffer for writing? */ + if (((writer + amount) > _size) && (reader_less || !skip_overwrite)) + { + /* Documentation of the formula used in the 'if' below. + * + * [0|1|2|3|4|5|6|7] => size=8 + * | | + * reader | + * writer + * + * => writer has places [5,6,7,0,1] to write (5 places). + * + * => 8 - (4-2+1) = 8 - (2+1) = 8 - 3 = 5 + * + * > writer goes 1 up, amount goes 1 down. + * > reader goes 1 up, amount goes 1 up. + * > size goes 1 down, amount goes 1 down. + * + */ + + if ((_size - (writer - reader + 1)) <= amount) + { + if (skip_overwrite) + return false; + + do + { + Buffer_pointer extra(cache.reader); + extra.complete = (extra.complete + amount) % _size; + + if (update(cache.reader, extra)) + break; + } + while (true); + + ret = false; + } + + unsigned int wr1 = _size - writer + 1; /* writer is already 1 position after */ + unsigned int wr2 = amount - wr1; + +// fprintf(stderr, "%p> partial write: (%d/%d) %d/%d [%d/%d]\n", this, wr1, wr2, amount, _size, reader, writer); + + /* two partial writes (one at the end, another at the beginning) */ + memcpy((void *) &(buffer[dest]), (const void *) (value), _block * wr1); + memcpy((void *) (buffer), (const void *) &(value[wr1]), _block * wr2); + } + else + { + if (!reader_less && ((reader - writer) <= amount)) + { + if (skip_overwrite) + return false; + + do + { + Buffer_pointer extra(cache.reader); + extra.complete = (extra.complete + amount) % _size; + + if (update(cache.reader, extra)) + break; + } + while (true); + + ret = false; + } + +// fprintf(stderr, "%p> full write: a=%d/s=%d [r=%d/w=%d]\n", this, amount, _size, reader, writer); + + /* we are talking about buffers here, man! */ + memcpy((void *) &(buffer[dest]), (const void *) value, _block * amount); + } + + _pointers.writer.complete = ((dest + amount) % _size) + 1; + _pointers.writer.partial = 1; + +// fprintf(stderr, "%p> write end: %d [block=%d]\n", this, writer, _block); + + return ret; +} + +/* returns the number of itens that have been read */ +unsigned int Ringbuffer_traits::traits_consume(const char * buffer, char * value, unsigned int amount, bool atomic_mode) +{ + /* avoid using different values */ + Buffer_table cache = _pointers; + + const unsigned int writer = _pointers.writer.complete; + const unsigned int reader = _pointers.reader.complete; + + const bool writer_less = writer < reader; + + unsigned int total = 0; + + /* should we go around the buffer for reading? */ + if (writer_less && (reader + amount >= _size)) + { + total = std::min(_size - (reader - writer + 1), amount); + + if ((total == 0) || (atomic_mode && (total < amount))) + return 0; + + unsigned int rd1 = _size - reader; + unsigned int rd2 = total - rd1; + +// fprintf(stderr, "%p> partial read: (%d/%d) %d/%d [%d/%d]\n", this, rd1, rd2, total, _size, reader, writer); + + /* two partial consumes (one at the end, another at the beginning) */ + memcpy((void *) (value), (const void *) &(buffer[reader]), _block * rd1); + memcpy((void *) &(value[rd1]), (const void *) (buffer), _block * rd2); + } + else + { + total = std::min((!writer_less ? writer - (reader + 1) : amount), amount); + + if ((total == 0) || (atomic_mode && (total < amount))) + return 0; + +// fprintf(stderr, "%p> full read: %d/%d [%d/%d]\n", this, total, _size, reader, writer); + + /* we are talking about buffers here, man! */ + memcpy((void *) value, (const void *) &(buffer[reader]), _block * total); + } + + do + { + /* jump the reader forward */ + Buffer_pointer index((cache.reader.complete + total) % _size); + + if (update(cache.reader, index)) + break; + } + while (true); + +// fprintf(stderr, "%p> read end: %d [block=%d]\n", this, reader, _block); + + return total; +} + +/********** TWO-PHASE BUFFER FUNCTIONS ***********/ + +/* returns the number of itens that have been read */ +unsigned int Ringbuffer_traits::traits_consume_begins(const char * buffer, char * value, unsigned int amount, bool atomic_mode) +{ + Buffer_table cache = _pointers; + + /* avoid using different values */ + const unsigned int reader = cache.reader.complete; + const unsigned int writer = cache.writer.complete; + + const bool writer_less = writer < reader; + + unsigned int total = 0; + + /* should we go around the buffer for reading? */ + if (writer_less && (reader + amount >= _size)) + { + total = std::min(_size - (reader - writer + 1), amount); + + if ((total == 0) || (atomic_mode && (total < amount))) + return 0; + + unsigned int rd1 = _size - reader; + unsigned int rd2 = total - rd1; + +// fprintf(stderr, "%p> partial read: (%d/%d) %d/%d [%d/%d]\n", this, rd1, rd2, total, _size, reader, writer); + + /* two partial consumes (one at the end, another at the beginning) */ + memcpy((void *) (value), (const void *) &(buffer[reader]), _block * rd1); + memcpy((void *) &(value[rd1]), (const void *) (buffer), _block * rd2); + } + else + { + total = std::min((!writer_less ? writer - (reader + 1) : amount), amount); + + if ((total == 0) || (atomic_mode && (total < amount))) + return 0; + +// fprintf(stderr, "%p> full read: %d/%d [%d/%d]\n", this, total, _size, reader, writer); + + /* we are talking about buffers here, man! */ + memcpy((void *) value, (const void *) &(buffer[reader]), _block * total); + } + +// fprintf(stderr, "%p> read end: %d [%d]\n", this, _reader, _reader_partial); + + return total; +} + +bool Ringbuffer_traits::traits_consume_commit(unsigned int amount) +{ + /* avoid using different values */ + Buffer_table cache = _pointers; + + const unsigned int writer = cache.writer.complete; + const unsigned int reader = cache.reader.complete; + + const bool writer_less = writer < reader; + + unsigned int total = 0; + + /* should we go around the buffer for reading? */ + if (writer_less && (reader + amount >= _size)) + { + total = std::min(_size - (reader - writer + 1), amount); + + if (total < amount) + return false; + +// fprintf(stderr, "%p> partial read: (%d/%d) %d/%d [%d/%d]\n", this, rd1, rd2, total, _size, reader, writer); + } + else + { + total = std::min((!writer_less ? writer - (reader + 1) : amount), amount); + + if (total < amount) + return false; + +// fprintf(stderr, "%p> full read: %d/%d [%d/%d]\n", this, total, _size, reader, writer); + } + + do + { + /* jump the reader forward */ + Buffer_pointer index(cache.reader); + index.complete = (index.complete + total) % _size; + + if (update(cache.reader, index)) + break; + } + while (true); + +// fprintf(stderr, "%p> read end: %d [%d]\n", this, _reader, _reader_partial); + + return true; +} + +/********** PARTIAL BUFFER FUNCTIONS (bytes) ***********/ + +/* writes everything or nothing */ +bool Ringbuffer_traits::traits_provide_partial(char * buffer, const char * value, unsigned int amount) +{ + /* avoid using different values */ + Buffer_table cache = _pointers; + + const unsigned int reader = (cache.reader.complete * _block) + cache.reader.partial; + const unsigned int writer = ((cache.writer.complete - 1) * _block) + cache.writer.partial; + + const unsigned int size = _size * _block; + const unsigned int dest = writer - 1; + +// fprintf(stderr, "%p> provide partial: %d/%d [%d/%d]\n", this, reader, writer, amount, size); + + const bool reader_less = reader < writer; + + /* should we go around the buffer for writing? */ + if (reader_less && ((writer + amount) > size)) + { + /* Documentation of the formula used in the 'if' below. + * + * [0|1|2|3|4|5|6|7] => size=8 + * | | + * reader | + * writer + * + * => writer has places [5,6,7,0,1] to write (5 places). + * + * => 8 - (4-2+1) = 8 - (2+1) = 8 - 3 = 5 + * + * > writer goes 1 up, amount goes 1 down. + * > reader goes 1 up, amount goes 1 up. + * > size goes 1 down, amount goes 1 down. + * + */ + + if ((size - (writer - reader + 1)) <= amount) + return false; + + unsigned int wr1 = size - writer + 1; /* writer is already 1 position after */ + unsigned int wr2 = amount - wr1; + +// fprintf(stderr, "%p> p partial write: (%d/%d) %d/%d [%d/%d]\n", this, wr1, wr2, amount, size, reader, writer); + + /* two partial writes (one at the end, another at the beginning) */ + memcpy((void *) &(buffer[dest]), (const void *) (value), wr1); + memcpy((void *) (buffer), (const void *) &(value[wr1]), wr2); + } + else + { + if (!reader_less && ((reader - writer) <= amount)) + return false; + +// fprintf(stderr, "%p> p full write: %d/%d [r=%d/w=%d]\n", this, amount, size, reader, writer); + + /* we are talking about buffers here, man! */ + memcpy((void *) &(buffer[dest]), (const void *) value, amount); + } + + unsigned int new_writer = ((dest + amount) % size) + 1; + + /* update "full length position" */ + _pointers.writer.complete = (unsigned int)floor((double) new_writer / (double)_block)+1; + _pointers.writer.partial = (unsigned short)(new_writer % _block); + +// fprintf(stderr, "%p> p write end: %d [block=%d]\n", this, new_writer, _block); + + return true; +} + +/* returns the number of bytes that have been read */ +unsigned int Ringbuffer_traits::traits_consume_partial(const char * buffer, char * value, unsigned int amount) +{ + /* avoid using different values */ + Buffer_table cache = _pointers; + + const unsigned int writer = ((cache.writer.complete - 1) * _block) + cache.writer.partial; + const unsigned int reader = (cache.reader.complete * _block) + cache.reader.partial; + + const unsigned int size = _size * _block; + +// fprintf(stderr, "%p> consume partial: %d/%d [%d/%d]\n", this, reader, writer, amount, size); + + const bool writer_less = writer < reader; + + unsigned int total = 0; + + /* should we go around the buffer for reading? */ + if (writer_less && (reader + amount >= size)) + { + total = std::min(size - (reader - writer + 1), amount); + + if (total == 0) + return 0; + + unsigned int rd1 = size - reader; + unsigned int rd2 = total - rd1; + +// fprintf(stderr, "%p> p partial read: (%d/%d) %d/%d [%d/%d]\n", this, rd1, rd2, total, size, reader, writer); + + /* two partial consumes (one at the end, another at the beginning) */ + memcpy((void *) (value), (const void *) &(buffer[reader]), rd1); + memcpy((void *) &(value[rd1]), (const void *) (buffer), rd2); + } + else + { + total = std::min((writer_less ? amount : writer - (reader + 1)), amount); + + if (total == 0) + return 0; + +// fprintf(stderr, "%p> p full read: %d/%d [r=%d/w=%d]\n", this, total, size, reader, writer); + + /* we are talking about buffers here, man! */ + memcpy((void *) value, (const void *) &(buffer[reader]), total); + } + + do + { + unsigned int new_reader = (((cache.reader.complete * _block) + cache.reader.partial) + total) % size; + + /* jump the reader forward */ + Buffer_pointer index((unsigned int)floor((double)new_reader / (double)_block), + (unsigned short)(new_reader % _block)); + + if (update(cache.reader, index)) + { +// fprintf(stderr, "%p> p read end: %d [block=%d]\n", this, new_reader, _block); + break; + } + } + while (true); + + return total; +} + + + +/********** IO FUNCTIONS **********/ + +/* returns the number of items written to from buffer to stream */ +unsigned int Ringbuffer_traits::traits_put(const char * buffer, std::ostream &fd, unsigned int amount) +{ + /* avoid using different values */ + Buffer_table cache = _pointers; + + const unsigned int reader = cache.reader.complete; + const unsigned int writer = cache.writer.complete; + + const bool writer_less = writer < reader; + + unsigned int total = 0; + + /* should we go around the buffer for reading? */ + if (writer_less && (reader + amount >= _size)) + { + total = std::min(_size - (reader - writer + 1), amount); + + if (total == 0) + return 0; + + unsigned int rd1 = _size - reader; + unsigned int rd2 = total - rd1; + +// fprintf(stderr, "%p> partial read: (%d/%d) %d/%d [%d/%d]\n", this, rd1, rd2, total, _size, reader, writer); + + /* two partial consumes (one at the end, another at the beginning) */ + fd.write((const char *) &(buffer[reader]), _block * rd1); + fd.write((const char *) (buffer), _block * rd2); + } + else + { + total = std::min((!writer_less ? writer - (reader + 1) : amount), amount); + + if (total == 0) + return 0; + +// fprintf(stderr, "%p> full read: %d/%d [%d/%d]\n", this, total, _size, reader, writer); + + /* we are talking about buffers here, man! */ + fd.write((const char *) &(buffer[reader]), _block * total); + } + + do + { + /* jump the reader forward */ + Buffer_pointer index(cache.reader); + index.complete = (index.complete + total) % _size; + + if (update(cache.reader, index)) + break; + } + while (true); + + return total; +} + +/* returns number of items read from stream to buffer */ +unsigned int Ringbuffer_traits::traits_get(char * buffer, std::istream &fd, unsigned int amount) +{ + /* avoid using different values */ + Buffer_table cache = _pointers; + + const unsigned int reader = cache.reader.complete; + const unsigned int writer = cache.writer.complete; + + const unsigned int dest = writer - 1; + + const bool reader_less = reader < writer; + + unsigned int real_amount = 0; + + /* should we go around the buffer for writing? */ + if (reader_less && ((writer + amount) > _size)) + { + /* Documentation of the formula used in the 'if' below. + * + * [0|1|2|3|4|5|6|7] => size=8 + * | | + * reader | + * writer + * + * => writer has places [5,6,7,0,1] to write (5 places). + * + * => 8 - (4-2+1) = 8 - (2+1) = 8 - 3 = 5 + * + * > writer goes 1 up, amount goes 1 down. + * > reader goes 1 up, amount goes 1 up. + * > size goes 1 down, amount goes 1 down. + * + */ + + if ((_size - (writer - reader + 1)) <= amount) + return false; + + unsigned int wr1 = _size - writer + 1; /* writer is already 1 position after */ + unsigned int wr2 = amount - wr1; + +// fprintf(stderr, "%p> partial write: (%d/%d) %d/%d [%d/%d]\n", this, wr1, wr2, amount, _size, reader, writer); + + unsigned int char_amount = 0; + + /* one partial write on the buffer (at the end) */ + fd.read((char *) &(buffer[dest]), _block * wr1); + char_amount += fd.gcount(); + + if (fd.gcount() == (int)(_block * wr1)) + { + /* another partial write on the buffer (at the beginning) */ + fd.read((char *) (buffer), _block * wr2); + char_amount += fd.gcount(); + } + + real_amount = char_amount / _block; + } + else + { + if (!reader_less && ((reader - writer) <= amount)) + return false; + +// fprintf(stderr, "%p> full write: %d/%d [%d/%d]\n", this, amount, _size, reader, writer); + + /* we are talking about buffers here, man! */ + fd.read((char *) &(buffer[dest]), _block * amount); + + real_amount = fd.gcount() / _block; + } + + _pointers.writer.complete = ((dest + real_amount) % _size) + 1; + _pointers.writer.partial = 1; + + return real_amount; +} diff --git a/src/mod/endpoints/mod_khomp/commons/ringbuffer.hpp b/src/mod/endpoints/mod_khomp/commons/ringbuffer.hpp new file mode 100644 index 0000000000..39f8ffe8fb --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/ringbuffer.hpp @@ -0,0 +1,416 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +/* WARNING: This is a generic ringbuffer abstraction, which works for single-sized elements, + partial elements, single/multi-elements read/writes. It is not wise to mix some + functions (partial element write / full element write), since it was not designed + with this use in mind. + + Also, it works only for single-reader + single-writer, since it does not depends + on external mutex functions. + */ + +#include + +#include +#include + +#include +#include + +#ifndef _RINGBUFFER_HPP_ +#define _RINGBUFFER_HPP_ + +struct Buffer_pointer +{ + Buffer_pointer(unsigned int _complete = 0u, unsigned short _partial = 0u) + : complete(_complete), partial(_partial) + {}; + + Buffer_pointer(const Buffer_pointer & o) + : complete(o.complete), partial(o.partial) + {}; + + Buffer_pointer(const volatile Buffer_pointer & o) + : complete(o.complete), partial(o.partial) + {}; + + void operator=(const volatile Buffer_pointer o) + { + complete = o.complete; + partial = o.partial; + } + + void operator=(const Buffer_pointer o) volatile + { + complete = o.complete; + partial = o.partial; + } + + bool operator==(const Buffer_pointer & o) + { + return (complete == o.complete && partial == o.partial); + } + + unsigned int complete:20; + unsigned short partial:12; +} +__attribute__((packed)); + +struct Buffer_table +{ + Buffer_table() + : reader(0,0), + writer(1,1) + {}; + + Buffer_table(const Buffer_table & o) + : reader(o.reader), writer(o.writer) + {}; + + Buffer_table(const volatile Buffer_table & o) + : reader(o.reader), writer(o.writer) + {}; + + void operator=(const volatile Buffer_table o) + { + reader = o.reader; + writer = o.writer; + } + + void operator=(const Buffer_table o) volatile + { + reader = o.reader; + writer = o.writer; + } + + bool operator==(const Buffer_table & o) + { + return (reader == o.reader && writer == o.writer); + } + + Buffer_pointer reader; + Buffer_pointer writer; +} +__attribute__((packed)); + +struct Ringbuffer_traits +{ + Ringbuffer_traits(unsigned int block, unsigned int size) + : _block(block), _size(size) + {}; + + bool traits_provide( char *, const char *, unsigned int, bool); + unsigned int traits_consume(const char *, char *, unsigned int, bool); + + unsigned int traits_consume_begins(const char *, char *, unsigned int, bool); + bool traits_consume_commit(unsigned int); + + bool traits_provide_partial( char *, const char *, unsigned int); + unsigned int traits_consume_partial(const char *, char *, unsigned int); + + unsigned int traits_get( char *, std::istream &, unsigned int); + unsigned int traits_put(const char *, std::ostream &, unsigned int); + + bool update(Buffer_pointer & cache, Buffer_pointer & update) + { + return Atomic::doCAS(&(_pointers.reader), &cache, update); + } + + protected: + const unsigned int _block; + const unsigned int _size; + + volatile Buffer_table _pointers; +}; + +template +struct Ringbuffer: protected Ringbuffer_traits, public NonCopyable +{ + struct BufferFull {}; + struct BufferEmpty {}; + + Ringbuffer(unsigned int size) + : Ringbuffer_traits(sizeof(T), size) + { + _buffer = new T[_size]; + _malloc = true; + }; + + Ringbuffer(unsigned int size, T * buffer) + : Ringbuffer_traits(sizeof(T), size) + { + _buffer = buffer; + _malloc = false; + }; + + ~Ringbuffer() + { + if (_malloc) + delete[] _buffer; + } + + /***** GENERIC RANGE/INDEX CALCULATION FUNCTIONS *****/ + bool may_write(Buffer_table & cache) + { + const unsigned int r = cache.reader.complete; + const unsigned int w = cache.writer.complete; + + return (((r - w) != 1) && (!(r == 0 && w == _size))); + } + + bool may_read(Buffer_table & cache) + { + if ((cache.writer.complete - cache.reader.complete) == 1) + return false; + + return true; + } + + unsigned int writer_next(Buffer_pointer & cache, Buffer_pointer & index) + { + unsigned int dest = cache.complete - 1, + temp = cache.complete + 1; + + if (temp > _size) index.complete = 1; + else index.complete = temp; + + index.partial = 1; + + return dest; + }; + + void reader_next(Buffer_pointer & cache, Buffer_pointer & index) + { + unsigned int temp = cache.complete + 1; + + if (temp == _size) index.complete = 0; + else index.complete = temp; + + index.partial = 0; + } + + /***** BUFFER FUNCTIONS *****/ + + bool provide(const T & value) + { + Buffer_table cache = _pointers; + Buffer_pointer index = _pointers.writer; + + if (!may_write(cache)) + return false; + +// fprintf(stderr, "%p> provide %d/%d!\n", this, reader, writer); + + unsigned int dest = writer_next(cache.writer, index); + + _buffer[dest] = value; + + _pointers.writer = index; + +// fprintf(stderr, "%p> write: %d/%d [%d/%d]\n", this, _pointers.reader, _pointers.writer, _pointers.reader_partial, _pointers.writer_partial); + + return true; + } + + bool consume(T & value) + { + Buffer_table cache = _pointers; + Buffer_pointer index = _pointers.reader; + + if (!may_read(cache)) + return false; + +// fprintf(stderr, "%p> consume %d/%d!\n", this, reader, writer); + + value = _buffer[index.complete]; + + do + { + reader_next(cache.reader, index); + + if (update(cache.reader, index)) + break; + + cache.reader = index; + } + while (true); + +// fprintf(stderr, "%p> read: %d/%d [%d/%d]\n", this, _pointers.reader, _pointers.writer, _pointers.reader_partial, _pointers.writer_partial); + + return true; + } + + /* writes everything or nothing */ + inline bool provide(const T * value, unsigned int amount, bool skip_overwrite = true) + { + return traits_provide((char *)_buffer, (const char *) value, amount, skip_overwrite); + } + + /* returns the number of items that have been read (atomic_mode == true means 'all or nothing') */ + inline unsigned int consume(T * value, unsigned int amount, bool atomic_mode = false) + { + return traits_consume((const char *)_buffer, (char *) value, amount, atomic_mode); + } + + /***** TWO-PHASE BUFFER FUNCTIONS *****/ + + /* returns the number of items that have been read (atomic_mode == true means 'all or nothing') */ + inline unsigned int consume_begins(T * value, unsigned int amount, bool atomic_mode = false) + { + return traits_consume_begins((const char *)_buffer, (char *) value, amount, atomic_mode); + } + + /* returns true if we could commit that much of buffer (use only after consume_begins). * + * note: you may commit less bytes that have been read to keep some data inside the buffer */ + inline bool consume_commit(unsigned int amount) + { + return traits_consume_commit(amount); + } + + /***** TWO-PHASE SINGLE-ELEMENT BUFFER FUNCTIONS *****/ + + T & provider_start(void) + { + Buffer_table cache = _pointers; + + if (!may_write(cache)) + throw BufferFull(); + + unsigned writer = _pointers.writer.complete - 1; + +// fprintf(stderr, "%p> provider start %d/%d!\n", this, reader, writer); + + return _buffer[writer]; + } + + void provider_commit(void) + { + unsigned int temp = _pointers.writer.complete + 1; + +// fprintf(stderr, "%p> provider commit %d!\n", this, temp); + + if (temp > _size) + temp = 1; + + _pointers.writer.complete = temp; + _pointers.writer.partial = 1; + +// fprintf(stderr, "%p> write: %d/%d [%d/%d]\n", this, _pointers.reader, _pointers.writer, _pointers.reader_partial, _pointers.writer_partial); + } + + T & consumer_start(void) + { + Buffer_table cache = _pointers; + + if (!may_read(cache)) + throw BufferEmpty(); + + unsigned int reader = _pointers.reader.complete; + +// fprintf(stderr, "%p> consumer start %d/%d!\n", this, reader, writer); + + return _buffer[reader]; + } + + void consumer_commit(void) + { + Buffer_pointer cache = _pointers.reader; + Buffer_pointer index(cache); + + do + { + reader_next(cache, index); + + if (update(cache, index)) + break; + + cache = index; + } + while (true); + +// fprintf(stderr, "%p> consumer commit %d!\n", this, temp); + +// fprintf(stderr, "%p> read: %d/%d [%d/%d]\n", this, _pointers.reader, _pointers.writer, _pointers.reader_partial, _pointers.writer_partial); + } + + /* writes everything or nothing, but works on bytes (may write incomplete elements) */ + /* WARNING: do not mix this with full element provider */ + inline bool provider_partial(const char *buffer, unsigned int amount) + { + return traits_provide_partial((char *)_buffer, buffer, amount); + } + + /* returns the number of bytes that have been read (may read incomplete elements) */ + /* WARNING: do not mix this with full element consumer */ + inline unsigned int consumer_partial(char *buffer, unsigned int amount) + { + return traits_consume_partial((const char *)_buffer, buffer, amount); + } + + /***** IO FUNCTIONS *****/ + + /* returns the number of items written to from buffer to stream */ + inline unsigned int put(std::ostream &fd, unsigned int amount) + { + return traits_put((char *)_buffer, fd, amount); + } + + /* returns number of items read from stream to buffer */ + inline unsigned int get(std::istream &fd, unsigned int amount) + { + return traits_get((const char *)_buffer, fd, amount); + } + + void clear() + { + _pointers.reader.complete = 0; + _pointers.reader.partial = 0; + _pointers.writer.complete = 1; + _pointers.writer.partial = 1; + } + + protected: + T * _buffer; + bool _malloc; +}; + +#endif /* _RINGBUFFER_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/saved_condition.cpp b/src/mod/endpoints/mod_khomp/commons/saved_condition.cpp new file mode 100644 index 0000000000..4c9f80f47f --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/saved_condition.cpp @@ -0,0 +1,46 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + + +#include + +#include COMMONS_INCLUDE(saved_condition.cpp) + diff --git a/src/mod/endpoints/mod_khomp/commons/saved_condition.hpp b/src/mod/endpoints/mod_khomp/commons/saved_condition.hpp new file mode 100644 index 0000000000..dcfd22423d --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/saved_condition.hpp @@ -0,0 +1,61 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _SAVED_CONDITION_COMMON_HPP_ +#define _SAVED_CONDITION_COMMON_HPP_ + +#include + +//#include + +struct SavedConditionCommon +{ + SavedConditionCommon() : _signaled(false) {} + + protected: + bool _signaled; +}; + + +#include COMMONS_INCLUDE(saved_condition.hpp) + +#endif /* _SAVED_CONDITION_COMMON_HPP_ */ + diff --git a/src/mod/endpoints/mod_khomp/commons/scoped_lock.hpp b/src/mod/endpoints/mod_khomp/commons/scoped_lock.hpp new file mode 100644 index 0000000000..a85627f3cd --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/scoped_lock.hpp @@ -0,0 +1,95 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +struct ScopedLockBasic +{ + ScopedLockBasic(void) + : _locked(true) {}; + + ScopedLockBasic(bool locked) + : _locked(locked) {}; + + virtual ~ScopedLockBasic() {}; + + protected: + bool _locked; +}; + + +struct ScopedLock : public ScopedLockBasic +{ + struct LockFailed {}; + + ScopedLock(SimpleLock & mutex) + : ScopedLockBasic(false), _mutex(mutex) + { + switch (_mutex.lock()) + { + case SimpleLock::ISINUSE: + case SimpleLock::FAILURE: + throw LockFailed(); + default: + break; + } + + _locked = true; + } + + ~ScopedLock() + { + unlock(); + } + + void unlock() + { + if (_locked) + { + _locked = false; + _mutex.unlock(); + } + } + + protected: + SimpleLock & _mutex; +}; + diff --git a/src/mod/endpoints/mod_khomp/commons/simple_lock.hpp b/src/mod/endpoints/mod_khomp/commons/simple_lock.hpp new file mode 100644 index 0000000000..4f6619f456 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/simple_lock.hpp @@ -0,0 +1,104 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _SIMPLE_LOCK_COMMON_HPP_ +#define _SIMPLE_LOCK_COMMON_HPP_ + +#include + +#include +#include + +#include + +/* This struct uses static polymorphism, and derived classes should implement * + * the "lock/trylock/unlock()" methods for correct code compilation. * + * The base class also features reference counting, so derived classes should * + * implement the "unreference()" method for releasing resources. */ + +template < typename Implementor > +struct SimpleLockCommon: NEW_REFCOUNTER( SimpleLockCommon < Implementor > ) +{ + friend class ReferenceCounter < SimpleLockCommon < Implementor > >; + + typedef enum + { + ISINUSE = 0, // operation not succeded (no error) + SUCCESS = 1, // operation succeded (no error) + FAILURE = 2, // mutex or state is somehow invalid (error! run for your life!) + } + Result; + + SimpleLockCommon() + {}; + + SimpleLockCommon(const SimpleLockCommon & o) + : INC_REFCOUNTER(o, SimpleLockCommon) + {}; + + virtual ~SimpleLockCommon() + {}; + + inline Result lock() + { + return static_cast(this)->lock(); + } + + inline Result trylock() + { + return static_cast(this)->trylock(); + } + + inline void unlock() + { + static_cast(this)->unlock(); + } + + protected: + void unreference(void) + { + static_cast(this)->unreference(); + } +}; + +#include COMMONS_INCLUDE(simple_lock.hpp) + +#endif /* _SIMPLE_LOCK_COMMON_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/strings.cpp b/src/mod/endpoints/mod_khomp/commons/strings.cpp new file mode 100644 index 0000000000..5e1cbc7004 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/strings.cpp @@ -0,0 +1,247 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +void Strings::Merger::add(std::string s) +{ + _list.push_back(s); +}; + +std::string Strings::Merger::merge(const std::string & sep) +{ + list_type::iterator i = _list.begin(); + + std::string res; + + if (i != _list.end()) + { + res += (*i); + ++i; + }; + + while (i != _list.end()) + { + res += sep; + res += (*i); + ++i; + } + + return res; +}; + +std::string Strings::Merger::merge(const char *sep) +{ + std::string ssep(sep); + return merge(ssep); +} + +unsigned int Strings::tokenize(const std::string & str, Strings::vector_type & tokens, + const std::string & delims, long int max_tokens, bool keep_empty) +{ + std::string::size_type base = 0; + + std::string::size_type init = str.find_first_not_of(delims, 0); + std::string::size_type fini = str.find_first_of(delims, init); + + long int cur_token = 1; + + while (std::string::npos != init) + { + if (keep_empty && base < init) + { + std::string::size_type cur_empty = init - base; + + while (cur_empty && cur_token < max_tokens) + { + tokens.push_back(""); + + ++cur_token; + --cur_empty; + } + } + + if (std::string::npos != fini && cur_token < max_tokens) + { + base = fini + 1; + + tokens.push_back(str.substr(init, fini - init)); + ++cur_token; + } + else + { + base = str.size(); // find_first_of(delims, init); + + tokens.push_back(str.substr(init, str.size() - init)); + break; + } + + init = str.find_first_not_of(delims, fini); + fini = str.find_first_of(delims, init); + } + + if (keep_empty && base != str.size()) + { + std::string::size_type cur_empty = str.size() - base + 1; + + while (cur_empty && cur_token < max_tokens) + { + tokens.push_back(""); + + ++cur_token; + --cur_empty; + } + + if (cur_empty) + { + std::string::size_type pos = base + cur_empty - 1; + tokens.push_back(str.substr(pos, str.size() - pos)); + ++cur_token; + } + } + + return (cur_token - 1); +} + +bool Strings::toboolean(std::string str) +{ + std::string tmp(str); + + Strings::lower(tmp); + + if ((tmp == "true") || (tmp == "yes")) return true; + if ((tmp == "false") || (tmp == "no")) return false; + + throw invalid_value(str); +} + +long Strings::tolong(std::string str, int base) +{ + char *str_end = 0; + + unsigned long value = strtol(str.c_str(), &str_end, base); + + if (str_end && *str_end == 0) + return value; + + throw invalid_value(str); +} + +unsigned long Strings::toulong(std::string str, int base) +{ + char *str_end = 0; + + unsigned long value = strtoul(str.c_str(), &str_end, base); + + if (str_end && *str_end == 0) + return value; + + throw invalid_value(str); +} + +unsigned long long Strings::toulonglong(std::string str, int base) +{ +#if defined(_WINDOWS) || defined(_Windows) || defined(_WIN32) || defined(WIN32) + throw not_implemented(); +#else + char *str_end = 0; + + unsigned long long value = strtoull(str.c_str(), &str_end, base); + + if (str_end && *str_end == 0) + return value; + + throw invalid_value(str); +#endif +} + +double Strings::todouble(std::string str) +{ + char *str_end = 0; + + double value = strtod(str.c_str(), &str_end); + + if (str_end && *str_end == 0) + return value; + + throw invalid_value(str); +} + +std::string Strings::fromboolean(bool value) +{ + if (value) return "true"; + else return "false"; +} + +std::string Strings::lower(std::string str) +{ + std::string res; + + for (std::string::iterator i = str.begin(); i != str.end(); i++) + res += tolower((*i)); + + return res; +} + +std::string Strings::hexadecimal(std::string value) +{ + std::string result; + + for (std::string::iterator i = value.begin(); i != value.end(); i++) + { + if (i != value.begin()) + result += " "; + + result += STG(FMT("%2x") % (unsigned int)(*i)); + } + + return result; +} + +std::string Strings::trim(const std::string& str, const std::string& trim_chars) +{ + std::string result(str); + + result.erase( result.find_last_not_of( trim_chars ) + 1 ); + result.erase( 0, result.find_first_not_of( trim_chars ) ); + + return result; +} diff --git a/src/mod/endpoints/mod_khomp/commons/strings.hpp b/src/mod/endpoints/mod_khomp/commons/strings.hpp new file mode 100644 index 0000000000..056b9335c6 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/strings.hpp @@ -0,0 +1,106 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +#include +#include +#include + +#include + +#include + +/* Generic string funcions */ + +#ifndef _STRINGS_HPP_ +#define _STRINGS_HPP_ + +struct Strings +{ + typedef std::list list_type; + typedef std::vector vector_type; + + struct Merger + { + void add(std::string); + + std::string merge(const std::string &); + std::string merge(const char *); + + bool empty() { return _list.empty(); }; + + protected: + list_type _list; + }; + + public: + struct invalid_value + { + invalid_value(const char * value): _value(value) {}; + invalid_value(std::string value): _value(value) {}; + + std::string & value() { return _value; } + + protected: + std::string _value; + }; + + struct not_implemented {}; + + static unsigned int tokenize(const std::string &, vector_type &, const std::string & delims = ",;:", + long int max_toxens = LONG_MAX, bool keep_empty = true); + + static bool toboolean(std::string); + static std::string fromboolean(bool); + + static long tolong(std::string, int base = 10); + static unsigned long toulong(std::string, int base = 10); + static unsigned long long toulonglong(std::string, int base = 10); + static double todouble(std::string); + + static std::string lower(std::string); + static std::string hexadecimal(std::string); + + static std::string trim(const std::string&, const std::string& trim_chars = " \f\n\r\t\v"); +}; + +#endif // _STRINGS_HPP_ // diff --git a/src/mod/endpoints/mod_khomp/commons/tagged_union.hpp b/src/mod/endpoints/mod_khomp/commons/tagged_union.hpp new file mode 100644 index 0000000000..1616268c5f --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/tagged_union.hpp @@ -0,0 +1,307 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _TAGGED_UNION_HPP_ +#define _TAGGED_UNION_HPP_ + +#include + +#include +#include + +namespace Tagged +{ + struct EmptyUnion + { + friend class Value; + + EmptyUnion() + : _adjusted(false) {}; + + // copy constructor + EmptyUnion(const EmptyUnion & o) + : _adjusted(o._adjusted) {}; + + // copy assignment operator + EmptyUnion & operator=(const EmptyUnion & o) + { + _adjusted = o._adjusted; + return *this; + }; + + ~EmptyUnion() { _adjusted = false; }; + + bool operator==(const EmptyUnion & o) + { + return true; + }; + + public: + void clear(void) { _adjusted = false; }; + protected: + void setup(void) { _adjusted = true; }; + + protected: + bool value_set(void) { return false; }; + bool value_get(void) { return false; }; + + bool value_check(void) { return false; }; + + template < typename S > + bool value_visit(S & visitor, typename S::ReturnType & ret) + { + return false; + }; + + template < typename S > + bool value_visit_void(S & visitor) + { + return false; + }; + + bool adjusted() { return _adjusted; }; + + private: + bool _adjusted; + }; + + template < typename V, typename E = EmptyUnion > + struct Union: public E + { + friend class Value; + + // default constructor + Union() + : _value(0) {}; + + // constructor with initializer + template < typename U > + Union( U value ) + : _value(0) + { + set(value); + }; + + // copy constructor + Union(const Union & o) + : E(static_cast(o)), + _value( (o._value ? new const V(*(o._value)) : 0) ) + {}; + + // copy assignment operator + Union & operator=(const Union & o) + { + if (_value) + { + delete _value; + _value = 0; + } + + if (o._value) + { + _value = new const V(*(o._value)); + } + + E::operator=(static_cast(o)); + + return *this; + }; + + // destructor + ~Union() + { + if (_value) + { + delete _value; + _value = 0; + } + }; + + // equal sign operator + template < typename U > + void operator=(U value) + { + set(value); + } + + template < typename U > + bool check(void) + { + return value_check(static_cast(0)); + }; + + template < typename U > + const U & get(void) + { + const U * res = 0; + + if (!value_get(&res) || !res) + throw std::runtime_error("type mismatch"); + + return *res; + }; + + template < typename U > + void set(U val) + { + if (E::adjusted()) + clear(); + + if (!value_set(val)) + throw std::runtime_error("unable to set value of invalid type"); + }; + + template < typename S > + typename S::ReturnType visit(S visitor) + { + typename S::ReturnType ret; + + if (!value_visit(visitor, ret)) + throw std::runtime_error("unable to visit empty value"); + + return ret; + }; + + template < typename S > + void visit_void(S visitor) + { + if (!value_visit_void(visitor)) + throw std::runtime_error("unable to visit empty value"); + }; + + void clear() + { + if (_value) + { + delete _value; + _value = 0; + } + + E::clear(); + }; + + // compare (equal) operator + bool operator==(const Union & o) + { + bool are_equal = false; + + if (!_value && !(o._value)) + are_equal = true; + + if (_value && o._value) + are_equal = (*_value == *(o._value)); + + if (are_equal) + return E::operator==(static_cast(o)); + + return false; + }; + + // compare types + bool sameType(const Union & o) + { + if ((!(_value) && !(o._value)) || (_value && o._value)) + return E::operator==(static_cast(o)); + + return false; + }; + + protected: + using E::value_set; + using E::value_get; + + using E::value_check; + using E::value_visit; + using E::value_visit_void; + + bool value_set(V val) + { + _value = new const V(val); + E::setup(); + + return true; + }; + + bool value_get(const V ** val) + { + if (!_value) + return false; + + *val = _value; + return true; + } + + bool value_check(const V * const junk) + { + (void)junk; + return (_value != 0); + }; + + template < typename S > + bool value_visit(S & visitor, typename S::ReturnType & ret) + { + if (_value) + { + ret = visitor(*const_cast(_value)); + return true; + }; + + return E::value_visit(visitor, ret); + }; + + template < typename S > + bool value_visit_void(S & visitor) + { + if (_value) + { + visitor(*const_cast(_value)); + return true; + }; + + return E::value_visit_void(visitor); + }; + + private: + const V * _value; + }; +}; + +#endif /* _TAGGED_UNION_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/thread.hpp b/src/mod/endpoints/mod_khomp/commons/thread.hpp new file mode 100644 index 0000000000..e00d7c875a --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/thread.hpp @@ -0,0 +1,103 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _THREAD_COMMON_HPP_ +#define _THREAD_COMMON_HPP_ + +#include + +#include +//#include + +struct ThreadCommon +{ + protected: + template + struct DecomposeFuncPtr; + + template + struct DecomposeFuncPtr + { + typedef ReturnType Return; + }; + + template + struct DecomposeFuncPtr + { + typedef void Return; + }; + + template + struct DecomposeFuncPtr + { + typedef ReturnType Return; + }; + + template< typename FunctionType > + struct DecomposeFunction + { + typedef typename Select < IsClass< FunctionType >::Result, int, + typename DecomposeFuncPtr< FunctionType >::Return >::Result + Return; + }; + + public: + struct ThreadDataCommon + { + ThreadDataCommon() {} + + virtual ~ThreadDataCommon() {} + + virtual int run() = 0; + + ThreadCommon * _thread; + + void * _self; + void * _attribute; + }; + + ThreadCommon() {} +}; + + +#include COMMONS_INCLUDE(thread.hpp) + +#endif /* _THREAD_COMMON_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/timer.cpp b/src/mod/endpoints/mod_khomp/commons/timer.cpp new file mode 100644 index 0000000000..36e32f521a --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/timer.cpp @@ -0,0 +1,352 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +TimerTraits::TimerTraits() +: _thread((Thread*)0), _purify(false), _last_tick(0), _age_count(0), _shutdown(false) +{}; + +bool TimerTraits::start (void) +{ + _shutdown = false; + + _condition.reset(); + _finalized.reset(); + + if (!_thread) + { + _thread = new Thread(TimerTraits::loop_thread(this)); + _purify = true; + } + +#if defined(_WINDOWS) || defined(_Windows) || defined(_WIN32) || defined(WIN32) + // set priority ... +#else + pthread_attr_t attrs; + sched_param param; + + if (pthread_attr_init(&attrs) < 0) + return false; + + if (pthread_attr_setschedpolicy(&attrs, SCHED_RR) < 0) + return false; + + if (pthread_attr_getschedparam(&attrs, ¶m) < 0) + return false; + + param.sched_priority = sched_get_priority_max(SCHED_RR); + + if (pthread_attr_setschedparam(&attrs, ¶m) < 0) + return false; + + // set priority... + +// if (pthread_create(&_thread, &attrs, TimerTraits::loop_thread, NULL) < 0) +// return false; + + _thread->start(); +#endif + + return true; +} + +bool TimerTraits::stop (void) +{ + _shutdown = true; + + _condition.signal(); + + _finalized.wait(10000); /* 10 seconds max wait */ + + if (_thread && _purify) + { + delete _thread; + + _thread = (Thread *)0; + _purify = false; + } + + return true; +} + +//----------------------------------------- + +int TimerTraits::loop_thread::operator()(void) +{ + try + { + _timer->loop(); + } + catch( ... ) + { + /* something wrong happened! */ + } + + _timer->_finalized.signal(); + + return 0; +} + +void TimerTraits::execute(ControlSet::iterator init, const TimerTraits::Control & ctrl) +{ + volatile CallbackFuncType func = (volatile CallbackFuncType) ctrl._func; + volatile CallbackDataType data = (volatile CallbackDataType) ctrl._data; + + _timer_set.erase(init); + + _mutex.unlock(); + + func(data); +} + +void TimerTraits::loop (void) +{ + while (true) + { + if (_shutdown) break; + + _mutex.lock(); + + ControlSet::iterator init = _timer_set.begin(); + + if (init == _timer_set.end()) + { + _mutex.unlock(); + _condition.wait(); + } + else + { + const Control & ctrl = *init; + + unsigned int ts_now = TimerTraits::tick(); + + if (_age_count == ctrl._age) + { + if (ts_now < ctrl._msecs) + { + /* age is right, but it is not time to expire yet... */ + volatile unsigned int wait_time = ctrl._msecs - ts_now; + _mutex.unlock(); + _condition.wait(wait_time); /* expire - now */ + } + else + { + /* age is right, and we should expire! */ + execute(init, ctrl); /* called locked, return unlocked */ + } + } + else if (_age_count < ctrl._age) + { + /* age is not there yet (need some time to overlap)... */ + volatile unsigned int wait_time = (UINT_MAX - ts_now) + ctrl._msecs; + _mutex.unlock(); + _condition.wait(wait_time); /* MAX - now + expire */ + } + else + { + /* age has passed, we should have expired before! */ + execute(init, ctrl); /* called locked, return unlocked */ + } + } + } + + _finalized.signal(); +} + +unsigned int TimerTraits::tick() +{ +#if defined(_WINDOWS) || defined(_Windows) || defined(_WIN32) || defined(WIN32) + unsigned int tick = GetTickCount(); +#else + struct timespec ticks; + + // error condition, make the user notice this.. + if (clock_gettime(CLOCK_MONOTONIC, &ticks) < 0) + return 0; + + unsigned int tick = ( ticks.tv_sec * 1000 ) + ( ticks.tv_nsec / 1000000 ); +#endif + + if (_last_tick > tick) + ++_age_count; + + _last_tick = tick; + + return tick; +} + +//----------------------------------------- + +TimerTraits::Index TimerTraits::traits_add_unlocked (unsigned int msecs, const void * func, const void * data, unsigned int value) +{ + unsigned int ms_tick = TimerTraits::tick(); + + unsigned int ms_left = UINT_MAX - ms_tick; + unsigned int ms_real = msecs; + + unsigned int age_num = _age_count; + + if (ms_left < msecs) + { + ms_real -= ms_left; + ++age_num; + } + else + { + ms_real += ms_tick; + } + + ControlSet::iterator it = _timer_set.insert(Control(age_num,ms_real,func,data,value)); + + if (_timer_set.size() == 1 || _timer_set.begin() == it) + { + _condition.signal(); + }; + + return Index(age_num, ms_real, msecs, func, data, value); +} + +TimerTraits::Index TimerTraits::traits_add (unsigned int msecs, const void * func, const void * data, unsigned int value) +{ + _mutex.lock(); + + Index idx = traits_add_unlocked(msecs, func, data, value); + + _mutex.unlock(); + + return idx; +} + +bool TimerTraits::traits_restart (TimerTraits::Index & idx, bool force) +{ + bool ret = false; + + _mutex.lock(); + + if (idx.valid) + { + if (traits_del_unlocked(idx) || force) + { + idx = traits_add_unlocked(idx.delta, idx.func, idx.data, idx.value); + ret = true; + } + } + + _mutex.unlock(); + + return ret; +} + +bool TimerTraits::traits_del_unlocked (TimerTraits::Index & idx) +{ + bool ret = false; + + if (idx.valid) + { + ControlSet::iterator i = _timer_set.lower_bound(Control(idx.era, idx.msec)); + ControlSet::iterator j = _timer_set.upper_bound(Control(idx.era, idx.msec)); + + for (; i != j; i++) + { + const Control & ctrl = (*i); + + if ((idx.value && !(ctrl._value & idx.value))) + continue; + + if (((idx.func && ctrl._func == idx.func) || !idx.func) && ((idx.data && ctrl._data == idx.data) || !idx.data)) + { + if (_timer_set.begin() == i) + _condition.signal(); + + _timer_set.erase(i); + + ret = true; + break; + } + } + + idx.valid = false; + } + + return ret; +} + +bool TimerTraits::traits_del (TimerTraits::Index & idx) +{ + _mutex.lock(); + + bool ret = traits_del_unlocked(idx); + + _mutex.unlock(); + + return ret; +} + +bool TimerTraits::traits_del (const void * func, const void * data, unsigned int value) +{ + bool ret = false; + + _mutex.lock(); + + for (ControlSet::iterator i = _timer_set.begin(); i != _timer_set.end(); i++) + { + const Control & ctrl = (*i); + + if ((value && !(ctrl._value & value))) + continue; + + if (((func && ctrl._func == func) || !func) && ((data && ctrl._data == data) || !data)) + { + if (_timer_set.begin() == i) + _condition.signal(); + + _timer_set.erase(i); + + ret = true; + break; + } + } + + _mutex.unlock(); + + return ret; +} diff --git a/src/mod/endpoints/mod_khomp/commons/timer.hpp b/src/mod/endpoints/mod_khomp/commons/timer.hpp new file mode 100644 index 0000000000..382efa1645 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/timer.hpp @@ -0,0 +1,224 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#if defined(_WINDOWS) || defined(_Windows) || defined(_WIN32) || defined(WIN32) +#include +#else +#include +#endif + +#include + +#include +#include +#include +#include + +#ifndef _TIMER_HPP_ +#define _TIMER_HPP_ + +struct TimerTraits +{ + typedef bool (* CallbackFuncType)(const void * volatile); + typedef const void * CallbackDataType; + + TimerTraits(); + + virtual ~TimerTraits() {}; + + protected: + + /* pre-declaration, used below */ + struct ControlCompare; + + struct Control + { + Control(unsigned int age, unsigned int msecs, const void * func = 0, const void * data = 0, unsigned int value = 0) + : _age(age), _msecs(msecs), _func(func), _data(data), _value(value) {} + + unsigned int _age; + + unsigned int _msecs; + + const void * _func; + const void * _data; + + unsigned int _value; + }; + + struct ControlCompare + { + bool operator()(const Control & c1, const Control & c2) const + { + return (c1._age < c2._age ? true : c1._msecs < c2._msecs); + } + }; + + typedef std::multiset < Control, ControlCompare > ControlSet; + + public: + struct Index + { + Index(): era(0), msec(0), valid(false) {}; + + Index(unsigned int _era, unsigned int _msec, unsigned int _delta, const void * _func, const void * _data, unsigned int _value) + : era(_era), msec(_msec), delta(_delta), func(_func), data(_data), value(_value), valid(true) {}; + + unsigned int era; + unsigned int msec; + + unsigned int delta; + + const void * func; + const void * data; + + unsigned int value; + + bool valid; + + void reset(void) { era = 0; msec = 0; valid = false; }; + }; + + /* timer add/remove functions */ + Index traits_add (unsigned int msecs, const void * func, const void * data = 0, unsigned int value = 0); + + bool traits_restart (Index & idx, bool force); + + bool traits_del (Index & idx); + bool traits_del (const void * func, const void * data = 0, unsigned int value = 0); + + /* timer start/stop functions */ + bool start(void); + bool stop(void); + + protected: + Index traits_add_unlocked (unsigned int msecs, const void * func, const void * data, unsigned int value); + + bool traits_del_unlocked (Index & idx); + + protected: + void execute(ControlSet::iterator, const Control &); + + void loop(void); + + struct loop_thread + { + loop_thread(TimerTraits *timer) : _timer(timer) {}; + + int operator()(void); + + protected: + TimerTraits * _timer; + }; + + unsigned int tick(); + + /* variables */ + + SavedCondition _condition; + + SimpleLock _mutex; + Thread * _thread; + bool _purify; + + ControlSet _timer_set; + + unsigned int _last_tick; + unsigned int _age_count; + + SavedCondition _finalized; + bool _shutdown; +}; + +template < typename F, typename D > +struct TimerTemplate: NEW_REFCOUNTER(TimerTemplate< F, D >) +{ + typedef TimerTraits::Index Index; + typedef TimerTraits::Control Control; + + TimerTemplate() + : _timer(new TimerTraits()) + {}; + + TimerTemplate(const TimerTemplate< F, D > & o) + : INC_REFCOUNTER(o, TimerTemplate< F, D >), + _timer(o._timer) + {}; + + void unreference(void) + { + if (_timer) + delete _timer; + }; + + bool start() { return _timer->start(); } + bool stop() { return _timer->stop(); } + + inline Index add(unsigned int msecs, F * func, D data = 0, unsigned int value = 0) + { + return _timer->traits_add(msecs, (const void *)func, (void *)(data), value); + } + + inline bool restart(Index & idx, bool force = false) + { + return _timer->traits_restart(idx, force); + } + + inline bool del(Index & idx) + { + return _timer->traits_del(idx); + } + + inline bool del(F * func, D data, unsigned int value = 0) + { + return _timer->traits_del((const void *)func, (void *)(data), value); + } + + inline bool del(unsigned int value) + { + return _timer->traits_del((const void *)0, (void *)0, value); + } + + protected: + TimerTraits * _timer; +}; + +#endif /* _TIMER_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/types.hpp b/src/mod/endpoints/mod_khomp/commons/types.hpp new file mode 100644 index 0000000000..adbd8abe36 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/types.hpp @@ -0,0 +1,81 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef _TYPES_HPP_ +#define _TYPES_HPP_ + +/*** Used for conditional compilation based on K3L version ***/ + +#define K3L_AT_LEAST(major,minor,build) \ + (((k3lApiMajorVersion == major) && ((k3lApiMinorVersion == minor) && (k3lApiBuildVersion >= build)) || \ + ((k3lApiMajorVersion == major) && (k3lApiMinorVersion > minor))) || \ + (k3lApiMajorVersion > major)) + +#define K3L_EXACT(major,minor,build) \ + ((k3lApiMajorVersion == major) && (k3lApiMinorVersion == minor) && (k3lApiBuildVersion >= build)) + +/*** Used for checking information on classes and stuff.. ***/ + +template< typename T > +class IsClass +{ + protected: + template< typename X > static char ( &A( void(X::*)() ) )[1]; + template< typename X > static char ( &A( X ) )[2]; + public: + static bool const Result = sizeof( A< T >(0) ) == 1; +}; + +/*** Used for template metaprogramming ***/ + +template < bool Value, typename Then, typename Else > +struct Select +{ + typedef Then Result; +}; + +template < typename Then, typename Else > +struct Select < false, Then, Else > +{ + typedef Else Result; +}; + +#endif /* _TYPES_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/commons/variant.hpp b/src/mod/endpoints/mod_khomp/commons/variant.hpp new file mode 100644 index 0000000000..410a770a6e --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/variant.hpp @@ -0,0 +1,127 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include + +#include + +#ifndef _VARIANT_H_ +#define _VARIANT_H_ + +/* this is internal, should not be used by the user */ +struct NoArgumentDefined {}; + +template < typename UserReturnType, typename UserArgumentType = NoArgumentDefined > +struct VariantBaseType +{ + typedef UserReturnType ReturnType; + typedef UserArgumentType ArgumentType; + + virtual ~VariantBaseType() {}; + + virtual int which() = 0; + + virtual ReturnType visit(void) { return ReturnType(); }; + virtual ReturnType visit(ArgumentType) { return ReturnType(); }; +}; + +template < typename BaseType = VariantBaseType < void > > +struct Variant: NEW_REFCOUNTER(Variant < BaseType >) +{ + typedef typename BaseType::ReturnType ReturnType; + typedef typename BaseType::ArgumentType ArgumentType; + + struct InvalidType {}; + + Variant(BaseType * value, bool is_owner = false) + : _value(value), _is_owner(is_owner) {}; + + Variant(const Variant & v) + : INC_REFCOUNTER(v, Variant < BaseType >), + _value(v._value), _is_owner(v._is_owner) {}; + + virtual ~Variant() {}; + + void unreference() + { + if (_is_owner && _value) + { + delete _value; + _value = 0; + } + }; + + template < typename ValueType > + ValueType & get(void) + { + try + { + ValueType & ret = dynamic_cast < ValueType & > (*_value); + return ret; + } + catch (std::bad_cast & e) + { + throw InvalidType(); + } + }; + + int which() + { + return _value->which(); + } + + ReturnType visit(void) + { + return _value->visit(); + } + + ReturnType visit(ArgumentType arg) + { + return _value->visit(arg); + } + + protected: + BaseType * _value; + bool _is_owner; +}; + +#endif /* _VARIANT_H_ */ + diff --git a/src/mod/endpoints/mod_khomp/commons/verbose.cpp b/src/mod/endpoints/mod_khomp/commons/verbose.cpp new file mode 100644 index 0000000000..182d159ca1 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/verbose.cpp @@ -0,0 +1,3188 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include + +#define PRESENTATION_CHECK_RETURN(fmt, txtexact, txthuman) \ + { \ + switch(fmt) \ + { \ + case EXACT: return txtexact; \ + case HUMAN: return txthuman; \ + } \ + return txtexact; \ + } + +/********************************************/ + +std::string Verbose::channelStatus(int32 dev, int32 obj, int32 cs, Verbose::Presentation fmt) +{ + try + { + K3L_CHANNEL_CONFIG & config = _api.channel_config(dev, obj); + return Verbose::channelStatus(config.Signaling, cs, fmt); + } + catch (...) + { + return presentation(fmt, "", "Unknown"); + } +} + +#if K3L_AT_LEAST(2,0,0) +std::string Verbose::event(int32 obj, K3L_EVENT *ev, R2CountryType r2_country, Verbose::Presentation fmt) +#else +std::string Verbose::event(int32 obj, K3L_EVENT *ev, Verbose::Presentation fmt) +#endif +{ + try + { + K3L_CHANNEL_CONFIG & config = _api.channel_config(ev->DeviceId, obj); +#if K3L_AT_LEAST(2,0,0) + return Verbose::event(config.Signaling, obj, ev, r2_country, fmt); +#else + return Verbose::event(config.Signaling, obj, ev, fmt); +#endif + } + catch (...) + { +#if K3L_AT_LEAST(2,0,0) + return Verbose::event(ksigInactive, obj, ev, r2_country, fmt); +#else + return Verbose::event(ksigInactive, obj, ev, fmt); +#endif + } +} + +/********************************************/ + +std::string Verbose::echoLocation(KEchoLocation ec, Verbose::Presentation fmt) +{ + switch (ec) + { +#if K3L_AT_LEAST(1,5,4) + case kelNetwork: return presentation(fmt, "kelNetwork", "Network"); +#else + case kelE1: return presentation(fmt, "kelE1", "Network"); +#endif + case kelCtBus: return presentation(fmt, "kelCtBus", "CT-Bus"); + }; + + return presentation(fmt, "", "Unknown"); +}; + +std::string Verbose::echoCancellerConfig(KEchoCancellerConfig ec, Verbose::Presentation fmt) +{ + switch (ec) + { + case keccNotPresent: return presentation(fmt, "keccNotPresent", "Not Present"); + case keccOneSingleBank: return presentation(fmt, "keccOneSingleBank", "One, Single Bank"); + case keccOneDoubleBank: return presentation(fmt, "keccOneDoubleBank", "One, Double Bank"); + case keccTwoSingleBank: return presentation(fmt, "keccTwoSingleBank", "Two, Single Bank"); + case keccTwoDoubleBank: return presentation(fmt, "keccTwoDoubleBank", "Two, Double Bank"); + case keccFail: return presentation(fmt, "keccFail", "Failure"); + }; + + return presentation(fmt, "", "Unknown"); +}; + +// TODO: internal_deviceType / internal_deviceModel + +std::string Verbose::deviceName(KDeviceType dt, int32 model, Verbose::Presentation fmt) +{ + try + { + std::string value; + + value += internal_deviceType(dt); + value += "-"; + value += internal_deviceModel(dt, model); + + return value; + } + catch (internal_not_found & e) + { + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[type/model='%d/%d']") % (int)dt % (int)model), + STG(FMT("Unknown device type/model (%d/%d)") % (int)dt % (int)model)); + } +} + +std::string Verbose::deviceType(KDeviceType dt, Verbose::Presentation fmt) +{ + try + { + return internal_deviceType(dt); + } + catch (internal_not_found & e) + { + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[type='%d']") % (int)dt), + STG(FMT("Unknown device type (%d)") % (int)dt)); + } +} + +std::string Verbose::internal_deviceType(KDeviceType dt) +{ + switch (dt) + { + case kdtE1: return "K2E1"; + +#if K3L_AT_LEAST(1,6,0) + case kdtFXO: return "KFXO"; +#else + case kdtFX: return "KFXO"; +#endif + + case kdtConf: return "KCONF"; + case kdtPR: return "KPR"; + case kdtE1GW: return "KE1GW"; + +#if K3L_AT_LEAST(1,6,0) + case kdtFXOVoIP: return "KFXVoIP"; +#else + case kdtFXVoIP: return "KFXVoIP"; +#endif + +#if K3L_AT_LEAST(1,5,0) + case kdtE1IP: return "K2E1"; +#endif +#if K3L_AT_LEAST(1,5,1) + case kdtE1Spx: return "K2E1"; + case kdtGWIP: return "KGWIP"; +#endif + +#if K3L_AT_LEAST(1,6,0) + case kdtFXS: return "KFXS"; + case kdtFXSSpx: return "KFXS"; + case kdtGSM: return "KGSM"; + case kdtGSMSpx: return "KGSM"; +#endif + +#if K3L_AT_LEAST(2,1,0) + case kdtGSMUSB: return "KGSMUSB"; + case kdtGSMUSBSpx: return "KGSMUSB"; + + case kdtE1FXSSpx: return "KE1FXS"; + case kdtDevTypeCount: return "DevTypeCount"; +#endif + +#if K3L_EXACT(2,1,0) + case kdtReserved1: return "Reserved1"; +#endif + +#if K3L_AT_LEAST(2,2,0) + case kdtE1AdHoc: return "KE1AdHoc"; +#endif + } + + throw internal_not_found(); +} + +std::string Verbose::deviceModel(KDeviceType dt, int32 model, Verbose::Presentation fmt) +{ + try + { + return internal_deviceModel(dt, model); + } + catch (internal_not_found & e) + { + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[model='%d']") % (int)model), + STG(FMT("Unknown device model (%d)") % (int)model)); + } +} + +std::string Verbose::internal_deviceModel(KDeviceType dt, int32 model) +{ + switch (dt) + { + case kdtE1: + switch ((KE1DeviceModel)model) + { + case kdmE1600: return "600"; + case kdmE1600E: return "600E"; +#if K3L_AT_LEAST(2,0,0) + case kdmE1600EX: return "600EX"; +#endif + } + throw internal_not_found(); + +#if K3L_AT_LEAST(1,6,0) + case kdtFXO: + switch ((KFXODeviceModel)model) +#else + case kdtFX: + switch ((KFXDeviceModel)model) +#endif + { +#if K3L_AT_LEAST(1,6,0) + case kdmFXO80: return "80"; + case kdmFXOHI: return "HI"; + case kdmFXO160HI: return "160HI"; +#if K3L_AT_LEAST(2,1,0) + case kdmFXO240HI: return "240HI"; +#endif +#else + case kdmFXO80: return "80"; +#endif + } + + throw internal_not_found(); + + case kdtConf: + switch ((KConfDeviceModel)model) + { + case kdmConf240: return "240"; + case kdmConf120: return "120"; +#if K3L_AT_LEAST(2,0,0) + case kdmConf240EX: return "240EX"; + case kdmConf120EX: return "120EX"; +#endif + } + + throw internal_not_found(); + + case kdtPR: + switch ((KPRDeviceModel)model) + { +#if K3L_AT_LEAST(1,6,0) + case kdmPR300v1: return "300v1"; + case kdmPR300SpxBased: return "300S"; +#if K3L_AT_LEAST(2,0,0) + case kdmPR300EX: return "300EX"; +#endif + case kdmPR300: return "300"; + } +#endif + throw internal_not_found(); + +#if K3L_AT_LEAST(1,4,0) + case kdtE1GW: + switch ((KE1GWDeviceModel)model) + { +#if K3L_AT_LEAST(1,6,0) + case kdmE1GW640: return "640"; +#if K3L_AT_LEAST(2,0,0) + case kdmE1GW640EX: return "640EX"; +#endif +#else + case kdmE1600V: return "600V"; + case kdmE1600EV: return "600EV"; +#endif + } + + throw internal_not_found(); +#endif + +#if K3L_AT_LEAST(1,6,0) + case kdtFXOVoIP: + switch ((KFXOVoIPDeviceModel)model) + { + case kdmFXGW180: return "180"; + } + + throw internal_not_found(); + +#elif K3L_AT_LEAST(1,4,0) + case kdtFXVoIP: + switch ((KFXVoIPDeviceModel)model) + { + case kdmFXO80V: return "80V"; + } + + throw internal_not_found(); +#endif + +#if K3L_AT_LEAST(1,5,0) + case kdtE1IP: + switch ((KE1IPDeviceModel)model) + { +#if K3L_AT_LEAST(1,6,0) + case kdmE1IP: return "E1IP"; +#if K3L_AT_LEAST(2,0,0) + case kdmE1IPEX: return "E1IPEX"; +#endif +#else + case kdmE1600EG: return "600EG"; +#endif + } + + throw internal_not_found(); +#endif + +#if K3L_AT_LEAST(1,5,1) + case kdtE1Spx: + switch ((KE1SpxDeviceModel)model) + { + case kdmE1Spx: return "SPX"; + case kdm2E1Based: return "SPX-2E1"; +#if K3L_AT_LEAST(2,0,0) + case kdmE1SpxEX: return "SPXEX"; +#endif + } + throw internal_not_found(); + + case kdtGWIP: + switch ((KGWIPDeviceModel)model) + { +#if K3L_AT_LEAST(1,6,0) + case kdmGWIP: return "GWIP"; +#if K3L_AT_LEAST(2,0,0) + case kdmGWIPEX: return "GWIPEX"; +#endif +#else + case kdmGW600G: return "600G"; + case kdmGW600EG: return "600EG"; +#endif + } + + throw internal_not_found(); +#endif + +#if K3L_AT_LEAST(1,6,0) + case kdtFXS: + switch ((KFXSDeviceModel)model) + { + case kdmFXS300: return "300"; +#if K3L_AT_LEAST(2,0,0) + case kdmFXS300EX: return "300EX"; +#endif + } + + throw internal_not_found(); + + case kdtFXSSpx: + switch ((KFXSSpxDeviceModel)model) + { + case kdmFXSSpx300: return "SPX"; + case kdmFXSSpx2E1Based: return "SPX-2E1"; +#if K3L_AT_LEAST(2,0,0) + case kdmFXSSpx300EX: return "SPXEX"; +#endif + } + + throw internal_not_found(); + + case kdtGSM: + switch ((KGSMDeviceModel)model) + { + case kdmGSM: return "40"; +#if K3L_AT_LEAST(2,0,0) + case kdmGSMEX: return "40EX"; +#endif + } + + throw internal_not_found(); + + case kdtGSMSpx: + switch ((KGSMSpxDeviceModel)model) + { + case kdmGSMSpx: return "SPX"; +#if K3L_AT_LEAST(2,0,0) + case kdmGSMSpxEX: return "SPXEX"; +#endif + } + + throw internal_not_found(); + +#if K3L_AT_LEAST(2,1,0) + case kdtGSMUSB: + switch ((KGSMUSBDeviceModel)model) + { + case kdmGSMUSB: return "20"; + } + + throw internal_not_found(); + + case kdtGSMUSBSpx: + switch ((KGSMUSBSpxDeviceModel)model) + { + case kdmGSMUSBSpx: return "SPX"; + } + + throw internal_not_found(); + + case kdtE1FXSSpx: + switch ((KGSMSpxDeviceModel)model) + { + case kdmE1FXSSpx: return "SPX"; + case kdmE1FXSSpxEX: return "SPXEX"; + } + + throw internal_not_found(); +#if K3L_AT_LEAST(2,2,0) + case kdtE1AdHoc: + switch((KE1AdHocModel)model) + { + case kdmE1AdHoc100: return "E1AdHoc100"; + case kdmE1AdHoc100E: return "E1AdHoc100E"; + case kdmE1AdHoc240: return "E1AdHoc240"; + case kdmE1AdHoc240E: return "E1AdHoc240E"; + case kdmE1AdHoc400: return "E1AdHoc240"; + case kdmE1AdHoc400E: return "E1AdHoc240E"; + } + throw internal_not_found(); +#endif + +#if K3L_EXACT(2,1,0) + case kdtReserved1: +#endif + case kdtDevTypeCount: + throw internal_not_found(); + +#endif +#endif + } + + throw internal_not_found(); +} + +std::string Verbose::signaling(KSignaling sig, Verbose::Presentation fmt) +{ + switch (sig) + { + case ksigInactive: return presentation(fmt, "ksigInactive", "Inactive"); + case ksigAnalog: return presentation(fmt, "ksigAnalog", "FXO (analog)"); + case ksigContinuousEM: return presentation(fmt, "ksigContinuousEM", "E+M Continuous"); + case ksigPulsedEM: return presentation(fmt, "ksigPulsedEM", "E+M PUlsed"); + case ksigOpenCAS: return presentation(fmt, "ksigOpenCAS", "Open CAS"); + case ksigOpenR2: return presentation(fmt, "ksigOpenR2", "Open R2"); + case ksigR2Digital: return presentation(fmt, "ksigR2Digital", "R2/MFC"); + case ksigUserR2Digital: return presentation(fmt, "ksigUserR2Digital", "R2/Other"); +#if K3L_AT_LEAST(1,4,0) + case ksigSIP: return presentation(fmt, "ksigSIP", "SIP"); +#endif + +#if K3L_AT_LEAST(1,5,1) + case ksigOpenCCS: return presentation(fmt, "ksigOpenCCS", "Open CCS"); + case ksigPRI_EndPoint: return presentation(fmt, "ksigPRI_EndPoint", "ISDN Endpoint"); + case ksigPRI_Network: return presentation(fmt, "ksigPRI_Network", "ISDN Network"); + case ksigPRI_Passive: return presentation(fmt, "ksigPRI_Passive", "ISDN Passive"); +#endif +#if K3L_AT_LEAST(1,5,3) + case ksigLineSide: return presentation(fmt, "ksigLineSide", "Line Side"); +#endif +#if K3L_AT_LEAST(1,6,0) + case ksigAnalogTerminal: return presentation(fmt, "ksigAnalogTerminal", "FXS (analog)"); + case ksigGSM: return presentation(fmt, "ksigGSM", "GSM"); + case ksigCAS_EL7: return presentation(fmt, "ksigCAS_EL7", "CAS EL7"); + case ksigE1LC: return presentation(fmt, "ksigE1LC", "E1 LC"); +#endif +#if K3L_AT_LEAST(2,1,0) + case ksigISUP: return presentation(fmt, "ksigISUP", "ISUP"); +#endif +#if K3L_EXACT(2,1,0) + case ksigFax: return presentation(fmt, "ksigFax", "Fax"); +#endif +#if K3L_AT_LEAST(2,2,0) + case ksigISUPPassive: return presentation(fmt, "ksigISUPPassive", "ISUP Passive"); +#endif + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KSignaling='%d']") % (int)sig), + STG(FMT("Unknown signaling (%d)") % (int)sig)); +} + +std::string Verbose::systemObject(KSystemObject so, Verbose::Presentation fmt) +{ + switch (so) + { + case ksoLink: return presentation(fmt, "ksoLink", "Link"); + case ksoLinkMon: return presentation(fmt, "ksoLinkMon", "Link Monitor"); + case ksoChannel: return presentation(fmt, "ksoChannel", "Channel"); +#if K3L_AT_LEAST(2,1,0) + case ksoGsmChannel:return presentation(fmt, "ksoGsmChannel","GsmChannel"); +#endif + case ksoH100: return presentation(fmt, "ksoH100", "H.100"); + case ksoFirmware: return presentation(fmt, "ksoFirmware", "Firmware"); + case ksoDevice: return presentation(fmt, "ksoDevice", "Device"); + case ksoAPI: return presentation(fmt, "ksoAPI", "Software Layer"); + } + + return presentation(fmt, + STG(FMT("[KSystemObject='%d']") % (int)so), + STG(FMT("Unknown object (%d)") % (int)so)); +} + +std::string Verbose::mixerTone(KMixerTone mt, Verbose::Presentation fmt) +{ + switch (mt) + { + case kmtSilence: return presentation(fmt, "kmtSilence", "Silence"); + case kmtDial: return presentation(fmt, "kmtDial", "Dialtone begin"); + case kmtEndOf425: return presentation(fmt, "kmtEndOf425", "Dialtone end"); + case kmtBusy: return presentation(fmt, "kmtBusy", "Busy"); + case kmtFax: return presentation(fmt, "kmtFax", "Fax"); + case kmtVoice: return presentation(fmt, "kmtVoice", "Voice"); +#if K3L_AT_LEAST(1,5,0) + case kmtCollect: return presentation(fmt, "kmtCollect", "Collect Call"); +#endif +#if K3L_AT_LEAST(1,5,1) + case kmtEndOfDtmf: return presentation(fmt, "kmtEndOfDtmf", "DTMF end"); +#endif + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KMixerTone='%d']") % (int)mt), + STG(FMT("Unknonwn tone (%d)") % (int)mt)); +} + +std::string Verbose::mixerSource(KMixerSource ms, Verbose::Presentation fmt) +{ + switch (ms) + { + case kmsChannel: return presentation(fmt, "kmsChannel", "Channel"); + case kmsPlay: return presentation(fmt, "kmsPlay", "Player"); + case kmsGenerator: return presentation(fmt, "kmsGenerator", "Generator"); + case kmsCTbus: return presentation(fmt, "kmsCTbus", "CT-bus"); +#if (K3L_AT_LEAST(1,4,0) && !K3L_AT_LEAST(1,6,0)) + case kmsVoIP: return presentation(fmt, "kmsVoIP", "VoIP"); +#endif +#if K3L_AT_LEAST(1,6,0) + case kmsNoDelayChannel: return presentation(fmt, "kmsNoDelayChannel", "No delay channel"); +#endif + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KMixerSource='%d']") % (int)ms), + STG(FMT("Unknonwn source (%d)") % (int)ms)); +} + +std::string Verbose::channelFeatures(int32 flags, Verbose::Presentation fmt) +{ + if (0x00 != flags) + { + Strings::Merger strs; + + if (kcfDtmfSuppression & flags) strs.add(presentation(fmt, "DtmfSuppression", "DTMF Suppression")); + if (kcfCallProgress & flags) strs.add(presentation(fmt, "CallProgress", "Call Progress")); + if (kcfPulseDetection & flags) strs.add(presentation(fmt, "PulseDetection", "Pulse Detection")); + if (kcfAudioNotification & flags) strs.add(presentation(fmt, "AudioNotification", "Audio Notification")); + if (kcfEchoCanceller & flags) strs.add(presentation(fmt, "EchoCanceller", "Echo Canceller")); + if (kcfAutoGainControl & flags) strs.add(presentation(fmt, "AutoGainControl", "Input AGC")); + if (kcfHighImpEvents & flags) strs.add(presentation(fmt, "HighImpEvents", "High Impedance Events")); +#if K3L_AT_LEAST(1,6,0) + if (kcfCallAnswerInfo & flags) strs.add(presentation(fmt, "CallAnswerInfo", "Call Answer Info")); +#if !K3L_AT_LEAST(2,2,0) + if (kcfOutputVolume & flags) strs.add(presentation(fmt, "OutputVolume", "Output Volume")); +#endif + if (kcfPlayerAGC & flags) strs.add(presentation(fmt, "PlayerAGC", "Player AGC")); +#endif + + return presentation(fmt, + STG(FMT("kcf{%s}") % strs.merge(",")), + STG(FMT("%s") % strs.merge(", "))); + }; + + PRESENTATION_CHECK_RETURN(fmt, "", "No features"); +} + +std::string Verbose::seizeFail(KSeizeFail sf, Verbose::Presentation fmt) +{ + switch (sf) + { + case ksfChannelLocked: return presentation(fmt, "ksfChannelLocked", "Channel Locked"); + case ksfChannelBusy: return presentation(fmt, "ksfChannelBusy", "Channel Busy"); + case ksfIncomingChannel: return presentation(fmt, "ksfIncomingChannel", "Incoming Channel"); + case ksfDoubleSeizure: return presentation(fmt, "ksfDoubleSeizure", "Double Seizure"); + case ksfCongestion: return presentation(fmt, "ksfCongestion", "Congestion"); + case ksfNoDialTone: return presentation(fmt, "ksfNoDialTone", "No Dial Tone"); + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KSeizeFail='%d']") % (int)sf), + STG(FMT("Unknown seize fail (%d)") % (int)sf)); +} + +#if K3L_AT_LEAST(1,5,0) +std::string Verbose::internal_sipFailures(KSIP_Failures code, Verbose::Presentation fmt) +{ + switch (code) + { +#if K3L_AT_LEAST(1,6,0) + case kveResponse_200_OK_Success: return presentation(fmt, "kveResponse_200_OK_Success", "200 OK"); +#endif + case kveRedirection_300_MultipleChoices: return presentation(fmt, "kveRedirection_300_MultipleChoices", "300 Multiple Choices"); + case kveRedirection_301_MovedPermanently: return presentation(fmt, "kveRedirection_301_MovedPermanently", "301 Moved Permanently"); + case kveRedirection_302_MovedTemporarily: return presentation(fmt, "kveRedirection_302_MovedTemporarily", "302 Moved Temporarily"); + case kveRedirection_305_UseProxy: return presentation(fmt, "kveRedirection_305_UseProxy", "305 Use Proxy"); + case kveRedirection_380_AlternativeService: return presentation(fmt, "kveRedirection_380_AlternativeService", "380 Alternate Service"); + case kveFailure_400_BadRequest: return presentation(fmt, "kveFailure_400_BadRequest", "400 Bad Request"); + case kveFailure_401_Unauthorized: return presentation(fmt, "kveFailure_401_Unauthorized", "401 Unauthorized"); + case kveFailure_402_PaymentRequired: return presentation(fmt, "kveFailure_402_PaymentRequired", "402 Payment Required"); + case kveFailure_403_Forbidden: return presentation(fmt, "kveFailure_403_Forbidden", "403 Forbidden"); + case kveFailure_404_NotFound: return presentation(fmt, "kveFailure_404_NotFound", "404 Not Found"); + case kveFailure_405_MethodNotAllowed: return presentation(fmt, "kveFailure_405_MethodNotAllowed", "405 Method Not Allowed"); + case kveFailure_406_NotAcceptable: return presentation(fmt, "kveFailure_406_NotAcceptable", "406 Not Acceptable"); + case kveFailure_407_ProxyAuthenticationRequired: return presentation(fmt, "kveFailure_407_ProxyAuthenticationRequired", "407 Proxy Authentication Required"); + case kveFailure_408_RequestTimeout: return presentation(fmt, "kveFailure_408_RequestTimeout", "408 Request Timeout"); + case kveFailure_410_Gone: return presentation(fmt, "kveFailure_410_Gone", "410 Gone"); + case kveFailure_413_RequestEntityTooLarge: return presentation(fmt, "kveFailure_413_RequestEntityTooLarge", "413 Request Entity Too Large"); + case kveFailure_414_RequestURI_TooLong: return presentation(fmt, "kveFailure_414_RequestURI_TooLong", "414 Request URI Too Long"); + case kveFailure_415_UnsupportedMediaType: return presentation(fmt, "kveFailure_415_UnsupportedMediaType", "415 Unsupported Media Type"); + case kveFailure_416_UnsupportedURI_Scheme: return presentation(fmt, "kveFailure_416_UnsupportedURI_Scheme", "416 Unsupported URI Scheme"); + case kveFailure_420_BadExtension: return presentation(fmt, "kveFailure_420_BadExtension", "420 Bad Extension"); + case kveFailure_421_ExtensionRequired: return presentation(fmt, "kveFailure_421_ExtensionRequired", "421 Extension Required"); + case kveFailure_423_IntervalTooBrief: return presentation(fmt, "kveFailure_423_IntervalTooBrief", "423 Internal Too Brief"); + case kveFailure_480_TemporarilyUnavailable: return presentation(fmt, "kveFailure_480_TemporarilyUnavailable", "480 Temporarily Unavailable"); + case kveFailure_481_CallDoesNotExist: return presentation(fmt, "kveFailure_481_CallDoesNotExist", "481 Call Does Not Exist"); + case kveFailure_482_LoopDetected: return presentation(fmt, "kveFailure_482_LoopDetected", "482 Loop Detected"); + case kveFailure_483_TooManyHops: return presentation(fmt, "kveFailure_483_TooManyHops", "483 Too Many Hops"); + case kveFailure_484_AddressIncomplete: return presentation(fmt, "kveFailure_484_AddressIncomplete", "484 Address Incomplete"); + case kveFailure_485_Ambiguous: return presentation(fmt, "kveFailure_485_Ambiguous", "485 Ambiguous"); + case kveFailure_486_BusyHere: return presentation(fmt, "kveFailure_486_BusyHere", "486 Busy Here"); + case kveFailure_487_RequestTerminated: return presentation(fmt, "kveFailure_487_RequestTerminated", "487 Request Terminated"); + case kveFailure_488_NotAcceptableHere: return presentation(fmt, "kveFailure_488_NotAcceptableHere", "488 Not Acceptable Here"); + case kveFailure_491_RequestPending: return presentation(fmt, "kveFailure_491_RequestPending", "491 Request Pending"); + case kveFailure_493_Undecipherable: return presentation(fmt, "kveFailure_493_Undecipherable", "493 Undecipherable"); + case kveServer_500_InternalError: return presentation(fmt, "kveServer_500_InternalError", "500 Internal Error"); + case kveServer_501_NotImplemented: return presentation(fmt, "kveServer_501_NotImplemented", "501 Not Implemented"); + case kveServer_502_BadGateway: return presentation(fmt, "kveServer_502_BadGateway", "502 Bad Gateway"); + case kveServer_503_ServiceUnavailable: return presentation(fmt, "kveServer_503_ServiceUnavailable", "503 Service Unavailable"); + case kveServer_504_TimeOut: return presentation(fmt, "kveServer_504_TimeOut", "504 Timed Out"); + case kveServer_505_VersionNotSupported: return presentation(fmt, "kveServer_505_VersionNotSupported", "505 Version Not Supported"); + case kveServer_513_MessageTooLarge: return presentation(fmt, "kveServer_513_MessageTooLarge", "513 Message Too Large"); + case kveGlobalFailure_600_BusyEverywhere: return presentation(fmt, "kveGlobalFailure_600_BusyEverywhere", "600 Busy Everywhere"); + case kveGlobalFailure_603_Decline: return presentation(fmt, "kveGlobalFailure_603_Decline", "603 Decline"); + case kveGlobalFailure_604_DoesNotExistAnywhere: return presentation(fmt, "kveGlobalFailure_604_DoesNotExistAnywhere", "604 Does Not Exist Anywhere"); + case kveGlobalFailure_606_NotAcceptable: return presentation(fmt, "kveGlobalFailure_606_NotAcceptable", "606 Not Acceptable"); + } + + throw internal_not_found(); +} + +std::string Verbose::sipFailures(KSIP_Failures code, Verbose::Presentation fmt) +{ + try + { + return internal_sipFailures(code, fmt); + } + catch (internal_not_found & e) + { + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KSIP_Failures='%d']") % (int)code), + STG(FMT("Unknown SIP failure (%d)") % (int)code)); + } +} + +#endif + +#if K3L_AT_LEAST(1,5,1) +std::string Verbose::internal_isdnCause(KQ931Cause code, Verbose::Presentation fmt) +{ + switch (code) + { + case kq931cNone: return presentation(fmt, "kq931cNone", "None"); + case kq931cUnallocatedNumber: return presentation(fmt, "kq931cUnallocatedNumber", "Unallocated number"); + case kq931cNoRouteToTransitNet: return presentation(fmt, "kq931cNoRouteToTransitNet", "No route to transmit to network"); + case kq931cNoRouteToDest: return presentation(fmt, "kq931cNoRouteToDest", "No route to destination"); +#if 1 /* this changed during K3L 1.6.0 development cycle... */ + case kq931cSendSpecialInfoTone: return presentation(fmt, "kq931cSendSpecialInfoTone", "Send special information tone"); + case kq931cMisdialedTrunkPrefix: return presentation(fmt, "kq931cMisdialedTrunkPrefix", "Misdialed trunk prefix"); +#endif + case kq931cChannelUnacceptable: return presentation(fmt, "kq931cChannelUnacceptable", "Channel unacceptable"); + case kq931cCallAwarded: return presentation(fmt, "kq931cCallAwarded", "Call awarded"); +#if 1 /* this changed during K3L 1.6.0 development cycle... */ + case kq931cPreemption: return presentation(fmt, "kq931cPreemption", "Preemption"); + case kq931cPreemptionCircuitReuse: return presentation(fmt, "kq931cPreemptionCircuitReuse", "Preemption circuit reuse"); + case kq931cQoR_PortedNumber: return presentation(fmt, "kq931cQoR_PortedNumber", "QoR ported number"); +#endif + case kq931cNormalCallClear: return presentation(fmt, "kq931cNormalCallClear", "Normal call clear"); + case kq931cUserBusy: return presentation(fmt, "kq931cUserBusy", "User busy"); + case kq931cNoUserResponding: return presentation(fmt, "kq931cNoUserResponding", "No user responding"); + case kq931cNoAnswerFromUser: return presentation(fmt, "kq931cNoAnswerFromUser", "No answer from user"); +#if 1 /* this changed during K3L 1.6.0 development cycle... */ + case kq931cSubscriberAbsent: return presentation(fmt, "kq931cSubscriberAbsent", "Subscriber absent"); +#endif + case kq931cCallRejected: return presentation(fmt, "kq931cCallRejected", "Call rejected"); + case kq931cNumberChanged: return presentation(fmt, "kq931cNumberChanged", "Number changed"); +#if 1 /* this changed during K3L 1.6.0 development cycle... */ + case kq931cRedirectionToNewDest: return presentation(fmt, "kq931cRedirectionToNewDest", "Redirection to new destination"); + case kq931cCallRejectedFeatureDest: return presentation(fmt, "kq931cCallRejectedFeatureDest", "Call rejected feature destination"); + case kq931cExchangeRoutingError: return presentation(fmt, "kq931cExchangeRoutingError", "Exchange routing error"); +#endif + case kq931cNonSelectedUserClear: return presentation(fmt, "kq931cNonSelectedUserClear", "Non selected user clear"); + case kq931cDestinationOutOfOrder: return presentation(fmt, "kq931cDestinationOutOfOrder", "Destination out of order"); + case kq931cInvalidNumberFormat: return presentation(fmt, "kq931cInvalidNumberFormat", "Invalid number format"); + case kq931cFacilityRejected: return presentation(fmt, "kq931cFacilityRejected", "Facility rejected"); + case kq931cRespStatusEnquiry: return presentation(fmt, "kq931cRespStatusEnquiry", "Response status enquiry"); + case kq931cNormalUnspecified: return presentation(fmt, "kq931cNormalUnspecified", "Normal unespecified"); + case kq931cNoCircuitChannelAvail: return presentation(fmt, "kq931cNoCircuitChannelAvail", "No circuit channel available"); + case kq931cNetworkOutOfOrder: return presentation(fmt, "kq931cNetworkOutOfOrder", "Network out of order"); +#if 1 /* this changed during K3L 1.6.0 development cycle... */ + case kq931cPermanentFrameConnOutOfService: return presentation(fmt, "kq931cPermanentFrameConnOutOfService", "Permanent frame connection out of service"); + case kq931cPermanentFrameConnOperational: return presentation(fmt, "kq931cPermanentFrameConnOperational", "Permanent frame connection operational"); +#endif + case kq931cTemporaryFailure: return presentation(fmt, "kq931cTemporaryFailure", "Temporary failure"); + case kq931cSwitchCongestion: return presentation(fmt, "kq931cSwitchCongestion", "Switch congestion"); + case kq931cAccessInfoDiscarded: return presentation(fmt, "kq931cAccessInfoDiscarded", "Access information discarded"); + case kq931cRequestedChannelUnav: return presentation(fmt, "kq931cRequestedChannelUnav", "Requested channel unavailable"); + case kq931cPrecedenceCallBlocked: return presentation(fmt, "kq931cPrecedenceCallBlocked", "Precedence call blocked"); + case kq931cResourceUnavailable: return presentation(fmt, "kq931cResourceUnavailable", "Request resource unavailable"); + case kq931cQosUnavailable: return presentation(fmt, "kq931cQosUnavailable", "QoS unavailable"); + case kq931cReqFacilityNotSubsc: return presentation(fmt, "kq931cReqFacilityNotSubsc", "Request facility not subscribed"); + case kq931cOutCallsBarredWithinCUG: return presentation(fmt, "kq931cOutCallsBarredWithinCUG", "Out calls barred within UG"); + case kq931cInCallsBarredWithinCUG: return presentation(fmt, "kq931cInCallsBarredWithinCUG", "In calls barred within UG"); + case kq931cBearerCapabNotAuthor: return presentation(fmt, "kq931cBearerCapabNotAuthor", "Bearer capability not authorized"); + case kq931cBearerCapabNotAvail: return presentation(fmt, "kq931cBearerCapabNotAvail", "Bearer capability not available"); +#if 1 /* this changed during K3L 1.6.0 development cycle... */ + case kq931cInconsistency: return presentation(fmt, "kq931cInconsistency", "Inconsistency"); +#endif + case kq931cServiceNotAvailable: return presentation(fmt, "kq931cServiceNotAvailable", "Service not available"); + case kq931cBcNotImplemented: return presentation(fmt, "kq931cBcNotImplemented", "Bearer capability not implemented"); + case kq931cChannelTypeNotImplem: return presentation(fmt, "kq931cChannelTypeNotImplem", "Channel type not implemented"); + case kq931cReqFacilityNotImplem: return presentation(fmt, "kq931cReqFacilityNotImplem", "Request facility not implemented"); + case kq931cOnlyRestrictedBcAvail: return presentation(fmt, "kq931cOnlyRestrictedBcAvail", "Only restricted bearer capability available"); + case kq931cServiceNotImplemented: return presentation(fmt, "kq931cServiceNotImplemented", "Service not implemented"); + case kq931cInvalidCrv: return presentation(fmt, "kq931cInvalidCrv", "Invalid call reference value"); + case kq931cChannelDoesNotExist: return presentation(fmt, "kq931cChannelDoesNotExist", "Channel does not exist"); + case kq931cCallIdDoesNotExist: return presentation(fmt, "kq931cCallIdDoesNotExist", "Call identification does not exist"); + case kq931cCallIdInUse: return presentation(fmt, "kq931cCallIdInUse", "Call identification in use"); + case kq931cNoCallSuspended: return presentation(fmt, "kq931cNoCallSuspended", "No call suspended"); + case kq931cCallIdCleared: return presentation(fmt, "kq931cCallIdCleared", "Call identification cleared"); +#if 1 /* this changed during K3L 1.6.0 development cycle... */ + case kq931cUserNotMemberofCUG: return presentation(fmt, "kq931cUserNotMemberofCUG", "User not member of UG"); +#endif + case kq931cIncompatibleDestination: return presentation(fmt, "kq931cIncompatibleDestination", "Incompatible destination"); + case kq931cInvalidTransitNetSel: return presentation(fmt, "kq931cInvalidTransitNetSel", "Invalid transit network selected"); + case kq931cInvalidMessage: return presentation(fmt, "kq931cInvalidMessage", "Invalid message"); + case kq931cMissingMandatoryIe: return presentation(fmt, "kq931cMissingMandatoryIe", "Missing mandatory information element"); + case kq931cMsgTypeNotImplemented: return presentation(fmt, "kq931cMsgTypeNotImplemented", "Message type not implemented"); + case kq931cMsgIncompatWithState: return presentation(fmt, "kq931cMsgIncompatWithState", "Message incompatible with state"); + case kq931cIeNotImplemented: return presentation(fmt, "kq931cIeNotImplemented", "Information element not implemented"); + case kq931cInvalidIe: return presentation(fmt, "kq931cInvalidIe", "Invalid information element"); + case kq931cMsgIncompatWithState2: return presentation(fmt, "kq931cMsgIncompatWithState2", "Message incompatible with state (2)"); + case kq931cRecoveryOnTimerExpiry: return presentation(fmt, "kq931cRecoveryOnTimerExpiry", "Recovery on timer expiry"); + case kq931cProtocolError: return presentation(fmt, "kq931cProtocolError", "Protocol error"); +#if 1 /* this changed during K3L 1.6.0 development cycle... */ + case kq931cMessageWithUnrecognizedParam: return presentation(fmt, "kq931cMessageWithUnrecognizedParam", "Message with unrecognized parameters"); + case kq931cProtocolErrorUnspecified: return presentation(fmt, "kq931cProtocolErrorUnspecified", "Protocol error unspecified"); +#endif + case kq931cInterworking: return presentation(fmt, "kq931cInterworking", "Interworking"); + case kq931cCallConnected: return presentation(fmt, "kq931cCallConnected", "Call connected"); + case kq931cCallTimedOut: return presentation(fmt, "kq931cCallTimedOut", "Call timeout"); + case kq931cCallNotFound: return presentation(fmt, "kq931cCallNotFound", "Call not found"); + case kq931cCantReleaseCall: return presentation(fmt, "kq931cCantReleaseCall", "Cannot realese call"); + case kq931cNetworkFailure: return presentation(fmt, "kq931cNetworkFailure", "Network failure"); + case kq931cNetworkRestart: return presentation(fmt, "kq931cNetworkRestart", "Network restart"); + } + + throw internal_not_found(); +} + +std::string Verbose::isdnCause(KQ931Cause code, Verbose::Presentation fmt) +{ + try + { + return internal_isdnCause(code); + } + catch (internal_not_found & e) + { + return STG(FMT("[KQ931Cause='%d']") % (int)code); + } +} +#endif + +#if K3L_AT_LEAST(1,5,2) +std::string Verbose::isdnDebug(int32 flags, Verbose::Presentation fmt) +{ + if (0x00 != flags) + { + Strings::Merger strs; + + if (flags & kidfQ931) strs.add("Q931"); + if (flags & kidfLAPD) strs.add("LAPD"); + if (flags & kidfSystem) strs.add("System"); + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("kidf{%s}") % strs.merge(",")), + strs.merge(", ")); + } + + return presentation(fmt, "", "No debug active"); +} +#endif + +#if K3L_AT_LEAST(2,0,0) +std::string Verbose::internal_signGroupB(KSignGroupB group, R2CountryType country, Verbose::Presentation fmt) +#else +std::string Verbose::internal_signGroupB(KSignGroupB group, Verbose::Presentation fmt) +#endif +{ +#if K3L_AT_LEAST(2,0,0) + switch (country) + { + case R2_COUNTRY_ARG: + switch ((KSignGroupB_Argentina)group) + { + case kgbArNumberChanged: return presentation(fmt, "kgbArNumberChanged", "Number Changed"); + case kgbArBusy: return presentation(fmt, "kgbArBusy", "Busy"); + case kgbArCongestion: return presentation(fmt, "kgbArCongestion", "Congestion"); + case kgbArInvalidNumber: return presentation(fmt, "kgbArInvalidNumber", "Invalid Number"); + case kgbArLineFreeCharged: return presentation(fmt, "kgbArLineFreeCharged", "Line Free Charged"); + case kgbArLineFreeNotCharged: return presentation(fmt, "kgbArLineFreeNotCharged", "Line Free Not Charged"); + case kgbArLineOutOfOrder: return presentation(fmt, "kgbArLineOutOfOrder", "Line Out Of Order"); + case kgbArNone: return presentation(fmt, "kgbArNone", "None"); + } + break; + + case R2_COUNTRY_BRA: + switch ((KSignGroupB_Brazil)group) + { + case kgbBrLineFreeCharged: return presentation(fmt, "kgbBrLineFreeCharged", "Line Free Charged"); + case kgbBrLineFreeNotCharged: return presentation(fmt, "kgbBrLineFreeNotCharged", "Line Free Not Charged"); + case kgbBrLineFreeChargedLPR: return presentation(fmt, "kgbBrLineFreeChargedLPR", "Line Free Charged PLR"); + case kgbBrBusy: return presentation(fmt, "kgbBrBusy", "Busy"); + case kgbBrNumberChanged: return presentation(fmt, "kgbBrNumberChanged", "Number Changed"); + case kgbBrCongestion: return presentation(fmt, "kgbBrCongestion", "Congestion"); + case kgbBrInvalidNumber: return presentation(fmt, "kgbBrInvalidNumber", "Invalid Number"); + case kgbBrLineOutOfOrder: return presentation(fmt, "kgbBrLineOutOfOrder", "Line Out Of Order"); + case kgbBrNone: return presentation(fmt, "kgbBrNone", "None"); + } + break; + + case R2_COUNTRY_CHI: + switch ((KSignGroupB_Chile)group) + { + case kgbClNumberChanged: return presentation(fmt, "kgbClNumberChanged", "Number Changed"); + case kgbClBusy: return presentation(fmt, "kgbClBusy", "Busy"); + case kgbClCongestion: return presentation(fmt, "kgbClCongestion", "Congestion"); + case kgbClInvalidNumber: return presentation(fmt, "kgbClInvalidNumber", "Invalid Number"); + case kgbClLineFreeCharged: return presentation(fmt, "kgbClLineFreeCharged", "Line Free Charged"); + case kgbClLineFreeNotCharged: return presentation(fmt, "kgbClLineFreeNotCharged", "Line Free Not Charged"); + case kgbClLineOutOfOrder: return presentation(fmt, "kgbClLineOutOfOrder", "Line Out Of Order"); + case kgbClNone: return presentation(fmt, "kgbClNone", "None"); + } + break; + + case R2_COUNTRY_MEX: + switch ((KSignGroupB_Mexico)group) + { + case kgbMxLineFreeCharged: return presentation(fmt, "kgbMxLineFreeCharged", "Line Free Charged"); + case kgbMxBusy: return presentation(fmt, "kgbMxBusy", "Busy"); + case kgbMxLineFreeNotCharged: return presentation(fmt, "kgbMxLineFreeNotCharged", "Line Free Not Charged"); + case kgbMxNone: return presentation(fmt, "kgbMxNone", "None"); + } + break; + + case R2_COUNTRY_URY: + switch ((KSignGroupB_Uruguay)group) + { + case kgbUyNumberChanged: return presentation(fmt, "kgbUyNumberChanged", "Number Changed"); + case kgbUyBusy: return presentation(fmt, "kgbUyBusy", "Busy"); + case kgbUyCongestion: return presentation(fmt, "kgbUyCongestion", "Congestion"); + case kgbUyInvalidNumber: return presentation(fmt, "kgbUyInvalidNumber", "Invalid Number"); + case kgbUyLineFreeCharged: return presentation(fmt, "kgbUyLineFreeCharged", "Line Free Charged"); + case kgbUyLineFreeNotCharged: return presentation(fmt, "kgbUyLineFreeNotCharged", "Line Free Not Charged"); + case kgbUyLineOutOfOrder: return presentation(fmt, "kgbUyLineOutOfOrder", "Line Out Of Order"); + case kgbUyNone: return presentation(fmt, "kgbUyNone", "None"); + } + break; + + case R2_COUNTRY_VEN: + switch ((KSignGroupB_Venezuela)group) + { + case kgbVeLineFreeChargedLPR: return presentation(fmt, "kgbVeLineFreeChargedLPR", "Line Free Charged PLR"); + case kgbVeNumberChanged: return presentation(fmt, "kgbVeNumberChanged", "Number Changed"); + case kgbVeBusy: return presentation(fmt, "kgbVeBusy", "Busy"); + case kgbVeCongestion: return presentation(fmt, "kgbVeCongestion", "Congestion"); + case kgbVeInformationTone: return presentation(fmt, "kgbVeInformationTone", "Information Tone"); + case kgbVeLineFreeCharged: return presentation(fmt, "kgbVeLineFreeCharged", "Line Free Charged"); + case kgbVeLineFreeNotCharged: return presentation(fmt, "kgbVeLineFreeNotCharged", "Line Free Not Charged"); + case kgbVeLineBlocked: return presentation(fmt, "kgbVeLineBlocked", "Line Blocked"); + case kgbVeIntercepted: return presentation(fmt, "kgbVeIntercepted", "Intercepted"); + case kgbVeDataTrans: return presentation(fmt, "kgbVeDataTrans", "Data Transfer"); + case kgbVeNone: return presentation(fmt, "kgbVeNone", "None"); + } + break; + } +#else + switch ((KSignGroupB)group) + { + case kgbLineFreeCharged: return presentation(fmt, "kgbLineFreeCharged", "Line Free Charged"); + case kgbLineFreeNotCharged: return presentation(fmt, "kgbLineFreeNotCharged", "Line Free Not Charged"); + case kgbLineFreeChargedLPR: return presentation(fmt, "kgbLineFreeChargedLPR", "Line Free Charged PLR"); + case kgbBusy: return presentation(fmt, "kgbBusy", "Busy"); + case kgbNumberChanged: return presentation(fmt, "kgbNumberChanged", "Number Changed"); + case kgbCongestion: return presentation(fmt, "kgbCongestion", "Congestion"); + case kgbInvalidNumber: return presentation(fmt, "kgbInvalidNumber", "Invalid Number"); + case kgbLineOutOfOrder: return presentation(fmt, "kgbLineOutOfOrder", "Line Out Of Order"); + case kgbNone: return presentation(fmt, "kgbNone", "None"); + } +#endif + + throw internal_not_found(); +} + +#if K3L_AT_LEAST(2,0,0) +std::string Verbose::signGroupB(KSignGroupB group, R2CountryType r2_country, Verbose::Presentation fmt) +#else +std::string Verbose::signGroupB(KSignGroupB group, Verbose::Presentation fmt) +#endif +{ + try + { +#if K3L_AT_LEAST(2,0,0) + return internal_signGroupB(group, r2_country, fmt); +#else + return internal_signGroupB(group, fmt); +#endif + } + catch (internal_not_found & e) + { + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KSignGroupB='%d']") % (int)group), + STG(FMT("Unknown group B (%d)") % (int)group)); + } +} + +#if K3L_AT_LEAST(2,0,0) +std::string Verbose::internal_signGroupII(KSignGroupII group, R2CountryType country, Verbose::Presentation fmt) +#else +std::string Verbose::internal_signGroupII(KSignGroupII group, Verbose::Presentation fmt) +#endif +{ +#if K3L_AT_LEAST(2,0,0) + switch (country) + { + case R2_COUNTRY_ARG: + switch ((KSignGroupII_Argentina)group) + { + case kg2ArOrdinary: return presentation(fmt, "kg2ArOrdinary", "Ordinary"); + case kg2ArPriority: return presentation(fmt, "kg2ArPriority", "Priority"); + case kg2ArMaintenance: return presentation(fmt, "kg2ArMaintenance", "Maintenance"); + case kg2ArLocalPayPhone: return presentation(fmt, "kg2ArLocalPayPhone", "Local pay phone"); + case kg2ArTrunkOperator: return presentation(fmt, "kg2ArTrunkOperator", "Trunk operator"); + case kg2ArDataTrans: return presentation(fmt, "kg2ArDataTrans", "Data transfer"); + case kg2ArCPTP: return presentation(fmt, "kg2ArCPTP", "CPTP"); + case kg2ArSpecialLine: return presentation(fmt, "kg2ArSpecialLine", "Special line"); + case kg2ArMobileUser: return presentation(fmt, "kg2ArMobileUser", "Mobile user"); + case kg2ArPrivateRedLine: return presentation(fmt, "kg2ArPrivateRedLine", "Private red line"); + case kg2ArSpecialPayPhoneLine: return presentation(fmt, "kg2ArSpecialPayPhoneLine", "Special pay phone line"); + } + break; + + case R2_COUNTRY_BRA: + switch ((KSignGroupII_Brazil)group) + { + case kg2BrOrdinary: return presentation(fmt, "kg2BrOrdinary", "Ordinary"); + case kg2BrPriority: return presentation(fmt, "kg2BrPriority", "Priority"); + case kg2BrMaintenance: return presentation(fmt, "kg2BrMaintenance", "Maintenance"); + case kg2BrLocalPayPhone: return presentation(fmt, "kg2BrLocalPayPhone", "Local pay phone"); + case kg2BrTrunkOperator: return presentation(fmt, "kg2BrTrunkOperator", "Trunk operator"); + case kg2BrDataTrans: return presentation(fmt, "kg2BrDataTrans", "Data transfer"); + case kg2BrNonLocalPayPhone: return presentation(fmt, "kg2BrNonLocalPayPhone", "Non local pay phone"); + case kg2BrCollectCall: return presentation(fmt, "kg2BrCollectCall", "Collect call"); + case kg2BrOrdinaryInter: return presentation(fmt, "kg2BrOrdinaryInter", "Ordinary international"); + case kg2BrTransfered: return presentation(fmt, "kg2BrTransfered", "Transfered"); + } + break; + + case R2_COUNTRY_CHI: + switch ((KSignGroupII_Chile)group) + { + case kg2ClOrdinary: return presentation(fmt, "kg2ClOrdinary", "Ordinary"); + case kg2ClPriority: return presentation(fmt, "kg2ClPriority", "Priority"); + case kg2ClMaintenance: return presentation(fmt, "kg2ClMaintenance", "Maintenance"); + case kg2ClTrunkOperator: return presentation(fmt, "kg2ClTrunkOperator", "Trunk operator"); + case kg2ClDataTrans: return presentation(fmt, "kg2ClDataTrans", "Data transfer"); + case kg2ClUnidentifiedSubscriber: return presentation(fmt, "kg2ClUnidentifiedSubscriber", "Unidentified subscriber"); + } + break; + + case R2_COUNTRY_MEX: + switch ((KSignGroupII_Mexico)group) + { + case kg2MxTrunkOperator: return presentation(fmt, "kg2MxTrunkOperator", "Trunk operator"); + case kg2MxOrdinary: return presentation(fmt, "kg2MxOrdinary", "Ordinary"); + case kg2MxMaintenance: return presentation(fmt, "kg2MxMaintenance", "Maintenance"); + } + break; + + case R2_COUNTRY_URY: + switch ((KSignGroupII_Uruguay)group) + { + case kg2UyOrdinary: return presentation(fmt, "kg2UyOrdinary", "Ordinary"); + case kg2UyPriority: return presentation(fmt, "kg2UyPriority", "Priority"); + case kg2UyMaintenance: return presentation(fmt, "kg2UyMaintenance", "Maintenance"); + case kg2UyLocalPayPhone: return presentation(fmt, "kg2UyLocalPayPhone", "Local pay phone"); + case kg2UyTrunkOperator: return presentation(fmt, "kg2UyTrunkOperator", "Trunk operator"); + case kg2UyDataTrans: return presentation(fmt, "kg2UyDataTrans", "Data transfer"); + case kg2UyInternSubscriber: return presentation(fmt, "kg2UyInternSubscriber", "International subscriber"); + } + break; + + case R2_COUNTRY_VEN: + switch ((KSignGroupII_Venezuela)group) + { + case kg2VeOrdinary: return presentation(fmt, "kg2VeOrdinary", "Ordinary"); + case kg2VePriority: return presentation(fmt, "kg2VePriority", "Priority"); + case kg2VeMaintenance: return presentation(fmt, "kg2VeMaintenance", "Maintenance"); + case kg2VeLocalPayPhone: return presentation(fmt, "kg2VeLocalPayPhone", "Local pay phone"); + case kg2VeTrunkOperator: return presentation(fmt, "kg2VeTrunkOperator", "Trunk operator"); + case kg2VeDataTrans: return presentation(fmt, "kg2VeDataTrans", "Data transfer"); + case kg2VeNoTransferFacility: return presentation(fmt, "kg2VeNoTransferFacility", "No transfer facility"); + } + break; + } +#else + switch ((KSignGroupII)group) + { + case kg2Ordinary: return presentation(fmt, "kg2Ordinary", "Ordinary"); + case kg2Priority: return presentation(fmt, "kg2Priority", "Priority"); + case kg2Maintenance: return presentation(fmt, "kg2Maintenance", "Maintenance"); + case kg2LocalPayPhone: return presentation(fmt, "kg2LocalPayPhone", "Local pay phone"); + case kg2TrunkOperator: return presentation(fmt, "kg2TrunkOperator", "Trunk operator"); + case kg2DataTrans: return presentation(fmt, "kg2DataTrans", "Data transfer"); + case kg2NonLocalPayPhone: return presentation(fmt, "kg2NonLocalPayPhone", "Non local pay phone"); + case kg2CollectCall: return presentation(fmt, "kg2CollectCall", "Collect call"); + case kg2OrdinaryInter: return presentation(fmt, "kg2OrdinaryInter", "Ordinary international"); + case kg2Transfered: return presentation(fmt, "kg2Transfered", "Transfered"); + } +#endif + + throw internal_not_found(); +} + +#if K3L_AT_LEAST(2,0,0) +std::string Verbose::signGroupII(KSignGroupII group, R2CountryType r2_country, Verbose::Presentation fmt) +#else +std::string Verbose::signGroupII(KSignGroupII group, Verbose::Presentation fmt) +#endif +{ + try + { +#if K3L_AT_LEAST(2,0,0) + return internal_signGroupII(group, r2_country); +#else + return internal_signGroupII(group); +#endif + } + catch (internal_not_found & e) + { + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KSignGroupII='%d']") % (int)group), + STG(FMT("Unknown group II (%d)") % (int)group)); + } +} + +#if K3L_AT_LEAST(2,0,0) +std::string Verbose::callFail(KSignaling sig, R2CountryType country, int32 info, Verbose::Presentation fmt) +#else +std::string Verbose::callFail(KSignaling sig, int32 info, Verbose::Presentation fmt) +#endif +{ + try + { + switch (sig) + { + case ksigInactive: + throw internal_not_found(); + + case ksigAnalog: + if (('a' <= ((char)info) && 'z' >= ((char)info)) || ('A' <= ((char)info) && 'Z' >= ((char)info))) + return STG(FMT("%c") % (char)info); + else + throw internal_not_found(); + +#if K3L_AT_LEAST(1,5,4) + case ksigLineSide: +#endif +#if K3L_EXACT(2,1,0) + case ksigISUP: + case ksigFax: +#endif +#if K3L_AT_LEAST(1,6,0) + case ksigCAS_EL7: + case ksigE1LC: + return "NOT IMPLEMENTED"; + + case ksigAnalogTerminal: +#endif + case ksigContinuousEM: + case ksigPulsedEM: + + case ksigR2Digital: + case ksigOpenR2: +#if K3L_AT_LEAST(2,0,0) + return internal_signGroupB((KSignGroupB)info, country); +#else + return internal_signGroupB((KSignGroupB)info); +#endif + + case ksigOpenCAS: + case ksigUserR2Digital: +#if K3L_AT_LEAST(2,0,0) + return internal_signGroupB((KSignGroupB)info, R2_COUNTRY_BRA); +#else + return internal_signGroupB((KSignGroupB)info); +#endif + +#if K3L_AT_LEAST(1,5,0) + case ksigSIP: + return internal_sipFailures((KSIP_Failures)info); +#endif + +#if K3L_AT_LEAST(1,5,1) + case ksigOpenCCS: + case ksigPRI_EndPoint: + case ksigPRI_Network: + case ksigPRI_Passive: +#if K3L_AT_LEAST(2,2,0) + case ksigISUP: + case ksigISUPPassive: +#endif + return internal_isdnCause((KQ931Cause)info); +#endif + +#if K3L_AT_LEAST(1,6,0) + case ksigGSM: + return internal_gsmCallCause((KGsmCallCause)info); +#endif + } + } + catch (internal_not_found & e) + { + /* this exception is used for breaking the control flow */ + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[%s, callFail='%d']") % signaling(sig, fmt) % (int)info), + STG(FMT("Unknown call fail code for '%s' (%d)") % signaling(sig, fmt) % (int)info)); +} + +std::string Verbose::channelFail(KSignaling sig, int32 code, Verbose::Presentation fmt) +{ + try + { + switch (sig) + { + case ksigInactive: + case ksigAnalog: + case ksigSIP: +#if K3L_EXACT(2,1,0) + case ksigISUP: + case ksigFax: +#endif + throw internal_not_found(); + +#if K3L_AT_LEAST(1,6,0) + case ksigGSM: + return internal_gsmMobileCause((KGsmMobileCause)code); + + case ksigAnalogTerminal: + case ksigCAS_EL7: + case ksigE1LC: +#endif + + case ksigContinuousEM: + case ksigPulsedEM: + + case ksigLineSide: + + case ksigOpenCAS: + case ksigOpenR2: + case ksigR2Digital: + case ksigUserR2Digital: + switch ((KChannelFail)code) + { + case kfcRemoteFail: return presentation(fmt, "kfcRemoteFail", "Remote failure"); + case kfcLocalFail: return presentation(fmt, "kfcLocalFail", "Local failure"); + case kfcRemoteLock: return presentation(fmt, "kfcRemoteLock", "Remote lock"); + case kfcLineSignalFail: return presentation(fmt, "kfcLineSignalFail", "Line signal failure"); + case kfcAcousticSignalFail: return presentation(fmt, "kfcAcousticSignalFail", "Acoustic signal failure"); + } + + throw internal_not_found(); + +#if K3L_AT_LEAST(1,5,1) + case ksigOpenCCS: + case ksigPRI_EndPoint: + case ksigPRI_Network: + case ksigPRI_Passive: +#if K3L_AT_LEAST(2,2,0) + case ksigISUP: + case ksigISUPPassive: +#endif + return internal_isdnCause((KQ931Cause)code); +#endif + } + } + catch (internal_not_found & e) + { + /* this exception is used for breaking the control flow */ + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[%s, channelFail='%d']") % signaling(sig, fmt) % (int)code), + STG(FMT("Unknown channel fail code for '%s' (%d)") % signaling(sig, fmt) % (int)code)); +} + +std::string Verbose::internalFail(KInternalFail inf, Verbose::Presentation fmt) +{ + switch (inf) + { + case kifInterruptCtrl: return presentation(fmt, "kifInterruptCtrl", "Interrupt control"); + case kifCommunicationFail: return presentation(fmt, "kifCommunicationFail", "Communication failure"); + case kifProtocolFail: return presentation(fmt, "kifProtocolFail", "Protocol failure"); + case kifInternalBuffer: return presentation(fmt, "kifInternalBuffer", "Internal buffer"); + case kifMonitorBuffer: return presentation(fmt, "kifMonitorBuffer", "Monitor buffer"); + case kifInitialization: return presentation(fmt, "kifInitialization", "Initialization"); + case kifInterfaceFail: return presentation(fmt, "kifInterfaceFail", "Interface failure"); + case kifClientCommFail: return presentation(fmt, "kifClientCommFail", "Client communication failure"); + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KInternalFail='%d']") % (int)inf), + STG(FMT("Unknown internal failure (%d)") % (int)inf)); +} + +std::string Verbose::linkErrorCounter(KLinkErrorCounter ec, Verbose::Presentation fmt) +{ + switch (ec) + { + case klecChangesToLock: return presentation(fmt, "klecChangesToLock", "Changes to lock"); + case klecLostOfSignal: return presentation(fmt, "klecLostOfSignal", "Lost of signal"); + case klecAlarmNotification: return presentation(fmt, "klecAlarmNotification", "Alarm notification"); + case klecLostOfFrame: return presentation(fmt, "klecLostOfFrame", "Lost of frame"); + case klecLostOfMultiframe: return presentation(fmt, "klecLostOfMultiframe", "Lost of multiframe"); + case klecRemoteAlarm: return presentation(fmt, "klecRemoteAlarm", "Remote alarm"); + case klecUnknowAlarm: return presentation(fmt, "klecUnknowAlarm", "Slip alarm"); + case klecPRBS: return presentation(fmt, "klecPRBS", "PRBS"); + case klecWrogrBits: return presentation(fmt, "klecWrongBits", "Wrong bits"); + case klecJitterVariation: return presentation(fmt, "klecJitterVariation", "Jitter variation"); + case klecFramesWithoutSync: return presentation(fmt, "klecFramesWithoutSync", "Frames without sync"); + case klecMultiframeSignal: return presentation(fmt, "klecMultiframeSignal", "Multiframe Signal"); + case klecFrameError: return presentation(fmt, "klecFrameError", "Frame error"); + case klecBipolarViolation: return presentation(fmt, "klecBipolarViolation", "Bipolar violation"); + case klecCRC4: return presentation(fmt, "klecCRC4", "CRC4 error"); + case klecCount: return ""; /* this should never be verbosed */ + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KLinkErrorCounter='%d']") % (int)ec), + STG(FMT("Unknown link error counter (%d)") % (int)ec)); +} + +std::string Verbose::callStatus(KCallStatus code, Verbose::Presentation fmt) +{ + switch (code) + { + case kcsFree: return presentation(fmt, "kcsFree", "Free"); + case kcsIncoming: return presentation(fmt, "kcsIncoming", "Incoming"); + case kcsOutgoing: return presentation(fmt, "kcsOutgoing", "Outgoing"); + case kcsFail: return presentation(fmt, "kcsFail", "Failure"); + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KCallStatus='%d']") % (int)code), + STG(FMT("Unknown call status (%d)") % (int)code)); +} + +std::string Verbose::linkStatus(KSignaling sig, int32 code, Verbose::Presentation fmt) +{ + switch (sig) + { + case ksigInactive: + return presentation(fmt, "[ksigInactive]", "Inactive trunk"); + + case ksigAnalog: + return presentation(fmt, "[ksigAnalog]", "Analog trunk"); + +#if K3L_AT_LEAST(1,4,1) + case ksigSIP: + return presentation(fmt, "[ksigSIP]", "SIP trunk"); +#endif + +#if K3L_AT_LEAST(1,6,0) + case ksigGSM: + return presentation(fmt, "[ksigGSM]", "GSM trunk"); +#endif + +#if K3L_EXACT(2,1,0) + case ksigFax: + return presentation(fmt, "[ksigFax]", "FAX"); +#endif + case ksigContinuousEM: + case ksigPulsedEM: + + case ksigOpenCAS: + case ksigOpenR2: + case ksigR2Digital: + case ksigUserR2Digital: + +#if K3L_AT_LEAST(1,5,1) + case ksigOpenCCS: + case ksigPRI_EndPoint: + case ksigPRI_Network: + case ksigPRI_Passive: +#endif +#if K3L_AT_LEAST(1,5,3) + case ksigLineSide: +#endif +#if K3L_AT_LEAST(1,6,0) + case ksigAnalogTerminal: + case ksigCAS_EL7: + case ksigE1LC: +#endif +#if K3L_AT_LEAST(2,2,0) + case ksigISUP: + case ksigISUPPassive: +#endif + if (kesOk == code) + { + return presentation(fmt, "kesOk", "Up"); + } + else + { + Strings::Merger strs; + + if (kesSignalLost & code) strs.add(presentation(fmt, "SignalLost", "Signal lost")); + if (kesNetworkAlarm & code) strs.add(presentation(fmt, "NetworkAlarm", "Network alarm")); + if (kesFrameSyncLost & code) strs.add(presentation(fmt, "FrameSyncLost", "Frame sync lost")); + if (kesMultiframeSyncLost & code) strs.add(presentation(fmt, "MultiframeSyncLost", "Multiframe sync lost")); + if (kesRemoteAlarm & code) strs.add(presentation(fmt, "RemoteAlarm", "Remote alarm")); + if (kesHighErrorRate & code) strs.add(presentation(fmt, "HighErrorRate", "High error rate")); + if (kesUnknownAlarm & code) strs.add(presentation(fmt, "UnknownAlarm", "Slip alarm")); + if (kesE1Error & code) strs.add(presentation(fmt, "E1Error", "E1 error")); + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("kes{%s}") % strs.merge(",")), + strs.merge(", ")); + } + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[%s, linkStatus='%d']") % signaling(sig) % (int)code), + STG(FMT("Unknown link status for '%s' (%d)") % signaling(sig) % (int)code)); +} + +std::string Verbose::channelStatus(KSignaling sig, int32 flags, Verbose::Presentation fmt) +{ + try + { + switch (sig) + { + case ksigInactive: + return presentation(fmt, "[ksigInactive]", "Inactive channel"); + +#if K3L_AT_LEAST(1,4,1) + case ksigSIP: + return presentation(fmt, "[ksigSIP]", "SIP channel"); +#endif +#if K3L_EXACT(2,1,0) + case ksigISUP: + return presentation(fmt, "[ksigISUP]", "ISUP trunk"); + case ksigFax: + return presentation(fmt, "[ksigFax]", "FAX"); +#endif + + case ksigAnalog: +#if K3L_AT_LEAST(1,6,0) + switch ((KFXOChannelStatus)flags) +#else + switch ((KFXChannelStatus)flags) +#endif + { + case kfcsDisabled: return presentation(fmt, "kfcsDisabled", "Disabled"); + case kfcsEnabled: return presentation(fmt, "kfcsEnabled", "Enabled"); + } + + throw internal_not_found(); + +#if K3L_AT_LEAST(1,6,0) + case ksigAnalogTerminal: + switch ((KFXSChannelStatus)flags) + { + case kfxsOnHook: return presentation(fmt, "kfxsOnHook", "On Hook"); + case kfxsOffHook: return presentation(fmt, "kfxsOffHook", "Off Hook"); + case kfxsRinging: return presentation(fmt, "kfxsRinging", "Ringing"); + case kfxsFail: return presentation(fmt, "kfxsFail", "Failure"); + } + + throw internal_not_found(); + + case ksigGSM: + switch ((KGsmChannelStatus)flags) + { + case kgsmIdle: return presentation(fmt, "kgsmIdle", "Idle"); + case kgsmCallInProgress: return presentation(fmt, "kgsmCallInProgress", "Call in progress"); + case kgsmSMSInProgress: return presentation(fmt, "kgsmSMSInProgress", "SMS in progress"); + case kgsmModemError: return presentation(fmt, "kgsmModemError", "Modem error"); + case kgsmSIMCardError: return presentation(fmt, "kgsmSIMCardError", "SIM card error"); + case kgsmNetworkError: return presentation(fmt, "kgsmNetworkError", "Network error"); + case kgsmNotReady: return presentation(fmt, "kgsmNotReady", "Initializing"); + } + + throw internal_not_found(); +#endif + + /* deprecated, but still.. */ + case ksigPulsedEM: + case ksigContinuousEM: + + case ksigOpenCAS: + case ksigOpenR2: + case ksigR2Digital: + case ksigUserR2Digital: + +#if K3L_AT_LEAST(1,5,1) + case ksigOpenCCS: + case ksigPRI_EndPoint: + case ksigPRI_Network: + case ksigPRI_Passive: +#endif +#if K3L_AT_LEAST(1,5,3) + case ksigLineSide: +#endif +#if K3L_AT_LEAST(1,6,0) + case ksigCAS_EL7: + case ksigE1LC: +#endif +#if K3L_AT_LEAST(2,2,0) + case ksigISUP: + case ksigISUPPassive: +#endif + { + if (flags == kecsFree) + { + return presentation(fmt, "kecsFree", "Free"); + } + else + { + Strings::Merger strs; + + if (flags & kecsBusy) + strs.add("Busy"); + + switch (flags & 0x06) + { + case kecsOutgoing: + strs.add("Outgoing"); + break; + case kecsIncoming: + strs.add("Incoming"); + break; + case kecsLocked: + strs.add("Locked"); + default: + break; + } + + int32 value = (flags & 0xf0); + + if (kecsOutgoingLock & value) + strs.add(presentation(fmt, "OutgoingLock", "Outgoing Lock")); + + if (kecsLocalFail & value) + strs.add(presentation(fmt, "LocalFail", "Local Failure")); + + if (kecsIncomingLock & value) + strs.add(presentation(fmt, "IncomingLock", "Incoming Lock")); + + if (kecsRemoteLock & value) + strs.add(presentation(fmt, "RemoteLock", "Remote Lock")); + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("kecs{%s}") % strs.merge(",")), + strs.merge(", ")); + } + + throw internal_not_found(); + } + } + } + catch (internal_not_found & e) + { + /* we use this exception to break the control flow */ + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[%s, channelStatus='%d']") % signaling(sig) % flags), + STG(FMT("Unknown channel status for '%s' (%d)") % signaling(sig) % flags)); +} + +std::string Verbose::status(KLibraryStatus code, Verbose::Presentation fmt) +{ + switch (code) + { + case ksSuccess: return presentation(fmt, "ksSuccess", "Success"); + case ksFail: return presentation(fmt, "ksFail", "Failure"); + case ksTimeOut: return presentation(fmt, "ksTimeOut", "Time Out"); + case ksBusy: return presentation(fmt, "ksBusy", "Busy"); + case ksLocked: return presentation(fmt, "ksLocked", "Locked"); + case ksInvalidParams: return presentation(fmt, "ksInvalidParams", "Invalid Parameters"); + case ksEndOfFile: return presentation(fmt, "ksEndOfFile", "End of File"); + case ksInvalidState: return presentation(fmt, "ksInvalidState", "Invalid State"); + case ksServerCommFail: return presentation(fmt, "ksServerCommFail", "Communication Failure"); + case ksOverflow: return presentation(fmt, "ksOverflow", "Overflow"); + case ksUnderrun: return presentation(fmt, "ksUnderrun", "Underrun"); + +#if K3L_AT_LEAST(1,4,0) + case ksNotFound: return presentation(fmt, "ksNotFound", "Not Found"); + case ksNotAvailable: return presentation(fmt, "ksNotAvaiable", "Not Available"); +#endif + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KLibraryStatus='%d']") % (int)code), + STG(FMT("Unknown library status (%d)") % (int)code)); +} + +std::string Verbose::h100configIndex(KH100ConfigIndex code, Verbose::Presentation fmt) +{ + switch (code) + { + case khciDeviceMode: return presentation(fmt, "khciDeviceMode", "Device Mode"); + case khciMasterGenClock: return presentation(fmt, "khciMasterGenClock", "Master Generated Clock"); + case khciCTNetRefEnable: return presentation(fmt, "khciCTNetRefEnable", "CTBus Network Reference Enable"); + case khciSCbusEnable: return presentation(fmt, "khciSCbusEnable", "SCBus Enable"); + case khciHMVipEnable: return presentation(fmt, "khciHMVipEnable", "HMVip Enable"); + case khciMVip90Enable: return presentation(fmt, "khciMVip90Enable", "MVip90 Enable"); + case khciCTbusDataEnable: return presentation(fmt, "khciCTbusDataEnable", "CTBus Data Enable"); + case khciCTbusFreq03_00: return presentation(fmt, "khciCTbusFreq03_00", "CTBus Frequency 03 00"); // TODO: find better name + case khciCTbusFreq07_04: return presentation(fmt, "khciCTbusFreq07_04", "CTBus Frequency 07 04"); // TODO: find better name + case khciCTbusFreq11_08: return presentation(fmt, "khciCTbusFreq11_08", "CTBus Frequency 11 08"); // TODO: find better name + case khciCTbusFreq15_12: return presentation(fmt, "khciCTbusFreq15_12", "CTBus Frequency 15 12"); // TODO: find better name + case khciMax: return presentation(fmt, "khciMax", "Max"); // TODO: find better name + case khciMasterDevId: return presentation(fmt, "khciMasterDevId", "Master Device Number"); + case khciSecMasterDevId: return presentation(fmt, "khciSecMasterDevId", "Secondary Master Device Number"); + case khciCtNetrefDevId: return presentation(fmt, "khciCtNetrefDevId", "CTBus Network Reference Device Number"); +#if K3L_AT_LEAST(1,6,0) + case khciMaxH100ConfigIndex: return ""; /* do not verbose this value */ +#endif + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KH100ConfigIndex='%d']") % (int)code), + STG(FMT("Unknown H.100 config index (%d)") % (int)code)); +} + +#if K3L_AT_LEAST(1,6,0) +std::string Verbose::callStartInfo(KCallStartInfo code, Verbose::Presentation fmt) +{ + switch (code) + { + case kcsiHumanAnswer: return presentation(fmt, "kcsiHumanAnswer", "Human Answer"); + case kcsiAnsweringMachine: return presentation(fmt, "kcsiAnsweringMachine", "Answering Machine"); + case kcsiCellPhoneMessageBox: return presentation(fmt, "kcsiCellPhoneMessageBox", "Cell Phone Message Box"); + case kcsiCarrierMessage: return presentation(fmt, "kcsiCarrierMessage", "Carrier Message"); + case kcsiUnknown: return presentation(fmt, "kcsiUnknown", "Unknown"); + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KCallStartInfo='%d']") % (int)code), + STG(FMT("Unknown call answer info (%d)") % (int)code)); +} + +std::string Verbose::gsmCallCause(KGsmCallCause code, Verbose::Presentation fmt) +{ + try + { + return internal_gsmCallCause(code, fmt); + } + catch (internal_not_found & e) + { + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KGsmCallCause='%d']") % (int)code), + STG(FMT("Unknown GSM call cause (%d)") % (int)code)); + } +} + +std::string Verbose::internal_gsmCallCause(KGsmCallCause code, Verbose::Presentation fmt) +{ + switch (code) + { + case kgccNone: return presentation(fmt, "kgccNone", "None"); + case kgccUnallocatedNumber: return presentation(fmt, "kgccUnallocatedNumber", "Unallocated number"); + case kgccNoRouteToDest: return presentation(fmt, "kgccNoRouteToDest", "No route to destination"); + case kgccChannelUnacceptable: return presentation(fmt, "kgccChannelUnacceptable", "Channel unacceptable"); + case kgccOperatorDeterminedBarring: return presentation(fmt, "kgccOperatorDeterminedBarring", "Operator determined barring"); + case kgccNormalCallClear: return presentation(fmt, "kgccNormalCallClear", "Normal call clear"); + case kgccUserBusy: return presentation(fmt, "kgccUserBusy", "User busy"); + case kgccNoUserResponding: return presentation(fmt, "kgccNoUserResponding", "No user responding"); + case kgccNoAnswerFromUser: return presentation(fmt, "kgccNoAnswerFromUser", "No answer from user"); + case kgccCallRejected: return presentation(fmt, "kgccCallRejected", "Call rejected"); + case kgccNumberChanged: return presentation(fmt, "kgccNumberChanged", "Number changed"); + case kgccNonSelectedUserClear: return presentation(fmt, "kgccNonSelectedUserClear", "Non Selected user clear"); + case kgccDestinationOutOfOrder: return presentation(fmt, "kgccDestinationOutOfOrder", "Destination out of order"); + case kgccInvalidNumberFormat: return presentation(fmt, "kgccInvalidNumberFormat", "Invalid number format"); + case kgccFacilityRejected: return presentation(fmt, "kgccFacilityRejected", "Facility rejected"); + case kgccRespStatusEnquiry: return presentation(fmt, "kgccRespStatusEnquiry", "Response status enquiry"); + case kgccNormalUnspecified: return presentation(fmt, "kgccNormalUnspecified", "Normal, unspecified"); + case kgccNoCircuitChannelAvail: return presentation(fmt, "kgccNoCircuitChannelAvail", "No circuit channel available"); + case kgccNetworkOutOfOrder: return presentation(fmt, "kgccNetworkOutOfOrder", "Network out of order"); + case kgccTemporaryFailure: return presentation(fmt, "kgccTemporaryFailure", "Temporary failure"); + case kgccSwitchCongestion: return presentation(fmt, "kgccSwitchCongestion", "Switch congestion"); + case kgccAccessInfoDiscarded: return presentation(fmt, "kgccAccessInfoDiscarded", "Access information discarded"); + case kgccRequestedChannelUnav: return presentation(fmt, "kgccRequestedChannelUnav", "Requested channel unavailable"); + case kgccResourceUnavailable: return presentation(fmt, "kgccResourceUnavailable", "Resource unavailable"); + case kgccQosUnavailable: return presentation(fmt, "kgccQosUnavailable", "QoS unavailable"); + case kgccReqFacilityNotSubsc: return presentation(fmt, "kgccReqFacilityNotSubsc", "Request facility not subscribed"); + case kgccCallBarredWitchCUG: return presentation(fmt, "kgccCallBarredWitchCUG", "Call barred with UG"); + case kgccBearerCapabNotAuthor: return presentation(fmt, "kgccBearerCapabNotAuthor", "Bearer capability not authorized"); + case kgccBearerCapabNotAvail: return presentation(fmt, "kgccBearerCapabNotAvail", "Bearer capability not available"); + case kgccServiceNotAvailable: return presentation(fmt, "kgccServiceNotAvailable", "Service not available"); + case kgccBcNotImplemented: return presentation(fmt, "kgccBcNotImplemented", "Bearer capability not implemented"); + case kgccReqFacilityNotImplem: return presentation(fmt, "kgccReqFacilityNotImplem", "Request facility not implemented"); + case kgccOnlyRestrictedBcAvail: return presentation(fmt, "kgccOnlyRestrictedBcAvail", "Only restricted bearer capability available"); + case kgccServiceNotImplemented: return presentation(fmt, "kgccServiceNotImplemented", "Service not implemented"); + case kgccInvalidCrv: return presentation(fmt, "kgccInvalidCrv", "Invalid call reference value"); + case kgccUserNotMemberOfCUG: return presentation(fmt, "kgccUserNotMemberOfCUG", "User not member of UG"); + case kgccIncompatibleDestination: return presentation(fmt, "kgccIncompatibleDestination", "Incompatible destination"); + case kgccInvalidTransitNetSel: return presentation(fmt, "kgccInvalidTransitNetSel", "Invalid transit network selected"); + case kgccInvalidMessage: return presentation(fmt, "kgccInvalidMessage", "Invalid message"); + case kgccMissingMandatoryIe: return presentation(fmt, "kgccMissingMandatoryIe", "Missing mandatory information element"); + case kgccMsgTypeNotImplemented: return presentation(fmt, "kgccMsgTypeNotImplemented", "Message type not implemented"); + case kgccMsgIncompatWithState: return presentation(fmt, "kgccMsgIncompatWithState", "Message incompatible with state"); + case kgccIeNotImplemented: return presentation(fmt, "kgccIeNotImplemented", "Information element not implemented"); + case kgccInvalidIe: return presentation(fmt, "kgccInvalidIe", "Invalid information element"); + case kgccMsgIncompatWithState2: return presentation(fmt, "kgccMsgIncompatWithState2", "Message incompatible with state (2)"); + case kgccRecoveryOnTimerExpiry: return presentation(fmt, "kgccRecoveryOnTimerExpiry", "Recovery on timer expiry"); + case kgccProtocolError: return presentation(fmt, "kgccProtocolError", "Protocol error"); + case kgccInterworking: return presentation(fmt, "kgccInterworking", "Interworking"); + } + + throw internal_not_found(); +} + +std::string Verbose::gsmMobileCause(KGsmMobileCause code, Verbose::Presentation fmt) +{ + try + { + return internal_gsmMobileCause(code, fmt); + } + catch (internal_not_found & e) + { + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KGsmMobileCause='%d']") % (int)code), + STG(FMT("Unknown GSM mobile cause (%d)") % (int)code)); + } +} + +std::string Verbose::internal_gsmMobileCause(KGsmMobileCause code, Verbose::Presentation fmt) +{ + switch (code) + { + case kgmcPhoneFailure: return presentation(fmt, "kgmcPhoneFailure", "Phone failure"); + case kgmcNoConnectionToPhone: return presentation(fmt, "kgmcNoConnectionToPhone", "No connection to phone"); + case kgmcPhoneAdaptorLinkReserved: return presentation(fmt, "kgmcPhoneAdaptorLinkReserved", "Phone adaptor link reserved"); +#if 0 /* this changed during K3L 1.6.0 development cycle... */ + case kgmcCoperationNotAllowed: return presentation(fmt, "kgmcCoperationNotAllowed", ""); + case kgmcCoperationNotSupported: return presentation(fmt, "kgmcCoperationNotSupported", ""); +#else + case kgmcOperationNotAllowed: return presentation(fmt, "kgmcOperationNotAllowed", "Operation not allowed"); + case kgmcOperationNotSupported: return presentation(fmt, "kgmcOperationNotSupported", "Operation not supported"); +#endif + case kgmcPH_SIMPINRequired: return presentation(fmt, "kgmcPH_SIMPINRequired", "Phone SIM PIN required"); + case kgmcPH_FSIMPINRequired: return presentation(fmt, "kgmcPH_FSIMPINRequired", "Phone FSIM PIN required"); + case kgmcPH_FSIMPUKRequired: return presentation(fmt, "kgmcPH_FSIMPUKRequired", "Phone FSIM PUK required"); + case kgmcSIMNotInserted: return presentation(fmt, "kgmcSIMNotInserted", "SIM not inserted"); + case kgmcSIMPINRequired: return presentation(fmt, "kgmcSIMPINRequired", "SIM PIN required"); + case kgmcSIMPUKRequired: return presentation(fmt, "kgmcSIMPUKRequired", "SIM PUK required"); + case kgmcSIMFailure: return presentation(fmt, "kgmcSIMFailure", "SIM failure"); + case kgmcSIMBusy: return presentation(fmt, "kgmcSIMBusy", "SIM busy"); + case kgmcSIMWrong: return presentation(fmt, "kgmcSIMWrong", "SIM wrong"); + case kgmcIncorrectPassword: return presentation(fmt, "kgmcIncorrectPassword", "Incorrect password"); + case kgmcSIMPIN2Required: return presentation(fmt, "kgmcSIMPIN2Required", "SIM PIN2 required"); + case kgmcSIMPUK2Required: return presentation(fmt, "kgmcSIMPUK2Required", "SIM PUK2 required"); + case kgmcMemoryFull: return presentation(fmt, "kgmcMemoryFull", "Memory full"); + case kgmcInvalidIndex: return presentation(fmt, "kgmcInvalidIndex", "Invalid index"); + case kgmcNotFound: return presentation(fmt, "kgmcNotFound", "Not found"); + case kgmcMemoryFailure: return presentation(fmt, "kgmcMemoryFailure", "Memory failure"); + case kgmcTextStringTooLong: return presentation(fmt, "kgmcTextStringTooLong", "Text string too long"); + case kgmcInvalidCharInTextString: return presentation(fmt, "kgmcInvalidCharInTextString", "Invalid character in text string"); + case kgmcDialStringTooLong: return presentation(fmt, "kgmcDialStringTooLong", "Dial string too long"); + case kgmcInvalidCharInDialString: return presentation(fmt, "kgmcInvalidCharInDialString", "Invalid character in dial string"); + case kgmcNoNetworkService: return presentation(fmt, "kgmcNoNetworkService", "No network service"); + case kgmcNetworkTimeout: return presentation(fmt, "kgmcNetworkTimeout", "Network timeout"); + case kgmcNetworkNotAllowed: return presentation(fmt, "kgmcNetworkNotAllowed", "Network not allowed"); + case kgmcCommandAborted: return presentation(fmt, "kgmcCommandAborted", "Command aborted"); + case kgmcNumParamInsteadTextParam: return presentation(fmt, "kgmcNumParamInsteadTextParam", "Number parameter instead of text parameter"); + case kgmcTextParamInsteadNumParam: return presentation(fmt, "kgmcTextParamInsteadNumParam", "Text parameter instead of number parameter"); + case kgmcNumericParamOutOfBounds: return presentation(fmt, "kgmcNumericParamOutOfBounds", "Numeric parameter out of bounds"); + case kgmcTextStringTooShort: return presentation(fmt, "kgmcTextStringTooShort", "Text string too short"); + case kgmcNetworkPINRequired: return presentation(fmt, "kgmcNetworkPINRequired", "Network PIN required"); + case kgmcNetworkPUKRequired: return presentation(fmt, "kgmcNetworkPUKRequired", "Network PUK required"); + case kgmcNetworkSubsetPINRequired: return presentation(fmt, "kgmcNetworkSubsetPINRequired", "Network subset PIN required"); + case kgmcNetworkSubnetPUKRequired: return presentation(fmt, "kgmcNetworkSubnetPUKRequired", "Network subset PUK required"); + case kgmcServiceProviderPINRequired: return presentation(fmt, "kgmcServiceProviderPINRequired", "Network service provider PIN required"); + case kgmcServiceProviderPUKRequired: return presentation(fmt, "kgmcServiceProviderPUKRequired", "Network service provider PUK required"); + case kgmcCorporatePINRequired: return presentation(fmt, "kgmcCorporatePINRequired", "Corporate PIN required"); + case kgmcCorporatePUKRequired: return presentation(fmt, "kgmcCorporatePUKRequired", "Corporate PUK required"); + case kgmcSIMServiceOptNotSupported: return presentation(fmt, "kgmcSIMServiceOptNotSupported", "SIM Service option not supported"); + case kgmcUnknown: return presentation(fmt, "kgmcUnknown", "Unknown"); + case kgmcIllegalMS_N3: return presentation(fmt, "kgmcIllegalMS_N3", "Illegal MS #3"); + case kgmcIllegalME_N6: return presentation(fmt, "kgmcIllegalME_N6", "Illegal MS #6"); + case kgmcGPRSServicesNotAllowed_N7: return presentation(fmt, "kgmcGPRSServicesNotAllowed_N7", "GPRS service not allowed #7"); + case kgmcPLMNNotAllowed_No11: return presentation(fmt, "kgmcPLMNNotAllowed_No11", "PLMN not allowed #11"); + case kgmcLocationAreaNotAllowed_N12: return presentation(fmt, "kgmcLocationAreaNotAllowed_N12", "Location area not allowed #12"); + case kgmcRoamingNotAllowed_N13: return presentation(fmt, "kgmcRoamingNotAllowed_N13", "Roaming not allowed #13"); + case kgmcServiceOptNotSupported_N32: return presentation(fmt, "kgmcServiceOptNotSupported_N32", "Service option not supported #32"); + case kgmcReqServOptNotSubscribed_N33: return presentation(fmt, "kgmcReqServOptNotSubscribed_N33", "Registration service option not subscribed #33"); + case kgmcServOptTempOutOfOrder_N34: return presentation(fmt, "kgmcServOptTempOutOfOrder_N34", "Service option temporary out of order #34"); + case kgmcLongContextActivation: return presentation(fmt, "kgmcLongContextActivation", "Long context activation"); + case kgmcUnspecifiedGPRSError: return presentation(fmt, "kgmcUnspecifiedGPRSError", "Unspecified GPRS error"); + case kgmcPDPAuthenticationFailure: return presentation(fmt, "kgmcPDPAuthenticationFailure", "PDP authentication failure"); + case kgmcInvalidMobileClass: return presentation(fmt, "kgmcInvalidMobileClass", "Invalid mobile class"); + case kgmcGPRSDisconnectionTmrActive: return presentation(fmt, "kgmcGPRSDisconnectionTmrActive", "GPRS disconnection TMR active"); + case kgmcTooManyActiveCalls: return presentation(fmt, "kgmcTooManyActiveCalls", "Too many active calls"); + case kgmcCallRejected: return presentation(fmt, "kgmcCallRejected", "Call rejected"); + case kgmcUnansweredCallPending: return presentation(fmt, "kgmcUnansweredCallPending", "Unanswered call pending"); + case kgmcUnknownCallingError: return presentation(fmt, "kgmcUnknownCallingError", "Unknown calling error"); + case kgmcNoPhoneNumRecognized: return presentation(fmt, "kgmcNoPhoneNumRecognized", "No phone number recognized"); + case kgmcCallStateNotIdle: return presentation(fmt, "kgmcCallStateNotIdle", "Call state not idle"); + case kgmcCallInProgress: return presentation(fmt, "kgmcCallInProgress", "Call in progress"); + case kgmcDialStateError: return presentation(fmt, "kgmcDialStateError", "Dial state error"); + case kgmcUnlockCodeRequired: return presentation(fmt, "kgmcUnlockCodeRequired", "Unlock code required"); + case kgmcNetworkBusy: return presentation(fmt, "kgmcNetworkBusy", "Network busy"); + case kgmcInvalidPhoneNumber: return presentation(fmt, "kgmcInvalidPhoneNumber", "Invalid phone number"); + case kgmcNumberEntryAlreadyStarted: return presentation(fmt, "kgmcNumberEntryAlreadyStarted", "Number entry already started"); + case kgmcCancelledByUser: return presentation(fmt, "kgmcCancelledByUser", "Cancelled by user"); + case kgmcNumEntryCouldNotBeStarted: return presentation(fmt, "kgmcNumEntryCouldNotBeStarted", "Number entry could not be started"); + case kgmcDataLost: return presentation(fmt, "kgmcDataLost", "Data lost"); + case kgmcInvalidBessageBodyLength: return presentation(fmt, "kgmcInvalidBessageBodyLength", "Invalid message body length"); + case kgmcInactiveSocket: return presentation(fmt, "kgmcInactiveSocket", "Inactive socket"); + case kgmcSocketAlreadyOpen: return presentation(fmt, "kgmcSocketAlreadyOpen", "Socket already open"); +#if K3L_AT_LEAST(2,1,0) + case kgmcSuccess: return presentation(fmt, "kgmcSuccess", "Success"); +#endif + } + + throw internal_not_found(); +} + +std::string Verbose::gsmSmsCause(KGsmSmsCause code, Verbose::Presentation fmt) +{ + try + { + return internal_gsmSmsCause(code, fmt); + } + catch (internal_not_found & e) + { + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KGsmSmsCause='%d']") % (int)code), + STG(FMT("Unknown GSM SMS cause (%d)") % (int)code)); + } +} + +std::string Verbose::internal_gsmSmsCause(KGsmSmsCause code, Verbose::Presentation fmt) +{ + switch (code) + { +#if K3L_AT_LEAST(2,1,0) + case kgscNone: return presentation(fmt, "kgscNone", "None"); +#endif + case kgscUnassigned: return presentation(fmt, "kgscUnassigned", "Unassigned number"); + case kgscOperatorDeterminedBarring: return presentation(fmt, "kgscOperatorDeterminedBarring", "Operator determined barring"); + case kgscCallBarred: return presentation(fmt, "kgscCallBarred", "Call barred"); + case kgscSMSTransferRejected: return presentation(fmt, "kgscSMSTransferRejected", "SMS transfer rejected"); + case kgscDestinationOutOfService: return presentation(fmt, "kgscDestinationOutOfService", "Destination out of service"); + case kgscUnidentifiedSubscriber: return presentation(fmt, "kgscUnidentifiedSubscriber", "Unidentified subscriber"); + case kgscFacilityRejected: return presentation(fmt, "kgscFacilityRejected", "Facility rejected"); + case kgscUnknownSubscriber: return presentation(fmt, "kgscUnknownSubscriber", "Unknown subscriber"); + case kgscNetworkOutOfOrder: return presentation(fmt, "kgscNetworkOutOfOrder", "Network out of order"); + case kgscTemporaryFailure: return presentation(fmt, "kgscTemporaryFailure", "Temporary failure"); + case kgscCongestion: return presentation(fmt, "kgscCongestion", "Congestion"); + case kgscResourcesUnavailable: return presentation(fmt, "kgscResourcesUnavailable", "Resources unavailable"); + case kgscFacilityNotSubscribed: return presentation(fmt, "kgscFacilityNotSubscribed", "Facility not subscribed"); + case kgscFacilityNotImplemented: return presentation(fmt, "kgscFacilityNotImplemented", "Facility not implemented"); + case kgscInvalidSMSTransferRefValue: return presentation(fmt, "kgscInvalidSMSTransferRefValue", "Invalid SMS transfer reference value"); + case kgscInvalidMessage: return presentation(fmt, "kgscInvalidMessage", "Invalid message"); + case kgscInvalidMandatoryInformation: return presentation(fmt, "kgscInvalidMandatoryInformation", "Invalid mandatory information"); + case kgscMessageTypeNonExistent: return presentation(fmt, "kgscMessageTypeNonExistent", "Message type non existent"); + case kgscMsgNotCompatWithSMProtState: return presentation(fmt, "kgscMsgNotCompatWithSMProtState", "Message not compatible with SMS protection state"); + case kgscInformationElementNonExiste: return presentation(fmt, "kgscInformationElementNonExiste", "Information element non existent"); + case kgscProtocolError: return presentation(fmt, "kgscProtocolError", "Protocol error"); + case kgscInterworking: return presentation(fmt, "kgscInterworking", "Interworking"); + case kgscTelematicInterworkingNotSup: return presentation(fmt, "kgscTelematicInterworkingNotSup", "Telematic interworking not supported"); + case kgscSMSTypeZeroNotSupported: return presentation(fmt, "kgscSMSTypeZeroNotSupported", "SMS type zero not supported"); + case kgscCannotReplaceSMS: return presentation(fmt, "kgscCannotReplaceSMS", "Cannot replace SMS"); + case kgscUnspecifiedTPPIDError: return presentation(fmt, "kgscUnspecifiedTPPIDError", "Unspecified TPPID error"); + case kgscAlphabetNotSupported: return presentation(fmt, "kgscAlphabetNotSupported", "Alphabet not supported"); + case kgscMessageClassNotSupported: return presentation(fmt, "kgscMessageClassNotSupported", "Message class not supported"); + case kgscUnspecifiedTPDCSError: return presentation(fmt, "kgscUnspecifiedTPDCSError", "Unspecified TPDCS error"); + case kgscCommandCannotBeActioned: return presentation(fmt, "kgscCommandCannotBeActioned", "Command cannot be actioned"); + case kgscCommandUnsupported: return presentation(fmt, "kgscCommandUnsupported", "Command unsupported"); + case kgscUnspecifiedTPCommandError: return presentation(fmt, "kgscUnspecifiedTPCommandError", "Unspecified TP command error"); + case kgscTPDUNotSupported: return presentation(fmt, "kgscTPDUNotSupported", "TPDU not supported"); + case kgscSCBusy: return presentation(fmt, "kgscSCBusy", "SC busy"); + case kgscNoSCSubscription: return presentation(fmt, "kgscNoSCSubscription", "No SC subscription"); + case kgscSCSystemFailure: return presentation(fmt, "kgscSCSystemFailure", "SC system failure"); + case kgscInvalidSMEAddress: return presentation(fmt, "kgscInvalidSMEAddress", "Invalid SME address"); + case kgscDestinationSMEBarred: return presentation(fmt, "kgscDestinationSMEBarred", "Destination SME barred"); + case kgscSMRejectedDuplicateSM: return presentation(fmt, "kgscSMRejectedDuplicateSM", "SM rejected duplicate SM"); + case kgscTPVPFNotSupported: return presentation(fmt, "kgscTPVPFNotSupported", "TPVPF not supported"); + case kgscTPVPNotSupported: return presentation(fmt, "kgscTPVPNotSupported", "TPVP not supported"); + case kgscSIMSMSStorageFull: return presentation(fmt, "kgscSIMSMSStorageFull", "SIM SMS storage full"); + case kgscNoSMSStorageCapabilityInSIM: return presentation(fmt, "kgscNoSMSStorageCapabilityInSIM", "No SMS storage capability in SIM"); + case kgscErrorInMS: return presentation(fmt, "kgscErrorInMS", "Error in SMS"); + case kgscMemoryCapacityExceeded: return presentation(fmt, "kgscMemoryCapacityExceeded", "Memory capatity exceeded"); + case kgscSIMDataDownloadError: return presentation(fmt, "kgscSIMDataDownloadError", "SIM data download error"); + case kgscUnspecifiedError: return presentation(fmt, "kgscUnspecifiedError", "Unspecified error"); + case kgscPhoneFailure: return presentation(fmt, "kgscPhoneFailure", "Phone failure"); + case kgscSmsServiceReserved: return presentation(fmt, "kgscSmsServiceReserved", "SMS service reserved"); + case kgscOperationNotAllowed: return presentation(fmt, "kgscOperationNotAllowed", "Operation not allowed"); + case kgscOperationNotSupported: return presentation(fmt, "kgscOperationNotSupported", "Operation not supported"); + case kgscInvalidPDUModeParameter: return presentation(fmt, "kgscInvalidPDUModeParameter", "Invalid PDU mode parameter"); + case kgscInvalidTextModeParameter: return presentation(fmt, "kgscInvalidTextModeParameter", "Invalid text mode parameter"); + case kgscSIMNotInserted: return presentation(fmt, "kgscSIMNotInserted", "SIM not inserted"); + case kgscSIMPINNecessary: return presentation(fmt, "kgscSIMPINNecessary", "SIM PIN necessary"); + case kgscPH_SIMPINNecessary: return presentation(fmt, "kgscPH_SIMPINNecessary", "Phone SIM PIN necessary"); + case kgscSIMFailure: return presentation(fmt, "kgscSIMFailure", "SIM failure"); + case kgscSIMBusy: return presentation(fmt, "kgscSIMBusy", "SIM busy"); + case kgscSIMWrong: return presentation(fmt, "kgscSIMWrong", "SIM wrong"); + case kgscMemoryFailure: return presentation(fmt, "kgscMemoryFailure", "Memory failure"); + case kgscInvalidMemoryIndex: return presentation(fmt, "kgscInvalidMemoryIndex", "Invalid memory index"); + case kgscMemoryFull: return presentation(fmt, "kgscMemoryFull", "Memory full"); + case kgscSMSCAddressUnknown: return presentation(fmt, "kgscSMSCAddressUnknown", "SMSC address unknown"); + case kgscNoNetworkService: return presentation(fmt, "kgscNoNetworkService", "No network service"); + case kgscNetworkTimeout: return presentation(fmt, "kgscNetworkTimeout", "Network timeout"); + case kgscUnknownError: return presentation(fmt, "kgscUnknownError", "Unknown error"); + case kgscNetworkBusy: return presentation(fmt, "kgscNetworkBusy", "Network busy"); + case kgscInvalidDestinationAddress: return presentation(fmt, "kgscInvalidDestinationAddress", "Invalid destination address"); + case kgscInvalidMessageBodyLength: return presentation(fmt, "kgscInvalidMessageBodyLength", "Invalid message body length"); + case kgscPhoneIsNotInService: return presentation(fmt, "kgscPhoneIsNotInService", "Phone is not in service"); + case kgscInvalidPreferredMemStorage: return presentation(fmt, "kgscInvalidPreferredMemStorage", "Invalid preferred memory storage"); + case kgscUserTerminated: return presentation(fmt, "kgscUserTerminated", "User terminated"); + } + + throw internal_not_found(); +} + +std::string Verbose::q931ProgressIndication(KQ931ProgressIndication code, Verbose::Presentation fmt) +{ + try + { + return internal_q931ProgressIndication(code); + } + catch (internal_not_found & e) + { + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KQ931ProgressIndication='%d']") % (int)code), + STG(FMT("Unknown Q931 progress indication (%d)") % (int)code)); + } +} + +std::string Verbose::internal_q931ProgressIndication(KQ931ProgressIndication code, Verbose::Presentation fmt) +{ + switch (code) + { + case kq931pTonesMaybeAvailable: return presentation(fmt, "kq931pTonesMaybeAvailable", "Tones may be available"); + case kq931pDestinationIsNonIsdn: return presentation(fmt, "kq931pDestinationIsNonIsdn", "Destination is not ISDN"); + case kq931pOriginationIsNonIsdn: return presentation(fmt, "kq931pOriginationIsNonIsdn", "Origination is not ISDN"); + case kq931pCallReturnedToIsdn: return presentation(fmt, "kq931pCallReturnedToIsdn", "Call returned to ISDN"); + case kq931pTonesAvailable: return presentation(fmt, "kq931pTonesAvailable", "Tones available"); + } + + throw internal_not_found(); +} + +#endif /* K3L_AT_LEAST(1,6,0) */ + + + + +#if K3L_AT_LEAST(2,1,0) +std::string Verbose::faxResult(KFaxResult code, Verbose::Presentation fmt) +{ + switch (code) + { + case kfaxrEndOfTransmission: return presentation(fmt, "kfaxrEndOfTransmission", "EndOfTransmission"); + case kfaxrStoppedByCommand: return presentation(fmt, "kfaxrStoppedByCommand", "StoppedByCommand"); + case kfaxrProtocolTimeout: return presentation(fmt, "kfaxrProtocolTimeout", "ProtocolTimeout"); + case kfaxrProtocolError: return presentation(fmt, "kfaxrProtocolError", "ProtocolError"); + case kfaxrRemoteDisconnection: return presentation(fmt, "kfaxrRemoteDisconnection", "RemoteDisconnection"); + case kfaxrFileError: return presentation(fmt, "kfaxrFileError", "FileError"); + case kfaxrUnknown: return presentation(fmt, "kfaxrUnknown", "Unknown"); + case kfaxrEndOfReception: return presentation(fmt, "kfaxrEndOfReception", "EndOfReception"); + case kfaxrCompatibilityError: return presentation(fmt, "kfaxrCompatibilityError", "CompatibilityError"); + case kfaxrQualityError: return presentation(fmt, "kfaxrQualityError", "QualityError"); + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KFaxResult='%d']") % (int)code), + STG(FMT("Unknown fax result (%d)") % (int)code)); +} + +std::string Verbose::faxFileErrorCause(KFaxFileErrorCause code, Verbose::Presentation fmt) +{ + switch (code) + { + case kfaxfecTransmissionStopped: return presentation(fmt, "kfaxfecTransmissionStopped", "TransmissionStopped"); + case kfaxfecTransmissionError: return presentation(fmt, "kfaxfecTransmissionError", "TransmissionError"); + case kfaxfecListCleared: return presentation(fmt, "kfaxfecListCleared", "ListCleared"); + case kfaxfecCouldNotOpen: return presentation(fmt, "kfaxfecCouldNotOpen", "CouldNotOpen"); + case kfaxfecInvalidHeader: return presentation(fmt, "kfaxfecInvalidHeader", "InvalidHeader"); + case kfaxfecDataNotFound: return presentation(fmt, "kfaxfecDataNotFound", "DataNotFound"); + case kfaxfecInvalidHeight: return presentation(fmt, "kfaxfecInvalidHeight", "InvalidHeight"); + case kfaxfecUnsupportedWidth: return presentation(fmt, "kfaxfecUnsupportedWidth", "UnsupportedWidth"); + case kfaxfecUnsupportedCompression: return presentation(fmt, "kfaxfecUnsupportedCompression", "UnsupportedCompression"); + case kfaxfecUnsupportedRowsPerStrip: return presentation(fmt, "kfaxfecUnsupportedRowsPerStrip", "UnsupportedRowsPerStrip"); + case kfaxfecUnknown: return presentation(fmt, "kfaxfecUnknown", "Unknown"); + } + + PRESENTATION_CHECK_RETURN(fmt, + STG(FMT("[KFaxFileErrorCause='%d']") % (int)code), + STG(FMT("Unknown fax file error cause (%d)") % (int)code)); +} + +#endif + + +/********/ + +std::string Verbose::commandName(int32 code) +{ + switch ((kcommand)code) + { + case K_CM_SEIZE: return "CM_SEIZE"; + case K_CM_SYNC_SEIZE: return "CM_SYNC_SEIZE"; + case K_CM_DIAL_DTMF: return "CM_DIAL_DTMF"; +#if K3L_AT_LEAST(1,6,0) + case K_CM_SIP_REGISTER: return "CM_SIP_REGISTER"; +#endif + case K_CM_DISCONNECT: return "CM_DISCONNECT"; + case K_CM_CONNECT: return "CM_CONNECT"; + case K_CM_PRE_CONNECT: return "CM_PRE_CONNECT"; + case K_CM_CAS_CHANGE_LINE_STT: return "CM_CAS_CHANGE_LINE_STT"; + case K_CM_CAS_SEND_MFC: return "CM_CAS_SEND_MFC"; + case K_CM_SET_FORWARD_CHANNEL: return "CM_SET_FORWARD_CHANNEL"; + case K_CM_CAS_SET_MFC_DETECT_MODE: return "CM_CAS_SET_MFC_DETECT_MODE"; + case K_CM_DROP_COLLECT_CALL: return "CM_DROP_COLLECT_CALL"; + +#if K3L_AT_LEAST(1,5,0) + case K_CM_MAKE_CALL: return "CM_MAKE_CALL"; +#endif + +#if K3L_AT_LEAST(1,4,0) + case K_CM_RINGBACK: return "CM_RINGBACK"; +#endif + +#if K3L_AT_LEAST(1,5,1) + case K_CM_USER_INFORMATION: return "CM_USER_INFORMATION"; +#endif + +#if K3L_AT_LEAST(1,4,0) && !K3L_AT_LEAST(2,2,0) + case K_CM_VOIP_SEIZE: return "CM_VOIP_SEIZE"; + +#if !K3L_AT_LEAST(2,0,0) + /* internal commands */ + case K_CM_VOIP_START_DEBUG: return "CM_VOIP_START_DEBUG"; + case K_CM_VOIP_STOP_DEBUG: return "CM_VOIP_STOP_DEBUG"; + case K_CM_VOIP_DUMP_STAT: return "CM_VOIP_DUMP_STAT"; +#endif +#endif + +#if K3L_AT_LEAST(1,5,2) && !K3L_AT_LEAST(2,0,0) + /* internal command */ + case K_CM_ISDN_DEBUG: return "CM_ISDN_DEBUG"; +#endif + + case K_CM_LOCK_INCOMING: return "CM_LOCK_INCOMING"; + case K_CM_UNLOCK_INCOMING: return "CM_UNLOCK_INCOMING"; + case K_CM_LOCK_OUTGOING: return "CM_LOCK_OUTGOING"; + case K_CM_UNLOCK_OUTGOING: return "CM_UNLOCK_OUTGOING"; + + case K_CM_START_SEND_FAIL: return "CM_START_SEND_FAIL"; + case K_CM_STOP_SEND_FAIL: return "CM_STOP_SEND_FAIL"; + +#if K3L_AT_LEAST(1,5,3) + case K_CM_END_OF_NUMBER: return "CM_END_OF_NUMBER"; +#endif + +#if K3L_AT_LEAST(1,6,0) + case K_CM_SS_TRANSFER: return "CM_SS_TRANSFER"; + case K_CM_GET_SMS: return "CM_GET_SMS"; + case K_CM_PREPARE_SMS: return "CM_PREPARE_SMS"; + case K_CM_SEND_SMS: return "CM_SEND_SMS"; +#endif +#if K3L_HAS_MPTY_SUPPORT + case K_CM_HOLD_SWITCH: return "CM_HOLD_SWITCH"; + case K_CM_MPTY_CONF: return "CM_MPTY_CONF"; + case K_CM_MPTY_SPLIT: return "CM_MPTY_SPLIT"; +#endif + + case K_CM_ENABLE_DTMF_SUPPRESSION: return "CM_ENABLE_DTMF_SUPPRESSION"; + case K_CM_DISABLE_DTMF_SUPPRESSION: return "CM_DISABLE_DTMF_SUPPRESSION"; + case K_CM_ENABLE_AUDIO_EVENTS: return "CM_ENABLE_AUDIO_EVENTS"; + case K_CM_DISABLE_AUDIO_EVENTS: return "CM_DISABLE_AUDIO_EVENTS"; + case K_CM_ENABLE_CALL_PROGRESS: return "CM_ENABLE_CALL_PROGRESS"; + case K_CM_DISABLE_CALL_PROGRESS: return "CM_DISABLE_CALL_PROGRESS"; + case K_CM_FLASH: return "CM_FLASH"; + case K_CM_ENABLE_PULSE_DETECTION: return "CM_ENABLE_PULSE_DETECTION"; + case K_CM_DISABLE_PULSE_DETECTION: return "CM_DISABLE_PULSE_DETECTION"; + case K_CM_ENABLE_ECHO_CANCELLER: return "CM_ENABLE_ECHO_CANCELLER"; + case K_CM_DISABLE_ECHO_CANCELLER: return "CM_DISABLE_ECHO_CANCELLER"; + case K_CM_ENABLE_AGC: return "CM_ENABLE_AGC"; + case K_CM_DISABLE_AGC: return "CM_DISABLE_AGC"; + case K_CM_ENABLE_HIGH_IMP_EVENTS: return "CM_ENABLE_HIGH_IMP_EVENTS"; + case K_CM_DISABLE_HIGH_IMP_EVENTS: return "CM_DISABLE_HIGH_IMP_EVENTS"; + +#if K3L_AT_LEAST(1,6,0) + case K_CM_ENABLE_CALL_ANSWER_INFO: return "CM_ENABLE_CALL_ANSWER_INFO"; + case K_CM_DISABLE_CALL_ANSWER_INFO: return "CM_DISABLE_CALL_ANSWER_INFO"; +#endif + + case K_CM_RESET_LINK: return "CM_RESET_LINK"; + +#if K3L_AT_LEAST(1,6,0) + case K_CM_CLEAR_LINK_ERROR_COUNTER: return "CM_CLEAR_LINK_ERROR_COUNTER"; +#endif + + case K_CM_SEND_DTMF: return "CM_SEND_DTMF"; + case K_CM_STOP_AUDIO: return "CM_STOP_AUDIO"; + case K_CM_HARD_RESET: return "CM_HARD_RESET"; + + case K_CM_SEND_TO_CTBUS: return "CM_SEND_TO_CTBUS"; + case K_CM_RECV_FROM_CTBUS: return "CM_RECV_FROM_CTBUS"; + case K_CM_SETUP_H100: return "CM_SETUP_H100"; + + case K_CM_MIXER: return "CM_MIXER"; + case K_CM_CLEAR_MIXER: return "CM_CLEAR_MIXER"; + case K_CM_PLAY_FROM_FILE: return "CM_PLAY_FROM_FILE"; + case K_CM_RECORD_TO_FILE: return "CM_RECORD_TO_FILE"; + case K_CM_PLAY_FROM_STREAM: return "CM_PLAY_FROM_STREAM"; + case K_CM_STOP_PLAY: return "CM_STOP_PLAY"; + case K_CM_STOP_RECORD: return "CM_STOP_RECORD"; + case K_CM_PAUSE_PLAY: return "CM_PAUSE_PLAY"; + case K_CM_PAUSE_RECORD: return "CM_PAUSE_RECORD"; + case K_CM_INCREASE_VOLUME: return "CM_INCREASE_VOLUME"; + case K_CM_DECREASE_VOLUME: return "CM_DECREASE_VOLUME"; + case K_CM_LISTEN: return "CM_LISTEN"; + case K_CM_STOP_LISTEN: return "CM_STOP_LISTEN"; + case K_CM_PREPARE_FOR_LISTEN: return "CM_PREPARE_FOR_LISTEN"; + + case K_CM_PLAY_SOUND_CARD: return "CM_PLAY_SOUND_CARD"; + case K_CM_STOP_SOUND_CARD: return "CM_STOP_SOUND_CARD"; + + case K_CM_MIXER_CTBUS: return "CM_MIXER_CTBUS"; + case K_CM_PLAY_FROM_STREAM_EX: return "CM_PLAY_FROM_STREAM_EX"; + case K_CM_ENABLE_PLAYER_AGC: return "CM_ENABLE_PLAYER_AGC"; + case K_CM_DISABLE_PLAYER_AGC: return "CM_DISABLE_PLAYER_AGC"; + case K_CM_START_STREAM_BUFFER: return "CM_START_STREAM_BUFFER"; + case K_CM_ADD_STREAM_BUFFER: return "CM_ADD_STREAM_BUFFER"; + case K_CM_STOP_STREAM_BUFFER: return "CM_STOP_STREAM_BUFFER"; + case K_CM_SEND_BEEP: return "CM_SEND_BEEP"; + case K_CM_SEND_BEEP_CONF: return "CM_SEND_BEEP_CONF"; + case K_CM_ADD_TO_CONF: return "CM_ADD_TO_CONF"; + case K_CM_REMOVE_FROM_CONF: return "CM_REMOVE_FROM_CONF"; + case K_CM_RECORD_TO_FILE_EX: return "CM_RECORD_TO_FILE_EX"; + +#if K3L_AT_LEAST(1,5,4) + case K_CM_SET_VOLUME: return "CM_SET_VOLUME"; +#endif + case K_CM_SET_LINE_CONDITION: return "CM_SET_LINE_CONDITION"; + case K_CM_SEND_LINE_CONDITION: return "CM_SEND_LINE_CONDITION"; + case K_CM_SET_CALLER_CATEGORY: return "CM_SET_CALLER_CATEGORY"; + case K_CM_DIAL_MFC: return "CM_DIAL_MFC"; + + case K_CM_INTERNAL_PLAY: return "CM_INTERNAL_PLAY"; + case K_CM_RESUME_PLAY: return "CM_RESUME_PLAY"; + case K_CM_RESUME_RECORD: return "CM_RESUME_RECORD"; + case K_CM_INTERNAL_PLAY_EX: return "CM_INTERNAL_PLAY_EX"; +#if !K3L_AT_LEAST(2,0,0) + case K_CM_PING: return "CM_PING"; +#if K3L_AT_LEAST(1,6,0) + case K_CM_LOG_REQUEST: return "CM_LOG_REQUEST"; + case K_CM_LOG_CREATE_DISPATCHER: return "CM_LOG_CREATE_DISPATCHER"; + case K_CM_LOG_DESTROY_DISPATCHER: return "CM_LOG_DESTROY_DISPATCHER"; +#endif +#endif + +#if K3L_AT_LEAST(1,6,0) + case K_CM_START_CADENCE: return "CM_START_CADENCE"; + case K_CM_STOP_CADENCE: return "CM_STOP_CADENCE"; + case K_CM_CHECK_NEW_SMS: return "CM_CHECK_NEW_SMS"; + case K_CM_SEND_TO_MODEM: return "CM_SEND_TO_MODEM"; +#endif +#if K3L_AT_LEAST(2,1,0) + case K_CM_START_FAX_TX: return "CM_START_FAX_TX"; + case K_CM_STOP_FAX_TX: return "CM_STOP_FAX_TX"; + case K_CM_ADD_FAX_FILE: return "CM_ADD_FAX_FILE"; + case K_CM_ADD_FAX_PAGE_BREAK: return "CM_ADD_FAX_PAGE_BREAK"; + case K_CM_START_FAX_RX: return "CM_START_FAX_RX"; + case K_CM_STOP_FAX_RX: return "CM_STOP_FAX_RX"; + case K_CM_SIM_CARD_SELECT: return "CM_SIM_CARD_SELECT"; +#endif + +#if K3L_AT_LEAST(2,1,0) + case K_CM_NOTIFY_WATCHDOG: return "CM_NOTIFY_WATCHDOG"; + case K_CM_STOP_WATCHDOG: return "CM_STOP_WATCHDOG"; + case K_CM_WATCHDOG_COUNT: return "CM_WATCHDOG_COUNT"; + case K_CM_START_WATCHDOG: return "CM_START_WATCHDOG"; +#endif + + } + + return STG(FMT("[command='%d']") % code); +} + +std::string Verbose::eventName(int32 code) +{ + switch ((kevent)code) + { + case K_EV_CHANNEL_FREE: return "EV_CHANNEL_FREE"; + case K_EV_CONNECT: return "EV_CONNECT"; + case K_EV_DISCONNECT: return "EV_DISCONNECT"; + case K_EV_CALL_SUCCESS: return "EV_CALL_SUCCESS"; + case K_EV_CALL_FAIL: return "EV_CALL_FAIL"; + case K_EV_NO_ANSWER: return "EV_NO_ANSWER"; + case K_EV_BILLING_PULSE: return "EV_BILLING_PULSE"; + case K_EV_SEIZE_SUCCESS: return "EV_SEIZE_SUCCESS"; + case K_EV_SEIZE_FAIL: return "EV_SEIZE_FAIL"; + case K_EV_SEIZURE_START: return "EV_SEIZURE_START"; + case K_EV_CAS_LINE_STT_CHANGED: return "EV_CAS_LINE_STT_CHANGED"; + case K_EV_CAS_MFC_RECV: return "EV_CAS_MFC_RECV"; + +#if K3L_AT_LEAST(1,5,0) + case K_EV_NEW_CALL: return "EV_NEW_CALL"; +#endif + +#if K3L_AT_LEAST(1,5,1) + case K_EV_USER_INFORMATION: return "EV_USER_INFORMATION"; +#endif + +#if K3L_AT_LEAST(1,5,3) + case K_EV_DIALED_DIGIT: return "EV_DIALED_DIGIT"; +#endif + +#if K3L_AT_LEAST(1,6,0) + case K_EV_SIP_REGISTER_INFO: return "EV_SIP_REGISTER_INFO"; +#endif + +#if K3L_AT_LEAST(1,4,0) + case K_EV_CALL_HOLD_START: return "EV_CALL_HOLD_START"; + case K_EV_CALL_HOLD_STOP: return "EV_CALL_HOLD_STOP"; +#endif + +#if K3L_AT_LEAST(1,6,0) + case K_EV_SS_TRANSFER_FAIL: return "EV_SS_TRANSFER_FAIL"; + case K_EV_FLASH: return "EV_FLASH"; +#endif + + case K_EV_DTMF_DETECTED: return "EV_DTMF_DETECTED"; + case K_EV_DTMF_SEND_FINISH: return "EV_DTMF_SEND_FINISH"; + case K_EV_AUDIO_STATUS: return "EV_AUDIO_STATUS"; + case K_EV_CADENCE_RECOGNIZED: return "EV_CADENCE_RECOGNIZED"; + + case K_EV_END_OF_STREAM: return "EV_END_OF_STREAM"; + case K_EV_PULSE_DETECTED: return "EV_PULSE_DETECTED"; + +#if K3L_AT_LEAST(1,5,1) + case K_EV_POLARITY_REVERSAL: return "EV_POLARITY_REVERSAL"; +#endif + +#if K3L_AT_LEAST(1,6,0) + case K_EV_ISDN_PROGRESS_INDICATOR: return "EV_ISDN_PROGRESS_INDICATOR"; + case K_EV_CALL_ANSWER_INFO: return "EV_CALL_ANSWER_INFO"; + case K_EV_COLLECT_CALL: return "EV_COLLECT_CALL"; + case K_EV_SIP_DTMF_DETECTED: return "EV_SIP_DTMF_DETECTED"; + + case K_EV_RECV_FROM_MODEM: return "EV_RECV_FROM_MODEM"; + case K_EV_NEW_SMS: return "EV_NEW_SMS"; + case K_EV_SMS_INFO: return "EV_SMS_INFO"; + case K_EV_SMS_DATA: return "EV_SMS_DATA"; + case K_EV_SMS_SEND_RESULT: return "EV_SMS_SEND_RESULT"; + case K_EV_RING_DETECTED: return "EV_RING_DETECTED"; + case K_EV_PHYSICAL_LINK_DOWN: return "EV_PHYSICAL_LINK_DOWN"; + case K_EV_PHYSICAL_LINK_UP: return "EV_PHYSICAL_LINK_UP"; +#endif +#if K3L_HAS_MPTY_SUPPORT + case K_EV_CALL_MPTY_START: return "EV_CALL_MPTY_START"; + case K_EV_CALL_MPTY_STOP: return "EV_CALL_MPTY_STOP"; + case K_EV_GSM_COMMAND_STATUS: return "EV_GSM_COMMAND_STATUS"; +#endif +#if !K3L_AT_LEAST(2,0,0) + case K_EV_PONG: return "EV_PONG"; +#endif + case K_EV_CHANNEL_FAIL: return "EV_CHANNEL_FAIL"; + case K_EV_REFERENCE_FAIL: return "EV_REFERENCE_FAIL"; + case K_EV_INTERNAL_FAIL: return "EV_INTERNAL_FAIL"; + case K_EV_HARDWARE_FAIL: return "EV_HARDWARE_FAIL"; + case K_EV_LINK_STATUS: return "EV_LINK_STATUS"; + +#if K3L_AT_LEAST(1,4,0) + case K_EV_CLIENT_RECONNECT: return "EV_CLIENT_RECONNECT"; + case K_EV_VOIP_SEIZURE: return "EV_VOIP_SEIZURE"; +#endif + case K_EV_SEIZURE: return "EV_SEIZURE"; +#if K3L_AT_LEAST(2,1,0) + case K_EV_FAX_CHANNEL_FREE: return "EV_FAX_CHANNEL_FREE"; + case K_EV_FAX_FILE_SENT: return "EV_FAX_FILE_SENT"; + case K_EV_FAX_FILE_FAIL: return "EV_FAX_FILE_FAIL"; + /*case K_EV_FAX_MESSAGE_CONFIRMATION:return "EV_FAX_MESSAGE_CONFIRMATION";*/ + case K_EV_FAX_TX_TIMEOUT: return "EV_FAX_TX_TIMEOUT"; + case K_EV_FAX_PAGE_CONFIRMATION:return "EV_FAX_PAGE_CONFIRMATION"; + case K_EV_FAX_REMOTE_INFO: return "EV_FAX_REMOTE_INFO"; +#endif + +#if K3L_AT_LEAST(2,1,0) + case K_EV_WATCHDOG_COUNT: return "EV_WATCHDOG_COUNT"; +#endif + } + + return STG(FMT("[event='%d']") % code); +} + + +#if K3L_AT_LEAST(2,0,0) +std::string Verbose::command(int32 dev, K3L_COMMAND *k3lcmd, R2CountryType r2_country, Verbose::Presentation fmt) +#else +std::string Verbose::command(int32 dev, K3L_COMMAND *k3lcmd, Verbose::Presentation fmt) +#endif +{ +#if K3L_AT_LEAST(2,0,0) + return command(k3lcmd->Cmd, dev, k3lcmd->Object, (const char *) k3lcmd->Params, r2_country, fmt); +#else + return command(k3lcmd->Cmd, dev, k3lcmd->Object, (const char *) k3lcmd->Params, fmt); +#endif +} + +#if K3L_AT_LEAST(2,0,0) +std::string Verbose::command(int32 cmd_code, int32 dev_idx, int32 obj_idx, const char * params, R2CountryType r2_country, Verbose::Presentation fmt) +#else +std::string Verbose::command(int32 cmd_code, int32 dev_idx, int32 obj_idx, const char * params, Verbose::Presentation fmt) +#endif +{ + unsigned short int dev = (unsigned short int) dev_idx; + unsigned short int obj = (unsigned short int) obj_idx; + + kcommand code = (kcommand) cmd_code; + + std::string buf, extra; + + switch (code) + { + case K_CM_SEIZE: + case K_CM_SYNC_SEIZE: + //case K_CM_VOIP_SEIZE://deprecated + case K_CM_DIAL_MFC: + case K_CM_DIAL_DTMF: + + case K_CM_CONNECT: + case K_CM_PRE_CONNECT: + case K_CM_DISCONNECT: + case K_CM_DROP_COLLECT_CALL: + + case K_CM_START_SEND_FAIL: + case K_CM_STOP_SEND_FAIL: + + case K_CM_ENABLE_DTMF_SUPPRESSION: + case K_CM_DISABLE_DTMF_SUPPRESSION: + case K_CM_ENABLE_AUDIO_EVENTS: + case K_CM_DISABLE_AUDIO_EVENTS: + case K_CM_ENABLE_CALL_PROGRESS: + case K_CM_DISABLE_CALL_PROGRESS: + case K_CM_ENABLE_PULSE_DETECTION: + case K_CM_DISABLE_PULSE_DETECTION: + case K_CM_ENABLE_ECHO_CANCELLER: + case K_CM_DISABLE_ECHO_CANCELLER: + case K_CM_ENABLE_AGC: + case K_CM_DISABLE_AGC: + case K_CM_ENABLE_HIGH_IMP_EVENTS: + case K_CM_DISABLE_HIGH_IMP_EVENTS: + + case K_CM_FLASH: + case K_CM_RESET_LINK: + case K_CM_CLEAR_MIXER: + + case K_CM_LOCK_INCOMING: + case K_CM_UNLOCK_INCOMING: + case K_CM_LOCK_OUTGOING: + case K_CM_UNLOCK_OUTGOING: + + case K_CM_INCREASE_VOLUME: + case K_CM_DECREASE_VOLUME: + + case K_CM_STOP_RECORD: + case K_CM_PAUSE_RECORD: + case K_CM_RESUME_RECORD: + + case K_CM_STOP_LISTEN: + + case K_CM_PLAY_SOUND_CARD: + case K_CM_STOP_SOUND_CARD: + case K_CM_RINGBACK: +#if K3L_AT_LEAST(1,4,0) && !K3L_AT_LEAST(2,0,0) + case K_CM_VOIP_START_DEBUG: + case K_CM_VOIP_STOP_DEBUG: + case K_CM_VOIP_DUMP_STAT: +#endif + +#if K3L_AT_LEAST(1,5,3) + case K_CM_END_OF_NUMBER: +#endif + +#if K3L_AT_LEAST(1,5,4) + case K_CM_SET_VOLUME: +#endif + +#if K3L_AT_LEAST(1,6,0) + case K_CM_ENABLE_CALL_ANSWER_INFO: + case K_CM_DISABLE_CALL_ANSWER_INFO: + + case K_CM_SS_TRANSFER: + + case K_CM_CHECK_NEW_SMS: + case K_CM_GET_SMS: + case K_CM_PREPARE_SMS: + case K_CM_SEND_SMS: + + case K_CM_START_CADENCE: + case K_CM_STOP_CADENCE: + case K_CM_SEND_TO_MODEM: +#endif +#if K3L_HAS_MPTY_SUPPORT + case K_CM_HOLD_SWITCH: + case K_CM_MPTY_CONF: + case K_CM_MPTY_SPLIT: +#endif +#if K3L_AT_LEAST(2,1,0) + case K_CM_SIM_CARD_SELECT: +#endif + if (params != NULL) + { + extra += "param='"; + extra += (params ? params : ""); + extra += "'"; + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + } + else + { + return show(buf, commandName(code), Target(CHANNEL, dev, obj)); + } + + case K_CM_SEND_DTMF: /* ?? */ + return show(buf, commandName(code), Target(CHANNEL, dev, obj)); + + /****/ + + case K_CM_STOP_AUDIO: + extra = "stop='"; + switch ((params ? (int)(*params) : -1)) + { + case 1: extra += "tx"; + case 2: extra += "rx"; + case 3: extra += "tx+rx"; + default: extra += ""; + } + extra = "'"; + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + + /****/ + +#if K3L_AT_LEAST(1,5,2) && !K3L_AT_LEAST(2,0,0) + case K_CM_ISDN_DEBUG: + extra = "flags='"; + extra += isdnDebug((unsigned long)params); + extra += "'"; + + return show(buf, commandName(code), Target(NONE), extra); +#endif + + /****/ + +#if K3L_AT_LEAST(1,5,1) + case K_CM_USER_INFORMATION: +#endif + if (params != NULL) + { + KUserInformation * userinfo = (KUserInformation *)params; + + std::string tmp((const char*) userinfo->UserInfo, userinfo->UserInfoLength); + + extra = STG(FMT("proto='%d',length='%d',data='%s'") + % userinfo->ProtocolDescriptor % userinfo->UserInfoLength % tmp); + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + } + else + { + return show(buf, commandName(code), Target(CHANNEL, dev, obj)); + } + + /****/ + + + + case K_CM_CAS_CHANGE_LINE_STT: + { + const char status = (params ? *params : 0x00); + + extra += "status='"; + extra += (status & 0x01 ? "1" : "0"); + extra += (status & 0x02 ? "1" : "0"); + extra += (status & 0x04 ? "1" : "0"); + extra += (status & 0x08 ? "1" : "0"); + extra += "'"; + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + } + + case K_CM_CAS_SEND_MFC: + { + char mfc = (params ? *params : 0xff); + + extra = STG(FMT("mfc='%d'") % (int) mfc); + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + } + + case K_CM_CAS_SET_MFC_DETECT_MODE: + { + int mode = (params ? *((int *)params) : -1); + + extra = STG(FMT("mode='%d'") % mode); + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + } + + case K_CM_SET_FORWARD_CHANNEL: + { + int channel = (params ? *((int*) params) : -1); + + extra = STG(FMT("forward='%03d'") % channel); + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + } + +#if K3L_AT_LEAST(1,5,0) + case K_CM_MAKE_CALL: + extra = "options='"; + extra += (params ? params : ""); + extra += "'"; + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); +#endif + + case K_CM_MIXER: + case K_CM_MIXER_CTBUS: + { + if (params) + { + KMixerCommand *m = (KMixerCommand*)params; + + std::string src = mixerSource((KMixerSource)m->Source); + std::string idx(""); + + switch (m->Source) + { + case kmsChannel: + case kmsPlay: + case kmsCTbus: +#if (K3L_AT_LEAST(1,4,0) && !K3L_AT_LEAST(1,6,0)) + case kmsVoIP: +#endif +#if K3L_AT_LEAST(1,6,0) + case kmsNoDelayChannel: +#endif + idx = STG(FMT("%02d") % (int)m->SourceIndex); + break; + + case kmsGenerator: + idx = mixerTone((KMixerTone)m->SourceIndex); + break; + }; + + extra = STG(FMT("track='%d',src='%s',index='%s'") % (int)m->Track % src % idx); + } + else + { + extra = ""; + } + + return show(buf, commandName(code), Target(MIXER, dev, obj), extra); + }; + + case K_CM_PLAY_FROM_FILE: + extra = "file='"; + extra += (params ? params : ""); + extra += "'"; + + return show(buf, commandName(code), Target(PLAYER, dev, obj), extra); + + case K_CM_RECORD_TO_FILE: + extra = "file='"; + extra += (params ? params : ""); + extra += "'"; + + return show(buf, commandName(code), Target(PLAYER, dev, obj), extra); + + case K_CM_RECORD_TO_FILE_EX: + extra = "params='"; + extra += (params ? params : ""); + extra += "'"; + + return show(buf, commandName(code), Target(PLAYER, dev, obj), extra); + + case K_CM_PLAY_FROM_STREAM: + case K_CM_ADD_STREAM_BUFFER: + { + struct buffer_param + { + const void * ptr; + const int size; + } + *p = (buffer_param *) params; + + std::stringstream stream; + + extra = STG(FMT("buffer='%p',size='%d'") + % (const void *) p->ptr % (const int) p->size); + + return show(buf, commandName(code), Target(PLAYER, dev, obj), extra); + } + + case K_CM_PLAY_FROM_STREAM_EX: + { + struct buffer_param + { + const void * ptr; + const int size; + const char codec; + } + *p = (buffer_param *) params; + + std::string codec; + + switch (p->codec) + { + case 0: codec = "A-Law"; + case 1: codec = "PCM-08khz"; + case 2: codec = "PCM-11khz"; + default: codec = ""; + } + + std::stringstream stream; + + extra = STG(FMT("buffer='%p',size='%d',codec='%s'") + % (const void *) p->ptr % (const int) p->size % codec); + + return show(buf, commandName(code), Target(PLAYER, dev, obj), extra); + } + + case K_CM_STOP_PLAY: + case K_CM_PAUSE_PLAY: + case K_CM_RESUME_PLAY: + + case K_CM_START_STREAM_BUFFER: + case K_CM_STOP_STREAM_BUFFER: + + case K_CM_ENABLE_PLAYER_AGC: + case K_CM_DISABLE_PLAYER_AGC: + + case K_CM_SEND_BEEP: + case K_CM_SEND_BEEP_CONF: + + case K_CM_INTERNAL_PLAY: + case K_CM_INTERNAL_PLAY_EX: + return show(buf, commandName(code), Target(PLAYER, dev, obj)); + + case K_CM_ADD_TO_CONF: + extra += "conference='"; + extra += (params ? (int) (*params) : -1); + extra += "'"; + + return show(buf, commandName(code), Target(MIXER, dev, obj), extra); + + case CM_REMOVE_FROM_CONF: + return show(buf, commandName(code), Target(MIXER, dev, obj)); + + case K_CM_LISTEN: + case K_CM_PREPARE_FOR_LISTEN: + { + int msecs = (params ? *((int*)params) : -1); + + extra = STG(FMT("msecs='%d'") % msecs); + + return show(buf, commandName(code), Target(PLAYER, dev, obj), extra); + } + + case K_CM_SEND_TO_CTBUS: + case K_CM_RECV_FROM_CTBUS: + { + KCtbusCommand *p = (KCtbusCommand*)(params); + + extra = STG(FMT("stream='%02d',timeslot='%02d',enable='%d'") + % (int)p->Stream % (int)p->TimeSlot % (int)p->Enable); + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + } + + case K_CM_SET_LINE_CONDITION: + case K_CM_SEND_LINE_CONDITION: + extra = "condition='"; +#if K3L_AT_LEAST(2,0,0) + extra += signGroupB((KSignGroupB) *((int *) params), r2_country); +#else + extra += signGroupB((KSignGroupB) *((int *) params)); +#endif + extra += "'"; + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + + case K_CM_SET_CALLER_CATEGORY: + extra = "category='"; +#if K3L_AT_LEAST(2,0,0) + extra += signGroupII((KSignGroupII) *((int *) params), r2_country); +#else + extra += signGroupII((KSignGroupII) *((int *) params)); +#endif + extra += "'"; + + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + +#if K3L_AT_LEAST(1,6,0) + case K_CM_CLEAR_LINK_ERROR_COUNTER: + return show(buf, commandName(code), Target(LINK, dev, obj)); + + case K_CM_SIP_REGISTER: + if (params != NULL) + { + extra += "param='"; + extra += (params ? params : ""); + extra += "'"; + + return show(buf, commandName(code), Target(DEVICE, dev), extra); + } + else + { + return show(buf, commandName(code), Target(DEVICE, dev)); + } +#endif + + case K_CM_SETUP_H100: + extra += "option='"; + extra += h100configIndex((KH100ConfigIndex)obj_idx); + extra += "'value='"; + extra += (params ? STG(FMT("%02d") % (int)(*params)) : ""); + extra += "'"; + + return show(buf, commandName(code), Target(DEVICE, dev), extra); + + case K_CM_HARD_RESET: + return show(buf, commandName(code), Target(LINK, dev, obj)); + +#if !K3L_AT_LEAST(2,0,0) + /* como funciona? */ + case K_CM_LOG_REQUEST: + case K_CM_LOG_CREATE_DISPATCHER: + case K_CM_LOG_DESTROY_DISPATCHER: + + case K_CM_PING: +#endif + return show(buf, commandName(code), Target(NONE)); +#if K3L_AT_LEAST(2,1,0) + case K_CM_START_FAX_TX: + case K_CM_START_FAX_RX: + case K_CM_ADD_FAX_FILE: + extra = "params='"; + extra += (params ? params : ""); + extra += "'"; + return show(buf, commandName(code), Target(CHANNEL, dev, obj), extra); + case K_CM_STOP_FAX_TX: + case K_CM_STOP_FAX_RX: + case K_CM_ADD_FAX_PAGE_BREAK: + return show(buf, commandName(code), Target(CHANNEL, dev, obj)); +#endif + +#if K3L_AT_LEAST(2,1,0) + case K_CM_NOTIFY_WATCHDOG: + case K_CM_STOP_WATCHDOG: + case K_CM_START_WATCHDOG: + return show(buf, commandName(code) , Target(DEVICE, obj)); + case K_CM_WATCHDOG_COUNT: + return show(buf, commandName(code) , Target(NONE)); +#endif + + } + + /* default command handler */ + return show(buf, commandName(code), Target(CHANNEL, dev, obj)); +} + +#if K3L_AT_LEAST(2,0,0) +std::string Verbose::event(KSignaling sig, int32 obj_idx, K3L_EVENT *ev, R2CountryType r2_country, Verbose::Presentation fmt) +#else +std::string Verbose::event(KSignaling sig, int32 obj_idx, K3L_EVENT *ev, Verbose::Presentation fmt) +#endif +{ + unsigned short int dev = (unsigned short int) ev->DeviceId; + unsigned short int obj = (unsigned short int) obj_idx; + + kevent code = (kevent) ev->Code; + + std::string buf, extra; + + switch (code) + { + case K_EV_CHANNEL_FREE: + case K_EV_SEIZE_SUCCESS: + case K_EV_CALL_SUCCESS: + case K_EV_NO_ANSWER: + case K_EV_CONNECT: + case K_EV_DTMF_SEND_FINISH: + case K_EV_SEIZURE_START: + case K_EV_BILLING_PULSE: + case K_EV_REFERENCE_FAIL: + +#if K3L_AT_LEAST(1,4,0) + case K_EV_CALL_HOLD_START: + case K_EV_CALL_HOLD_STOP: +#endif + +#if K3L_AT_LEAST(1,5,0) + case K_EV_NEW_CALL: +#endif + +#if K3L_AT_LEAST(1,6,0) + case K_EV_FLASH: + case K_EV_POLARITY_REVERSAL: + case K_EV_COLLECT_CALL: + case K_EV_SS_TRANSFER_FAIL: + case K_EV_RING_DETECTED: +#endif +#if K3L_HAS_MPTY_SUPPORT + case K_EV_CALL_MPTY_START: + case K_EV_CALL_MPTY_STOP: +#endif + break; + +#if K3L_AT_LEAST(1,6,0) + case K_EV_RECV_FROM_MODEM: + case K_EV_SMS_INFO: + case K_EV_SMS_DATA: + extra = "data='"; + extra += (ev->Params ? (const char *)(ev->Params) : ""); + extra += "'"; + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); +#endif + +#if K3L_AT_LEAST(1,6,0) + case K_EV_SMS_SEND_RESULT: + extra = "result='"; +#if K3L_AT_LEAST(2,0,0) + extra += gsmSmsCause((KGsmSmsCause)ev->AddInfo); +#else + extra += gsmCallCause((KGsmCallCause)ev->AddInfo); +#endif + extra += "'"; + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + +#if K3L_HAS_MPTY_SUPPORT + case K_EV_GSM_COMMAND_STATUS: + extra = "result='"; + extra += gsmMobileCause((KGsmMobileCause)ev->AddInfo); + extra += "'"; + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); +#endif + + case K_EV_CALL_ANSWER_INFO: + extra = "info='"; + extra += callStartInfo((KCallStartInfo)ev->AddInfo); + extra += "'"; + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_NEW_SMS: + if (ev->AddInfo != 0) + { + extra = "messages='"; + extra += STG(FMT("%d") % ev->AddInfo); + extra += "'"; + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + } + else + { + return show(buf, eventName(code), Target(CHANNEL, dev, obj)); + } + + case K_EV_ISDN_PROGRESS_INDICATOR: + if (ev->AddInfo != 0) + { + extra = "indication='"; + extra += q931ProgressIndication((KQ931ProgressIndication)ev->AddInfo); + extra += "'"; + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + } + else + { + return show(buf, eventName(code), Target(CHANNEL, dev, obj)); + } +#endif + + case K_EV_CAS_LINE_STT_CHANGED: + extra = STG(FMT("[a=%d,b=%d,c=%d,d=%d]") + % ((ev->AddInfo & 0x8) >> 3) % ((ev->AddInfo & 0x4) >> 2) + % ((ev->AddInfo & 0x2) >> 1) % (ev->AddInfo & 0x1)); + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_CAS_MFC_RECV: + extra = STG(FMT("digit='%d'") % ev->AddInfo); + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_CALL_FAIL: + extra = "cause='"; +#if K3L_AT_LEAST(2,0,0) + extra += callFail(sig, r2_country, ev->AddInfo); +#else + extra += callFail(sig, ev->AddInfo); +#endif + extra += "'"; + + if (ev->Params != NULL && ev->ParamSize != 0) + { + if (!extra.empty()) + extra += ","; + + extra += "params='"; + extra += (const char *) ev->Params; + extra += "'"; + } + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_DISCONNECT: + switch (sig) + { +#if K3L_AT_LEAST(1,5,1) + case ksigOpenCCS: + case ksigPRI_EndPoint: + case ksigPRI_Network: + case ksigPRI_Passive: + extra = "cause='"; + extra += isdnCause((KQ931Cause) ev->AddInfo); + extra += "'"; +#endif + default: + break; + } + + if (ev->Params != NULL && ev->ParamSize != 0) + { + if (!extra.empty()) + extra += ","; + + extra += "params='"; + extra += (const char *) ev->Params; + extra += "'"; + } + + if (!extra.empty()) + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + else + return show(buf, eventName(code), Target(CHANNEL, dev, obj)); + + break; + +#if K3L_AT_LEAST(1,6,0) + case K_EV_SIP_DTMF_DETECTED: +#endif + case K_EV_DTMF_DETECTED: + case K_EV_PULSE_DETECTED: + case K_EV_DIALED_DIGIT: + extra = STG(FMT("digit='%c'") % (char)ev->AddInfo); + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_SEIZURE: + { + KIncomingSeizeParams *n = (KIncomingSeizeParams *) + ( ((char*)ev) + sizeof(K3L_EVENT) ); + + extra += "orig_addr='"; + extra += n->NumberA; + extra += "',dest_addr='"; + extra += n->NumberB; + extra += "'"; + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + } + +#if K3L_AT_LEAST(1,4,0) + case K_EV_VOIP_SEIZURE: + { + char *numB = ((char*)ev) + sizeof(K3L_EVENT); + char *numA = numB + 61; + + extra = "numberA='"; + extra += numA; + extra += "',numberB='"; + extra += numB; + extra += "'"; + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + } +#endif + + + case K_EV_END_OF_STREAM: + return show(buf, eventName(code), Target(PLAYER, dev, obj)); + + case K_EV_AUDIO_STATUS: + extra = "tone='"; + extra += mixerTone((KMixerTone)ev->AddInfo); + extra += "'"; + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_CADENCE_RECOGNIZED: + extra = STG(FMT("cadence='%c'") % (char)(ev->AddInfo)); + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_CHANNEL_FAIL: + extra = "reason='"; + extra += channelFail(sig, ev->AddInfo); + extra += "'"; + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_SEIZE_FAIL: + extra = "reason='"; + extra += seizeFail((KSeizeFail) ev->AddInfo); + extra += "'"; + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_INTERNAL_FAIL: + extra = "reason='"; + extra += internalFail((KInternalFail) ev->AddInfo); + extra += "'"; + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_HARDWARE_FAIL: + extra = "component='"; + extra += systemObject((KSystemObject) ev->AddInfo); + extra += "'"; + + switch (ev->AddInfo) + { + case ksoChannel: + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + case ksoLink: + return show(buf, eventName(code), Target(LINK, dev, obj), extra); + case ksoLinkMon: + case ksoH100: + case ksoFirmware: + case ksoDevice: + return show(buf, eventName(code), Target(DEVICE, dev), extra); + case ksoAPI: + return show(buf, eventName(code), Target(NONE), extra); + } + + + case K_EV_LINK_STATUS: + // EV_LINK_STATUS has always zero in ObjectInfo (and AddInfo!) + /* fall throught... */ + +#if K3L_AT_LEAST(1,6,0) + case K_EV_PHYSICAL_LINK_UP: + case K_EV_PHYSICAL_LINK_DOWN: + return show(buf, eventName(code), Target(LINK, dev, obj)); +#endif + +#if K3L_AT_LEAST(1,5,1) + case K_EV_USER_INFORMATION: + { + KUserInformation *info = (KUserInformation *)(ev->Params); + + std::string data((const char *)info->UserInfo, + std::min(info->UserInfoLength, KMAX_USER_USER_LEN)); + + extra = STG(FMT("proto='%d',length='%d',data='%s'") + % info->ProtocolDescriptor % info->UserInfoLength % data); + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + } +#endif + +#if K3L_AT_LEAST(1,6,0) + case K_EV_SIP_REGISTER_INFO: + extra = "params='"; + extra += (ev->Params ? (const char *) (ev->Params) : ""); + extra += "',status='"; + extra += sipFailures((KSIP_Failures)(ev->AddInfo)); + extra += "'"; + + return show(buf, eventName(code), Target(DEVICE, dev), extra); +#endif + +#if !K3L_AT_LEAST(2,0,0) + case K_EV_PONG: +#endif + +#if K3L_AT_LEAST(1,4,0) + case K_EV_CLIENT_RECONNECT: +#endif + return show(buf, eventName(code), Target(NONE)); + +#if K3L_AT_LEAST(2,1,0) + case K_EV_FAX_CHANNEL_FREE: + extra = "status='"; + extra += faxResult((KFaxResult)ev->AddInfo); + extra += "'"; + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_FAX_FILE_SENT: + extra = "filename='"; + extra += (ev->Params ? (const char *) (ev->Params) : ""); + extra += "'"; + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_FAX_FILE_FAIL: + extra = "cause='"; + extra += faxFileErrorCause((KFaxFileErrorCause)ev->AddInfo); + extra += "',filename='"; + extra += (ev->Params ? (const char *) (ev->Params) : ""); + extra += "'"; + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + case K_EV_FAX_REMOTE_INFO: + extra = ((ev->Params && ev->ParamSize != 0) ? (const char *) ev->Params : ""); + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + + /*case K_EV_FAX_MESSAGE_CONFIRMATION:*/ + case K_EV_FAX_PAGE_CONFIRMATION: + case K_EV_FAX_TX_TIMEOUT: + return show(buf, eventName(code), Target(CHANNEL, dev, obj)); +#endif + +#if K3L_AT_LEAST(2,1,0) + case K_EV_WATCHDOG_COUNT: + extra = STG(FMT("count='%d'") % (char)ev->AddInfo); + return show(buf , eventName(code), Target(NONE), extra); +#endif + + } + + // default handler... + if (ev->Params != NULL && ev->ParamSize != 0) + { + extra += "params='"; + extra.append((const char *) ev->Params, (unsigned int) std::max(ev->ParamSize - 1, 0)); + extra += "'"; + + return show(buf, eventName(code), Target(CHANNEL, dev, obj), extra); + } + else + return show(buf, eventName(code), Target(CHANNEL, dev, obj)); +} + +/********************************************/ + +std::string Verbose::show(std::string & buf, std::string name, Target tgt, std::string & extra) +{ + if (tgt.type == NONE) + { + generate(buf, name, tgt, extra); + } + else + { + std::string tmp(","); + tmp += extra; + + generate(buf, name, tgt, tmp); + } + + return buf; +} + +std::string Verbose::show(std::string & buf, std::string name, Target tgt) +{ + std::string tmp(""); + + generate(buf, name, tgt, tmp); + return buf; +} + +void Verbose::generate(std::string &buf, std::string &name, Target tgt, std::string &extra) +{ + switch (tgt.type) + { + case NONE: + if (extra.empty()) + buf += STG(FMT("<%s>") % name); + else + buf += STG(FMT("<%s> (%s)") % name % extra); + break; + + case DEVICE: + buf += STG(FMT("<%s> (d=%02d%s)") + % name % tgt.device % extra); + break; + + default: + { + const char *kind = "o"; + + switch (tgt.type) + { + case CHANNEL: + kind = "c"; + break; + case PLAYER: + kind = "p"; + break; + case MIXER: + kind = "m"; + break; + case LINK: + kind = "l"; + default: + break; + } + + buf += STG(FMT("<%s> (d=%02d,%s=%03d%s)") + % name % tgt.device % kind % tgt.object % extra); + break; + } + } +} + diff --git a/src/mod/endpoints/mod_khomp/commons/verbose.hpp b/src/mod/endpoints/mod_khomp/commons/verbose.hpp new file mode 100644 index 0000000000..4668ea6a9f --- /dev/null +++ b/src/mod/endpoints/mod_khomp/commons/verbose.hpp @@ -0,0 +1,505 @@ +/* + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2009 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and replace them + with the notice and other provisions required by the LGPL License. If you do not + delete the provisions above, a recipient may use your version of this file under + either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include +#include + +#include + +// k3lApiMajorVersion +#ifndef CM_PING +# include +# include +#endif + +#include +#include +#include + +#ifndef _VERBOSE_HPP_ +#define _VERBOSE_HPP_ + +struct Verbose +{ + typedef enum + { + K_CM_SEIZE = CM_SEIZE, + K_CM_SYNC_SEIZE = CM_SYNC_SEIZE, +#if K3L_AT_LEAST(1,6,0) + K_CM_SIP_REGISTER = CM_SIP_REGISTER, +#endif + K_CM_DIAL_DTMF = CM_DIAL_DTMF, + K_CM_DISCONNECT = CM_DISCONNECT, + K_CM_CONNECT = CM_CONNECT, + K_CM_PRE_CONNECT = CM_PRE_CONNECT, + K_CM_CAS_CHANGE_LINE_STT = CM_CAS_CHANGE_LINE_STT, + K_CM_CAS_SEND_MFC = CM_CAS_SEND_MFC, + K_CM_SET_FORWARD_CHANNEL = CM_SET_FORWARD_CHANNEL, + K_CM_CAS_SET_MFC_DETECT_MODE = CM_CAS_SET_MFC_DETECT_MODE, + K_CM_DROP_COLLECT_CALL = CM_DROP_COLLECT_CALL, + K_CM_MAKE_CALL = CM_MAKE_CALL, + K_CM_RINGBACK = CM_RINGBACK, + K_CM_USER_INFORMATION = CM_USER_INFORMATION, +#if !K3L_AT_LEAST(2,2,0) + K_CM_VOIP_SEIZE = CM_VOIP_SEIZE, //deprecated +#endif + K_CM_LOCK_INCOMING = CM_LOCK_INCOMING, + K_CM_UNLOCK_INCOMING = CM_UNLOCK_INCOMING, + K_CM_LOCK_OUTGOING = CM_LOCK_OUTGOING, + K_CM_UNLOCK_OUTGOING = CM_UNLOCK_OUTGOING, + K_CM_START_SEND_FAIL = CM_START_SEND_FAIL, + K_CM_STOP_SEND_FAIL = CM_STOP_SEND_FAIL, + K_CM_END_OF_NUMBER = CM_END_OF_NUMBER, +#if K3L_AT_LEAST(1,6,0) + K_CM_SS_TRANSFER = CM_SS_TRANSFER, + K_CM_GET_SMS = CM_GET_SMS, + K_CM_PREPARE_SMS = CM_PREPARE_SMS, + K_CM_SEND_SMS = CM_SEND_SMS, +#endif +#if K3L_HAS_MPTY_SUPPORT + K_CM_HOLD_SWITCH = CM_HOLD_SWITCH, + K_CM_MPTY_CONF = CM_MPTY_CONF, + K_CM_MPTY_SPLIT = CM_MPTY_SPLIT, +#endif + K_CM_ENABLE_DTMF_SUPPRESSION = CM_ENABLE_DTMF_SUPPRESSION, + K_CM_DISABLE_DTMF_SUPPRESSION = CM_DISABLE_DTMF_SUPPRESSION, + K_CM_ENABLE_AUDIO_EVENTS = CM_ENABLE_AUDIO_EVENTS, + K_CM_DISABLE_AUDIO_EVENTS = CM_DISABLE_AUDIO_EVENTS, + K_CM_ENABLE_CALL_PROGRESS = CM_ENABLE_CALL_PROGRESS, + K_CM_DISABLE_CALL_PROGRESS = CM_DISABLE_CALL_PROGRESS, + K_CM_FLASH = CM_FLASH, + K_CM_ENABLE_PULSE_DETECTION = CM_ENABLE_PULSE_DETECTION, + K_CM_DISABLE_PULSE_DETECTION = CM_DISABLE_PULSE_DETECTION, + K_CM_ENABLE_ECHO_CANCELLER = CM_ENABLE_ECHO_CANCELLER, + K_CM_DISABLE_ECHO_CANCELLER = CM_DISABLE_ECHO_CANCELLER, + K_CM_ENABLE_AGC = CM_ENABLE_AGC, + K_CM_DISABLE_AGC = CM_DISABLE_AGC, + K_CM_ENABLE_HIGH_IMP_EVENTS = CM_ENABLE_HIGH_IMP_EVENTS, + K_CM_DISABLE_HIGH_IMP_EVENTS = CM_DISABLE_HIGH_IMP_EVENTS, +#if K3L_AT_LEAST(1,6,0) + K_CM_ENABLE_CALL_ANSWER_INFO = CM_ENABLE_CALL_ANSWER_INFO, + K_CM_DISABLE_CALL_ANSWER_INFO = CM_DISABLE_CALL_ANSWER_INFO, +#endif + K_CM_RESET_LINK = CM_RESET_LINK, +#if K3L_AT_LEAST(1,6,0) + K_CM_CLEAR_LINK_ERROR_COUNTER = CM_CLEAR_LINK_ERROR_COUNTER, +#endif + K_CM_SEND_DTMF = CM_SEND_DTMF, + K_CM_STOP_AUDIO = CM_STOP_AUDIO, + K_CM_HARD_RESET = CM_HARD_RESET, + K_CM_SEND_TO_CTBUS = CM_SEND_TO_CTBUS, + K_CM_RECV_FROM_CTBUS = CM_RECV_FROM_CTBUS, + K_CM_SETUP_H100 = CM_SETUP_H100, + K_CM_MIXER = CM_MIXER, + K_CM_CLEAR_MIXER = CM_CLEAR_MIXER, + K_CM_PLAY_FROM_FILE = CM_PLAY_FROM_FILE, + K_CM_RECORD_TO_FILE = CM_RECORD_TO_FILE, + K_CM_PLAY_FROM_STREAM = CM_PLAY_FROM_STREAM, + K_CM_INTERNAL_PLAY = CM_INTERNAL_PLAY, + K_CM_STOP_PLAY = CM_STOP_PLAY, + K_CM_STOP_RECORD = CM_STOP_RECORD, + K_CM_PAUSE_PLAY = CM_PAUSE_PLAY, + K_CM_PAUSE_RECORD = CM_PAUSE_RECORD, + K_CM_RESUME_PLAY = CM_RESUME_PLAY, + K_CM_RESUME_RECORD = CM_RESUME_RECORD, + K_CM_INCREASE_VOLUME = CM_INCREASE_VOLUME, + K_CM_DECREASE_VOLUME = CM_DECREASE_VOLUME, + K_CM_LISTEN = CM_LISTEN, + K_CM_STOP_LISTEN = CM_STOP_LISTEN, + K_CM_PREPARE_FOR_LISTEN = CM_PREPARE_FOR_LISTEN, + K_CM_PLAY_SOUND_CARD = CM_PLAY_SOUND_CARD, + K_CM_STOP_SOUND_CARD = CM_STOP_SOUND_CARD, + K_CM_MIXER_CTBUS = CM_MIXER_CTBUS, + K_CM_PLAY_FROM_STREAM_EX = CM_PLAY_FROM_STREAM_EX, + K_CM_INTERNAL_PLAY_EX = CM_INTERNAL_PLAY_EX, + K_CM_ENABLE_PLAYER_AGC = CM_ENABLE_PLAYER_AGC, + K_CM_DISABLE_PLAYER_AGC = CM_DISABLE_PLAYER_AGC, + K_CM_START_STREAM_BUFFER = CM_START_STREAM_BUFFER, + K_CM_ADD_STREAM_BUFFER = CM_ADD_STREAM_BUFFER, + K_CM_STOP_STREAM_BUFFER = CM_STOP_STREAM_BUFFER, + K_CM_SEND_BEEP = CM_SEND_BEEP, + K_CM_SEND_BEEP_CONF = CM_SEND_BEEP_CONF, + K_CM_ADD_TO_CONF = CM_ADD_TO_CONF, + K_CM_REMOVE_FROM_CONF = CM_REMOVE_FROM_CONF, + K_CM_RECORD_TO_FILE_EX = CM_RECORD_TO_FILE_EX, + K_CM_SET_VOLUME = CM_SET_VOLUME, + K_CM_SET_LINE_CONDITION = CM_SET_LINE_CONDITION, + K_CM_SEND_LINE_CONDITION = CM_SEND_LINE_CONDITION, + K_CM_SET_CALLER_CATEGORY = CM_SET_CALLER_CATEGORY, + K_CM_DIAL_MFC = CM_DIAL_MFC, +#if !K3L_AT_LEAST(2,0,0) + K_CM_VOIP_START_DEBUG = CM_VOIP_START_DEBUG, + K_CM_VOIP_STOP_DEBUG = CM_VOIP_STOP_DEBUG, + K_CM_VOIP_DUMP_STAT = CM_VOIP_DUMP_STAT, + K_CM_ISDN_DEBUG = CM_ISDN_DEBUG, + K_CM_PING = CM_PING, + K_CM_LOG_REQUEST = CM_LOG_REQUEST, + K_CM_LOG_CREATE_DISPATCHER = CM_LOG_CREATE_DISPATCHER, + K_CM_LOG_DESTROY_DISPATCHER = CM_LOG_DESTROY_DISPATCHER, +#endif +#if K3L_AT_LEAST(1,6,0) + K_CM_START_CADENCE = CM_START_CADENCE, + K_CM_STOP_CADENCE = CM_STOP_CADENCE, + K_CM_CHECK_NEW_SMS = CM_CHECK_NEW_SMS, + K_CM_SEND_TO_MODEM = CM_SEND_TO_MODEM, +#endif +#if K3L_AT_LEAST(2,1,0) + K_CM_START_FAX_TX = CM_START_FAX_TX, + K_CM_STOP_FAX_TX = CM_STOP_FAX_TX, + K_CM_ADD_FAX_FILE = CM_ADD_FAX_FILE, + K_CM_ADD_FAX_PAGE_BREAK = CM_ADD_FAX_PAGE_BREAK, + K_CM_START_FAX_RX = CM_START_FAX_RX, + K_CM_STOP_FAX_RX = CM_STOP_FAX_RX, + K_CM_SIM_CARD_SELECT = CM_SIM_CARD_SELECT, +#endif + +#if K3L_AT_LEAST(2,1,0) + K_CM_NOTIFY_WATCHDOG = CM_NOTIFY_WATCHDOG, + K_CM_STOP_WATCHDOG = CM_STOP_WATCHDOG, + K_CM_WATCHDOG_COUNT = CM_WATCHDOG_COUNT, + K_CM_START_WATCHDOG = CM_START_WATCHDOG, +#endif + + } + kcommand; + + typedef enum + { + K_EV_CHANNEL_FREE = EV_CHANNEL_FREE, + K_EV_CONNECT = EV_CONNECT, + K_EV_DISCONNECT = EV_DISCONNECT, + K_EV_CALL_SUCCESS = EV_CALL_SUCCESS, + K_EV_CALL_FAIL = EV_CALL_FAIL, + K_EV_NO_ANSWER = EV_NO_ANSWER, + K_EV_BILLING_PULSE = EV_BILLING_PULSE, + K_EV_SEIZE_SUCCESS = EV_SEIZE_SUCCESS, + K_EV_SEIZE_FAIL = EV_SEIZE_FAIL, + K_EV_SEIZURE_START = EV_SEIZURE_START, + K_EV_CAS_LINE_STT_CHANGED = EV_CAS_LINE_STT_CHANGED, + K_EV_CAS_MFC_RECV = EV_CAS_MFC_RECV, + K_EV_NEW_CALL = EV_NEW_CALL, + K_EV_USER_INFORMATION = EV_USER_INFORMATION, + K_EV_DIALED_DIGIT = EV_DIALED_DIGIT, +#if K3L_AT_LEAST(1,6,0) + K_EV_SIP_REGISTER_INFO = EV_SIP_REGISTER_INFO, + K_EV_RING_DETECTED = EV_RING_DETECTED, +#endif + K_EV_CALL_HOLD_START = EV_CALL_HOLD_START, + K_EV_CALL_HOLD_STOP = EV_CALL_HOLD_STOP, +#if K3L_AT_LEAST(1,6,0) + K_EV_SS_TRANSFER_FAIL = EV_SS_TRANSFER_FAIL, + K_EV_FLASH = EV_FLASH, +#endif + K_EV_DTMF_DETECTED = EV_DTMF_DETECTED, + K_EV_DTMF_SEND_FINISH = EV_DTMF_SEND_FINISH, + K_EV_AUDIO_STATUS = EV_AUDIO_STATUS, + K_EV_CADENCE_RECOGNIZED = EV_CADENCE_RECOGNIZED, + K_EV_END_OF_STREAM = EV_END_OF_STREAM, + K_EV_PULSE_DETECTED = EV_PULSE_DETECTED, + K_EV_POLARITY_REVERSAL = EV_POLARITY_REVERSAL, +#if K3L_AT_LEAST(1,6,0) + K_EV_ISDN_PROGRESS_INDICATOR = EV_ISDN_PROGRESS_INDICATOR, + K_EV_CALL_ANSWER_INFO = EV_CALL_ANSWER_INFO, + K_EV_COLLECT_CALL = EV_COLLECT_CALL, + K_EV_SIP_DTMF_DETECTED = EV_SIP_DTMF_DETECTED, + K_EV_RECV_FROM_MODEM = EV_RECV_FROM_MODEM, + K_EV_NEW_SMS = EV_NEW_SMS, + K_EV_SMS_INFO = EV_SMS_INFO, + K_EV_SMS_DATA = EV_SMS_DATA, + K_EV_SMS_SEND_RESULT = EV_SMS_SEND_RESULT, +#endif +#if K3L_HAS_MPTY_SUPPORT + K_EV_CALL_MPTY_START = EV_CALL_MPTY_START, + K_EV_CALL_MPTY_STOP = EV_CALL_MPTY_STOP, + K_EV_GSM_COMMAND_STATUS = EV_GSM_COMMAND_STATUS, +#endif + K_EV_CHANNEL_FAIL = EV_CHANNEL_FAIL, + K_EV_REFERENCE_FAIL = EV_REFERENCE_FAIL, + K_EV_INTERNAL_FAIL = EV_INTERNAL_FAIL, + K_EV_HARDWARE_FAIL = EV_HARDWARE_FAIL, + K_EV_LINK_STATUS = EV_LINK_STATUS, +#if K3L_AT_LEAST(1,6,0) + K_EV_PHYSICAL_LINK_UP = EV_PHYSICAL_LINK_UP, + K_EV_PHYSICAL_LINK_DOWN = EV_PHYSICAL_LINK_DOWN, +#endif + K_EV_CLIENT_RECONNECT = EV_CLIENT_RECONNECT, + K_EV_VOIP_SEIZURE = EV_VOIP_SEIZURE, + K_EV_SEIZURE = EV_SEIZURE, + +#if K3L_AT_LEAST(2,1,0) + K_EV_FAX_CHANNEL_FREE = EV_FAX_CHANNEL_FREE, + K_EV_FAX_FILE_SENT = EV_FAX_FILE_SENT, + K_EV_FAX_FILE_FAIL = EV_FAX_FILE_FAIL, + K_EV_FAX_MESSAGE_CONFIRMATION = EV_FAX_MESSAGE_CONFIRMATION, + K_EV_FAX_TX_TIMEOUT = EV_FAX_TX_TIMEOUT, + K_EV_FAX_PAGE_CONFIRMATION = EV_FAX_PAGE_CONFIRMATION, + K_EV_FAX_REMOTE_INFO = EV_FAX_REMOTE_INFO, +#endif + +#if K3L_AT_LEAST(2,1,0) + K_EV_WATCHDOG_COUNT = EV_WATCHDOG_COUNT, +#endif + +#if !K3L_AT_LEAST(2,0,0) + K_EV_PONG = EV_PONG, +#endif + } + kevent; + + typedef enum + { + R2_COUNTRY_ARG = 1, + R2_COUNTRY_BRA = 2, + R2_COUNTRY_CHI = 3, + R2_COUNTRY_MEX = 4, + R2_COUNTRY_URY = 5, + R2_COUNTRY_VEN = 6 + } + R2CountryType; + + typedef enum + { + HUMAN, + EXACT + } + Presentation; + + /* dynamic (object) stuff */ + + Verbose(K3LAPI & api): _api(api) {}; + +#if K3L_AT_LEAST(2,0,0) + std::string event(int32, K3L_EVENT*, R2CountryType r2_country = R2_COUNTRY_BRA, + Presentation fmt = HUMAN); +#else + std::string event(int32, K3L_EVENT*, Presentation fmt = HUMAN); +#endif + + std::string channelStatus(int32, int32, int32, Presentation fmt = HUMAN); + + /* end of dynamic (object) stuff */ + + protected: + K3LAPI & _api; + + /* used internally */ + struct internal_not_found {}; + + public: + + /* static (class) stuff */ + + static std::string echoLocation(KEchoLocation, Presentation fmt = HUMAN); + static std::string echoCancellerConfig(KEchoCancellerConfig, Presentation fmt = HUMAN); + +#if K3L_AT_LEAST(2,0,0) + static std::string event(KSignaling, int32, K3L_EVENT*, R2CountryType = R2_COUNTRY_BRA, + Presentation fmt = HUMAN); +#else + static std::string event(KSignaling, int32, K3L_EVENT*, Presentation fmt = HUMAN); +#endif + +#if K3L_AT_LEAST(2,0,0) + static std::string command(int32, K3L_COMMAND*, R2CountryType = R2_COUNTRY_BRA, + Presentation fmt = HUMAN); + static std::string command(int32, int32, int32, const char *, R2CountryType = R2_COUNTRY_BRA, + Presentation fmt = HUMAN); +#else + static std::string command(int32, K3L_COMMAND*, Presentation fmt = HUMAN); + static std::string command(int32, int32, int32, const char *, Presentation fmt = HUMAN); +#endif + + + static std::string deviceName(KDeviceType, int32, Presentation fmt = HUMAN); + + static std::string deviceType(KDeviceType, Presentation fmt = HUMAN); + static std::string deviceModel(KDeviceType, int32, Presentation fmt = HUMAN); + + static std::string channelFeatures(int32, Presentation fmt = HUMAN); + static std::string signaling(KSignaling, Presentation fmt = HUMAN); + static std::string systemObject(KSystemObject, Presentation fmt = HUMAN); + static std::string mixerTone(KMixerTone, Presentation fmt = HUMAN); + static std::string mixerSource(KMixerSource, Presentation fmt = HUMAN); + + static std::string seizeFail(KSeizeFail, Presentation fmt = HUMAN); + +#if K3L_AT_LEAST(2,0,0) + static std::string callFail(KSignaling, R2CountryType, int32, Presentation fmt = HUMAN); +#else + static std::string callFail(KSignaling, int32, Presentation fmt = HUMAN); +#endif + + static std::string channelFail(KSignaling, int32, Presentation fmt = HUMAN); + static std::string internalFail(KInternalFail, Presentation fmt = HUMAN); + + static std::string linkErrorCounter(KLinkErrorCounter, Presentation fmt = HUMAN); + + static std::string linkStatus(KSignaling, int32, Presentation fmt = HUMAN); + static std::string channelStatus(KSignaling, int32, Presentation fmt = HUMAN); + static std::string callStatus(KCallStatus, Presentation fmt = HUMAN); + static std::string status(KLibraryStatus, Presentation fmt = HUMAN); + +#if K3L_AT_LEAST(2,0,0) + static std::string signGroupB(KSignGroupB, R2CountryType contry = R2_COUNTRY_BRA, + Presentation fmt = HUMAN); +#else + static std::string signGroupB(KSignGroupB, Presentation fmt = HUMAN); +#endif + +#if K3L_AT_LEAST(2,0,0) + static std::string signGroupII(KSignGroupII, R2CountryType contry = R2_COUNTRY_BRA, + Presentation fmt = HUMAN); +#else + static std::string signGroupII(KSignGroupII, Presentation fmt = HUMAN); +#endif + + static std::string h100configIndex(KH100ConfigIndex, Presentation fmt = HUMAN); + + static std::string eventName(int32); + static std::string commandName(int32); + +#if K3L_AT_LEAST(1,5,0) + static std::string sipFailures(KSIP_Failures, Presentation fmt = HUMAN); +#endif + +#if K3L_AT_LEAST(1,5,1) + static std::string isdnCause(KQ931Cause, Presentation fmt = HUMAN); +#endif + +#if K3L_AT_LEAST(1,5,2) + static std::string isdnDebug(int32, Presentation fmt = HUMAN); +#endif + +#if K3L_AT_LEAST(1,6,0) + static std::string callStartInfo(KCallStartInfo, Presentation fmt = HUMAN); + + static std::string gsmCallCause(KGsmCallCause, Presentation fmt = HUMAN); + static std::string gsmMobileCause(KGsmMobileCause, Presentation fmt = HUMAN); + static std::string gsmSmsCause(KGsmSmsCause, Presentation fmt = HUMAN); + + static std::string q931ProgressIndication(KQ931ProgressIndication, + Presentation fmt = HUMAN); +#endif + +#if K3L_AT_LEAST(2,1,0) + static std::string faxResult(KFaxResult code, Presentation fmt = HUMAN); + static std::string faxFileErrorCause(KFaxFileErrorCause code, Presentation fmt = HUMAN); +#endif + + /* end of static (class) stuff */ + + private: + static std::string internal_deviceType(KDeviceType); + static std::string internal_deviceModel(KDeviceType, int32); + +#if K3L_AT_LEAST(1,5,0) + static std::string internal_sipFailures(KSIP_Failures, Presentation fmt = HUMAN); +#endif +#if K3L_AT_LEAST(1,5,1) + static std::string internal_isdnCause(KQ931Cause, Presentation fmt = HUMAN); +#endif + +#if K3L_AT_LEAST(2,0,0) + static std::string internal_signGroupB(KSignGroupB, R2CountryType contry, Presentation fmt = HUMAN); + static std::string internal_signGroupII(KSignGroupII, R2CountryType contry, Presentation fmt = HUMAN); +#else + static std::string internal_signGroupB(KSignGroupB, Presentation fmt = HUMAN); + static std::string internal_signGroupII(KSignGroupII, Presentation fmt = HUMAN); +#endif + +#if K3L_AT_LEAST(1,6,0) + static std::string internal_gsmCallCause(KGsmCallCause, Presentation fmt = HUMAN); + static std::string internal_gsmMobileCause(KGsmMobileCause, Presentation fmt = HUMAN); + static std::string internal_gsmSmsCause(KGsmSmsCause, Presentation fmt = HUMAN); + + static std::string internal_q931ProgressIndication(KQ931ProgressIndication, Presentation fmt = HUMAN); +#endif + + private: + enum Type + { + DEVICE, + CHANNEL, + PLAYER, + MIXER, + LINK, + NONE + }; + + struct Target + { + Target(Type _type) + : type(_type), device(-1), object(-1) + {}; + + Target(Type _type, int32 _device) + : type(_type), device(_device), object(-1) + {}; + + Target(Type _type, int32 _device, int32 _object) + : type(_type), device(_device), object(_object) + {}; + + Type type; + int32 device; + int32 object; + }; + + static void generate(std::string &, std::string &, Target, std::string &); + + static std::string show(std::string &, std::string, Target, std::string &); + static std::string show(std::string &, std::string, Target); + + template < typename ReturnType > + static ReturnType presentation(Presentation fmt, ReturnType str_exact, ReturnType str_human) + { + switch (fmt) + { + case HUMAN: return str_human; + case EXACT: return str_exact; + }; + + return str_exact; + } +}; + +#endif /* _VERBOSE_HPP_ */ diff --git a/src/mod/endpoints/mod_khomp/docs/Manual.html b/src/mod/endpoints/mod_khomp/docs/Manual.html new file mode 100644 index 0000000000..fc63f0d8f1 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/docs/Manual.html @@ -0,0 +1,1093 @@ +Mod Khomp: Manual +

Considerações iniciais

+

Este documento aborda informações sobre o Endpoint da Khomp como um todo, desde opções disponíveis de configuração, os applications disponibilizados, os possíveis comandos de CLI, entre outros. +

Para procedimentos sobre a instalação, favor consultar o README do Endpoint. +
+

+

Configuração

+

Configurar o Endpoint da Khomp é uma tarefa que consiste de três etapas: +

+
  • Configuração das placas, através da K3L; +
  • Configuração do Endpoint; +
  • Configuração do FreeSWITCH. +
+

Estas etapas são descritas mais detalhadamente abaixo. +
+

+

Configuração da API K3L

+

Esta etapa é realizada de maneira semi-automatizada através do programa khompwizard, um assistente que configura os parâmetros básicos das placas do sistema. Esse assistente inicializa os arquivos de configuração através de informações obtidas do usuário, quando estas forem necessárias, inicializando as configurações menos utilizadas com os valores padrões. +

Normalmente, este programa é executado automaticamente após a instalação do sistema. Entretanto, pode ser necessário executá-lo manualmente caso uma atualização esteja sendo realizada, ou se novas placas foram adicionadas no sistema após a instalação dos drivers da placa. +

Caso seja necessária a configuração de parâmetros avançados da placa e/ou da sinalização, o programa k3lconfig permite acessar todas as configurações disponíveis de cada placa instalada. Para maiores informações sobre este programa, consulte a documentação do mesmo. Para soluções de problemas de sincronismo, consulte a seção Solução de problemas sobre o procedimento de configuração manual das placas. +
+

+

Configuração do Endpoint

+

A configuração padrão do sistema costuma atender à maior parte das necessidades. Entretanto, as configurações do Endpoint da Khomp podem ser modificadas através do arquivo de configuração '/usr/local/freeswitch/conf/autoload_configs/khomp.conf.xml'. +

A lista de opções é a seguinte: +

+

<channels>

+

Define as configurações gerais de todos os canais da Khomp. +

+
Sintaxe: <param name="..." value="..."/>
+
+
  • auto-fax-adjustment: Ativa ("yes") ou desativa ("no") o ajuste automático do canal (desabilitar o cancelador de eco e a supressão DTMF) ao detectar tom de FAX; +
  • auto-gain-control: Ativa ("yes") ou desativa ("no") a ativação do controle automático de ganho (AGC) pelo Endpoint; +
  • context-digital: Contexto de entrada para ligações em placas digitais (o padrão é "khomp-DD-LL", onde "DD" será substituído, no momento da ligação, pelo número do dispositivo, "LL" pelo número do link, "CCC" pelo número do canal e "SSSS" pelo número serial do dispositivo); +
  • context-fxo: Contexto de entrada para placas FXO (o padrão é "khomp-DD-CC", onde "DD" será substituído, no momento da ligação, pelo número do dispositivo, "CC" pelo número do canal, e "SSSS" pelo número serial do dispositivo); +
  • context-fxo-alt: Contexto de entrada alternativo para placas FXO (o padrão é vazio, no entanto quando definido, segue a mesma regra de substituição da opção context-fxo); +
  • context-fxs: Contexto de entrada para placas FXS (o padrão é "khomp-DD-CC", onde "DD" será substituído, no momento da ligação, pelo número do dispositivo, "CC" pelo número do canal, e "SSSS" pelo número serial do dispositivo); +
  • context-fxs-alt: Contexto de entrada alternativo para placas FXS (o padrão é vazio, no entanto quando definido, segue a mesma regra de substituição da opção context-fxs); +
  • context-gsm-call (ou "context-gsm"): Contexto de entrada para ligações GSM (o padrão é "khomp-DD-CC", onde "DD" será substituído no momento da ligação pelo número do dispositivo, "CC" pelo número do canal, e "SSSS" pelo número serial do dispositivo); +
  • context-gsm-call-alt (ou "context-gsm-alt"): Contexto de entrada alternativo para ligações GSM (o padrão é vazio, no entanto quando definido, segue a mesma regra de substituição da opção context-gsm-call); +
  • context-gsm-sms: Contexto de entrada para SMSs (o padrão é "khomp-sms-DD-CC", onde "DD" será substituído pelo número de dispositivo, "CC" pelo número do canal, e "SSSS" pelo número serial do dispositivo); +
  • context-pr: Contexto de entrada para ligações em placas KPR (o padrão é "khomp-DD-CC", onde "DD" será substituído, no momento da ligação, pelo número do dispositivo, "CC" pelo número do canal); +
  • disconnect-delay: Define o tempo em milissegundos para realizar o processamento de um evento de desconexão, para ignorar situações onde outros equipamentos realizam o duplo atendimento para derrubar chamadas a cobrar; +
  • echo-canceller: Ativa ("yes") ou desativa ("no") o cancelamento de eco automático pelo Endpoint; +
  • fxo-send-pre-audio: Quando ativada ("yes") libera canal de áudio sainte antes da conexão da chamada em placas KFXO (o valor padrão é "yes"); +
  • fxs-global-orig: Número inicial para numeração seqüencial de ramais das placas KFXS que não estiverem listadas na seção <fxs-branches> (a numeração segue ordem crescente por número da placa e número do canal físico) (o padrão é "0"); +
  • fxs-co-dialtone: Seqüências de números, separados por vírgula, que disparam um tom contínuo (de central pública) em ramais FXS (ex: "0,99" faz com que, ao discar "0" ou "99", o usuário receba o tom de linha contínuo) (o padrão é vazio); +
  • fxs-bina: Quando ativada ("yes"), ligações para ramais FXS enviarão os dígitos correspondentes ao telefone de origem em sinalização BINA DTMF (o valor padrão é "no"); +
  • input-volume: Define o volume de entrada das ligações, varia de -10 a +10 ; +
  • kommuter-activation: Define se a ativação de dispositivos kommuter encontrados no sistema será feita de forma automática ("auto"), ou de forma manual ("manual") pelo usuário, através do comando "khomp kommuter on/off"; +
  • kommuter-timeout: Define o timeout (em segundos) com que os kommuters serão inicializados. Se chegarem a este timeout sem receberem notificação do channel, os dispositivos irão comutar para o estado "desligado". O valor mínimo é "0" , onde os links permanecerão sempre comutados no estado "ligado", e o valor máximo é "255"; +
  • language: Define idioma para ligações nas placas Khomp; +
  • log-to-console: Define mensagens de log que devem ser impressas na console; +
  • log-to-disk: Define mensagens de log que devem ser salvar em disco; +
  • out-of-band-dtmfs: Ativa ("yes") ou desativa ("no") a supressão DTMF e o envio destes out-of-band; +
  • output-volume: Define o volume de saída das ligações, varia de -10 a +10 ; +
  • pulse-forwarding: Ativa ("yes") ou desativa ("no") a detecção de pulsos e a conversão dos mesmos em DTMFs; +
  • r2-preconnect-wait: Define o tempo de espera do envio da sinalização de ringback, no protocolo R2/MFC, para iniciar o envio de áudio de silêncio. Apenas utilizado quando "r2-strict-behaviour" estiver ajustado para "no"; +
  • r2-strict-behaviour: Ativa ("yes") ou desativa ("no") o comportamento da sinalização R2/MFC conforme a norma define. O padrão é "no", e pode ser alterado para "yes" caso seja necessário receber/enviar dados precisos da sinalização do protocolo (condição de B, por exemplo); +
  • ringback-delay-co: Define o tempo de delay para ativar a geração de tom de controle de chamada (ringback) pelo Endpoint da Khomp quando há uma indicação de ringback, e não há áudio sendo enviado por quem indicou a situação de controle da chamada; +
  • ringback-delay-pbx: Define o tempo de delay para ativar a geração de controle de chamada (ringback) pelo Endpoint da Khomp quando há uma indicação de ringback, e o áudio de controle enviado não possui nenhum tom (ou seja, está em silêncio); +
  • suppression-delay: Ativa ("yes") ou desativa ("no") o delay necessário para supressão DTMF. Se desativado ("no"), também desativa supressão de DTMFs; +
  • trace: Define opções de depuração. Não deve ser utilizado em produção a não ser que estritamente necessário; +
  • user-transfer-digits: Define uma seqüência de dígitos DTMF para iniciar a transferencia entre o FreeSWITCH® e um outro PABX (utilizando sinalização de usuário, como QSig ou FXO FLASH); +
+


+

+

<groups>

+

Define os grupos para serem usados na alocação de canal. +

Neste caso, as opções são usadas para definir nomes para strings de alocação de canais. O formato segue o padrão <param name="nome grupo" value="string alocação"/>, onde as strings de alocação de canais são as mesmas utilizadas no application bridge, e nome do grupo é um nome arbitrário escolhido pelo usuário. +

+
Por exemplo, para definir o grupo pstn como os canais 0 e 5 da placa 0, deveria-se utilizar a linha: +
+
<param name="pstn" value="b0c0 + b0c5"/> 
+
+

Este grupo, por sua vez, poderia ser usado no application bridge como <action application="bridge" data="Khomp/Gpstn/..."/>. +

+
Pode-se também associar um determinado contexto de entrada a um grupo de canais, bastando especificar um nome de contexto após a string de alocação, separado por ':' da mesma. +
+

Por exemplo, para definir o mesmo grupo pstn acima como os canais 0 até 20 da placa 0, com contexto de entrada from-pstn, poderia-se utilizar a linha: +

+
<param name="pstn" value="b0c0-20:from-pstn"/>
+
+

Este grupo, por sua vez, poderia ser usado no application bridge como <action application="bridge" data="Khomp/Gpstn/..."/>, e todas as ligações vindas destes canais seriam tratadas no contexto from-pstn. +
+

+

<cadences>

+

Define configurações de cadências para o Endpoint. +

Neste caso, as opções são nomes de cadências e um ou dois pares de números, que definem os intervalos de tom e silêncio a ser utilizado nas cadências. Para maiores detalhes, favor consultar o arquivo de configuração. +
+

+

<fxs-branches>

+

Define números de origem para a placa KFXS. +

Neste caso, as opções são seqüências de prefixos de ramais e números seriais das placas, que definem os números base dos endereços de origem, e a ordem numérica das placas. O formato das opções é: +

+
<param name="prefixo" value="serial1, serial2, ...."/>
+
+

Por exemplo, para definir que as placas K0374 e K2352 devem ser numeradas seqüencialmente, partido do ramal 200, basta escrever: +

+
<param name="200" value="374, 2352"/>
+
+

Para maiores detalhes, favor consultar o arquivo de configuração. +
+

+

<fxs-hotlines>

+

Define hotlines para a placa KFXS. +

Neste caso, as opções são seqüências de ramais e números de destino, definindo os ramais listados nesta seção para serem tratados como "hotlines". Para cada ramal listado, o número de destino especificado será discado quando o ramal for retirado do gancho. Exemplo: +

+
<param name="100" value="1234"/>
+<param name="200" value="4321"/> 
+
+

No primeiro exemplo, o ramal de número 100 irá telefonar para número 1234 ao ser retirado do gancho; no segundo, o ramal de número 200 irá telefonar para o número 4321 ao ser retirado do gancho. +

+

<fxs-options>

+

Permite definir configurações específicas por ramal FXS. +

Neste caso, as configurações são números de ramais (baseado nos definidos na seção <fxs-branches>), e as opções e seus valores. As opções disponíveis são: +

+
  • context; +
  • input-volume; +
  • output-volume; +
  • accountcode; +
  • calleridnum; +
  • calleridname; +
  • mailbox. +
+

Cada opção é separada uma da outra por um pipe "|" ou uma barra "/" e definidas após dois pontos ":", exemplo: +

+
 <param name="200" value="language:en|context:master-branch" />
+
+

Para maiores informações sobre a sintaxe e exemplos, favor consultar o arquivo de configuração. +


+

Para maiores informações, consultar o arquivo de configuração 'khomp.conf.xml'. +
+

+

Configuração do FreeSWITCH

+

Quando as ligações são recebidas nas placas e dispositivos Khomp, estas são encaminhadas pelo Endpoint da Khomp para contextos específicos dentro do plano de discagem do FreeSWITCH®. Estes contextos podem ser alterados através do arquivo de configurações khomp.conf.xml, disponível no diretório de configuração do FreeSWITCH (por padrão, "/usr/local/freeswitch/conf/autoload_configs"). +

Para maiores detalhes sobre os contextos específicos, consultar a seção de Configuração do Endpoint. +

Abaixo, encontram-se informações de como configurar os contextos de entrada de chamadas: +
+


+

+

Contextos de entrada em canais E1

+

Para placas E1, as ligações de entrada por padrão chegam em um contexto pré-definido conforme a opção context-digital: +

+
<param name="context-digital" value="khomp-DD-LL"/>
+
+

Este contexto padrão define que as ligações serão redirecionadas de acordo com o número da placa e número do link: DD é o número dispositivo (com dois dígitos), e LL é o número do link (também com dois dígitos). +

Entretanto, é possível configurar outros contextos de entrada, com formatos diferenciados. Pode-se utilizar a opção CCC, que significa o número do canal na placa (com três dígitos), e SSSS, que representa o número serial da placa (com quatro dígitos). +

Exemplos de configuração no arquivo khomp.conf.xml: +

+
<!-- número seqüencial da placa e do link (ex: khomp-01-00) -->
+<param name="context-digital" value="khomp-DD-LL"/>
+
+
<!-- número serial da placa e seqüencial do link (ex: khomp-3049-00) -->
+<param name="context-digital" value="khomp-SSSS-LL"/>
+
+
<!-- número seqüencial da placa e do canal (ex: khomp-00-001) -->
+<param name="context-digital" value="khomp-DD-CCC"/>
+
+
<!-- recebe todas as chamadas em um só contexto (khomp-digital) -->
+<param name="context-digital" value="khomp-digital"/>
+
+

Abaixo um exemplo de contexto no plano de discagem: + +

+
<!-- 
+Este contexto presente em seu arquivo de dialplan, irá manipular chamadas
+de entrada no link 0 (primeiro link) da placa 0.
+-->
+<context name="khomp-00-00">
+             .
+             .
+             .
+</context>
+
+

Outro exemplo, utilizando o mesmo formato: + +

+
<!-- 
+Este contexto presente em seu arquivo de dialplan, irá manipular chamadas
+de entrada no link 1 (segundo link) da placa 0.
+-->
+<context name="khomp-00-01>
+             .
+             .
+             .
+</context>
+
+

Um exemplo completo, com algumas ações simples: + +

+
<context name="khomp-00-00">
+    <extension name="exemplo_1">
+        <condition field="destination_number" expression="^1234$">
+            <action application="bridge" data="Khomp/b0L1/2345"/>
+        </condition>
+    </extension>
+    <extension name="exemplo_2">
+        <condition field="destination_number" expression="^23(\d{2})$">
+            <action application="bridge" data="sofia/${use_profile}/11$1@${sip_from_host}"/>
+        </condition>
+    </extension>
+</context>
+
+
<context name="khomp-00-01">
+    <extension name="exemplo_3">
+        <condition field="destination_number" expression="^1111$">
+            <action application="bridge" data="Khomp/b0L0/2345"/>
+        </condition>
+    </extension>
+</context>
+
+

Este plano de discagem define o recebimento de chamadas na placa 0 e no link 0, redirecionando chamadas para o número 1234 feitas para o link 1 da placa 0, pro ramal/telefone 2345, e redirecionando qualquer número de quatro dígitos começado com 23 para telefones SIP de quatro dígitos começados com 11 mais os dois últimos dígitos recebidos. +

Também há mais uma extensão definida, onde as ligações recebidas no link 1 da placa 0 para o número 1111, são redirecionadas para o link 0 da placa 0, para o telefone/ramal 2345. +
+

+

Contextos de entrada em canais FXS/FXO/GSM

+

Da mesma forma que no contexto de placas E1, as ligações de entrada são encaminhadas pelo Endpoint para o FreeSWITCH. Entretanto, estas sinalizações possuem dois contextos pré-definidos, buscados com uma ordem de preferência. +

O primeiro contexto é pré-definido da seguinte forma, conforme o arquivo khomp.conf.xml: +

+
<param name="context-gsm" value="khomp-DD-CC"/> ;placas GSM
+
+
<param name="context-fxs" value="khomp-DD-CC"/> ; placas FXS
+
+
<param name="context-fxo" value="khomp-DD-CC"/> ; placas FXO
+
+

Enquanto o segundo contexto possui o seguinte formato padrão: +

+
<param name="context-gsm-alt" value="khomp-DD"/> ; placas GSM
+
+
<param name="context-fxs-alt" value="khomp-DD"/> ; placas FXS
+
+
<param name="context-fxo-alt" value="khomp-DD"/> ; placas FXO
+
+

Nestes casos, DD é o número dispositivo (com dois dígitos), e CC é o número do canal da placa. Pode-se utilizar também SSSS, que representa o número serial da placa. +

+
  • IMPORTANTE: No caso da placa KGSM, as ligações entrantes são sempre encaminhadas para o extension "s" por padrão, visto que o protocolo GSM não identifica o número de destino nas ligações entrantes, apenas o número de origem - quando não omitido. +
+

Prioridade de contextos na placa FXS

+

Em ligações originadas a partir de um ramal FXS, o Endpoint driver procura uma extensão válida dos dígitos discados em três contextos diferentes. A prioridade dos contextos é a seguinte: +

+
  1. Contexto específico do ramal, definido na seção <fxs-options> do arquivo de configuração do khomp.conf.xml; +
  2. Contexto definido na opção context-fxs; +
  3. Contexto definido na opção context-fxs-alt. +
+

Caso durante a discagem, nenhuma extensão válida puder ser encontrada, a extensão i é procurada nos contextos em ordem de prioridade, e por fim no contexto default. Caso ocorra um timeout durante a discagem (configurável pela opção fxs-digit-timeout, no arquivo khomp.conf.xml) durante a discagem, o mesmo comportamento será aplicado - no entanto, a busca se dará inicialmente pelo número já discado até o timeout e, se não encontrado, a busca nos contextos será repetida para a extensão "t". +
+

+

Contextos de mensagens SMS (apenas GSM)

+

Mensagens SMS são recebidas pelo Endpoint da Khomp e encaminhadas para o FreeSWITCH como uma ligação normal, mas sem áudio, que possui algumas variáveis ajustadas com informações recebidas na mensagem - para maiores informações sobre estas variáveis, consulte a documentação das variáveis do Endpoint. Este contexto também pode ser alterado, de mesma forma que o contextos acima. +

Esta ligação entra no seguinte contexto, conforme o arquivo khomp.conf.xml: +

+
<param name="context-gsm-sms" value="khomp-sms-DD-CC"/> 
+
+

Onde DD é o número dispositivo (com dois dígitos), e CC é o número do canal (também com dois dígitos). Por exemplo: +

+
<context name="khomp-sms-00-01">
+    <extension name="sms">
+        <condition field="destination_number" expression="^s$">
+            <action application="log" data="DEBUG KSmsType=${KSmsType}"/>
+            <action application="log" data="DEBUG KSmsBody=${KSmsBody}"/>
+        </condition>
+    </extension>
+</context>
+
+

Contexto de entrada em canais Khomp_PR (KPR)

+

Para estas placas, as ligações de entrada possuem um contexto pré-definido, conforme exemplo abaixo: +

+
<param name="context-pr" value="khomp-DD-CC"/> 
+
+

Neste caso, DD é o número do dispositivo (com dois dígitos), e CC é o número do canal da placa. +
+


+
+

+

Utilização do application bridge

+

O aplicativo (ou application) bridge é responsável por gerar chamadas no FreeSWITCH a partir de um dialplan. Este aplicativo pode ser utilizado para gerar chamadas a partir de diversos tipos de Endpoints, sendo que cada Endpoint segue um formato específico para definir tanto as opções quanto os canais de comunicações a serem utilizados. +

+

Campos relativos ao Endpoint

+

Quando utilizado para canais da Khomp, a string de bridge pode ter dois, três ou quatro campos separados por uma barra (/). Algumas strings de exemplo: + +

+
<action application="bridge" data="Khomp/B2L0/32625644"/>
+<action application="bridge" data="Khomp/*B2L0/32625644"/>
+<action application="bridge" data="Khomp/S0411/99991234"/>
+<action application="bridge" data="Khomp/Gpstn/99991234"/>
+<action application="bridge" data="Khomp/*Gpstn/99991234"/>
+<action application="bridge" data="Khomp/B2C58/32625644/category=4:orig=4855553232"/>
+<action application="bridge" data="Khomp/b0c9"/>
+<action application="bridge" data="Khomp/b0c1+b0c14"/>
+<action application="bridge" data="Khomp/r304"/>
+
+

Nos cinco primeiros exemplos, temos três campos sendo especificados; no sexto, quatros campos são utilizados; e por fim, nos três últimos exemplos, apenas dois são utilizados. +

Sobre os campos utilizados, segue a descrição: +

+
  • 1° campo, 'Khomp': identifica o tipo do Endpoint em questão; +
  • 2° campo, 'B2L0', 'S0411', 'Gpstn', etc: representa a Política de Alocação de Canais; +
  • 3° campo, '32625644' e '99991234': são os números de destino, para onde será efetuada a ligação (ausente em placas KFXS); +
  • 4° campo, 'category=4:orig=4855553232': opções adicionais não-obrigatórias, detalhadas mais à frente. +
+

OBS: A string de bridge com somente dois campos é específica à ligações para uma placa KFXS, onde o destino está atrelado automaticamente ao canal alocado, ou ao ramal especificado. +

+

Política de alocação de canais

+

A política de alocação de canais, no módulo da Khomp, pode ser especificado na própria string de bridge ou através de grupos, no arquivo de configuração khomp.conf.xml. Para especificar placas, canais e links a serem alocados existe a seguinte sintaxe disponível (considerando X, Y e Z como números quaisquer): +

+
  • bX -- busca os canais na placa 'X', de maneira crescente. +
  • bXLY -- busca canais no link 'Y' da placa 'X', fazendo uma procura crescente (com relação ao número dos canais). +
  • bXcY -- utiliza apenas o canal 'Y' da placa 'X'. +
  • bXcY-Z -- busca por canais, iniciando do canal 'Y' e indo até o canal 'Z' (inclusive), da placa 'X', de maneira crescente. +
  • BXcY-Z -- idem ao anterior, de maneira decrescente. +
  • sX -- busca os canais na placa de serial 'X', de maneira crescente. +
  • sXLY -- busca canais no link 'Y' da placa de serial 'X', fazendo uma procura crescente (com relação ao número dos canais). +
  • sXcY -- utiliza apenas o canal 'Y' da placa de serial 'X'. +
  • sXcY-Z -- busca por canais, iniciando do canal 'Y' e indo até o canal 'Z' (inclusive), da placa de serial 'X', de maneira crescente. +
  • SXcY-Z -- idem ao anterior, de maneira decrescente. +
+

Para buscar por ramais de placas KFXS de acordo com o número do ramal, pode ser utilizada a seguinte sintaxe (considerando X e Y números de ramais válidos): +

+
  • rX -- busca ramal 'X'. +
  • RX -- equivalente ao anterior. +
  • rX-Y -- busca de ramal 'X' a 'Y', ordem crescente. +
  • RX-Y -- busca de ramal 'X' a 'Y', ordem decrescente. +
+

É interessante notar que apenas a capitalização da letra 'B', 'S' ou 'R' define a ordem de busca dos canais; se minúscula, crescente, e se maiúscula, decrescente. +

Já para a alocação de canais através de grupos, existe a seguinte sintaxe disponível: +

+
  • Ggroupname -- utiliza a string de bridge definida ao grupo "groupname" no arquivo de configuração; já detalhado na seção de configuração do Endpoint. +
  • ggroupname -- equivalente ao anterior. +
+

Agrupando alocações de canais

+

Existem casos onde é necessário buscar canais mais de um determinado dispositivo, ou determinado grupo de ramais. Para isto, existe uma extensão disponível na string de alocação, que diz respeito ao uso do símbolo de soma (+) para concatenar várias strings de ligação, da seguinte forma: +

+
<action application="bridge" data="Khomp/B1L0+B2L0/32332933"/>
+<action application="bridge" data="Khomp/*B2+B3+B4/99887766"/>
+<action application="bridge" data="Khomp/S0411+B1L0/99887766"/>
+<action application="bridge" data="Khomp/Gpstn1+Gpstn2/99991234"/>
+<action application="bridge" data="Khomp/*gOperadora1+gOperadora2/98891234"/>
+
+

Esta extensão está disponível tanto no application bridge quanto na especificação de grupos, e pode ser utilizada para agrupar qualquer string de alocação válida à outra. O processamento das strings de alocação se dá da esquerda para a direita - exceto quanto utilizando a alocação cíclica, onde todos os canais especificados são verificados simultaneamente. +

+

Escolha cíclica e/ou justa

+

Uma variação da alocação de canais é através de uma escolha cíclica e/ou justa, que consiste em escolher o canal que completou - até o momento - o menor número de ligações saintes. Essa forma é caracterizada por um asterisco (*) antes da string de alocação de canais (conforme pode ser verificado acima, no segundo e quinto exemplos). +

Quando iniciada com um asterisco (*), as outras formas de alocação subseqüentes (crescente, decrescente, etc) são utilizadas para decidir, entre os canais com menor número de ligações saintes, qual será verificado primeiro para realizar a chamada. +

+
  • AVISO: O uso da alocação justa e/ou cíclica é recomendável somente em placas analógicas (KFXO), de ramais (KFXS) e de interface celular (KGSM). Conexões E1 tendem a alocar os canais de maneira crescente ou decrescente de um lado (na operadora, por exemplo), e o inverso do outro (no PABX, por exemplo), para evitar problemas de dupla ocupação (o que pode ocorrer na sinalização R2/MFC). A alocação cíclica/justa também consome mais recursos de memória e processamento que a alocação tradicional, o que é agravado ainda mais pelo fato de placas E1 terem um número muito maior de canais (30 por link).

    Por estes motivos, alocações justas e/ou cíclicas devem ser utilizadas apenas em sinalizações onde isso pode representar alguma diferença real, como equalizar a tarifação das linhas, o uso das mesmas, ou o número de ligações recebidas por cada ponto de atendimento (PA). +
+

Opções disponíves

+
  • orig: Define o número de origem a ser utilizado na chamada, sem alterar a variável ${origination_caller_id_number}. Ou seja, a opção orig serve apenas para repassar um número de origem diferente do ${origination_caller_id_number}. Caso o FreeSWITCH já tenha ajustado a variável ${origination_caller_id_number}, o que é o comportamento padrão, o Endpoint utiliza este valor automaticamente como referência do número de origem, sem ser necessário repassar nenhuma opção adicional.

    Nas placas KGSM, se ajustado para restricted, omite o número de origem. Exemplo:
    +
+
+ <action application="bridge" data="Khomp/b0/99887766/orig=restricted"/>
+
+
  • category: Quando ajustado para um valor numérico, define a categoria do número de A. Disponível apenas em sinalização R2/MFC; +
  • uui: Quando ajustado para um número e uma string de texto, separados por cerquilha ("#"), envia uma mensagem "User-to-User" para a outra ponta, antes de realizar a chamada, utilizando o descritor como o número e a mensagem como o texto. Disponível apenas em sinalização RDSI (ISDN); +
  • ring_cadence: Quando ajustado para um identificador, utiliza cadência definida com este nome na seção "cadences" do arquivo de configuração do Endpoint da Khomp para chamar o canal desejado. Disponível apenas em sinalização FXS; +
  • ring: Quando ajustado para dois números, separados por ponto ("."), define as cadências de chamada de um ramal FXS para estes valores, sendo o primeiro relativo ao tempo de chamando, e o segundo, ao tempo de silêncio; +
  • ring_ext: Quando ajustado para dois números, separados por ponto ("."), define as cadências de chamada extendidas (a serem executadas depois da cadência principal) de um ramal FXS para estes valores, sendo o primeiro relativo ao tempo de chamando, e o segundo, ao tempo de silêncio; +
  • usr_xfer: Quando ajustado para uma seqüência de dígitos DTMF, define estes como dígitos a serem utilizados para iniciar uma transferência entre PABXes (utilizando sinalizações de usuário); +
  • drop_on: Quando ajustado para "message_box", "human_answer", "answering_machine", "carrier_message", "unknown" ou uma lista destes (separados por mais ("+") ou ponto (".")), faz com que a chamada seja derrubada ao detectar tons de caixa postal, atendimento humano, secretária eletrônica, mensagens da operadora, ou algum atendimento desconhecido - respectivamente. Disponível em sinalizações digitais (links E1 e placas KGSM). Adicionalmente, a informação de atendimento é reportada para o usuário na variável KCallAnswerInfo; +
  • answer_info: Opção booleana (não necessita de valor). Quando especificada, reporta informações de atendimento para o usuário através da variável KCallAnswerInfo; +
  • pre: Quando ajustado para uma seqüência de dígitos DTMF, utiliza estes para pre-alocar um canal de saída em um PABX analógico, discando o número de B desejado a seguir. Somente disponível para sinalização analógica (FXO); +
  • pre_answer: Opção booleana (não necessita de valor). Quando especificada, "antende" o canal antes de a ligação ser completada permitindo, por exemplo, que DTMFs possam ser enviados - útil para utilizar em um DISA; +
  • output_volume: Define o volume de saída da ligação. Varia de -10 a +10; +
  • input_volume: Define o volume de entrada da ligação. Varia de -10 a +10; +
+


+

+

Lista das variáveis

+

Segue lista de variáveis disponíveis no Endpoint: +

+
  • KDropCollectCall: Quando definida antes do atendimento (ao receber uma chamada), ativa ("yes") ou desativa ("no", padrão) o derrubamento de chamadas à cobrar baseado na sinalização recebida da central pública; através do duplo atendimento; ou através do reconhecimento por áudio de uma chamada à cobrar (pode ser definido de maneira global); +
  • KR2SendCondition: Quando definida antes do envio de ringback pelo FreeSWITCH (ao receber uma chamada), ajusta a condição de B para o valor numérico que foi ajustada. Apenas disponível para sinalização R2; +
  • KR2GotCategory: Ajustada pelo Endpoint ao receber uma chamada entrante, e possui a categoria do número de A. Apenas disponível para sinalização R2; +
  • KR2GotCondition: Ajustada pelo Endpoint, e disponível após o retorno de uma chamada realizada pelo FreeSWITCH. Contém a condição de B recebida ao realizar a chamada. Apenas disponível para sinalização R2; +
  • KISDNGotCause: Ajustada pelo Endpoint, e disponível após o retorno de uma chamada realizada pelo FreeSWITCH. Contém o código de cause do ISDN recebido ao realizar a chamada. Apenas disponível para sinalização ISDN; +
  • KCallAnswerInfo: Ajustada pelo Endpoint, e disponível após o retorno de uma chamada realizada pelo FreeSWITCH. Contém as informações de atendimento detectadas ao realizar a chamada e está disponível apenas para sinalizações digitais (E1, GSM); +
  • KSmsDelivered: Ajustada pelo Endpoint ao enviar uma mensagem SMS com o application KSendSMS, e define se a mensagem foi entregue com sucesso ("yes") ou não ("no"); +
  • KSmsErrorCode: Ajustada pelo Endpoint ao enviar uma mensagem SMS com o application KSendSMS, e define o código de erro ao enviar a mensagem; +
  • KSmsErrorName: Ajustada pelo Endpoint ao enviar uma mensagem SMS com o application KSendSMS, contém o nome do erro em forma textual, ou "None" caso não tenha ocorrido nenhum erro. +
  • KSmsType: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, define o tipo da mensagem recebida (pode conter os valores "message", "confirm" ou "broadcast"; +
  • KSmsFrom: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, define o número de origem da mensagem recebida (disponível em tipos "message" e "confirm"); +
  • KSmsDate: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, define a data de envio da mensagem (disponível em tipos "message" e "confirm"); +
  • KSmsSize: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, contém o tamanho (em bytes) da mensagem recebida (disponível em tipos "message" e "broadcast"); +
  • KSmsMode: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, contém o tipo codificação da mensagem recebida (disponível em tipos "message" e "broadcast"); +
  • KSmsBody: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, contém o texto da mensagem recebida (disponível em tipos "message" e "broadcast"); +
  • KSmsDelivery: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, contém a data de entrega de mensagem enviada anteriormente cuja confirmação foi requisitada (disponível no tipo "confirm"); +
  • KSmsStatus: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, contém o status de envio de mensagem anteriormente cuja confirmação foi requisitada (disponível no tipo "confirm"); +
  • KSmsSerial: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, contém o número de série da mensagem recebida (disponível no tipo "broadcast"); +
  • KSmsPage: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, contém o número da página relativo à mensagem recebida (disponível no tipo "broadcast"); +
  • KSmsPages: Ajustada pelo Endpoint no contexto de entrada das mensagens SMS, contém o número total de páginas a serem recebidas (disponível no tipo "broadcast"); +
  • KUserInfoDescriptor: Define/informa descritor do protoloco utilizado na mensagem User-to-User Information (RDSI). +
  • KUserInfoData: Define/informa os dados na mensagem User-to-User Information (RDSI). +
  • KFaxSent: Ajustada pelo Endpoint ao enviar FAX com o application KSendFax, e define se o FAX foi enviado com sucesso ("yes") ou não ("no"); +
  • KFaxReceived: Ajustada pelo Endpoint ao receber FAX com o application KReceiveFax, e define se o FAX foi recebido com sucesso ("yes") ou não ("no"); +
  • KFaxResult: Ajustada pelo Endpoint ao enviar ou receber FAX com o application KSendFax ou KReceiveFax, respectivamente, e define o seu resultado. +
+


+

+

Descrição das variáveis

+

Abaixo, segue uma explanação sobre como utilizar as variáveis do Endpoint da Khomp disponíveis no dialplan, tanto para comunicar quanto para receber informações: +


+

+

KDropCollectCall

+

Quando ativada, faz com que o Endpoint da Khomp derrube chamadas a cobrar através de duplo atendimento (disponível para sinalizações 'R2 Digital' e FXO), através da informação disponível no protocolo RDSI e R2/MFC, ou através da detecção do áudio de chamada a cobrar (disponível para qualquer sinalização digital por link E1, e para sinalização GSM). +

Esta variável é útil para derrubar chamadas a cobrar para determinados ramais, e deve ser ajustado obrigatoriamente antes de realizar qualquer tipo de atendimento - aplicações como playback e bridge devem ser executadas sempre após ajustar esta variável, por exemplo. +

Para melhor funcionalidade, é recomendado também que nenhum estado de chamada (ringback) seja enviado antes desta variável ser ajustada, então aplicações devem ser executadas apenas após o ajuste correto desta variável. +

Esta variável pode ser ajustada localmente e globalmente, tanto para yes quanto para no. O ajuste da variável global para yes fará com que todas as chamadas a cobrar sejam derrubadas, a não ser que a chamada específica seja ajustada para no - isto permite a criação de um filtro global de chamadas a cobrar, com algumas poucas exceções. +

Ativando a variável dentro do contexto default: + +

<context name="default"> +

+
<extension name="exemplo">
+ .
+ .
+ .
+ <action aplication="set" data="KDropCollectCall=yes"/>
+ .
+ .
+ .
+</extension>
+
+

</context> +

Ativando a variável no contexto global, lembrando que a mesma deve ser configurada no arquivo vars.xml: + +

+
<X-PRE-PROCESS cmd="set" data="KDropCollectCall=yes"/>
+
+

KR2SendCondition

+

Ao receber uma chamada, pode ser definida antes do envio de ringback pelo FreeSWITCH (ou seja, antes do FreeSWITCH executar as aplicações answer, ou bridge). Quando utilizada em sinalização R2/MFC, esta variável ajusta a condição de B para o valor numérico desejado. +

Exemplo: + +

+
<!-- Condição "NUMBER CHANGED", avisa ao chamador que o número de B mudou. -->
+<action application="KR2SendCondition" data="3"/>
+
+

KR2GotCategory

+

Ao receber uma chamada, é ajustada pelo Endpoint com a categoria recebida do número que originou a chamada. É ajustada na sinalização R2/MFC, e pode ser consultada em qualquer local do dialplan. +

Exemplo: + +

+
<action application="log" data="DEBUG KR2GotCategory [${KR2GotCategory}]"/> 
+
+

KR2GotCondition

+

Variável ajustada pelo Endpoint, e disponível após o retorno de uma chamada realizada pelo FreeSWITCH. Contém a condição de B recebida ao realizar a chamada. Disponível apenas para sinalização R2/MFC. +

Exemplo: + +

+
<action application="log" data="DEBUG KR2GotCondition [${KR2GotCondition}]"/>
+
+

KUserInfoDescriptor

+

Variável ajustada pelo Endpoint no contexto de entrada, a partir de informações recebidas pela rede RDSI através da funcionalidade User-to-User Information. Contém o número do descritor do protocolo utilizado pela outra ponta, e normalmente contém valor '0', mas este valor é dependente da aplicação utilizada. +

Maiores informações, consultar a especificação ITU-T Q931 (mais precisamente, a tabela 4-26 da especificação). +

Exemplo (trabalhando com o número do descritor do protocolo): +

+
<action application="log" data="DEBUG KUserInfoDescriptor [${KUserInfoDescriptor}]"/>
+
+

KUserInfoData

+

Variável ajustada pelo Endpoint no contexto de entrada, a partir de informações recebidas pela rede RDSI através da funcionalidade User-to-User Information. Contém os dados propriamente ditos, que foram recebidos, em forma de uma 'string' de texto. +

Maiores informações sobre este recurso, consultar a especificação ITU-T Q931. +

Exemplo (trabalhando com os dados recebidos): +

+
<action application="log" data="DEBUG KUserInfoData [${KUserInfoData}]"/>
+
+

É importante salientar que as variáveis são sensíveis à capitalização das letras (case sensitive). +

+

KCallAnswerInfo

+

Variável ajustada pelo Endpoint em ligações de saída, representando o tipo de atendimento realizado pela outra ponta. Pode conter os seguintes valores: +

+
  • "MessageBox" (*): detectada caixa postal de um telefone celular; +
  • "CarrierMessage": mensagem de operadora enviada antes do atendimento; +
  • "AnsweringMachine" (**): atendimento por secretária eletrônica; +
  • "HumanAnswer" (**): atendimento humano; +
  • "Unknown": tipo de atendimento desconhecido; +
  • "Fax": reportado quando um tom de fax for detectado. +
+
+


+(*) Este tipo de atendimento é detectado por sinais em determinadas freqüências que são enviados antes da chamada entrar em uma caixa postal, e variam conforme a operadora. O algoritmo captura a maior parte das caixas postais, mas pode falhar se não existir um sinal claro, ou se o mesmo não estiver dentro dos padrões mais utilizados; +

(**) A diferenciação entre estes dois tipos de atendimento depende de configuração específica utilizando o programa k3lanswerinfoconfig, sendo a detecção apenas baseada em heurísticas e nunca com precisão de 100%. +
+

+

Comandos de console

+

Lista de comandos disponíveis no console do FreeSWITCH para o Endpoint da Khomp: +


+

+
  • khomp channels disconnect : Desconecta um ou vários canais. Este comando envia uma mensagem diretamente para o canal físico da placa em questão, requisitando a desconexão. Use com cautela; +
  • khomp channels unblock : Desbloqueia canais bloqueados para entrada ou para saída. Somente disponível em sinalização digital via link E1; +
  • khomp clear links: Limpa os contadores de erros nos links; +
  • khomp clear statistics: Limpa as estatísticas de ligações dos canais, ou as estatísticas de um canal específico; +
  • khomp get : Obtém as opções diversas do Endpoint da Khomp; +
  • khomp kommuter : Ativa ou desativa os kommuters ligados via USB nesta máquina. Somente acessível quando a configuração "kommuter-activation" estiver setada como "manual"; +
  • khomp kommuter count: Obtém a quantidade de kommuters ligados via USB nesta máquina; +
  • khomp log console: Ajusta opções de logs no console. +
  • khomp log disk: : Ajusta opções de log em disco. +
    • khomp log console e khomp log disk dispõem de opções auxiliares no, que inverte a escolha de mensagens, e just, que generaliza a escolha. Exemplos: +
      • khomp log disk just commands events (Habilita somente o registro de comandos e eventos da API em disco). +
      • khomp log disk no commands (Desabilita o registro em disco de comandos enviados à API). +
      • khomp log disk warnings (Habilita também o registro em disco dos avisos do Endpoint). +
      +
    • Mais informações sobre as opções de log nos comando "help khomp log disk" ou "help khomp log console". +
    +
  • khomp log rotate: Rotaciona arquivos de log do Endpoint; +
  • khomp log status: Mostra mensagens de log atualmente sendo escritas em disco e mostradas no console; +
  • khomp log trace isdn: Ativa a depuração da sinalização RDSI (ISDN); +
  • khomp log trace k3l : Ativa a depuração de baixo nível da API K3L; +
  • khomp log trace r2 : Ativa a depuração de baixo nível da sinalização R2/MFC; +
  • khomp reset links: Envia um comando de reset para um determinado link E1 de uma determinada placa; +
  • khomp revision: Mostra número da versão e revisão do Endpoint; +
  • khomp select sim: Seleciona o SIM card, disponível nas placas KGSM; +
  • khomp send command : Envia comando da API K3L diretamente para a placa. Apenas para depuração de problemas, pode compromenter a estabilidade do sistema se utilizado de maneira incorreta; +
  • khomp send raw command : Envia um comando diretamente para o DSP da placa. Apenas para depuração de problemas, pode compromenter a estabilidade do sistema se utilizado de maneira incorreta; +
  • khomp set : Ajusta opções diversas do Endpoint da Khomp; +
  • khomp show calls : Mostra estados das chamadas Khomp, podendo listar também por placa ou canal específico; +
  • khomp show channels : Mostra o estado dos canais Khomp, podendo listar também por placa específica; +
  • khomp show links: Mostra estados dos links E1 disponíveis. +
  • khomp show statistics : Mostra as estatísticas de ligações dos canais, ou as estatísticas de um canal específico; +
  • khomp sms : Envia uma mensagem SMS utilizando canais da placa KGSM para um determinado número; +
  • khomp summary :Imprime um sumário das placas do sistema e de suas características; +
+


+

+

Recursos adicionais

+

Este capítulo trata de recursos adicionais do Endpoint, relacionados às funcionalidades especiais presentes em algumas sinalizações. +
+

+

Aplicações (applications) e canais

+

O Endpoint da Khomp, além de registrar um tipo de canal de comunicação "Khomp", registra também os seguintes itens: +
+

+

Aplicação "KUserTransfer"

+

Realiza o processo de transferência do canal atual para o ramal número' utilizando o protocolo de sinalização QSig (Single Step Call Transfer) para placas E1 configuradas com sinalização RDSI (ISDN), ou utiliza comando de FLASH para linhas FXO, LineSide, CAS_EL7 e E1LC. +

A sintaxe segue: +

+
<action application="KUserTransfer" data="número[,opções])"/>
+
+

Exemplo: +

+
<action application="answer"/>
+<action application="KUserTransfer" data="2345"/>
+
+

Os campos têm o seguinte significado: +

+
  • número: Número para onde a ligação deve ser transferida. +
  • opções: Define as opções de transferência a utilizar, que são: +
    • n: Aguarda até o canal ser desconectado. +
    +
+


+


+

+

Aplicação "KSendSMS"

+

Esta aplicação tem a função de enviar mensagens SMS através das placas KGSM da Khomp, utilizando os módulos e SIM cards presentes na placa para tal. A sintaxe da aplicação é a seguinte: +

+
<action application="KSendSMS" data="recurso|destino|mensagem" />
+
+

Podendo cada campo ser resumido em: +

+
  • recurso: Segue uma sintaxe idêntica à alocação de canais do application Bridge, e define qual modem utilizar; +
  • destino: Número para onde enviar a mensagem, podendo ser precedido ou sucedido por ! para requisitar uma mensagem de confirmação de envio; +
  • mensagem: Texto (sem aspas) que deve ser enviado para destino. +
+

Após o envio da mensagem, as variáveis KSmsDelivered e KSmsErrorCode conterão o resultado do envio da mensagem. Para maiores informações sobre estas, favor consultar a seção sobre as variáveis utilizadas no Endpoint. +

Exemplos de uso desta aplicação seguem abaixo: +

+
  • Envia "Mensagem de teste." para telefone "99887766" utilizando o modem "1" (segundo modem) da placa "0": +
+
<action application="log" data="DEBUG Enviando SMS..." />
+<action application="KSendSMS" data="b0c1|99887766|Mensagem de teste" />
+
+
  • Envia "Mensagem de teste." para telefone "99887766" utilizando o primeiro modem livre da placa "0", e verifica retorno do envio: +
+
<action application="log" data="DEBUG Enviando SMS..." />
+<action application="KSendSMS" data="b0|99887766|Mensagem de teste" />
+<action application="log" data="DEBUG Enviou? ${KSmsDelivered}" />
+<action application="log" data="DEBUG Codigo: ${KSmsErrorCode}" />
+<action application="log" data="DEBUG Descr.: ${KSmsErrorName}" />
+
+
  • Envia "Mensagem de teste." para telefone "99887766" utilizando o primeiro modem livre da placa "0", ou para o primeiro canal livre da placa "1" (se não houver canal livre na primeira placa): +
+
<action application="log" data="DEBUG Enviando SMS..." />
+<action application="KSendSMS" data="b0+b1|99887766|Mensagem de teste" />
+
+
  • Envia "Mensagem de teste." para telefone "99887766" utilizando o primeiro modem livre da placa "0", requisitando confirmação: +
+
<action application="log" data="DEBUG Enviando SMS..." />
+<action application="KSendSMS" data="b0|99887766!|Mensagem de teste" />
+
+


+

+

Aplicação "KEchoCanceller"

+

Esta aplicação tem a função de habilitar ou desabilitar o cancelador de eco do canal. +

+
<action application="KEchoCanceller" data="ação[,opções])"/>
+
+

Onde: +

+
  • ação: Pode ser on para habilitar o cancelador de eco, e off para desabilitar; +
+

Exemplo de uso desta aplicação: +

+
<action application="KEchoCanceller" data="off"/>
+
+


+

+

Aplicação "KAutoGainControl"

+

Esta aplicação tem a função de habilitar ou desabilitar o controle automático de ganho no canal. +

+
<action application="KAutoGainControl" data="ação[,opções])"/>
+
+

Onde: +

+
  • ação: Pode ser on para habilitar o controle automático de ganho, e off para desabilitar; +
+

Exemplo de uso desta aplicação: +

+
<action application="KAutoGainControl" data="on"/>
+
+


+

+

Aplicação "KDTMFSuppression"

+

Esta aplicação tem a função de habilitar ou desabilitar a supressão de DTMF do canal. A sintaxe da aplicação é a seguinte: +

+
<action applicatin="KDTMFSuppression" value="ação[,opções])"/>
+
+

Onde: +

+
  • ação: Pode ser on para habilitar a supressão DTMF, e off para desabilitar; +
+

É importante notar que quando desabilitada a supressão de DTMF, os DTMFs serão passados inband e não serão mais reportados ao FreeSWITCH. Dessa forma o FreeSWITCH não reconhecerá os DTMFs, o que pode ocasionar em mau funcionamento de aplicações como por exemplo, URAs. +

Exemplo de uso desta aplicação: +

+
<action applicatin="KDTMFSuppression" value="off"/>
+
+


+

+

Aplicação "KSetVolume"

+

Esta aplicação tem a função de ajustar o volume de entrade e saída de canais da Khomp, sendo a sua sintaxe a seguinte: +

+
<action application="KSetVolume" data="<volume>"/>
+<action application="KSetVolume" data="<output-volume>|<input-volume>"/>
+
+

Onde os campos possuem o seguinte significado: +

+
  • volume: Ajusta o volume de entrada e saída (-10 a +10); +
  • output-volume: Ajusta o volume de saída (-10 a +10, "none" para não alterar); +
  • input-volume: Ajusta o volume de entrada (-10 a +10, "none" para não alterar). +
+


+

+

Aplicação "KAdjustForFax"

+

Esta aplicação tem a função de ajustar um canal da Khomp para o recebimento de sinal de FAX/modem, otimizando o canal de comunicação para o tráfego de dados. Sintaxe: +

+
<action application="KAdjustForFax" data=""/>
+
+

Esta aplicação não recebe parâmetros. Exemplo de utilização: +

+
<action application="KAdjustForFax" data=""/>
+
+


+

+

Aplicação "KSendFax"

+

Esta aplicação tem a função de enviar fax utilizando canais digitais ou FXO da Khomp em ligações pré-estabelecidas, sendo a sua sintaxe a seguinte: +

+
<action application="KSendFax" data="<arquivo>[:<arquivo2>[:...]][|<faxid>]"/>
+
+

Esta aplicação necessita de uma licença adquirida à parte para ser utilizada em canais digitais. Os campos possuem os seguintes significados: +

+
  • arquivos: Arquivos a serem enviados para o fax devem estar encapsulados no formato TIFF e possuírem resolução de 98, 196 ou 392 dpi; +
  • faxid: Número do fax. Caso não seja especificado, o valor será obtido pela id da ligação, e caso esta, também não seja válida, o número do fax será o configurado como padrão na K3L. +
+

Exemplo de uso desta aplicação: +

+
<action application="KSendFax" data="/tmp/fax.tif:/home/root/fax2.tif,1234"/>
+
+


+

+

Aplicação "KReceiveFax"

+

Esta aplicação tem a função de receber fax utilizando canais digitais ou FXO da Khomp, sendo a sua sintaxe a seguinte: +

+
<action application="KReceiveFax" data="<arquivo>[|<faxid>]/>
+
+

Esta aplicação necessita de uma licença adquirida à parte para ser utilizada em canais digitais. Os campos possuem os seguintes significados: +

+
  • arquivo: Nome que será atribuído ao arquivo de fax recebido. +
  • faxid: Número do fax. Caso não seja especificado, o valor será obtido pela id da ligação, e caso esta, também não seja válida, o número do fax será o configurado como padrão na K3L. +
+

Exemplo de uso desta aplicação: +

+
<action application="answer" />
+<action application="KReceiveFax" data="/tmp/fax.tif"/>
+
+


+

+

Canal "Khomp_SMS"

+

Este canal de comunicação é utilizado para receber mensagens SMS e criar ligações entrantes no FreeSWITCH para cada mensagem recebida. Este canal não possui qualquer tipo de tratamento ou processamento de áudio, e é chamado com cinco variáveis ajustadas: +

+
  • KSmsFrom, contendo o número de origem de quem enviou a mensagem; +
  • KSmsDate, que define a data/hora do recebimento da mensagem; +
  • KSmsSize, representando o tamanho da mensagem (em bytes); +
  • KSmsMode, contendo a codificação utilizada para transmitir a mensagem; +
  • KSmsBody, que é a mensagem em si. +
+

O processamento do dialplan do FreeSWITCH pode ser utilizado para guardar esta mensagem em um banco de dados, executar alguma aplicação, entre outros. Entretanto, a única ação aceita por este channel é desligamento (hangup) - ou seja, esta ligação entrante não pode ser considerada uma ligação comum. +
+

+

Canal "Khomp_PR"

+

Este canal de comunicação é utilizado para receber ligações em placas de gravação passiva (família KPR e KFXO-HI), criando ligações entrantes no FreeSWITCH para cada chamada recebida. Este canal permite apenas o recebimento de áudio capturado do link, não permitindo tanto o envio de mensagens de áudio quanto o de sinalizações de controle. +

O processamento do dialplan do FreeSWITCH pode ser utilizado para gravar dados sobre esta ligação em um banco de dados, executar alguma aplicação especial e/ou algum application de gravação (como o record), entre outros. Entretanto, a única ação aceita por este channel é desligamento (hangup) - ou seja, esta ligação entrante não pode ser considerada uma ligação comum. +
+


+

+

Códigos e significados

+

Este capítulo apresenta os códigos presentes no Endpoint da Khomp e seus significados, utilizados nos comandos de console: +
+

+

Estados de canais

+

Refletem o estado do canal relativo à placa. No caso de links E1, o estado pode ter uma ou mais das seguintes opções: +

+
  • Free: o canal está livre; +
  • Busy: o canal não está livre (ou ocupado, ou em falha); +
  • Outgoing: o canal possui uma ligação de saída; +
  • Incoming: o canal possui uma ligação de entrada; +
  • Locked: o canal está bloqueado; +
  • Outgoing Lock: o canal está bloqueado para chamadas saintes; +
  • Local Fail: o canal possui uma falha local (nesta ponta); +
  • Incoming Lock: o canal está bloqueado para chamadas entrantes; +
  • Remote Lock: há um bloqueio remoto (na outra ponta) neste canal. +
+

No caso de um canal FXS, o estado é definido por um destes valores: +

+
  • On Hook: o telefone conectado neste canal está no gancho ou desconectado; +
  • Off Hook: o telefone conectado neste canal está fora do gancho; +
  • Ringing: o canal está sendo chamado; +
  • Failure: o canal está em falha devido a problemas de comunicação entre a central e a placa. +
+

No caso de um canal GSM, o estado também é definido por um dos valores a seguir: +

+
  • Idle: o canal está livre e disponível para realizar chamadas; +
  • Call In Progress: o canal está ocupado em uma ligação; +
  • Modem Error: ocorreu um erro na comunicação com o modem do canal; +
  • SIM Card Error: o SIM card não está presente ou não foi inserido/detectado corretamente; +
  • Network Error: ocorreu um erro ao comunicar-se com a rede; +
  • Not Ready: o modem está sendo inicializado no canal. +
+

E no caso de um canal FXO, os estados serão os seguintes: +

+
  • Disabled: o canal está desabilitado; +
  • Enabled: o canal está habilitado. +
+


+

+

Estados de chamada

+

Define o estado de cada canal relativo ao software, que pode ser:: +

+
  • Free: o canal está livre; +
  • Incoming: o canal está recebendo uma chamada; +
  • Outgoing: o canal está realizando uma chamada; +
  • Failure: o canal está em falha. +
+


+

+

Estados da chamada FreeSWITCH

+

Reflete diretamente o estado de chamada controlado pelo FreeSWITCH, que pode se +

+
  • new: Canal é recém criado; +
  • init: Canal foi inicializado; +
  • routing: Canal está procurando uma extensão para executar; +
  • execute: Canal está executando seu dialplan; +
  • ex_media: Canal está trocando media com outro canal; +
  • cs_media: Canal está consumindo toda media; +
  • hangup: O canal está marcada para hangup e pronto para terminar. +
+


+

+

Códigos GSM

+

Os seguintes códigos numéricos são reportados: +

+

Códigos de SMS (SMS cause)

+
1	Unassigned number
+8	Operator determined barring
+10	Call barred
+21	SMS transfer rejected
+27	Destination out of service
+28	Unidentified subscriber
+29	Facility rejected
+30	Unknown subscriber
+38	Network out of order
+41	Temporary failure
+42	Congestion
+47	Resources unavailable
+50	Facility not subscribed
+69	Facility not implemented
+81	Invalid SMS transfer reference value
+95	Invalid message
+96	Invalid mandatory information
+97	Message type non existent
+98	Message not compatible with SMS protection state
+99	Information element non existent
+111	Protocol error
+127	Interworking
+128	Telematic interworking not supported
+129	SMS type zero not supported
+130	Cannot replace SMS
+143	Unspecified TPPID error
+144	Alphabet not supported
+145	Message class not supported
+159	Unspecified TPDCS error
+160	Command cannot be actioned
+161	Command unsupported
+175	Unspecified TP command error
+176	TPDU not supported
+192	SC busy
+193	No SC subscription
+194	SC system failure
+195	Invalid SME address
+196	Destination SME barred
+197	SM rejected duplicate SM
+198	TPVPF not supported
+199	TPVP not supported
+208	SIM SMS storage full
+209	No SMS storage capability in SIM
+210	Error in SMS
+211	Memory capatity exceeded
+213	SIM data download error
+255	Unspecified error
+300	Phone failure
+301	SMS service reserved
+302	Operation not allowed
+303	Operation not supported
+304	Invalid PDU mode parameter
+305	Invalid text mode parameter
+310	SIM not inserted
+311	SIM PIN necessary
+312	Phone SIM PIN necessary
+313	SIM failure
+314	SIM busy
+315	SIM wrong
+320	Memory failure
+321	Invalid memory index
+322	Memory full
+330	SMSC address unknown
+331	No network service
+332	Network timeout
+500	Unknown error
+512	Network busy
+513	Invalid destination address
+514	Invalid message body length
+515	Phone is not in service
+516	Invalid preferred memory storage
+517	User terminated
+
+

Códigos de chamada (call cause)

+
1	Unallocated number
+3	No route to destination
+6	Channel unacceptable
+8	Operator determined barring
+16	Normal call clear
+17	User busy
+18	No user responding
+19	No answer from user
+21	Call rejected
+22	Number changed
+26	Non Selected user clear
+27	Destination out of order
+28	Invalid number format
+29	Facility rejected
+30	Response status enquiry
+31	Normal, unspecified
+34	No circuit channel available
+38	Network out of order
+41	Temporary failure
+42	Switch congestion
+43	Access information discarded
+44	Requested channel unavailable
+47	Resource unavailable
+49	QoS unavailable
+50	Request facility not subscribed
+55	Call barred with UG
+57	Bearer capability not authorized
+58	Bearer capability not available
+63	Service not available
+65	Bearer capability not implemented
+69	Request facility not implemented
+70	Only restricted bearer capability available
+79	Service not implemented
+81	Invalid call reference value
+82	User not member of UG
+88	Incompatible destination
+91	Invalid transit network selected
+95	Invalid message
+96	Missing mandatory information element
+97	Message type not implemented
+98	Message incompatible with state
+99	Information element not implemented
+100	Invalid information element
+101	Message incompatible with state (2)
+102	Recovery on timer expiry
+111	Protocol error
+127	Interworking
+
+

Códigos gerais (mobile cause)

+
0	Phone failure
+1	No connection to phone
+2	Phone adaptor link reserved
+3	Operation not allowed
+4	Operation not supported
+5	Phone SIM PIN required
+6	Phone FSIM PIN required
+7	Phone FSIM PUK required
+10	SIM not inserted
+11	SIM PIN required
+12	SIM PUK required
+13	SIM failure
+14	SIM busy
+15	SIM wrong
+16	Incorrect password
+17	SIM PIN2 required
+18	SIM PUK2 required
+20	Memory full
+21	Invalid index
+22	Not found
+23	Memory failure
+24	Text string too long
+25	Invalid character in text string
+26	Dial string too long
+27	Invalid character in dial string
+30	No network service
+31	Network timeout
+32	Network not allowed
+33	Command aborted
+34	Number parameter instead of text parameter
+35	Text parameter instead of number parameter
+36	Numeric parameter out of bounds
+37	Text string too short
+40	Network PIN required
+41	Network PUK required
+42	Network subset PIN required
+43	Network subset PUK required
+44	Network service provider PIN required
+45	Network service provider PUK required
+46	Corporate PIN required
+47	Corporate PUK required
+60	SIM Service option not supported
+100	Unknown
+103	Illegal MS #3
+106	Illegal MS #6
+107	GPRS service not allowed #7
+111	PLMN not allowed #11
+112	Location area not allowed #12
+113	Roaming not allowed #13
+132	Service option not supported #32
+133	Registration service option not subscribed #33
+134	Service option temporary out of order #34
+147	Long context activation
+148	Unspecified GPRS error
+149	PDP authentication failure
+150	Invalid mobile class
+151	GPRS disconnection TMR active
+256	Too many active calls
+257	Call rejected
+258	Unanswered call pending
+259	Unknown calling error
+260	No phone number recognized
+261	Call state not idle
+262	Call in progress
+263	Dial state error
+264	Unlock code required
+265	Network busy
+266	Invalid phone number
+267	Number entry already started
+268	Cancelled by user
+269	Number entry could not be started
+280	Data lost
+281	Invalid message body length
+282	Inactive socket
+283	Socket already open
+
+


+

+

Solução de problemas

+

Nesta seção, erros e suas soluções mais comuns são apresentados. +

+

Erro durante a instalação do módulo de kernel

+

Durante a instalação do Endpoint da Khomp, podem ocorrer as seguintes mensagens: + +

+
K3L: WARNING: Unable to find a module for [...]
+
+

ou + +

+
install: ******  THE KERNEL MODULE HAS NOT BEEN INSTALLED: *******
+install: 
+install: ** Please, untar the file kpdriver*.tar.gz located in: **
+install: **                 '/usr/src/khomp/'                   **
+install: **             then check the README.txt               **
+install: **  for knowing how to proceed with the installation.  **
+
+

Neste caso, será necessário compilar os drivers manualmente para o seu sistema. Prossiga para o item abaixo para maiores informações. +
+

+

Compilandos os drivers e iniciando os serviços

+

Basta seguir ao diretório /usr/src/khomp, descompactar o arquivo "kpdriver_2.0.0XX.tar.gz", e acompanhar procedimentos descritos no arquivo README.txt. +

Após realizar a compilação e a instalação do módulo, basta carregá-lo no sistema, configurar as placas, e iniciar o servidor de processos da Khomp. +

Para carregar o driver de kernel, é necessário executar o seguinte comando: + +

+
# /etc/init.d/khompdrv start
+
+

Para configurar as placas, por sua vez, necessário executar o comando: + +

+
# khompwizard
+
+

Isto executará um assistente de configuração, que irá perguntar a sinalização utilizada no sistema, bem como outros parâmetros de utilização das placas. +

Caso seja necessário configurar outros parâmetros adicionais, pode-se utilizar o seguinte comando: + +

+
# k3lconfig
+
+

Este configurador, por sua vez, mostra todas as opções possíveis de configuração da placa. Os parâmetros que não forem configurados assumem os valores padrão automaticamente, e são compatíveis com a maior parte dos sistemas. Maiores detalhes sobre este programa podem ser obtidos na seção de número '2'. +


+

+
  • IMPORTANTE: Para o FreeSWITCH iniciar, é preciso que a placa da khomp esteja configurada e todos módulos estejam rodando (conforme mostrado acima). Caso a placa não esteja configurada, o FreeSWITCH não iniciará.

    Se você deseja rodar o sistema sem a placa da Khomp, é preciso configurar o FreeSWITCH para ele não carregar o módulo da Khomp. Para isso, abra o arquivo "/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml", e comente a linha que carrega o módulo:
    +
+
+  <!-- <load module="mod_khomp" /> -->
+

+

Quando a placa da Khomp estiver devidamente configurada e os módulos da khomp carregados (explicado acima), lembre-se de descomentar esta linha no arquivo. +


+Por fim, para carregar o servidor de processos, basta executar o seguinte comando: + +

+
# kserver start
+
+

Após realizar estes procedimentos, o Endpoint já estará operacional, e o FreeSWITCH já pode ser carregado. +
+

+

Configurando parâmetros especiais de sinalização ou áudio

+

Para configurar parâmetros especiais de sincronismo e/ou sinalização, é possível utilizar o programa "k3lconfig": basta selecionar a placa desejada, e as opções das placas serão apresentadas, divididas em seções e subseções para facilitar o acesso. Não é necessário efetuar a configuração de todos os parâmetros: os valores padrão são assumidos, caso não sejam configurados. +

Para ajustar a sinalização do link, basta - depois de selecionar a placa - entrar na seção "Opções de sinalização", e em seguida, em "Sinalização da linha". Para escolher uma sinalização específica, basta utilizar as teclas de direcionamento (setas) até selecioná-la, pressionar 'espaço', e confirmar a opção pressionando 'Enter' sobre o botão "Confirmar". +

Por fim, para salvar as configurações modificadas, basta sair do programa: ele irá mostrar uma janela, com opções para salvar ou não as alterações realizadas. +

É importante notar que não é necessário alterar/ativar as seguintes opções: +

+
  • Cancelamento de eco automático; +
  • Supressão de DTMFs automática; +
  • Controle de ganho (AGC) automático. +
+

Estas opções são controladas pelo Endpoint, e devem estar desabilitadas no 'k3lconfig'. +
+

+

Inicialização automática dos serviços e módulos de kernel

+

Se a carga dos módulos de kernel ou a inicialização dos serviços da Khomp não for realizada automaticamente na inicialização do sistema, é possível realizar esta instalação manualmente, criando um link para os scripts /etc/init.d/khompdrv e /etc/init.d/kserver no diretório de inicialização do sistema. +

Na caso da distribuição Debian, o script de carga dos módulos de kernel seria linkado dentro do diretório /etc/rcS.d/, enquanto o script de inicialização dos serviços seria linkado dentro dos diretórios /etc/rc2.d, /etc/rc3.d, /etc/rc4.d, /etc/rc5.d, da seguinte forma: +

+

+
# ln -s /etc/init.d/khompdrv  /etc/rcS.d/S19khompdrv
+# ln -s /etc/init.d/kserver   /etc/rc2.d/S20kserver
+# ln -s /etc/init.d/kserver   /etc/rc3.d/S20kserver
+# ln -s /etc/init.d/kserver   /etc/rc4.d/S20kserver
+# ln -s /etc/init.d/kserver   /etc/rc5.d/S20kserver
+
+

É interessante verificar as normas da sua distribuição para inicializar os serviços de acordo com o que é esperado pela inicialização da mesma. +
+

+

Apêndice

+

Nesta seção, encontram-se informações úteis sobre o Endpoint e componentes relacionados. +

+

Disposição dos arquivos

+

Os diretórios criados/modificados nesta instalação são: + +

+
/etc/init.d/                -- Scripts de inicialização;
+
+/etc/khomp/                 -- Arquivos de firmware e configurações;
+
+/usr/local/freeswitch/conf/ -- Configurações do FreeSWITCH e Endpoint;
+
+/usr/doc/khomp/             -- Documentação das placas, do mod_khomp e dos utilitários;
+
+/usr/sbin/                  -- Utilitários e servidor de processos;
+
+/usr/lib/                   -- Bibliotecas compartilhadas da K3L;
+
+/usr/local/freeswitch/mod/  -- Módulo 'mod_khomp.so';
+ 
+/var/log/khomp2.1/          -- Diretório de logs da K3L e Endpoint
+
+


+O script /etc/init.d/khompdrv é responsável por carregar os módulos kpci9030.ko e kpex8311.ko no kernel, que deve ser realizada automaticamente na inicialização do sistema. Em caso de problemas, verifique a seção Solução de problemas. +
+


+

\ No newline at end of file diff --git a/src/mod/endpoints/mod_khomp/docs/Manual.pdf b/src/mod/endpoints/mod_khomp/docs/Manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ea29f716ec2b8f62651ae66bc396e97f1a5c13fc GIT binary patch literal 470261 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%0DK+6BLU`R5GFJ6g)#d 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 ^Wn2D0Pj@uNZ+8Sx`R$PBj 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%0Dd;wq+Rbns-SNO1+v>UKZk14*3R9RD_4F@K1 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

{+?r(4{5u{9cBJ8rFgSM1fs-ybVL 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%0D72@H@wjt@4N{ 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

+frE8?8 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 SHw3FrGDeqFRyHs-l>A>#a>QK# literal 0 HcmV?d00001 diff --git a/src/mod/endpoints/mod_khomp/docs/README.html b/src/mod/endpoints/mod_khomp/docs/README.html new file mode 100644 index 0000000000..e4cae5ad3b --- /dev/null +++ b/src/mod/endpoints/mod_khomp/docs/README.html @@ -0,0 +1,39 @@ +Mod Khomp: README

Guia Rápido

+

Depois de instalar a placa no sistema, e executar o programa de instalação pela primeira vez, os drivers e serviços da Khomp serão adicionados na inicialização do sistema, e automaticamente carregados. +

Se o sistema possuir pelo menos uma placa de tronco E1 e/ou uma placa FXO, uma tela de configuração básica deverá ser apresentada ao final do processo, questionando parâmetros de sinalização - no caso de existirem placas E1 - e/ou realizando o ajuste de cadências - no caso de existirem placas FXO. +

Se todas estas etapas foram executadas com sucesso, prossiga para o item Utilizando o Endpoint da Khomp. Caso algum problema ocorra, consulte o Manual do Endpoint, seguindo para a seção de Solução de problemas. +

+

Utilizando o Endpoint da Khomp

+

Após a instalação e inicialização dos serviços necessários pela Khomp, o FreeSWITCH já pode ser carregado ou inicializado. +

+
  • AVISO: É imprescindível que o FreeSWITCH não seja executado utilizando a opção que desabilita o escalonamento em tempo real (-nort), especialmente se este estiver sendo executado lado-a-lado com servidores web ou servidores de banco de dados. Não realizar este procedimento pode resultar em perda de qualidade do áudio, gerando um sério comprometimento no andamento das ligações do sistema. +
+

Após a inicialização do FreeSWITCH, pode-se verificar se o módulo da Khomp foi carregado através do seguinte comando:
+

+
 freeswitch@hostname> module_exists mod_khomp
+
+

A próxima linha deverá responder algo tipo: +

+
 true
+
+

Para verificar se o FreeSWITCH reconheceu todas as placas, digite: +

+
 freeswitch@hostname> khomp summary
+
+

A saída desse comando mostrará detalhes de todas placas reconhecidas. +

No caso de uma placa de tronco E1, pode-se verificar o estado dos links com o seguinte comando: +

+
 freeswitch@hostname> khomp show links
+
+

O estado dos canais individuais, por sua vez, pode ser aferido com o comando: +

+
 freeswitch@hostname> khomp show channels
+
+

Para mais detalhes sobre os comandos do Endpoint da khomp digite no console do FreeSWITCH: +

+
 freeswitch@hostname> help khomp
+
+
  • IMPORTANTE: Para fazer completo uso da sua placa Khomp, será preciso configurar suas regras de discagem, seja através do arquivo default.xml ou de um aplicativo externo, definindo regras específicas para realizar ao receber ligações.

    No Manual do Endpoint, podem ser encontradas informações sobre o formato dos contextos de entrada (responsáveis por receber as ligações) e sobre as opções disponíveis no application Bridge (responsável por realizar ligações) que podem ser utilizadas com o Endpoint da Khomp, além de outras funcionalidades especiais providas pelo mesmo. +
+


+

\ No newline at end of file diff --git a/src/mod/endpoints/mod_khomp/docs/README.pdf b/src/mod/endpoints/mod_khomp/docs/README.pdf new file mode 100644 index 0000000000000000000000000000000000000000..698ab83daecc34a1f5dad2bca780d38c4e4fa680 GIT binary patch literal 399117 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 z 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

77Bx-HjTq40!#G%-TXBirB$Qvq1vdHWjQ#74 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�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 literal 0 HcmV?d00001 diff --git a/src/mod/endpoints/mod_khomp/docs/README_en.html b/src/mod/endpoints/mod_khomp/docs/README_en.html new file mode 100644 index 0000000000..5d44b8219f --- /dev/null +++ b/src/mod/endpoints/mod_khomp/docs/README_en.html @@ -0,0 +1,40 @@ +Mod Khomp: README: en

Quick guide

+

After installing the card in the system and run the installation program for the first time, the drivers and Khomp services will be added at system startup, and automatically loaded. +

If your system has at least one E1 trunk card and / or an FXO card, a basic setup screen will be presented at the end of the process, questioning signaling parameters - if there are signs E1 - and/or performing the adjustment cadences - where that FXO cards. +

If all these steps were performed successfully, proceed to the item Using Khomp Endpoint. If a problem occurs, see the User Guide, in the section Troubleshooting. +

+

Using the Khomp Endpoint

+

After installation and startup services required by Khomp, FreeSWITCH can now be loaded or initialized. +

+
  • WARNING: It is imperative that theFreeSWITCH is not executed using the option that disables the escalation in real time (-nort), especially if this is running side-by server-side with web servers or database. Failure to do so may result in loss of audio quality, causing a serious commitment on the progress of system connections. +
+

After initialization of FreeSWITCH, you can verify that the module was loaded Khomp through the following command:
+


+

+
 freeswitch@hostname> module_exists mod_khomp
+
+

The next line should answer something like: +

+
 true
+
+

To verify that the FreeSwitch recognize all the cards, type: +

+
 freeswitch@hostname> khomp summary
+
+

The output of this command will show details of all cards accepted. +

In the case of an E1 card, you can check the status of links with the following command: +

+
 freeswitch@hostname> khomp show links
+
+

The state of individual channels, in turn, can be measured with the command: +

+
 freeswitch@hostname> khomp show channels
+
+

For more details on the commands of the Endpoint khomp type in the console of FreeSWITCH: +

+
 freeswitch@hostname> help khomp
+
+
  • IMPORTANT: To make full use of your card Khomp, you must configure your dialing rules, either through the extension.conf or from an external application by setting specific rules for conduct by receiving connections.
    In the User Guide, information can be found on the format of input contexts (responsible for receiving calls) and on the options available on application Dial (responsible for make calls) that can be used with the Endpoint Khomp, and other special features provided by it. +
+


+

\ No newline at end of file diff --git a/src/mod/endpoints/mod_khomp/docs/README_en.pdf b/src/mod/endpoints/mod_khomp/docs/README_en.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e36d6f1191102c4616d6382b6ca5a021c8aa9638 GIT binary patch literal 314411 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 MMI#`fqN7Ule-qweEC2ui literal 0 HcmV?d00001 diff --git a/src/mod/endpoints/mod_khomp/docs/User_Guide.html b/src/mod/endpoints/mod_khomp/docs/User_Guide.html new file mode 100644 index 0000000000..1a276b9e37 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/docs/User_Guide.html @@ -0,0 +1,1099 @@ +Mod Khomp: User Guide +

First considerations

+

This document covers information about the Endpoint of Khomp as a whole, include the options, applications, CLI commands, among others. +

For first installation procedures, please see the README. +
+

+

Configuration

+

Configuring the Khomp Endpoint is a task that consists of three steps: +

+
  • Configuration of the boards through the K3L; +
  • Setting up the Endpoint; +
  • Setting up the FreeSWITCH. +
+

These steps are described more fully below. +
+

+

K3L API Configuration

+

This step is carried out in a semi-automated way using the khompwizard program, a wizard that configures the basic parameters of the system boards. This wizard initializes the configuration files using information from the user when they are needed, initializing the standard settings to default values. +

Typically, this program runs automatically after installation of the system. However, you may need to run it manually if an update is being performed, or if new cards were added to the system after installing new drivers. +


+If you need to set advanced parameters of the board and/or signaling, the program k3lconfig allows you to access all the available settings for each installed card. For more information about this program, check the k3lconfig User's Guide. For solving synchronization issues, check the Troubleshooting section for manual configuration of the boards. +
+

+

Endpoint Configuration

+

The system's default configuration normally meet most user's needs. However, the configuration of the Endpoint Khomp can be modified through the configuration file '/usr/local/freeswitch/conf/autoload_configs/khomp.conf.xml'. +

The list of options is as follows: +

+

<channels>

+

Define general settings of all channels of Khomp: +

+
Sintaxe: <param name="..." value="..."/>
+
+
  • auto-fax-adjustment: Enable ("yes") or disables ("no") the automatic adjustment of the channel (disable the echo canceller and the suppression DTMF) tone to detect FAX (local option) ; +
  • auto-gain-control:Enable ("yes") or disables ("no") the activation of the automatic gain control (AGC) by the Endpoint (local option); +
  • context-digital: Context for incoming connections on digital boards (the default is "khomp-DD-LL", where "DD" will be replaced at the time of connection by the device number, "LL" by the number of the link, "CCC" by channel number and "SSSS" for the device serial number); +
  • context-fxo: Context for incoming connections on FXO cards (the default is "khomp-CC-DD", where "DD" will be replaced at the time of connection by the device number, "CC" by channel number, and "SSSS" by the device serial number); +
  • context-fxo-alt: Alternative input context for FXO cards (the default is empty - when set, follows the same substitution rules for context-fxo); +
  • context-fxs: Context for incoming connections on FXS cards (the default is "khomp-CC-DD", where "DD" will be replaced at the time of connection by the device number, "CC" by channel number, and "SSSS" by the device serial number); +
  • context-fxs-alt: Alternative input context for FXS cards (the default is empty - when set, follows the same substitution rules for context-fxs); number); +
  • context-gsm-call (or context-gsm): Context of entry for GSM boards (the default is "khomp-CC-DD", where "DD" will be replaced at the time of connection by the device number, "CC" by channel number, and "SSSS" by the device serial number); +
  • context-gsm-alt-call (or context-gsm-alt): Alternative input context for GSM (the default is zero - when set, follows the same substitution rules for context-gsm-call); +
  • context-gsm-sms: Context for incoming SMSs (the default is "khomp-sms-CC-DD", where "DD" will be replaced by the number of device, "CC" by channel number and "SSSS" by the device's serial number); +
  • context-gsm-wait: Context used for pre-processing of incoming GSM calls that are on waiting state - to disable this feature, use none (the default is "khomp-wait-CC-DD", where "DD" will be replaced by the number of device, "CC" by channel number and "SSSS" by the device's serial number); +
  • context-pr: Context for incoming connections on boards KPR (default is "khomp-CC-DD", where "DD" will be replaced at the time of connection by the device number, "CC "by channel number); +
  • disconnect-delay: Sets the time in milliseconds to perform processing a disconnect event, to ignore situations where other equipment performing the double service to overthrow collect calls (local option); +
  • echo-canceller (former 'echocanceller): Active ("yes") or disables ("no") echo cancellation automatic Endpoint (local option); +
  • fxo-send-pre-audio: When enabled ("yes") releases audio channel before the outgoing call connection boards KFXO (the default value is "yes"); +
  • fxs-global-orig: Start number for sequencial branch numbering in FXS cards that are not listed in the [fxs-branches] section (the numbering follows ascending order from board number and physical channel number) (default is "0"); +
  • fxs-co-dialtone: Sequences of numbers, separated by commas, which fires a continuous tone (of central office) in FXS branches (eg: "0,99" means that, when you dial "0" or "99", the user will hear a continuous dial tone) (default is empty); +
  • fxs-bina: When enabled ("yes"), calls to FXS lines will send digits corresponding to the source phone identification using BINA DTMF signaling (the default value is "no") (local option); +
  • input-volume: Sets the volume gain for incoming audio (entering the board), from -10 to +10 (local option); +
  • kommuter-activation: Sets whether to activate devices kommuter found in the system will be done automatically ("auto") by the channel, or manually ("manual") by the user through the command "khomp kommuter on/off" +
  • kommuter-timeout: Sets the timeout (in seconds) for initializing the kommuter devices. If this timeout is reached without receiving notification of the channel, the devices will switch back to "off" condition. The minimum value is "0", where the links will always remain switched "on", and the maximum is "255"; +
  • language: Set language to Khomp channel calls (local option); +
  • log-to-console: Set log messages to be printed on the console; +
  • log-to-disk (old "log"): Set log messages to be saved to disk; +
  • out-of-band-DTMF (former dtmfsuppression): Activate ("yes") or disables ("no") the removal and DTMF sending these out-of-band (local option); +
  • output-volume: Define o volume de saída das ligações, varia de -10 a +10 ; +
  • pulse-forwarding (former 'pulsedetection): Active ("yes") or disables ("no") for the detection of pulses and converting them into DTMF (local option); +
  • r2-preconnect-wait (former 'r2preconnectwait): Sets the timeout sending the ringback signaling, protocol R2/MFC to start sending audio silence. Only used when "r2-strict-Behavior" is set to "no" (local option); +
  • r2-strict-Behaviour: Enable ("yes") or disables ("no") the behavior of signaling R2/MFC as the standard sets. The default is "no", and can be changed to "yes" if needed to receive / send data precise signaling protocol (condition B, for example) (local option); +
  • ringback-delay-co: Sets the delay to enable the generation of call control tone (ringback) by the Endpoint Khomp when there is an ringback indication from signaling and there is no audio being sent by the channel which indicated the situation (local option); +
  • ringback-delay-pbx: Sets the delay to enable the generation of call control tone (ringback) by the Endpoint Khomp when there is an ringback indication, and the audio has no tone (silence) (local option); +
  • suppression-delay (former suppressiondelay): Activate ("yes") or disables ("no") the delay necessary to suppress DTMF. If disabled ("no"), also disables suppression of DTMF (local option); +
  • trace: Set debugging options. Should not be used in production unless absolutely necessary; +
  • user-transfer-digits: Defines a sequence of DTMF digits to initiate the transfer between FreeSWITCH® and another PBX (using user signaling, like QSig or FXO FLASH). +
+


+

+

<groups>

+

Defines the groups to be used in channel allocation. +

In this case, the options are used to define names for strings allocation of channels. The format follows the standard <group name> = <allocation string>, where the allocation string is the same string used in the bridge application, and group name is an arbitrary name chosen by the user. +

+
For example, to define the group pstn as the channels 0 and 5 of the board 0, the following line could be used: +
+
<param name="pstn" value="b0c0 + b0c5"/> 
+
+

This group, in turn, could be used in the bridge application as <action application="bridge" data="Khomp/Gpstn/..."/>. +

+
You can associate a given input context to a channel group, simply specify a name of context string after the allocation, separated by ':'. +
+

For example, to define the same group pstn as channels 0 to 20 of card 0, and defining the incoming context to for channels in this groups to from-pstn, one could use the line: +

+
<param name="pstn" value="b0c0-20:from-pstn"/>
+
+

This group would be used the same way as before in the bridge application, and all the calls coming from these channels would be treated in context from-pstn. +
+

+

<cadences>

+

Defines settings for the Endpoint cadences. +

In this case, the options are names cadences, followed by one or two pairs of numbers - that define the ranges of tone and silence to be used in cadences. +For details, please refer to the configuration file for examples. +
+

+

<fxs-branches>

+

Defines source numbers for the board KFXS. +

In this case, the options are sequences of prefixes of branches and serial numbers of the boards, which define the basic numbers of source addresses, and the numerical order of the boards. The format of the options is: +

+
<param name="prefixo" value="serial1, serial2, ...."/>
+
+

For example, if two KFXS-300 SPX boards with serial numbers K0374 and K2352 must be numbered sequentially, starting from branch 200, you may write: +

+
<param name="200" value="374, 2352"/>
+
+

This will define the first branch of board 'K0374 as number 200, the second as 201, and so one. The first branch from board K2352 will have number 230 (as K0374 has 30 channels), the second will be numbered 231, and so on - until the last channel, numbered 259. +

For more details, please refer to the configuration file for other exemples. +
+

+

<fxs-hotlines>

+

Sets hotlines for the KFXS based boards +

In this case, the options are sequences of branches and sequences of destination numbers, which define branches to be treated as "hotlines" and numbers to be dialed when they are take off hook. For instance: +

+
<param name="100" value="1234"/>
+<param name="200" value="4321"/> 
+
+

In the first line, the branch numbered 100 will call extension 1234 when taken off hook, while in the second one, branch 200 will call number 4321 when taken off hook. +
+

+

<fxs-options>

+

Allows you to set specific settings for FXS extension. +

In this case, the settings are extension numbers (based on those defined in the <fxs-branches>), and the options and their values. +

+
  • context; +
  • input-volume; +
  • output-volume; +
  • accountcode; +
  • calleridnum; +
  • calleridname; +
  • mailbox. +
+

Each option is separated from each other by a pipe "|" or a slash "/" and defined after the colon ":". Example: +

+
<param name="200" value="language:en|context:master-branch" />
+
+

For more information on the syntax and examples, please refer to the configuration file. +

For more information visit the configuration file 'khomp.conf.xml'. +
+

+

FreeSWITCH Configuration

+

When connections are received on the boards and devices Khomp, they are forwarded by the Endpoint to specific contexts within the dialplan of FreeSWITCH®. These settings can be changed via the configuration file khomp.conf.xml, available on the FreeSWITCH configuration directory (by default, "/usr/local/freeswitch/conf/autoload_configs"). +

For details about the specific contexts, see section Endpoint configuration. +

Below are details of how to configure the settings for incoming calls +
+


+

+

Contexts for E1 channels

+

For E1 boards, inbound contexts are predefined as option context-digital with default value as following: +

+
<param name="context-digital" value="khomp-DD-LL"/>
+
+

This standard defines the context that links will be redirected in accordance with the number of the board and number of the link: DD is the device number (two digits), and LL is the number of the link (also with two digits). +

However, it is possible to configure other inbound contexts, with different formats. There is format CCC, which means the channel number on the card (three digits), and SSSS, which represents the serial board number (with four digits). +

Examples for configuration entries (khomp.conf.xml): +

+
<!-- Serial board number and sequential link (ex: khomp-01-00) -->
+<param name="context-digital" value="khomp-DD-LL"/>
+
+
<!-- Serial board number and sequential link (ex: khomp-3049-00) -->
+<param name="context-digital" value="khomp-SSSS-LL"/>
+
+
<!-- Sequential board number and the channel (ex: khomp-00-001) -->
+<param name="context-digital" value="khomp-DD-CCC"/>
+
+
<!-- Receive all calls in one context (khomp-digital) -->
+<param name="context-digital" value="khomp-digital"/>
+
+

Follows an example the context usage inside the dialplan: + +

+
<!--
+The present context in 'extensions.conf' will handle calls
+that come from the link 0 (first link) of the board 0.
+-->
+<context name="khomp-00-00">
+             .
+             .
+             .
+</context>
+
+

Another example, using the same format: + +

+
<!-- 
+The present context in 'extensions.conf' will handle calls
+that come from the link 1 (second link) of the board 0.
+-->
+<context name="khomp-00-01>
+             .
+             .
+             .
+</context>
+
+

A complete example, with a few simple actions: + +

+
<context name="khomp-00-00">
+    <extension name="exemplo_1">
+        <condition field="destination_number" expression="^1234$">
+            <action application="bridge" data="Khomp/b0L1/2345"/>
+        </condition>
+    </extension>
+    <extension name="exemplo_2">
+        <condition field="destination_number" expression="^23(\d{2})$">
+            <action application="bridge" data="sofia/${use_profile}/11$1@${sip_from_host}"/>
+        </condition>
+    </extension>
+</context>
+
+
<context name="khomp-00-01">
+    <extension name="exemplo_3">
+        <condition field="destination_number" expression="^1111$">
+            <action application="bridge" data="Khomp/b0L0/2345"/>
+        </condition>
+    </extension>
+</context>
+
+

This dialplan defines that: +

+
  1. The incoming calls on the link 0 of the board 0 will have the following handling: +
    • Calls to the extension 1234 for will be redirected to the second link on the first board (b0L1), calling number 2345; +
    • Calls to any four digit number starting with23 will be redirected to SIP phones numbered 11 plus the last two digits of the number dialed. +
    +
  2. The incoming calls on the link 1 of the board 0 for the number 1111 will be redirected to the first link of the first board (b0L0) calling number 2345. +
+

Contexts of FXS/FXO/GSM channels

+

Just as in the context of E1 cards, inbound links are forwarded to the Endpoint FreeSwitch. However, these signals have two pre-defined contexts, sought with a preference order. +

The first context is pre-defined as follows, according to the file khomp.conf.xml: +

+
<param name="context-gsm" value="khomp-DD-CC"/> ;placas GSM
+
+
<param name="context-fxs" value="khomp-DD-CC"/> ; placas FXS
+
+
<param name="context-fxo" value="khomp-DD-CC"/> ; placas FXO
+
+

There is also an alternative context, which has the following default value: +

+
<param name="context-gsm-alt" value="khomp-DD"/> ; placas GSM
+
+
<param name="context-fxs-alt" value="khomp-DD"/> ; placas FXS
+
+
<param name="context-fxo-alt" value="khomp-DD"/> ; placas FXO
+
+

For these options, DD is the device number (two digits), and CC is the channel number (also two digits). There is also the SSSS format, which represents the serial number board. +

+
  • NOTE: In the KGSM board, incoming calls are always redirected to the "s" extension, since the GSM protocol does not identify the target number, only the originator - if not omitted. +
+

Priority settings on the FXS branches

+

On calls originated from an FXS branch, the Endpoint searches for a valid extension in three different contexts. The priority of contexts is as follows: +

+
  1. Branch-specific extension, defined in section <fxs-options> of file khomp.conf.xml; +
  2. Context defined in context-fxs; +
  3. Context defined in context-fxs-alt. +
+

If no valid extension can be found, the extension i is searched in the contexts above, and also in the default context. If the dialing timeout is reached (option fxs-digit-timeout), the search will consider all digits dialed until the timeout; if no extension is found, it will search extension "t"; if nothing is found again, then extension "i" will be searched; if no extension is found, "fast-busy" cadence will be played. +
+

+

Contexts for SMS messages (GSM only)

+

SMS messages are received by the Khomp Endpoint and forwarded to FreeSWITCH as a normal connection but no audio, which has some variables set with information received in the message - for more information on these variables, see the documentation of the variables of the Endpoint. This context can also be modified in the same way as the above contexts. +

The default value for this option follows (khomp.conf.xml): +

+
<param name="context-gsm-sms" value="khomp-sms-DD-CC"/> 
+
+

Where DD is the device number (two digits), and CC is the channel number (also with two digits). For example: +

+
<context name="khomp-sms-00-01">
+    <extension name="sms">
+        <condition field="destination_number" expression="^s$">
+            <action application="log" data="DEBUG KSmsType=${KSmsType}"/>
+            <action application="log" data="DEBUG KSmsBody=${KSmsBody}"/>
+        </condition>
+    </extension>
+</context>
+
+

Contexts for Khomp_PR channels (KPR)

+

For these cards, inbound links have a pre-defined context, as shown below: +

+
<param name="context-pr" value="khomp-DD-CC"/> 
+
+

In this case, DD is the device number (two digits), andCC is the channel number (also two digits). The name and format of this context can also be changed through the "context-pr" in the configuration file. +
+
+

+

Using the bridge application

+

The bridge application is responsible for generating calls from the FreeSWITCH from a dialplan. This application can be used to generate calls from different Endpoints technologies, following a specific format to define destination, dialing options and define the communication Endpoint to be used. +

+

Fields relating to the Khomp Endpoint

+

When used for Khomp channels, the bridge string can have two, three or four fields separated by slash (/). Some example strings: + +

+
<action application="bridge" data="Khomp/B2L0/32625644"/>
+<action application="bridge" data="Khomp/*B2L0/32625644"/>
+<action application="bridge" data="Khomp/S0411/99991234"/>
+<action application="bridge" data="Khomp/Gpstn/99991234"/>
+<action application="bridge" data="Khomp/*Gpstn/99991234"/>
+<action application="bridge" data="Khomp/B2C58/32625644/category=4:orig=4855553232"/>
+<action application="bridge" data="Khomp/b0c9"/>
+<action application="bridge" data="Khomp/b0c1+b0c14"/>
+<action application="bridge" data="Khomp/r304"/>
+
+

In the first five examples, three fields have been specified; in the sixth, four fields are used; in the last three examples, just two are used. +

The fields description for the Khomp Endpoint: +

+
  • 1st field: Khomp: identifying the type of Endpoint in question; +
  • 2nd field: B2L0, S0411, Gpstn, etc: represents the Policy for channel allocation (detailed below); +
  • 3rd field: 32625644 and 99991234: the destination numbers (missing for calls to KFXS channels); +
  • 4th field: category=4:orig=4855553232: additional options, detailed below. +
+

NOTE: The bridge allocation string with only two fields is specific to the KFXS boards, where the destination is the channel itself. +

+

Policy for channel allocation

+

The policy for allocation of channels on the Khomp Endpoint can be specified in the bridge string itself or in the groups section (inside the configuration file khomp.conx.conf). To specify boards, links and channels, the following syntax is available (considering X, Y and Z as any numbers): +

+
  • bX -- search the channels on the board X, ascending order; +
  • bXLY -- search channel on the link Y from X board, ascending order; +
  • bXcY -- try to allocate channel Y from board X; +
  • bXcY-Z -- search for channels starting from channel Y to channel Z (inclusive) of board X, ascending order; +
  • BXcY-Z -- same as above, but descending order; +
  • sX -- search the channels on the board of serial number X, ascending order; +
  • sXLY -- search channel on the link Y from board of serial number X, ascending order; +
  • sXcY -- try to allocate channel Y from board of serial number X; +
  • sXcY-Z -- search for channels starting from channel Y to channel Z (inclusive) from board of serial number X, ascending order; +
  • SXcY-Z-- same as above, but descending order. +
+

To search for extensions of cardsKFXS according to the extension number, can be used the following syntax (whereas X and Y valid extension numbers): +

+
  • rX- search branch numbered X; +
  • RX- equivalent to the above; +
  • rX-Y- search from branch X to Y, ascending order; +
  • RX-Y- search from branch X to Y, descending order. +
+

The capitalization of the letter 'B', 'S' or 'R' defines the search order of the channels: if capitalized, order is descending; otherwise, ascending. +

As for the allocation of channels across groups, the following syntax is available: +

+
  • ggroupname - uses the string defined the group "groupname" in the configuration file (detailed in the configuration section of the Endpoint). +
  • Ggroupname - equivalent to the above. +
+

Grouping channel allocations

+

There are cases where you need to get more channels for a particular device or particular group of extensions. For this, there is an extension available in string allocation, with respect to the use of token sum (+) to concatenate multiple stringsbinding, as follows: + +

+
<action application="bridge" data="Khomp/B1L0+B2L0/32332933"/>
+<action application="bridge" data="Khomp/*B2+B3+B4/99887766"/>
+<action application="bridge" data="Khomp/S0411+B1L0/99887766"/>
+<action application="bridge" data="Khomp/Gpstn1+Gpstn2/99991234"/>
+<action application="bridge" data="Khomp/*gOperadora1+gOperadora2/98891234"/>
+
+

This grouping is available for the application bridge and on the specification of groups. The processing of allocation takes place from left to right - except when using cyclic channel allocation, whereall the specified channels are scanned simultaneously. +

+

Cyclical and/or fair allocation

+

Another way for allocation of channels is the cyclic and/or fair allocation, which chooses the channel that has completed the the lowest number of outgoing calls. This mode of allocation may be used by passing an asterisk (*) before the allocation string of channels (as can be seen in the section above, in the second and fifth examples). +

When started with an asterisk (*), other forms of allocation (increasing, decreasing, etc) are used to decide what channel will be allocated when there are two or more channels with less number of outgoing calls. +

+
  • WARNING: The use of fair and/or cyclic is recommended only for analog (KFXO), branches (KFXS) and cellular interface (KGSM) boards. E1 connections should allocate channels in one way (ascending/descending) from one side and the opposite on the other to avoid problems of double seizure (which may occur in R2/MFC signaling). Fair/cyclic allocation also costs more in memory and processor footprint, which tends to be a higher cost in E1 due to the higher number of channels (30 in each link).

    For these reasons, fair/cyclic allocations should only be used on signalizations where it can represent any real difference, like equalizing the charge costs of the lines, the total usage, or the number of connections received by each branch. +
+

Available options

+
  • orig: Sets the originator number, without changing the variable ${CALLERID(num)}. That is, the option orig serves only to pass a number of different source of${origination_caller_id_number}. If FreeSWITCH has already set the variable ${origination_caller_id_number}, which is the default behavior, Endpoint automatically uses this value as a reference to the number of origin, without having to pass any additional options.

    On the boards KGSM, is set to restricted, omits the number of origin. Example:
    +
+
+ <action application="bridge" data="Khomp/b0/99887766/orig=restricted"/>
+
+
  • category: When set to a numeric value, sets the category of outgoing call to this value (available only in R2/MFC signaling); +
  • uui: When adjusted for a number and a string of text, separated by hash ("#"), sends a "UserToUser" to the other end before making the call - the first value will be the descriptor and the second one will be the message as the text (available only in ISDN signaling); +
  • ring_cadence: When set to a cadence name (listed in the [cadences] section), uses this for ringing FXS channels; +
  • ring: When set to two numbers separated by a dot ("."), defines the cadences to be used while ringing a FXS channel - the first time is the ringing time, and the second one, the silence time; +
  • ring_ext: When set to two numbers separated by a dot ("."), defines the extended cadences to be used while ringing a FXS channel, executed after the ring specification - the first time +
  • usr_xfer: Defines a group of DTMF digits to initiate a transfer between PBXes (using QSig or FXO FLASH, for instance); +
  • drop_on: When set to "message_box", "human_answer", "answering_machine", "carrier_message", "unknown" or a list them - separated by plus sign ("+") or dot ("." ) - drops the call when detect voice mail box, human answer, answering machine messages, operator messages, or unknown answer pattern - respectively. Available in digital signals (E1 links and boards KGSM). Additionally, the information service is reported to the user in the variableKCallAnswerInfo; +
  • answer_info: When specified (take no parameters), report answer information to the user through the variableKCallAnswerInfo +
  • pre: When set to a string of DTMF digits, uses these to pre-allocate an output channel in an analog PABX, dial the desired number of B below. Only available for signaling analog (FXO); +
  • pre_answer: When set (need no value), answers the channel before the connection is completed - allowing, for instance, DTMF tones to sent (useful for use in a DISA); +
  • output_volume: Sets the output volume of the link (ranges from -10 to +10); +
  • input_volume: Sets the volume of inbound link (ranges from -10 to +10); +
+


+

+

List of variables

+

Here's a list of variables available in the Endpoint: +

+
  • KDropCollectCall: When set before ringing or answer an incoming call, enables ("yes") or disables ("no", default) the drop of collect calls based on signaling received from the central public, double answer, audio tone recognition (can be defined globally); +
  • KR2SendCondition: When set to a numeric value, before the ringing an incoming call, adjusts the condition for this Endpoint to this value (available only on R2 signaling); +
  • KR2GotCategory: Adjusted by the Endpoint when an incoming call is received, with the category number of the caller (only available on R2 signaling); +
  • KR2GotCondition *: Adjusted by the Endpoint, available after returning from a call made by FreeSWITCH (bridge application). Has the condition of the remote end received when making the call (available only for R2 signaling); +
  • KISDNGotCause *: Adjusted by the Endpoint, available after returning from a call made by FreeSWITCH (bridge application). Has the ISDN "cause" code received when making the call (available only for ISDN signaling); +
  • KCallAnswerInfo *: Adjusted by the Endpoint, available after returning from a call made by FreeSWITCH (bridge application). Contains the service information identified to make the call (available only for digital signaling - E1 and GSM); +
  • KSmsDelivered: Adjusted by the Endpoint when sending a SMS message with the application KSendSMS, saying whether the message was delivered successfully ("yes") or not ("no"); +
  • KSmsErrorCode: Adjusted by the Endpoint when sending a SMS message with the application KSendSMS, containing the error code that happened when sending the message; +
  • KSmsErrorName: Adjusted by the Endpoint when sending a SMS message with the application KSendSMS, contains the name of the error or "None" if there has been no error; +
  • KSmsType: Adjusted for the input Endpoint in the context of SMS messages, defines the type of message received (can contain the values "message", "confirm" or "broadcast"; +
  • KSmsFrom: Adjusted for the input Endpoint in the context of SMS messages, sets the number of origin of the received message (available on types" message "and" confirm "); +
  • KSmsDate: Adjusted for the input Endpoint in the context of SMS messages, sets the date of sending the message (available on types "message" and "confirm"); +
  • KSmsSize: Adjusted for the input Endpoint in the context of SMS messages, contains the size (in bytes) of the received message (available on types "message" and "broadcast"); +
  • KSmsMode: Adjusted for the input Endpoint in the context of SMS messages, contains the encoding type of the received message (available on types "message" and "broadcast"); +
  • KSmsBody: Adjusted for the input Endpoint in the context of SMS messages, contains the text of the received message (available in types "message" and "broadcast"); +
  • KSmsDelivery: Adjusted for the input Endpoint in the context of SMS messages, containing the date of delivery of the message sent earlier (available in type "confirm"); +
  • KSmsStatus: Adjusted for the input Endpoint in the context of SMS messages, contains the status of the message sent earlier (available on the type "confirm"); +
  • KSmsSerial: Adjusted for the input Endpoint in the context of SMS messages, contains the serial number of the received message (available on the type "broadcast"); +
  • KSmsPage: Adjusted for the input Endpoint in the context of SMS messages, contains the page number of the received message (available on the type broadcast"); +
  • KSmsPages: Adjusted for the input Endpoint in the context of SMS messages, contains the total number of pages to be received (available in type "broadcast"); +
  • KUserInfoDescriptor: Sets/reports protocol descriptor of the User-to-User Information message (ISDN). +
  • KUserInfoData: Sets/reports data in the User-to-User Information message (ISDN). +
  • KFaxSent: Adjusted by the Endpoint when sending FAX with KSendFax application, and determines whether the fax was successfully sent ("yes") or not ("No"); +
  • KFaxReceived: Adjusted by channel when receiving FAX with KReceiveFax application, and determines whether the fax was successfully received ("yes") or not ("no"); +
  • KFaxResult: Adjusted by the channel when sending or receiving FAX with the application KSendFax or KReceiveFax (respectively), and defines the result of execution. +
+


+

+

Description of variables

+

Below, follows an explanation on how to use variables of Khomp Endpoint in the dialplan, to communicate and/or to receive information: +


+

+

KDropCollectCall

+

When activated, causes the Endpoint to drop Khomp collect calls through dual service (available for signaling 'R2 Digital' and FXO), through information available on the ISDN protocol and R2/MFC, or by detecting the audio call collect (available for any digital signage for E1, and GSM signaling). +

This variable is useful to filter collect calls to certain extensions, and must be set before making any type of answer - applications such as playback and bridge should always be executed after setting this variable, for example. +

For better functionality, is also recommended that no call status (ringback) is sent before this variable is set, so applications should be performed only after the correct setting of this variable. +

This variable can be set locally and globally, both to yes or no. The adjustment of global variable to yes will drop all the collect calls, unless the particular call is set to no - this allows the creation of a global filter of collect calls, with few exceptions. +

Enabling the variable in context default: +

+<context name="default"> +

+
<extension name="example">
+ .
+ .
+ .
+ <action aplication="set" data="KDropCollectCall=yes"/>
+ .
+ .
+ .
+</extension>
+
+

</context> +

Enabling the variable in the global context, remembering that it must be configured in the file vars.xml: + +

+
<X-PRE-PROCESS cmd="set" data="KDropCollectCall=yes"/>
+
+

KR2SendCondition

+

When you receive a call, can be set before sending ringback by FreeSWITCH (ie, before the run FreeSWITCH applications answer, bridge). When used in signaling R2/MFC, this variable sets the condition for B to the numeric value desired. +

Exemplo: + +

+
<!-- Condition "NUMBER CHANGED" warns the caller that the number of B has changed. -->
+<action application="KR2SendCondition" data="3"/>
+
+

KR2GotCategory

+

When you receive a call, is set by the Endpoint with the category received from the number that originated the call. It is set in signaling R2/MFC, and can be found anywhere in the dialplan. +

Example: + +

+
<action application="log" data="DEBUG KR2GotCategory [${KR2GotCategory}]"/>
+
+

KR2GotCondition

+

Variable adjusted by the Endpoint, and available after returning from a call made by FreeSWITCH. Has the condition of B received when making the call. Available only for signaling R2/MFC. +

Example: + +

+
<action application="log" data="DEBUG KR2GotCondition [${KR2GotCondition}]"/>
+
+

KUserInfoDescriptor

+

Variable adjusted by the Endpoint in the context of entry, from information received by the ISDN network functionality through user-to-User Information. Contains the descriptor number of the protocol used by the other end, and usually contains the value '0 ', but this is dependent on application. +

For further information, consult the specification ITU-T Q931 (more precisely, the specification table 4-26). +

Example (working with the descriptor number of the protocol): + +

+
<action application="log" data="DEBUG KUserInfoDescriptor [${KUserInfoDescriptor}]"/>
+
+

KUserInfoData

+

Variable adjusted by the channel in the context of entry, from information received by the ISDN network functionality through user-to-User Information. Contains the actual data, which were received in the form of a string of text. +

More information about this feature, see the specification ITU-T Q931. +

Example (working with the data received): + +

+
<action application="log" data="DEBUG KUserInfoData [${KUserInfoData}]"/>
+
+

It is important to note that the variables are sensitive to the capitalization of letters (case sensitive). +

+

KCallAnswerInfo

+

Variable adjusted by the Endpoint. It is set in outbound connections, representing the type of answer performed by the other end. May contain the following values: +

+
  • "MessageBox" (*): detected mailbox of a cell phone; +
  • "CarrierMessage": message sent before the service provider; +
  • "AnsweringMachine" (**): answering answering machine; +
  • "HumanAnswer" (**): human service; +
  • "Fax": reported when a fax tone is detected. +
  • "Unknown": unknown type of care; +
+
+

(*) This type of service is detected by signals at certain frequencies that are sent before the call comes into a mailbox, and vary by operator. The algorithm captures most of the mailboxes, but can fail if there is not a clear signal, or if it is not within the standards most commonly used; +

(**) The difference between these two types of care depends on the specific configuration using the program k3lanswerinfoconfig, with the detection only based on heuristics and never with an accuracy of 100%. +
+

+

Console commands

+

List of available commands in the console for the FreeSWITCH Endpoint of Khomp: +


+

+
  • khomp channels disconnect : Disconnect one or more channels. This command sends a message directly to the physical channel of the card in question, requesting a disconnection. Use with caution; +
  • khomp channels unblock : Unlock blocked channels for input or output. Only available in digital signage via E1; +
  • khomp clear links: Clears error counters on the links; +
  • khomp clear statistics: Clears the statistics of channel connections, or statistics for a particular channel; +
  • khomp get : Gets the number of options Endpoint Khomp; +
  • khomp kommuter : Enables or disables kommuters connected via USB on this machine. Only accessible when the configuration "kommuter-activation" is set to "manual". +
  • khomp kommuter count: Gets the amount of kommuters connected via USB on this machine; +
  • khomp log console: Sets options in the console logs; +
  • khomp log disk: Sets logging options to disk; +
    • khomp log console and khomp log disk have auxiliary options No, which reverses the selection of messages, and just, which generalizes the choice. Examples: +
      • khomp log disk just commands events (Enables only logging to the disk of commands and events); +
      • khomp log disk no commands (Disable logging to the disk of commands sent to board); +
      • khomp log disk warnings (Enables also logging to the disk of warnings from Endpoint). +
      +
    • More information on options for the log command, type: "help khomp log disk" or "help console log khomp". +
    +
  • khomp log rotate: Rotate log files from the Endpoint; +
  • khomp log status: Shows log messages currently being written to disk and displayed on the console; +
  • khomp log trace isdn: Enable Debugging ISDN signaling; +
  • khomp log trace k3l : Enables debugging low-level API K3L; +
  • khomp log trace r2 : Enables debugging low-level signaling R2/MFC; +
  • khomp reset links: Sends a reset command for a specific E1 of a particular card; +
  • khomp revision: Shows version number and revision of the Endpoint; +
  • khomp select sim: Select the SIM card, available on the boards KGSM; +
  • khomp send command : Sends command API K3L directly to the board (only for debugging, may compromise the stability of the system if used improperly); +
  • khomp send raw command : Sends a command directly to the DSP board (only for debugging, may compromise the stability of the system if used improperly); +
  • khomp set : Sets various options of the Endpoint Khomp; +
  • khomp show calls : Shows states for calls, may also listing specific channels or boards; +
  • khomp show channels : Shows the status of the channels Khomp and may also list specific adapter; +
  • khomp show links: Display states of E1 links available. +
  • khomp show statistics : Shows the statistics of channel connections, or statistics for a particular channel; +
  • khomp sms : Send an SMS message for a given number, using KGSM channels; +
  • khomp summary : Prints a summary of system boards and their features; +
+


+

+

Additional features

+

This chapter discusses additional features of the Endpoint, related to the special features present in certain signs. +
+

+

Aplicações (applications) e canais

+

The Endpoint Khomp, and to record a type of communication channel "Khomp" also records the following items: +
+

+

"KUserTransfer" application

+

Performs the transfer process from the current channel number for the extension using the signaling protocol QSig (Single Step Call Transfer) for boards configured with E1 ISDN signaling (ISDN), or use the FLASH command for FXO. +

The syntax follows: +

+
 <action application="KUserTransfer" data="number[,options])"/>
+
+

Example: +

+
<action application="answer"/>
+<action application="KUserTransfer" data="2345"/>
+
+

The fields have the following meanings: +

+
  • number: Number where the link should be transferred. +
  • options: Sets the transfer options to be used, which are: +
    • N: Wait until the channel is disconnected. +
    +
+


+

+

Application "KSendSMS"

+

This application has the function of sending SMS messages through the boards of KGSM Khomp using modules and SIM cards in the board to do so. The syntax of the application is as follows: +

+
<action application="KSendSMS" data="resource | destination | message" />
+
+

Each field can be summarized in: +

+
  • resource: The following is a syntax identical to the allocation of channels Dial application, and defines what modem use; +
  • destination: Number where to send the message, may be preceded or succeeded by! to request a confirmation of transmission; +
  • message: Text (without quotes) to be sent todestination. +
+

After sending the message, the variables KSmsDelivered and KSmsErrorCode will contain the result of the post. For more information about these, please consult the section on variables used in the Endpoint. +

Examples of use of this application are as follows: +

+
  • Sends "Test message." phone for "99887766" using the modem "1" (second modem) card "0": +
+
<action application="log" data="DEBUG Sending SMS ..." />
+<action application="KSendSMS" data="b0c1|99887766|Test message" />
+
+
  • Sends "Test message." phone for "99887766" using the first free modem card "0", and checks the return shipment: +
+
<action application="log" data="DEBUG  Sending SMS ..." />
+<action application="KSendSMS" data="b0|99887766|Test message" />
+<action application="log" data="DEBUG Sent? ${KSmsDelivered}" />
+<action application="log" data="DEBUG Code: ${KSmsErrorCode}" />
+<action application="log" data="DEBUG Desc: ${KSmsErrorName}" />
+
+
  • Sends "Test message." phone for "99887766" using the first free modem card "0", or the first free channel board "1" (if no free channel at the first sign): +
+
<action application="log" data="DEBUG Sending SMS ..." />
+<action application="KSendSMS" data="b0+b1|99887766|Test message" />
+
+
  • Sends "Test message." phone for "99887766" using the first free modem card "0", requesting confirmation: +
+
<action application="log" data="DEBUG Sending SMS ..." />
+<action application="KSendSMS" data="b0|99887766!|Test message" />
+
+


+

+

Application "KEchoCanceller"

+

This application has the function to enable or disable the echo canceller channel. +

+
<action application="KEchoCanceller" data="action[,options])"/>
+
+

Where: +

+
  • actions: It is on to enable the echo canceller, and off to disable; +
+

Example usage of this application: +

+
<action application="KEchoCanceller" data="off"/>
+
+


+

+

Application "KAutoGainControl"

+

This application has the function to enable or disable the automatic gain control in the channel. +

+
<action application="KAutoGainControl" data="action[,options])"/>
+
+

Where: +

+
  • actions: It is on to enable the automatic gain control, and off to disable; +
+

Example usage of this application: +

+
  <action application="KAutoGainControl" data="on"/>
+
+


+

+

Application "KDTMFSuppression"

+

This application has the function to enable or disable the suppression of DTMF channel. The syntax of the application is as follows: +

+
<action applicatin="KDTMFSuppression" value="action[,options])"/>
+
+

Where: +

+
  • actions: It ison to enable DTMF suppression, and off to disable; +
+

It is important to note that when disabled suppression of DTMF, DTMF tones are passed inband and will not be reported to FreeSWITCH. Thus FreeSWITCH does not recognize the DTMF tones, which may result in malfunction of applications such as IVR. +

Example usage of this application: +

+
<action applicatin="KDTMFSuppression" value="off"/>
+
+


+

+

Application "KSetVolume"

+

This application has the function to adjust the volume of incoming and outgoing channels Khomp, and its syntax as follows: +

+
<action application="KSetVolume" data="<volume>"/>
+<action application="KSetVolume" data="<output-volume>|<input-volume>"/>
+
+

Where the fields have the following meanings: +

+
  • volume: Sets the volume of input and output (-10 to +10); +
  • output-volume: Sets the output volume (-10 to +10, "none" for no change); +
  • input-volume: Sets the input level (-10 to +10, "none" for no change). +
+


+

+

Application "KAdjustForFax"

+

This application has the function of setting a channel for receiving Khomp signal FAX/modem, optimizing the communication channel for data traffic. Syntax: +

+
<action application="KAdjustForFax" data=""/>
+
+

This application does not receive parameters. Example of use: +

+
<action application="KAdjustForFax" data=""/>
+
+


+

+

Application "KSendFax"

+

This application has the function to send faxes using digital channels or FXO connections Khomp in pre-established, and its syntax as follows: +

+
<action application="KSendFax" data="<file>[:<file2>[:...]][|<faxid>]"/>
+
+

This application requires a license purchased separately to be used in digital (non-FXO) channels. Fields have the following meanings: +

+
  • file: Files to be sent to the fax should be encapsulated in TIFF format and have a resolution of 98, 196 or 392 dpi; +
  • faxid: the fax number. If not specified, the value is obtained by the id of the link, and if this also is not valid, the fax number will be set as default in K3L. +
+

Example usage of this application: +

+
<action application="KSendFax" data="/tmp/fax.tif:/home/root/fax2.tif,1234"/>
+
+


+

+

Application "KReceiveFax"

+

This application has the function of receiving digital channels or fax using the FXO Khomp, and its syntax as follows: +

+
<action application="KReceiveFax" data="<file>[|<faxid>]/>
+
+

This application requires a license purchased separately to be used in digital (non-FXO) channels. Fields have the following meanings: +

+
  • file: Name that file will be assigned to incoming fax. +
  • faxid: the fax number. If not specified, the value is obtained by the id of the link, and if this also is not valid, the fax number will be set as default in K3L. +
+

Example usage of this application: +

+
<action application="answer" />
+<action application="KReceiveFax" data="/tmp/fax.tif"/>
+
+


+

+

Channel "Khomp_SMS"

+

This communication channel is used to receive SMS and create incoming links in FreeSWITCH for each message received. This channel does not have any treatment or audio processing, and is called with five variables set: +

+
  • KSmsFrom, containing the number of source who sent the message; +
  • KSmsDate, which sets the date/time of receipt of the message; +
  • KSmsSize, representing the message size (in bytes); +
  • KSmsMode, containing the encoding used to transmit the message; +
  • KSmsBody, that is the message itself. +
+

The FreeSWITCH dialplan processing can be used to store this message in a database, run any application, among others. However, the only action accepted by this channel is shutdown (Hangup), so this incoming call should be considered a special dialplan execution without audio streams or channel allocation. +
+

+

Channel "Khomp_PR"

+

This communication channel is used to receive calls on boards passive recording (KPR family and KFXO-HI), creating incoming links on FreeSWITCH for each incoming call. This channel allows only receiving audio captured the linkby not allowing both the transmission of audio signalings as the control. +

The FreeSWITCH dialplan processing can be used to record data on this link in a database, perform some special application and/or some recording application (such as record), among others. However, the only action accepted by this channel is shutdown (Hangup), so this should not be considered a common call. +
+

+

Codes and meanings

+

This chapter presents the codes present in the channel Khomp and their meanings, used in both events as in the AMI console commands: +
+

+

Channel state

+

Reflect the state of the channel on the board. In the case of E1 links, the state may have one or more of the following: +

+
  • Free: the channel is free; +
  • Busy: the channel is not free (or occupied, or failure); +
  • Outgoing: the channel has an output connection; +
  • Incoming: the channel has an input connection; +
  • Locked: the channel is blocked; +
  • Outgoing Lock: The channel is blocked for outgoing calls; +
  • Local Fail: The channel has a fault (at this point); +
  • Incoming Lock: the channel is blocked for incoming calls; +
  • Remote Lock: there is a remote lock (at the other end) in this channel. +
+

In the case of a FXS channel, the state is defined by one of these values: +

+
  • On Hook: the phone connected to this channel is on-hook or disconnected; +
  • Off Hook: the phone connected to this channel is off the hook; +
  • Ringing: the channel is being called; +
  • Failure: the channel is in failure due to communication problems between the central and the plate. +
+

In the case of a GSM channel, the state is defined by one of the following values: +

+
  • Idle: the channel is free and available for calls; +
  • Call In Progress: the channel is busy on a call; +
  • SMS In Progress: the channel is busy sending / receiving SMS messages; +
  • Modem Error: an error occurred communicating with the modem channel; +
  • SIM Card Error: The SIM card is not present or is not inserted / detected correctly; +
  • Network Error: an error occurred while communicating with the network; +
  • Not Ready: The modem is initializing the channel. +
+

And in the case of an FXO channel, the states are as follows: +

+
  • Disabled: the channel is disabled; +
  • Enabled: the channel is enabled. +
+


+

+

Call state

+

Defines the logical state for each channel, which can be: +

+
  • Free: the channel is free; +
  • Incoming: the channel is receiving a call; +
  • Outgoing: the channel is making a call; +
  • Failure: the channel is in fault. +
+


+

+

FreeSWITCH call states

+

Directly reflects the call state controlled by FreeSWITCH, which can be: +


+

+
  • new: Channel is newly created; +
  • init: Channel has been initialized; +
  • routing: Channel is looking for an extension to execute; +
  • execute: Channel is executing its dialplan; +
  • ex_media: Channel is exchanging media with another channel; +
  • cs_media: Channel is consuming all media; +
  • hangup: Channel is flagged for hangup and ready to end. +
+


+

+

GSM Codes

+

The following numeric codes are reported: +

+

SMS codes (SMS causes)

+
1	Unassigned number
+8	Operator determined barring
+10	Call barred
+21	SMS transfer rejected
+27	Destination out of service
+28	Unidentified subscriber
+29	Facility rejected
+30	Unknown subscriber
+38	Network out of order
+41	Temporary failure
+42	Congestion
+47	Resources unavailable
+50	Facility not subscribed
+69	Facility not implemented
+81	Invalid SMS transfer reference value
+95	Invalid message
+96	Invalid mandatory information
+97	Message type non existent
+98	Message not compatible with SMS protection state
+99	Information element non existent
+111	Protocol error
+127	Interworking
+128	Telematic interworking not supported
+129	SMS type zero not supported
+130	Cannot replace SMS
+143	Unspecified TPPID error
+144	Alphabet not supported
+145	Message class not supported
+159	Unspecified TPDCS error
+160	Command cannot be actioned
+161	Command unsupported
+175	Unspecified TP command error
+176	TPDU not supported
+192	SC busy
+193	No SC subscription
+194	SC system failure
+195	Invalid SME address
+196	Destination SME barred
+197	SM rejected duplicate SM
+198	TPVPF not supported
+199	TPVP not supported
+208	SIM SMS storage full
+209	No SMS storage capability in SIM
+210	Error in SMS
+211	Memory capatity exceeded
+213	SIM data download error
+255	Unspecified error
+300	Phone failure
+301	SMS service reserved
+302	Operation not allowed
+303	Operation not supported
+304	Invalid PDU mode parameter
+305	Invalid text mode parameter
+310	SIM not inserted
+311	SIM PIN necessary
+312	Phone SIM PIN necessary
+313	SIM failure
+314	SIM busy
+315	SIM wrong
+320	Memory failure
+321	Invalid memory index
+322	Memory full
+330	SMSC address unknown
+331	No network service
+332	Network timeout
+500	Unknown error
+512	Network busy
+513	Invalid destination address
+514	Invalid message body length
+515	Phone is not in service
+516	Invalid preferred memory storage
+517	User terminated
+
+

Call codes (call causes)

+
1	Unallocated number
+3	No route to destination
+6	Channel unacceptable
+8	Operator determined barring
+16	Normal call clear
+17	User busy
+18	No user responding
+19	No answer from user
+21	Call rejected
+22	Number changed
+26	Non Selected user clear
+27	Destination out of order
+28	Invalid number format
+29	Facility rejected
+30	Response status enquiry
+31	Normal, unspecified
+34	No circuit channel available
+38	Network out of order
+41	Temporary failure
+42	Switch congestion
+43	Access information discarded
+44	Requested channel unavailable
+47	Resource unavailable
+49	QoS unavailable
+50	Request facility not subscribed
+55	Call barred with UG
+57	Bearer capability not authorized
+58	Bearer capability not available
+63	Service not available
+65	Bearer capability not implemented
+69	Request facility not implemented
+70	Only restricted bearer capability available
+79	Service not implemented
+81	Invalid call reference value
+82	User not member of UG
+88	Incompatible destination
+91	Invalid transit network selected
+95	Invalid message
+96	Missing mandatory information element
+97	Message type not implemented
+98	Message incompatible with state
+99	Information element not implemented
+100	Invalid information element
+101	Message incompatible with state (2)
+102	Recovery on timer expiry
+111	Protocol error
+127	Interworking
+
+

General codes (mobile causes)

+
0	Phone failure
+1	No connection to phone
+2	Phone adaptor link reserved
+3	Operation not allowed
+4	Operation not supported
+5	Phone SIM PIN required
+6	Phone FSIM PIN required
+7	Phone FSIM PUK required
+10	SIM not inserted
+11	SIM PIN required
+12	SIM PUK required
+13	SIM failure
+14	SIM busy
+15	SIM wrong
+16	Incorrect password
+17	SIM PIN2 required
+18	SIM PUK2 required
+20	Memory full
+21	Invalid index
+22	Not found
+23	Memory failure
+24	Text string too long
+25	Invalid character in text string
+26	Dial string too long
+27	Invalid character in dial string
+30	No network service
+31	Network timeout
+32	Network not allowed
+33	Command aborted
+34	Number parameter instead of text parameter
+35	Text parameter instead of number parameter
+36	Numeric parameter out of bounds
+37	Text string too short
+40	Network PIN required
+41	Network PUK required
+42	Network subset PIN required
+43	Network subset PUK required
+44	Network service provider PIN required
+45	Network service provider PUK required
+46	Corporate PIN required
+47	Corporate PUK required
+60	SIM Service option not supported
+100	Unknown
+103	Illegal MS #3
+106	Illegal MS #6
+107	GPRS service not allowed #7
+111	PLMN not allowed #11
+112	Location area not allowed #12
+113	Roaming not allowed #13
+132	Service option not supported #32
+133	Registration service option not subscribed #33
+134	Service option temporary out of order #34
+147	Long context activation
+148	Unspecified GPRS error
+149	PDP authentication failure
+150	Invalid mobile class
+151	GPRS disconnection TMR active
+256	Too many active calls
+257	Call rejected
+258	Unanswered call pending
+259	Unknown calling error
+260	No phone number recognized
+261	Call state not idle
+262	Call in progress
+263	Dial state error
+264	Unlock code required
+265	Network busy
+266	Invalid phone number
+267	Number entry already started
+268	Cancelled by user
+269	Number entry could not be started
+280	Data lost
+281	Invalid message body length
+282	Inactive socket
+283	Socket already open
+
+


+

+

Troubleshooting

+

In this section, errors and their most common solutions are presented. +

+

Error during installation of kernel module

+

During installation of the Endpointof Khomp may occur the following messages: + +

+
K3L: WARNING: Unable to find a module for [...]
+
+

or + +

+
install: ******  THE KERNEL MODULE HAS NOT BEEN INSTALLED: *******
+install: 
+install: ** Please, untar the file kpdriver*.tar.gz located in: **
+install: **                 '/usr/src/khomp/'                   **
+install: **             then check the README.txt               **
+install: **  for knowing how to proceed with the installation.  **
+
+

In this case, you must compile the drivers manually to your system. Proceed to the item below for more information. +
+

+

Compiling the drivers and starting the services

+

Just follow to the directory /usr/src/khomp, unpack the file "kpdriver_2.0.0XX.tar.gz", and follow procedures described in the file README_en.txt. +

After performing compilation and installation of the module, just load it into the system, configuring the boards and start the server processes Khomp. +

To load the kernel driver, you must run the following command: + +

+
# /etc/init.d/khompdrv start
+
+

To set up the boards, in turn, must run the command: + +

+
# khompwizard
+
+

This will run a setup wizard that will ask the signaling used in the system, as well as other parameters of use of the boards. +

If necessary configure other additional parameters you can use the following command: + +

+
# k3lconfig
+
+

This configurator, in turn, shows all possible options for card configuration. The parameters that are not configured automatically assume the default values, and are compatible with most systems. More details about this program can be obtained from the section number '2 '. +

+
  • ATTENTION': To start FreeSWITCH®, it is necessary that the board is configured Khomp and all modules are running (as shown above). If the card is not configured, FreeSWITCH will not start.

    If you want to run the system without the board Khomp, you need to configure FreeSWITCH for it does not load the module Khomp. To do this, open the "
    /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml and comment the line:
    +
+
 
+<!-- <load module="mod_khomp" /> -->
+

+

When the board Khomp is properly configured and loaded modules khomp (explained above), remember to uncomment this line in the file. +

Finally, to load the server process, simply run the following command: + +

+
# kserver start
+
+

After performing these procedures, the Endpoint is already operational, and FreeSWITCH can now be loaded. +
+

+

Setting up special parameters for audio or signaling

+

To set specific parameters of timing and/or signaling, you can use the program "k3lconfig": simply select the card you want, and options of the boards will be presented, divided into sections and subsections for easy access. It is not necessary to effect the configuration of all parameters: default values are assumed, if not configured. +

To adjust the signaling link, simply - after selecting the card - enter the "Options signaling, and then in" Signs of the line. " To choose a particular signaling, just use the direction keys (arrows) to select it, press 'space', and confirm the option by pressing 'Enter' on the "Confirm" button. +

Finally, to save the modified settings, just exit the program: it will display a window with options to save the changes made or not. +

Please not that the following options are required to be unchanged from the defaults: +

+
  • Automatic echo cancellation; +
  • DTMF suppression; +
  • Automatic Gain Control (AGC). +
+

These options are controlled by Endpoint and should be disabled in 'k3lconfig' (the default configuration). +
+

+

Automatic load of services and kernel modules

+

If the loading of kernel module or Khomp services startup is not performed automatically at startup, you can perform this installation manually, creating a link for the scripts /etc/init.d/khompdrv and /etc/init.d/kserver in the system startup directory. +

In the case of Debian-based distributions the script for loading kernel modules would be linked within the directory /etc/rcS.d, while the services loader would be linked within the directories /etc/rc2.d, /etc/rc3.d, /etc/rc4.d, /etc/rc5.d as follows: +

+

+
# ln -s /etc/init.d/khompdrv  /etc/rcS.d/S19khompdrv
+# ln -s /etc/init.d/kserver   /etc/rc2.d/S20kserver
+# ln -s /etc/init.d/kserver   /etc/rc3.d/S20kserver
+# ln -s /etc/init.d/kserver   /etc/rc4.d/S20kserver
+# ln -s /etc/init.d/kserver   /etc/rc5.d/S20kserver
+
+

Please check the rules of your distribution to initialize the services in accordance with what is expected by the start of it. +
+

+

Apêndice

+

Nesta seção, encontram-se informações úteis sobre o Endpoint e componentes relacionados. +

+

Arrangement of installed files

+

The directories created/modified in this facility are: + +

+
/etc/init.d/                -- Startup scripts;
+
+/etc/khomp/                 -- Firmware files and settings;
+
+/usr/local/freeswitch/conf/ -- Settings for FreeSWITCH and Endpoint;
+
+/usr/doc/khomp/             -- Docs for the boards, Channel, and utilities;
+
+/usr/sbin/                  -- Utilities and server processes;
+
+/usr/lib/                   -- Shared libraries;
+
+/usr/local/freeswitch/mod/  -- Endpoint module;
+ 
+/var/log/khomp2.1/          -- Log directory for K3L and Endpoint;
+
+

The script /etc/init.d/khompdrv is responsible for loading modules kpci9030.ko and kpex8311.ko in the kernel, which should be carried out automatically at system startup. In case of problems, check the Troubleshooting section. +


+


+

\ No newline at end of file diff --git a/src/mod/endpoints/mod_khomp/docs/User_Guide.pdf b/src/mod/endpoints/mod_khomp/docs/User_Guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2f8c874a2417c21e7ece4e95cc903dd662c358fc GIT binary patch literal 509827 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

~)`2tju2REF~mgS3Y4+DEZmKcU}q{M$$&? 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

|ux8FxLUj)@|O$RoC=7CqqbXyM)X%?}~* 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%0DxD;95R;Qe@($)fcPe+ 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 z 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�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

3Reom<~-v4%>^ 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%0DB^x!$p-m?W50?5R_u^?v(l%lGr%IjO4H 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

!voSTW0D_9)-w2s!}7oMIfK-if79!4YTtM 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 f{(T8xijf3Z4RG_=pI-z70w&Z*&YhD{l_mK + T* statistics() { return static_cast(_app_statistics); } + + Board::KhompPvt *_pvt; + Statistics *_app_statistics; +}; + +/*************************** FAX **********************************************/ +struct Fax +{ + Fax(Board::KhompPvt * pvt) : _pvt(pvt) {} + + /* + bool clear(Board::KhompPvt * pvt) + { + _pvt = pvt; + return true; + } + */ + + bool adjustForFax(); + + bool sendFax(switch_core_session_t * session, const char *data); + bool receiveFax(switch_core_session_t * session, const char *data); + + bool onFaxChannelRelease(K3L_EVENT *e); + + bool startFaxTX(const char * orig_addr = NULL); + bool stopFaxTX(); + bool startFaxRX(const char * filename, const char * orig_addr = NULL); + bool stopFaxRX(); + bool addFaxFile(const char * filename, bool last = true); + + + Board::KhompPvt *_pvt; + + /* used by app FAX */ + SavedCondition _fax_cond; + KFaxResult _fax_result; + +}; + +/*************************** TRANSFER *****************************************/ +template +struct Transfer +{ + Transfer(Board::KhompPvt * pvt) : _pvt(pvt), _is_ok(false) {} + + bool clear() + { + if(!_is_ok) + { + _call = dynamic_cast(_pvt->call()); + + _is_ok = true; + + if(!_call) + { + DBG(FUNC, D("Error in cast")); + _is_ok = false; + } + } + + _call->_flags.clear(Kflags::XFER_DIALING); + + return true; + } + + bool userTransfer(switch_core_session_t * session, const char *data) + { + DBG(FUNC, PVT_FMT(_pvt->target(), "c")); + + std::string dest(""); + std::string opts(""); + + try + { + Strings::vector_type params; + + Strings::tokenize((const char *)data, params, "|,", 2); + + dest = params[0]; + + if (params.size() > 1) + { + // other options go here... + } + + ScopedPvtLock lock(_pvt); + + int timeout = 5; + + if(!_pvt->call()->_flags.check(Kflags::REALLY_CONNECTED) && !_pvt->loopWhileFlagTimed(Kflags::REALLY_CONNECTED, timeout, false)) + return false; + + DBG(FUNC, PVT_FMT(_pvt->target(), "flashing channel!")); + + _pvt->command(KHOMP_LOG, CM_FLASH); + + lock.unlock(); + + timeout = 15; // 15 * 200000 = 3s + + do + { + usleep(200000); + timeout--; + + ScopedPvtLock lock2(_pvt); + + if(!_pvt->call()->_flags.check(Kflags::IS_INCOMING) && !_pvt->call()->_flags.check(Kflags::IS_OUTGOING)) + { + DBG(FUNC, PVT_FMT(_pvt->target(), "unable to do a user transfer, channel disconnected")); + return false; + } + + } + while(timeout); + + ScopedPvtLock lock3(_pvt); + + _pvt->command(KHOMP_LOG, CM_DIAL_DTMF, dest.c_str()); + + _pvt->call()->_flags.set(Kflags::WAIT_SEND_DTMF); + + lock3.unlock(); + + timeout = 300; // 300 * 200000 = 60s + + do + { + usleep(200000); + timeout--; + + ScopedPvtLock lock4(_pvt); + + if(!_pvt->call()->_flags.check(Kflags::WAIT_SEND_DTMF)) + break; + } + while(timeout); + + } + catch (ScopedLockFailed & err) + { + LOG(ERROR, PVT_FMT(_pvt->target(),"r (unable to lock %s!)") % err._msg.c_str() ); + return false; + } + + + DBG(FUNC, PVT_FMT(_pvt->target(), "r")); + return true; + } + + /* User transfer functions */ + bool doUserXferUnlocked() + { + DBG(FUNC, PVT_FMT(_pvt->target(), "c (flashing channel!)")); + + bool ret = false; + + ret = _pvt->command(KHOMP_LOG, CM_FLASH); + + DBG(FUNC, PVT_FMT(_pvt->target(), "r (%s)") % (ret ? "true" : "false")); + return ret; + } + + bool checkUserXferUnlocked(std::string digit) + { + DBG(FUNC, PVT_FMT(_pvt->target(), "c (CM_FLASH)")); + + + if (_call->_user_xfer_digits.empty()) + { + _call->_digits_buffer += digit; + DBG(FUNC, PVT_FMT(_pvt->target(), "r (disabled)")); + return false; + } + + _call->_user_xfer_buffer += digit; + + /* temporary buffer */ + std::string tmp = _call->_user_xfer_buffer; + + unsigned int amount = tmp.size(); + + try + { + + if (amount == _call->_user_xfer_digits.size()) + { + if (tmp == _call->_user_xfer_digits) + { + bool ret = doUserXferUnlocked(); + + _call->_user_xfer_buffer.clear(); + _call->_digits_buffer.clear(); + + Board::board(_pvt->target().device)->_timers.del(_idx_xfer_dial); + + DBG(FUNC, PVT_FMT(_pvt->target(), "r (ret=%s, done xfer)") % (ret ? "true" : "false")); + return ret; + } + + _call->_digits_buffer += tmp[0]; + _call->_user_xfer_buffer.erase(0, 1); + DBG(FUNC, PVT_FMT(_pvt->target(), "r (false, no xfer)")); + return false; + } + + if (tmp == _call->_user_xfer_digits.substr(0,amount)) + { + if (!(_call->_flags.check(Kflags::XFER_DIALING))) + { + _call->_flags.set(Kflags::XFER_DIALING); + _idx_xfer_dial = Board::board(_pvt->target().device)->_timers.add(Opt::_transferdigittimeout, &userXferTimer, _pvt, TM_VAL_CALL); + } + else + { + Board::board(_pvt->target().device)->_timers.restart(_idx_xfer_dial); + } + + DBG(FUNC, PVT_FMT(_pvt->target(), "r (true, buffering)")); + return true; + } + + } + catch (K3LAPI::invalid_device & err) + { + LOG(ERROR, PVT_FMT(_pvt->target(), "Unable to get device: %d!") % err.device); + } + + _call->_digits_buffer += tmp[0]; + _call->_user_xfer_buffer.erase(0, 1); + DBG(FUNC, PVT_FMT(_pvt->target(), "r (false, buffering)")); + + return false; + + } + + static void userXferTimer(Board::KhompPvt * pvt) + { + DBG(FUNC, PVT_FMT(pvt->target(), "c")); + + T * call = static_cast(pvt->call()); + + try + { + ScopedPvtLock lock(pvt); + + if (!call->_user_xfer_buffer.empty()) + { + pvt->command(KHOMP_LOG, CM_DIAL_DTMF, call->_user_xfer_buffer.c_str()); + + /* clear the buffer that has been send */ + call->_user_xfer_buffer.clear(); + } + + call->_flags.clear(Kflags::XFER_DIALING); + } + catch (ScopedLockFailed & err) + { + LOG(ERROR, PVT_FMT(pvt->target(),"r (unable to lock %s!)") % err._msg.c_str() ); + return; + } + + DBG(FUNC, PVT_FMT(pvt->target(), "r")); + } + + bool _is_ok; + T * _call; + Board::KhompPvt * _pvt; + Board::ChanTimer::Index _idx_xfer_dial; +}; + +template +struct Transfer +{ + Transfer(Board::KhompPvt * pvt) : _pvt(pvt), _is_ok(false) {} + + bool clear() + { + if(!_is_ok) + { + _call = dynamic_cast(_pvt->call()); + + _is_ok = true; + + if(!_call) + { + DBG(FUNC, D("Error in cast")); + _is_ok = false; + } + } + + _call->_flags.clear(Kflags::XFER_DIALING); + _call->_flags.clear(Kflags::XFER_QSIG_DIALING); + + return true; + } + + bool userTransfer(switch_core_session_t * session, const char *data) + { + DBG(FUNC, PVT_FMT(_pvt->target(), "c")); + + std::string dest(""); + + bool opt_nowait = false; + + try + { + Strings::vector_type params; + + Strings::tokenize((const char *)data, params, "|,", 2); + + dest = params[0]; + + if (params.size() > 1) + { + opt_nowait = (params[1].find('n') != std::string::npos); + + // other options go here... + } + + ScopedPvtLock lock(_pvt); + + int timeout = 5; + + if(!_pvt->call()->_flags.check(Kflags::REALLY_CONNECTED) && !_pvt->loopWhileFlagTimed(Kflags::REALLY_CONNECTED, timeout, false)) + return false; + + DBG(FUNC, PVT_FMT(_pvt->target(), "ss_transfer on channel!")); + + _pvt->command(KHOMP_LOG, CM_SS_TRANSFER, + STG(FMT("transferred_to=\"%s\" await_connect=\"%d\"") + % dest % (opt_nowait ? 0 : 1)).c_str()); + + } + catch (ScopedLockFailed & err) + { + LOG(ERROR, PVT_FMT(_pvt->target(),"r (unable to lock %s!)") % err._msg.c_str() ); + return false; + } + + + DBG(FUNC, PVT_FMT(_pvt->target(), "r")); + return true; + } + + /* User transfer functions */ + bool doUserXferUnlocked(void) + { + DBG(FUNC, PVT_FMT(_pvt->target(), "c")); + + bool ret = false; + + if (_call->_flags.check(Kflags::XFER_QSIG_DIALING)) + { + DBG(FUNC, PVT_FMT(_pvt->target(), "ss_transfer on channel!")); + + _call->_flags.clear(Kflags::XFER_DIALING); + _call->_flags.clear(Kflags::XFER_QSIG_DIALING); + + ret = _pvt->command(KHOMP_LOG, CM_SS_TRANSFER, + STG(FMT("transferred_to=\"%s\" await_connect=\"1\"") % _call->_qsig_number).c_str()); + } + else + { + DBG(FUNC, PVT_FMT(_pvt->target(), "starting to store digits for ss_transfer...")); + _call->_flags.set(Kflags::XFER_QSIG_DIALING); + + _xfer_thread = threadCreate(Transfer::userXferPlayback,(void*) _pvt); + _xfer_thread->start(); + + ret = true; + } + + DBG(FUNC, PVT_FMT(_pvt->target(), "r (%s)") % (ret ? "true" : "false")); + return ret; + + } + + bool checkUserXferUnlocked(std::string digit) + { + DBG(FUNC, PVT_FMT(_pvt->target(), "c (CM_SS_TRANSFER)")); + + + if (_call->_user_xfer_digits.empty()) + { + _call->_digits_buffer += digit; + DBG(FUNC, PVT_FMT(_pvt->target(), "r (disabled)")); + return false; + } + + _call->_user_xfer_buffer += digit; + + DBG(FUNC, PVT_FMT(_pvt->target(), "c digits=[%s] buffer=[%s]") % _call->_user_xfer_digits % _call->_user_xfer_buffer ); + + /* temporary buffer */ + std::string tmp = _call->_user_xfer_buffer; + + unsigned int amount = tmp.size(); + + try + { + + if (amount == _call->_user_xfer_digits.size()) + { + if (tmp == _call->_user_xfer_digits) + { + bool ret = doUserXferUnlocked(); + + _call->_user_xfer_buffer.clear(); + _call->_qsig_number.clear(); + _call->_digits_buffer.clear(); + + if(!_call->_flags.check(Kflags::XFER_QSIG_DIALING)) + { + Board::board(_pvt->target().device)->_timers.del(_idx_xfer_dial); + + DBG(FUNC, PVT_FMT(_pvt->target(), "r (ret=%s, done xfer)") % (ret ? "true" : "false")); + } + else + { + Board::board(_pvt->target().device)->_timers.restart(_idx_xfer_dial); + DBG(FUNC, PVT_FMT(_pvt->target(), "r (waiting digits for transfer)")); + } + return ret; + } + + if (_call->_flags.check(Kflags::XFER_QSIG_DIALING)) + { + DBG(FUNC, PVT_FMT(_pvt->target(), "putting digits ('%s') on transfer-to number!") % tmp); + + _call->_qsig_number += tmp[0]; + _call->_user_xfer_buffer.erase(0, 1); + Board::board(_pvt->target().device)->_timers.restart(_idx_xfer_dial); + + DBG(FUNC, PVT_FMT(_pvt->target(), "r (true, qsig transfer)")); + return true; + } + + _call->_digits_buffer += tmp[0]; + _call->_user_xfer_buffer.erase(0, 1); + DBG(FUNC, PVT_FMT(_pvt->target(), "r (false, no qsig)")); + return false; + } + + if (tmp == _call->_user_xfer_digits.substr(0,amount)) + { + if (!(_call->_flags.check(Kflags::XFER_DIALING) || _call->_flags.check(Kflags::XFER_QSIG_DIALING))) + { + _call->_flags.set(Kflags::XFER_DIALING); + _idx_xfer_dial = Board::board(_pvt->target().device)->_timers.add(Opt::_transferdigittimeout, &userXferTimer, _pvt, TM_VAL_CALL); + } + else + { + Board::board(_pvt->target().device)->_timers.restart(_idx_xfer_dial); + } + + DBG(FUNC, PVT_FMT(_pvt->target(), "r (true, buffering)")); + return true; + } + + if (_call->_flags.check(Kflags::XFER_QSIG_DIALING)) + { + DBG(FUNC, PVT_FMT(_pvt->target(), "putting digits ('%s') on transfer-to number!") % tmp); + + _call->_qsig_number += tmp[0]; + _call->_user_xfer_buffer.erase(0, 1); + + Board::board(_pvt->target().device)->_timers.restart(_idx_xfer_dial); + DBG(FUNC, PVT_FMT(_pvt->target(), "r (true, qsig buffering)")); + return true; + } + + } + catch (K3LAPI::invalid_device & err) + { + LOG(ERROR, PVT_FMT(_pvt->target(), "Unable to get device: %d!") % err.device); + } + + _call->_digits_buffer += tmp[0]; + _call->_user_xfer_buffer.erase(0, 1); + DBG(FUNC, PVT_FMT(_pvt->target(), "r (false, buffering)")); + + return false; + } + + static void userXferTimer(Board::KhompPvt * pvt) + { + DBG(FUNC, PVT_FMT(pvt->target(), "c")); + + T * call = static_cast(pvt->call()); + + try + { + ScopedPvtLock lock(pvt); + + if (!call->_user_xfer_buffer.empty()) + { + pvt->command(KHOMP_LOG, CM_DIAL_DTMF, call->_user_xfer_buffer.c_str()); + + /* clear the buffer that has been send */ + call->_user_xfer_buffer.clear(); + } + + if (!call->_qsig_number.empty()) + { + pvt->command(KHOMP_LOG, CM_SS_TRANSFER, + STG(FMT("transferred_to=\"%s\" await_connect=\"1\"") % call->_qsig_number).c_str()); + + /* clear the buffer that has been send */ + call->_qsig_number.clear(); + } + + call->_flags.clear(Kflags::XFER_DIALING); + call->_flags.clear(Kflags::XFER_QSIG_DIALING); + } + catch (ScopedLockFailed & err) + { + LOG(ERROR, PVT_FMT(pvt->target(),"r (unable to lock %s!)") % err._msg.c_str() ); + return; + } + + DBG(FUNC, PVT_FMT(pvt->target(), "r")); + } + + static switch_status_t dtmfCallback(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen) + { + char sbuf[3]; + + if(!session) + { + DBG(FUNC,D("session is NULL")) + return SWITCH_STATUS_FALSE; + } + + switch_channel_t * chan = switch_core_session_get_channel(session); + + if(!chan) + { + DBG(FUNC,D("channel is NULL")) + return SWITCH_STATUS_FALSE; + } + + switch_core_session_t *peer_session = switch_core_session_locate(switch_channel_get_variable(chan,SWITCH_SIGNAL_BOND_VARIABLE)); + + if(!peer_session) + { + DBG(FUNC,D("session is NULL")) + return SWITCH_STATUS_FALSE; + } + + switch (itype) + { + case SWITCH_INPUT_TYPE_DTMF: + { + switch_dtmf_t *dtmf = (switch_dtmf_t *) input; + + Board::KhompPvt * tech_pvt = static_cast< Board::KhompPvt* >(switch_core_session_get_private(peer_session)); + if(!tech_pvt) + { + DBG(FUNC,D("Init: pvt is NULL")) + switch_core_session_rwunlock(peer_session); + return SWITCH_STATUS_FALSE; + } + + char s[] = { dtmf->digit, '\0' }; + tech_pvt->sendDtmf(s); + + break; + } + default: + break; + } + + switch_core_session_rwunlock(peer_session); + return SWITCH_STATUS_SUCCESS; + } + + + static int userXferPlayback(void * pvt_ptr) + { + /* get pointer... */ + Board::KhompPvt * pvt = static_cast < Board::KhompPvt * > (pvt_ptr); + + DBG(FUNC, PVT_FMT(pvt->target(), "c")); + + try + { + ScopedPvtLock lock(pvt); + + /* get the owner */ + switch_channel_t * chan = pvt->getFSChannel(); + + /* get other side of the bridge */ + switch_core_session_t * peer_session = NULL; + switch_core_session_get_partner(pvt->session(),&peer_session); + + if(!peer_session) + { + DBG(FUNC, PVT_FMT(pvt->target(), "r (session is null)")); + return NULL; + } + + switch_channel_t * peer = switch_core_session_get_channel(peer_session); + + /* put the channel in hold */ + //switch_core_session_t *session = switch_core_session_locate(switch_channel_get_variable(chan,SWITCH_SIGNAL_BOND_VARIABLE)); + //switch_channel_t *chan_core = switch_core_session_get_channel(session); + + const char *stream; + + if (!(stream = switch_channel_get_variable(chan, SWITCH_HOLD_MUSIC_VARIABLE))) + { + stream = "silence"; + } + + DBG(FUNC, PVT_FMT(pvt->target(), "stream=%s") % stream); + + if (stream && strcasecmp(stream, "silence")) + { + /* Freeswitch not get/put frames */ + //switch_channel_set_flag(channel, CF_HOLD); + switch_ivr_broadcast(switch_core_session_get_uuid(pvt->session()),stream, SMF_ECHO_ALEG | SMF_LOOP | SMF_PRIORITY); + } + + switch_core_session_rwunlock(peer_session); + lock.unlock(); + + /* kickstart my heart */ + switch_input_args_t args = {0}; + args.input_callback = dtmfCallback; + + /* wait while xfering... */ + while (true) + { + switch_ivr_collect_digits_callback(peer_session,&args,1000,0); + ScopedPvtLock lock2(pvt); + + if (!pvt->call()->_flags.check(Kflags::XFER_QSIG_DIALING)) + { + break; + } + + lock2.unlock(); + } + + //switch_channel_clear_flag(channel, CF_HOLD); + + switch_channel_stop_broadcast(chan); + switch_channel_wait_for_flag(chan, CF_BROADCAST, SWITCH_FALSE, 5000, NULL); + switch_core_session_rwunlock(pvt->session()); + switch_core_session_rwunlock(peer_session); + + //switch_ivr_unhold_uuid(switch_channel_get_variable(chan,SWITCH_SIGNAL_BOND_VARIABLE)); + } + catch (ScopedLockFailed & err) + { + LOG(ERROR, PVT_FMT(pvt->target(),"r (unable to lock %s!)") % err._msg.c_str() ); + return NULL; + } + catch (Board::KhompPvt::InvalidSwitchChannel & err) + { + LOG(ERROR, PVT_FMT(pvt->target(), "r (%s)") % err._msg.c_str() ); + return NULL; + } + + DBG(FUNC, PVT_FMT(pvt->target(), "r")); + + return NULL; + } + + bool _is_ok; + T * _call; + Board::KhompPvt * _pvt; + Thread * _xfer_thread; + Board::ChanTimer::Index _idx_xfer_dial; +}; + +/*************************** SMS **********************************************/ +struct SMS : public Application +{ + typedef std::list< switch_core_session_t *> OwnersList; + + struct SMSStatistics : public Statistics + { + SMSStatistics(): + _sms_number_incoming(0), + _sms_number_outgoing(0), + _sms_number_confirm(0), + _sms_number_broadcast(0) {}; + + void incrementIncoming() + { + _sms_number_incoming++; + } + + void incrementOutgoing() + { + _sms_number_outgoing++; + } + + void incrementConfirm() + { + _sms_number_confirm++; + } + + void incrementBroadcast() + { + _sms_number_broadcast++; + } + + std::string getDetailed() + { + std::string tmpBuffer; + + tmpBuffer.append(STG(FMT("Number of incoming SMS: \t%d\n") % _sms_number_incoming)); + tmpBuffer.append(STG(FMT("Number of outgoing SMS: \t%d\n") % _sms_number_outgoing)); + tmpBuffer.append(STG(FMT("Number of broadcast SMS: \t%d\n") % _sms_number_broadcast)); + tmpBuffer.append(STG(FMT("Number of confirm SMS: \t%d\n") % _sms_number_confirm)); + + return tmpBuffer; + } + + void clear() + { + _sms_number_incoming = 0; + _sms_number_outgoing = 0; + _sms_number_confirm = 0; + _sms_number_broadcast = 0; + } + + unsigned int _sms_number_incoming; + unsigned int _sms_number_outgoing; + unsigned int _sms_number_confirm; + unsigned int _sms_number_broadcast; + }; + + SMS(Board::KhompPvt * pvt) : + Application(pvt), + _thread(NULL), + _shutdown(false), + _can_receive(false), + _can_send(false), + _result(0), + _mutex(Globals::module_pool), + _cond(Globals::module_pool), + _buffer(8) + { + _cond.reset(); + _app_statistics = new SMSStatistics(); + } + + ~SMS() + { + stop(); + delete _app_statistics; + } + + struct ReceiveData + { + ReceiveData() {}; + + ReceiveData(const ReceiveData & o) + { + _type = o._type; + _from = o._from; + _date = o._date; + _size = o._size; + _coding = o._coding; + _serial = o._serial; + _id = o._id; + _page = o._page; + _pages = o._pages; + _sc_date = o._sc_date; + _status = o._status; + _body = o._body; + }; + + void clear(void) + { + /* reset data stuff */ + _type.clear(); + _from.clear(); + _date.clear(); + _size.clear(); + _coding.clear(); + _serial.clear(); + _id.clear(); + _page.clear(); + _pages.clear(); + _sc_date.clear(); + _status.clear(); + _body.clear(); + }; + + std::string _type; + std::string _from; + std::string _date; + std::string _size; + std::string _coding; + std::string _serial; + std::string _id; + std::string _page; + std::string _pages; + std::string _sc_date; + std::string _status; + std::string _body; + }; + + struct SendData + { + SendData(): _conf(false) {}; + + SendData(const SendData & o) + { + _dest = o._dest; + _body = o._body; + _conf = o._conf; + }; + + void clear(void) + { + /* reset data stuff */ + _dest.clear(); + _body.clear(); + _conf = false; + }; + + std::string _dest; + std::string _body; + bool _conf; + }; + + struct Request + { + /* "empty" constructor */ + Request(): _finished(NULL), _cause(NULL) {}; + + /* "real" constructor */ + Request(SendData & send_sms, volatile bool * finished, volatile KGsmCallCause * cause) + : _send_sms(send_sms), _finished(finished), _cause(cause) + {}; + + SendData _send_sms; + + volatile bool * _finished; + volatile KGsmCallCause * _cause; + }; + + bool start() + { + _pvt->call()->_flags.clear(Kflags::SMS_DOING_UPLOAD); + + _thread = threadCreate(&smsThread, (void*) this); + _thread->start(); + } + + bool stop() + { + if(!_thread) + { + return false; + } + + _shutdown = true; + _cond.signal(); + _thread->join(); + delete _thread; + _thread = NULL; + + return true; + } + + bool justAlloc(unsigned int count = 0); + bool justStart(); + + bool sendSMS(switch_core_session_t * session, const char *data); + + + bool onNewSMS(K3L_EVENT *e); + bool onSMSInfo(K3L_EVENT *e); + bool onSMSData(K3L_EVENT *e); + bool onSMSSendResult(K3L_EVENT *e); + + Thread *_thread; + bool _shutdown; + bool _can_receive; + bool _can_send; + ReceiveData _got_sms; + SendData _send_sms; + int _result; + SavedCondition _cond; + Globals::Mutex _mutex; + Ringbuffer < SMS::Request > _buffer; + OwnersList _owners; + + static int smsThread(void * sms_ptr); +}; + +/******************************************************************************/ + + +#endif /* _APPLICATIONS_H_ */ + diff --git a/src/mod/endpoints/mod_khomp/include/cli.h b/src/mod/endpoints/mod_khomp/include/cli.h new file mode 100644 index 0000000000..214e2aa2d5 --- /dev/null +++ b/src/mod/endpoints/mod_khomp/include/cli.h @@ -0,0 +1,1143 @@ +/******************************************************************************* + + KHOMP generic endpoint/channel library. + Copyright (C) 2007-2010 Khomp Ind. & Com. + + 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. + + Alternatively, the contents of this file may be used under the terms of the + "GNU Lesser General Public License 2.1" license (the “LGPL" License), in which + case the provisions of "LGPL License" are applicable instead of those above. + + If you wish to allow use of your version of this file only under the terms of + the LGPL License and not to allow others to use your version of this file + under the MPL, indicate your decision by deleting the provisions above and + replace them with the notice and other provisions required by the LGPL + License. If you do not delete the provisions above, a recipient may use your + version of this file under either the MPL or the LGPL License. + + The LGPL header follows below: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*******************************************************************************/ + +#ifndef _CLI_H_ +#define _CLI_H_ + +#include "globals.h" +#include "logger.h" + +struct Command +{ + /* print in client the usage */ + void printUsage(switch_stream_handle_t *stream) + { + if(stream) + { + printBrief(stream); + K::Logger::Logg2(C_CLI,stream, +"------------------------------ Description --------------------------------"); + K::Logger::Logg2(C_CLI,stream, +"---------------------------------------------------------------------------"); + K::Logger::Logg2(C_CLI,stream,(char*) usage.c_str()); + K::Logger::Logg2(C_CLI,stream, +"---------------------------------------------------------------------------"); + } + else + { + LOG(ERROR,FMT("Invalid stream for commmand: %s") % complete_name); + } + } + + /* print in client the brief */ + void printBrief(switch_stream_handle_t *stream) + { + if(stream) + { + K::Logger::Logg2(C_CLI,stream, +"---------------------------------------------------------------------------"); + K::Logger::Logg2(C_CLI,stream, +"-------------------------------- Brief ------------------------------------"); + K::Logger::Logg2(C_CLI,stream, +"---------------------------------------------------------------------------"); + K::Logger::Logg2(C_CLI,stream,(char*) brief.c_str()); + K::Logger::Logg2(C_CLI,stream, +"---------------------------------------------------------------------------"); + } + else + { + LOG(ERROR,FMT("Invalid stream for commmand: %s") % complete_name); + } + } + + /* pure virtual */ + virtual bool execute(int argc, char *argv[]) = 0; + + std::string complete_name; /* specify the command in console */ + std::vector options; /* extra options for command */ + std::string brief; /* brief of the command, a path */ + std::string usage; /* usage of the command, a help */ +}; + +struct Cli +{ + /* Useful definitions --------------------------------------------------- */ + typedef switch_status_t (APIFunc)(const char*, switch_core_session_t*, switch_stream_handle_t*); + typedef std::vector Commands; + + /* register our commands, but you must create the command function */ + static void registerCommands(APIFunc func,switch_loadable_module_interface_t **mod_int); + + /* delete the commands */ + static void unregisterCommands() + { + switch_console_set_complete("del khomp"); + } + + /* stream is very useful */ + static void setStream(switch_stream_handle_t *s) + { + if(!s) + { + LOG(ERROR,"Invalid stream passed"); + return; + } + + stream = s; + } + + /* gets the khomp usage */ + static void printKhompUsage() + { + if(stream) + { + K::Logger::Logg2(C_CLI,stream,(char*) _khomp_usage.c_str()); + } + else + { + LOG(ERROR,"Invalid stream for command: printKhompUsage"); + } + } + + /* is responsible for parse and execute all commands */ + static bool parseCommands(int argc, char *argv[]); + + /* The Commands --------------------------------------------------------- */ + + /* khomp summary */ + static struct _KhompSummary : public Command + { + _KhompSummary(bool on_cli_term = true): + _on_cli_term(on_cli_term) + { + complete_name = "summary"; + + options.push_back("verbose"); + options.push_back("concise"); + + brief = "Print system info."; + usage = \ +"Prints detailed info about the system like API version and \n" \ +"boards characteristics like DSPs version.\n\n" \ +"Usage: khomp summary [concise]"; + + _commands.push_back(this); + }; + + bool execute(int argc, char *argv[]); + bool _on_cli_term; /* indicates if message is sent to fs_cli */ + } KhompSummary; + + /* khomp show calls */ + static struct _KhompShowCalls : public Command + { + _KhompShowCalls() + { + complete_name = "show calls"; + brief = \ +"Show each Khomp channel which have more than one call state associated."; + + usage = \ +"Show each Khomp channel which have more than one call state associated.\n\n" \ +"Usage: khomp show calls [ []]"; + + _commands.push_back(this); + }; + + bool execute(int argc, char *argv[]); + + /* support function for _KhompShowCalls */ + void showCalls(unsigned int device, unsigned int object, std::string &buffer); + } KhompShowCalls; + + /* khomp channels disconnect */ + static struct _KhompChannelsDisconnect : public Command + { + _KhompChannelsDisconnect() + { + complete_name = "channels disconnect"; + brief = "Disconnect a(ll) channel(s)."; + usage = \ +"Disconnects channels in boards, or specific board/channel if parameter \n" \ +"is supplied.\n\n" \ +"Usage: khomp channels disconnect {all | all | }\n" \ +"\tboard -- Number of the board (start from 0).\n" \ +"\tchannel -- Number of the channel (start from 0).\n" \ +"e.g. khomp channels disconnect all - Disconnect all channels of all boards.\n"\ +"e.g. khomp channels disconnect 0 5 - Disconnect channel 5 of board 0."; + _commands.push_back(this); + }; + + bool execute(int argc, char *argv[]); + + /* support function for _KhompChannelsDisconnect */ + bool forceDisconnect(unsigned int device, unsigned int channel); + } KhompChannelsDisconnect; + + /* khomp channels unblock */ + static struct _KhompChannelsUnblock : public Command + { + _KhompChannelsUnblock() + { + complete_name = "channels unblock"; + brief = "Unblock a(ll) channel(s)."; + + usage = \ +"The board will request to the PBX or network where it is connected to \n" \ +"unblock the channel if its blocked.\n\n" \ +"Usage: khomp channels unblock {all | all | }\n" \ +"\tboard -- Number of the board (start from 0).\n" \ +"\tchannel -- Number of the channel (start from 0).\n" \ +"e.g. khomp channels unblock all - Unblock all channels of all boards.\n" \ +"e.g. khomp channels unblock 0 all - Unblock all channels of board 0.\n" \ +"e.g. khomp channels unblock 1 20 - Unblock channel 20 of board 1."; + + _commands.push_back(this); + }; + + bool execute(int argc, char *argv[]); + } KhompChannelsUnblock; + + /* khomp show statistics */ + static struct _KhompShowStatistics : public Command + { + _KhompShowStatistics() + { + complete_name = "show statistics"; + + options.push_back("verbose"); + options.push_back("detailed"); + + brief = "Shows statistics of the channels."; + + usage = \ +"Shows statistics of the channels, like number of calls incoming \n" \ +"and outgoing, status, status time.\n\n" \ +"Usage: khomp show statistics [{verbose [ []]} | \n" \ +" {detailed }]\n" \ +"\tboard -- Number of the board (start from 0).\n" \ +"\tchannel -- Number of the channel (start from 0).\n" \ +"e.g. khomp channels statistics - Shows general statistics \n" \ +" of all boards.\n" \ +"e.g. khomp channels statistics 0 - Shows general statistics \n" \ +" of board 0.\n" \ +"e.g. khomp channels statistics verbose - Shows general statistics \n" \ +" of all boards.\n" \ +"e.g. khomp channels statistics verbose 0 - Shows general statistics \n" \ +" of board 0.\n" \ +"e.g. khomp channels statistics detailed 0 2 - Shows detailed statistics \n" \ +" of channel 2 on board 0."; + + _commands.push_back(this); + }; + + bool execute(int argc, char *argv[]); + + /* support functions */ + void cliStatistics(unsigned int device); + void cliDetailedStatistics(unsigned int device, unsigned int channel); + + } KhompShowStatistics; + + /* khomp show channels */ + static struct _KhompShowChannels: public Command + { + _KhompShowChannels() + { + complete_name = "show channels"; + + options.push_back("verbose"); + options.push_back("concise"); + + brief = "Show all channels status."; + usage = \ +"List the status of each channel, both on asterisk point of view and on \n" \ +"khomp API point of view.\n\n" \ +"Usage: \n" \ +"khomp show channels [{ []} | \n" \ + "{{concise|verbose} [ []]}]\n" \ +"\tboard -- Number of the board (start from 0).\n" \ +"e.g. khomp show channels - List status of all channels of all boards.\n" \ +"e.g. khomp show channels concise 0 - List status of all channels of \n" \ +" board 0 in a concise way."; + + _commands.push_back(this); + }; + + /* support function for _KhompShowChannels */ + void showChannel(unsigned int device, bool concise, unsigned int channel); + void showChannels(unsigned int device, bool concise); + + bool execute(int argc, char *argv[]); + } KhompShowChannels; + + /* khomp show links */ + static struct _KhompShowLinks: public Command + { + _KhompShowLinks() + { + complete_name = "show links"; + + options.push_back("verbose"); + options.push_back("concise"); + options.push_back("errors"); + options.push_back("errors verbose"); + options.push_back("errors concise"); + + brief = "Show E1 link(s) status/errors counters in a concise \n" \ + "way or not."; + + usage = \ +"Prints information about the signaling, syncronization and general \n" \ +"status/the error counters of each link on the board. It prints in \n" \ +"a concise way for parsing facilities.\n\n" \ +"Usage: \n" \ +"khomp show links [[errors] [{} | {{concise|verbose} []}]]\n" \ +"e.g. khomp show links - Show all links of all boards.\n" \ +"e.g. khomp show links errors - Show error counters of all links of \n" \ +" all boards.\n" \ +"e.g. khomp show links errors 0 - Show error counters of all links of \n" \ +" board 0."; + + _commands.push_back(this); + }; + + /* support function for _KhompShowLinks */ + void showLinks(unsigned int device, bool concise); + void showErrors(unsigned int device, bool concise); + + bool execute(int argc, char *argv[]); + } KhompShowLinks; + + /* khomp clear links */ + static struct _KhompClearLinks: public Command + { + _KhompClearLinks() + { + complete_name = "clear links"; + + brief = "Clear the error counters of the links."; + + usage = \ +"Clear the error counters of the links.\n\n" \ +"Usage: khomp clear links [ []]\n" \ +"\tboard -- Number of the board (start from 0).\n" \ +"\tlink -- Number of the link (start from 0).\n" \ +"e.g. khomp clear links 0 -- Clear error counters of all links of board 0."; + + _commands.push_back(this); + }; + + /* support function for _KhompClearLinks */ + void clearLink(unsigned int device, unsigned int link); + + bool execute(int argc, char *argv[]); + } KhompClearLinks; + + /* khomp clear statistics */ + static struct _KhompClearStatistics: public Command + { + _KhompClearStatistics() + { + complete_name = "clear statistics"; + + brief = "Clear statistics of the channels."; + + usage = \ +"Clear statistics of the channels, like number of calls incoming \n" \ +"and outgoing, status, status time.\n\n" \ +"Usage: khomp clear statistics [ []]\n" \ +"\tboard -- Number of the board (start from 0).\n" \ +"\tchannel -- Number of the channel (start from 0).\n" \ +"e.g. khomp clear statistics 0 -- Clear statistics of board 0."; + _commands.push_back(this); + }; + + bool execute(int argc, char *argv[]); + } KhompClearStatistics; + + + /* khomp reset links */ + static struct _KhompResetLinks: public Command + { + _KhompResetLinks() + { + complete_name = "reset links"; + + brief = "Reset the specified link."; + + usage = \ +"Reset the specified link.\n\n" \ +"Usage: khomp reset links [ []]\n" \ +"\tboard -- Number of the board (start from 0).\n" \ +"\tlink -- Number of the link (start from 0).\n" \ +"e.g. khomp reset links 0 1 -- Reset link 1 of board 0."; + + _commands.push_back(this); + }; + + /* support function for _KhompResetLinks */ + void resetLink(unsigned int device, unsigned int link); + + bool execute(int argc, char *argv[]); + } KhompResetLinks; + + /* khomp sms */ + static struct _KhompSMS : public Command + { + _KhompSMS() + { + complete_name = "sms"; + brief = "Send an SMS message using a Khomp KGSM board."; + + usage = \ +"Send an SMS message using a Khomp KGSM board.\n\n" \ +"Usage: khomp sms \n" \ +"\tdevice -- Device to use (same string used in Dial for \n" \ +"\t channel allocation).\n" \ +"\tdestination -- Phone number of the destination.\n" \ +"\tmessage -- Message to send.\n" \ +"e.g. khomp sms b0 99887766 Oi, tudo bem?"; + + _commands.push_back(this); + }; + + bool execute(int argc, char *argv[]); + } KhompSMS; + + /* khomp log console */ + static struct _KhompLogConsole : public Command + { + _KhompLogConsole() + { + complete_name = "log console"; + + options.push_back("errors"); + options.push_back("warnings"); + options.push_back("messages"); + options.push_back("events"); + options.push_back("commands"); + options.push_back("audio"); + options.push_back("modem"); + options.push_back("link"); + options.push_back("cas"); + options.push_back("standard"); + options.push_back("all"); + options.push_back("no"); + options.push_back("just"); + + brief = "Enables/disables showing console messages for the channel."; + usage = \ +"Enables/disables showing channel messages, where can be:\n" \ +"\terrors -- Error messages, when something goes really \n" \ +"\t wrong. Enabled by default.\n" \ +"\twarnings -- Warnings, used when something might not be \n" \ +"\t going as expected. Enabled by default.\n" \ +"\tmessages -- Generic messages, used to indicate some \n" \ +"\t information. Enabled by default.\n" \ +"\tevents -- Show received K3L events as console \n" \ +"\t messages. Disabled by default.\n" \ +"\tcommands -- Show sent K3L commands as console \n" \ +"\t messages. Disabled by default.\n" \ +"\taudio -- Enable messages for K3L audio events. \n" \ +"\t Disabled by default (very verbose!).\n" \ +"\tmodem -- Enable messages for data received from \n" \ +"\t KGSM modems. Disabled by default.\n" \ +"\tlink -- Enable logging of link status changes. \n" \ +"\t Enabled by default.\n" \ +"\tcas -- Enable logging of MFCs and line state \n" \ +"\t changes in KPR board. Disabled by default.\n" \ +"\tstandard -- Special identifier, enable default \n" \ +"\t console messages.\n" \ +"\tall -- Special identifier, enable ALL console \n" \ +"\t messages (should not be used naively).\n\n" \ +"Usage: khomp log console \n" \ +"e.g. khomp log console standard"; + + _commands.push_back(this); + } + + bool execute(int argc, char *argv[]); + } KhompLogConsole; + + /* khomp log disk */ + static struct _KhompLogDisk : public Command + { + _KhompLogDisk() + { + complete_name = "log disk"; + + options.push_back("errors"); + options.push_back("warnings"); + options.push_back("messages"); + options.push_back("events"); + options.push_back("commands"); + options.push_back("audio"); + options.push_back("modem"); + options.push_back("link"); + options.push_back("cas"); + options.push_back("functions"); + options.push_back("threads"); + options.push_back("locks"); + options.push_back("streams"); + options.push_back("standard"); + options.push_back("debugging"); + options.push_back("all"); + options.push_back("no"); + options.push_back("just"); + + brief = "Enables/disables logging to file messages for the channel."; + usage = \ +"Enables/disables the logging of channel messages to disk, where \n" \ +"can be:\n" \ +"\terrors -- Error messages, when something goes really \n" \ +"\t wrong. Enabled by default.\n" \ +"\twarnings -- Warnings, used when something might not be \n" \ +"\t going as expected. Enabled by default.\n" \ +"\tmessages -- Generic messages, used to indicate some \n" \ +"\t information. Enabled by default.\n" \ +"\tevents -- Record received K3L events as log messages. \n" \ +"\t Disabled by default.\n" \ +"\tcommands -- Record sent K3L commands as log messages. \n" \ +"\t Disabled by default.\n" \ +"\taudio -- Enable messages for K3L audio events. \n" \ +"\t Disabled by default (very verbose!).\n" \ +"\tmodem -- Enable messages for data received from \n" \ +"\t KGSM modems. Disabled by default.\n" \ +"\tlink -- Enable logging of link status changes. \n" \ +"\t Enabled by default.\n" \ +"\tcas -- Enable logging of MFCs and line state \n" \ +"\t changes in KPR board. Disabled by default.\n" \ +"\tfunctions -- Enable debugging for functions. Disabled \n" \ +"\t by default (should not be used naively!).\n" \ +"\tthreads -- Enable debugging for threads. Disabled by \n" \ +"\t default (should not be used naively!).\n" \ +"\tlocks -- Enable debugging for locks. Disabled by \n" \ +"\t default (should not be used naively!).\n" \ +"\tstreams -- Enable debugging for streams. Disabled by \n" \ +"\t default (should not be used naively!).\n" \ +"\tstandard -- Special identifier, enable default messages.\n" \ +"\tdebugging -- Special identifier, enable debugging messages \n" \ +"\t (should not be used naively).\n" \ +"\tall -- Special identifier, enable ALL disk \n" \ +"\t messages (DO NOT USE THIS!).\n\n" \ +"Usage: khomp log disk \n" \ +"e.g. khomp log disk "; + + _commands.push_back(this); + } + + bool execute(int argc, char *argv[]); + } KhompLogDisk; + + /* khomp log trace k3l */ + static struct _KhompLogTraceK3L : public Command + { + _KhompLogTraceK3L() + { + complete_name = "log trace k3l"; + + options.push_back("on"); + options.push_back("off"); + + brief = "Set K3L tracing (debug) option."; + + usage = \ +"Sets the low-level log for K3L API. Should not be set for long time \n" \ +"periods.\n\n" \ +"Usage: khomp log trace k3l {on|off}\n" \ +"e.g. khomp log trace k3l on"; + + _commands.push_back(this); + } + + bool execute(int argc, char *argv[]); + } KhompLogTraceK3L; + + /* khomp log trace ISDN */ + static struct _KhompLogTraceISDN : public Command + { + _KhompLogTraceISDN() + { + complete_name = "log trace isdn"; + + options.push_back("q931"); + options.push_back("lapd"); + options.push_back("system"); + options.push_back("off"); + + brief = "Set ISDN signaling trace."; + + usage = \ +"Sets the low-level log for ISDN signalling. Should not be set for \n" \ +"long time periods.\n\n" \ +"Usage: khomp log trace isdn [,[,..]]\n" \ +"\twhat -- \"q931\", \"lapd\", \"system\" or \"off\" \n" \ +"\t (comma-separated values).\n" \ +"e.g. khomp log trace isdn q931,system"; + + _commands.push_back(this); + } + + bool execute(int argc, char *argv[]); + } KhompLogTraceISDN; + + /* khomp log trace R2 */ + static struct _KhompLogTraceR2 : public Command + { + _KhompLogTraceR2() + { + complete_name = "log trace r2"; + + options.push_back("on"); + options.push_back("off"); + + brief = "Set R2 signaling trace."; + + usage = \ +"Sets the low-level log monitor for R2 digital signalling. Should not \n" \ +"be set for long time periods.\n\n" \ +"Usage: khomp log trace r2 {on|off}\n" \ +"e.g. khomp log trace r2 on"; + + _commands.push_back(this); + } + + bool execute(int argc, char *argv[]); + } KhompLogTraceR2; + + /* khomp get */ + static struct _KhompGet : public Command + { + _KhompGet() + { + complete_name = "get"; + + options.push_back("echo-canceller"); + options.push_back("out-of-band-dtmfs"); + options.push_back("auto-fax-adjustment"); + options.push_back("pulse-forwarding"); + options.push_back("r2-strict-behaviour"); + options.push_back("r2-preconnect-wait"); + options.push_back("native-bridge"); + options.push_back("suppression-delay"); + options.push_back("context-fxo"); + options.push_back("context-fxo-alt"); + options.push_back("context-fxs"); + options.push_back("context-fxs-alt"); + options.push_back("context-gsm-call"); + options.push_back("context-gsm-call-alt"); + options.push_back("context-gsm-sms"); + options.push_back("context-digital"); + options.push_back("output-volume"); + options.push_back("input-volume"); + + brief = "Get configuration options in the Khomp channel."; + + usage = \ +"Usage: khomp get

]"); SWITCH_ADD_API(commands_api_interface, "xml_wrap", "Wrap another api command in xml", xml_wrap_api_function, " "); @@ -4749,6 +4810,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) switch_console_set_complete("add uuid_setvar_multi ::console::list_uuid"); switch_console_set_complete("add uuid_setvar ::console::list_uuid"); switch_console_set_complete("add uuid_transfer ::console::list_uuid"); + switch_console_set_complete("add uuid_dual_transfer ::console::list_uuid"); switch_console_set_complete("add version"); switch_console_set_complete("add uuid_warning ::console::list_uuid"); switch_console_set_complete("add ..."); diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index e8fdcd2489..2f5fb5a35a 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -1677,7 +1677,9 @@ void sofia_reg_handle_sip_r_challenge(int status, switch_channel_t *channel = NULL; const char *sip_auth_username = NULL; const char *sip_auth_password = NULL; - + char *dup_user = NULL; + char *dup_pass = NULL; + if (session && (channel = switch_core_session_get_channel(session))) { sip_auth_username = switch_channel_get_variable(channel, "sip_auth_username"); sip_auth_password = switch_channel_get_variable(channel, "sip_auth_password"); @@ -1747,8 +1749,37 @@ void sofia_reg_handle_sip_r_challenge(int status, } } + if (!gateway && !sip_auth_username && sip && sip->sip_to && sip->sip_to->a_url && sip->sip_to->a_url->url_user && sip->sip_to->a_url->url_host) { + switch_xml_t x_user, x_param, x_params; + switch_event_t *locate_params; + switch_event_create(&locate_params, SWITCH_EVENT_REQUEST_PARAMS); + switch_assert(locate_params); + switch_event_add_header_string(locate_params, SWITCH_STACK_BOTTOM, "Action", "reverse-auth-lookup"); + + if (switch_xml_locate_user_merged("id", sip->sip_to->a_url->url_user, sip->sip_to->a_url->url_host, NULL, + &x_user, locate_params) == SWITCH_STATUS_SUCCESS) { + if ((x_params = switch_xml_child(x_user, "params"))) { + for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) { + const char *var = switch_xml_attr_soft(x_param, "name"); + const char *val = switch_xml_attr_soft(x_param, "value"); + + if (!strcasecmp(var, "reverse-auth-user")) { + dup_user = strdup(val); + sip_auth_username = dup_user; + } else if (!strcasecmp(var, "reverse-auth-pass")) { + dup_pass = strdup(val); + sip_auth_password = dup_pass; + } + } + + switch_xml_free(x_user); + } + } + + switch_event_destroy(&locate_params); + } if (!(scheme && realm)) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "No scheme and realm!\n"); @@ -1787,6 +1818,10 @@ void sofia_reg_handle_sip_r_challenge(int status, end: + + switch_safe_free(dup_user); + switch_safe_free(dup_pass); + if (var_gateway) { sofia_reg_release_gateway(var_gateway); } From 28d02700c8ef8c42cd44adcdf0e92184301f24fb Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 27 Oct 2010 14:58:01 -0500 Subject: [PATCH 143/230] typo --- src/mod/applications/mod_commands/mod_commands.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index d9de871338..4646473c75 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -2020,7 +2020,7 @@ SWITCH_STANDARD_API(transfer_function) } -#define DUAL_TRANSFER_SYNTAX " [/][/] [/][/]" +#define DUAL_TRANSFER_SYNTAX " [/][/] [/][/]" SWITCH_STANDARD_API(dual_transfer_function) { switch_core_session_t *tsession = NULL, *other_session = NULL; @@ -2029,14 +2029,14 @@ SWITCH_STANDARD_API(dual_transfer_function) char *tuuid, *dest1, *dest2, *dp1 = NULL, *dp2 = NULL, *context1 = NULL, *context2 = NULL; if (zstr(cmd) || !(mycmd = strdup(cmd))) { - stream->write_function(stream, "-USAGE: %s\n", TRANSFER_SYNTAX); + stream->write_function(stream, "-USAGE: %s\n", DUAL_TRANSFER_SYNTAX); return SWITCH_STATUS_SUCCESS; } argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); if (argc != 3) { - stream->write_function(stream, "-USAGE: %s\n", TRANSFER_SYNTAX); + stream->write_function(stream, "-USAGE: %s\n", DUAL_TRANSFER_SYNTAX); goto done; } @@ -2062,7 +2062,7 @@ SWITCH_STANDARD_API(dual_transfer_function) stream->write_function(stream, "-ERR No Such Channel!\n"); goto done; } - + if (switch_core_session_get_partner(tsession, &other_session) == SWITCH_STATUS_SUCCESS) { switch_ivr_session_transfer(other_session, dest2, dp2, context2); switch_core_session_rwunlock(other_session); From 3d547b1c64fd27dd323e5372d39cf518b1381afb Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Wed, 27 Oct 2010 16:26:55 -0500 Subject: [PATCH 144/230] windows installer - clean paths --- w32/Setup/Setup.wixproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/w32/Setup/Setup.wixproj b/w32/Setup/Setup.wixproj index 10dc60004b..4df748f967 100644 --- a/w32/Setup/Setup.wixproj +++ b/w32/Setup/Setup.wixproj @@ -12,26 +12,26 @@ bin\x86\Debug\ obj\X86\$(Configuration)\ - Debug;FreeSWITCHConfFilesDir=..\..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\..\Win32\debug\sounds; + Debug;FreeSWITCHConfFilesDir=$(ProjectDir)..\..\conf;FreeSWITCHSoundFilesDir=$(ProjectDir)..\..\Win32\debug\sounds; bin\x86\release\ obj\X86\$(Configuration)\ - Debug;FreeSWITCHConfFilesDir=..\..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\..\Win32\release\sounds; + Debug;FreeSWITCHConfFilesDir=$(ProjectDir)..\..\conf;FreeSWITCHSoundFilesDir=$(ProjectDir)..\..\Win32\release\sounds; bin\x64\Debug\ obj\X64\$(Configuration)\ - Debug;FreeSWITCHConfFilesDir=..\..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\..\x64\debug\sounds; + Debug;FreeSWITCHConfFilesDir=$(ProjectDir)..\..\conf;FreeSWITCHSoundFilesDir=$(ProjectDir)..\..\x64\debug\sounds; bin\x64\Release\ obj\X64\$(Configuration)\ - Debug;FreeSWITCHConfFilesDir=..\..\..\..\..\conf;FreeSWITCHSoundFilesDir=..\..\..\..\..\x64\release\sounds; + Debug;FreeSWITCHConfFilesDir=$(ProjectDir)..\..\conf;FreeSWITCHSoundFilesDir=$(ProjectDir)..\..\x64\release\sounds; @@ -735,8 +735,8 @@ - "$(WIX)bin\heat.exe" dir "..\..\..\..\..\conf" -cg FreeSWITCHConfFiles -gg -scom -sreg -sfrag -srd -dr CONFLOCATION -var var.FreeSWITCHConfFilesDir -out "$(ProjectDir)Fragments\FreeSWITCHConfFiles.wxs" -"$(WIX)bin\heat.exe" dir "..\..\..\..\..\Win32\Release\sounds" -cg FreeSWITCHSoundFiles8 -gg -scom -sreg -sfrag -srd -dr SOUNDLOCATION -var var.FreeSWITCHSoundFilesDir -out "$(ProjectDir)Fragments\FreeSWITCHSoundFiles8.wxs" + "$(WIX)bin\heat.exe" dir "$(ProjectDir)..\..\conf" -cg FreeSWITCHConfFiles -gg -scom -sreg -sfrag -srd -dr CONFLOCATION -var var.FreeSWITCHConfFilesDir -out "$(ProjectDir)Fragments\FreeSWITCHConfFiles.wxs" +"$(WIX)bin\heat.exe" dir "$(ProjectDir)..\..\Win32\Release\sounds" -cg FreeSWITCHSoundFiles8 -gg -scom -sreg -sfrag -srd -dr SOUNDLOCATION -var var.FreeSWITCHSoundFilesDir -out "$(ProjectDir)Fragments\FreeSWITCHSoundFiles8.wxs" + + diff --git a/src/mod/endpoints/mod_khomp/docs/Manual.html b/src/mod/endpoints/mod_khomp/docs/Manual.html index d0699551f6..863ef76847 100644 --- a/src/mod/endpoints/mod_khomp/docs/Manual.html +++ b/src/mod/endpoints/mod_khomp/docs/Manual.html @@ -60,6 +60,7 @@
  • suppression-delay: Ativa ("yes") ou desativa ("no") o delay necessário para supressão DTMF. Se desativado ("no"), também desativa supressão de DTMFs;
  • trace: Define opções de depuração. Não deve ser utilizado em produção a não ser que estritamente necessário;
  • user-transfer-digits: Define uma seqüência de dígitos DTMF para iniciar a transferencia entre o FreeSWITCH® e um outro PABX (utilizando sinalização de usuário, como QSig ou FXO FLASH); +
  • flash-to-digits: Define os dígitos para serem enviados quando o FLASH é detectado na FXS;

  • @@ -119,7 +120,8 @@
  • accountcode;
  • calleridnum;
  • calleridname; -
  • mailbox. +
  • mailbox; +
  • flash-to-digits.
  • Cada opção é separada uma da outra por um pipe "|" ou uma barra "/" e definidas após dois pontos ":", exemplo:

    diff --git a/src/mod/endpoints/mod_khomp/docs/Manual.pdf b/src/mod/endpoints/mod_khomp/docs/Manual.pdf index 665be58ee3b76614e2d787029c423f543781d6b7..935b299dbc821be862d801ecf934e5131acf1044 100644 GIT binary patch delta 32162 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 delta 1403 zcmbQRPNHv}#DsQE10z#ILlX-VG!=T;JQ7U)>uQ{B&Kx(bJwApRsgj(a*JFL5%rp zxGpgNaVkIw521tzjKE?X2PE zJqD?7Vn5%${ZTaSGslvJm5fdy6ZsFVV(^`R_}Pr{r=Z|wmf(Lsl1Murx?F}Vn(oA#?+5>TDE(5|2j(X=091z@mKrD z33F1-_%F}lz5R(T>529kO`UeJOP%=%q4)3Uzg7|vbz83G9}s5cC7yXjwf;$qnsmsP zU>42WyENsx_4{~s{@d=v%x1?}@0&l{L16D^?Po8%%-UF)->uDkvtrdEtxoN)6Hc>S zd*^mwQf$YfKfm@pJ$y7X^yaZyGw06yevjw(n^utr!a-UZUK;E79N>RoY5#8BUIXqw zEoMot*+V9BB**uJd49il$1P;ZzcRVGH#?RoX7Nmo$(xe8`P9Y^{YAyQ7g>1e|2mgj z@3Ogf{y8oCV6k7b=gq#Mz~7>A^H|+8jdlBvF~(-@`f4YC@3X0T)cfr!Oja@z=cx!5 z@wu+&sQLM5SFlexf1r%nstfXb{`acngC+Q$hbuX6ciy;TQg7HaF3(llbf@QZtkkqj zUu7DZ8Xfs@lFG^OndQ2NW=SpfZ_}Qay3oHXzNLPFPT+wRURsC0DBYj7)v^nmb$N8$Z)!E?Eal3qEnDXr_03dESrp6uso6td zo$0P~rf;1lW!K+5oAi7B{poveTKN_jUH=+5*UH%W2ginmtV;wB&Ro~xp!e*Dkhxn_ zLfVQ0v-(y&o8-VZ`NYz#Ri5YPZdn_=xGb-1<)TRq*Un$t)xw<`mbb?;`fb6<@H3H; zk-STO?L4!Dee=}=XHV?wdA+c6zEzI<`R?xa4CSmB`GsHXr*h8v<6QqHO#B23^Y@&c z2k!?aA6>S#_+m_W%I=AJ9nq`(W-uk6Hql)3azo1O&y)UUOnrQ(SvKjV<+jz_Z))%E zJ3n(<&WHKt#Z5N8&%1^DP6x9e?WxoG*f-(aR>O)=gOuA-1>7$4UcYOwVI$2O%| zGD2;f)!WuhdRKZg)?(SO!+q<%-*i8rc>l|L#JT&{TIpxcR`{5_vJ-A!7pYh^?>3-Xt*xBqE z8O^pgaj-?OYPZ~1c^snp`Si=8KI_NHLx_m5HmJ4LKic$FfzmxGdIQ%v$TMU zDIqL2H#9OuS7>fzY%;w{jLjl0$;2el!XU-cFfq;C(9GDt&@jo!*vK^1!qhCuB+1Ou j&W50hSUWqe;*!Lol8U0#G%jOHa}zUjE>%@me>W}wvCw39 diff --git a/src/mod/endpoints/mod_khomp/docs/README_en.pdf b/src/mod/endpoints/mod_khomp/docs/README_en.pdf index 2864e403fca13bb436047954a77a8c7b3464d9ea..25be8ab0b2ba117d73349bcb90ecc453e5c0858f 100644 GIT binary patch delta 2446 zcmai$XFL>+1I8&GPDfdp869yKx82z*l9AQPNWYwsQD@%ItTUoyoy#b)N`#DXcHs&k z<796#PFBQ~QU1T*=l|~Ci~sk{^Z7i_^Wu5=lspkAdm=!2z>R>T;i?!k8Wll_rm#m- zjzv?B(<_Ctqn-? zszmrsdxC|L!}%2Y(TJCo%Px-(*hIZbpl5BrQJS)K?v)^uzb22OaL%vM1{SYV1XAP5 zdJP@^44`5fOP5T=z5`f4|%gt z({%ab*_8WBl7grAnXra{{%S=6xaRS$-0kW-Ype!Zsx5#R@$dxUDwiwah$AhXc+jbY zsP=_iNnreX=@l4X43w*fKKgMteX^cI%9a%(LPvn;c~r9dRBcDzYM-e{R4OYF&C^y^ z;EydEPIJ%V>?=pQ{dH0)-vVVjl++g&0%*(@ikzfbUmfr-q=HW*Q(`<^B|=c|?xP1A z6w}&ZRr+suYONbM&a#t{aOwY|rR5*s=jwC^7{q?ZddfQ!eu}(YUe{p?)h1M9e`qPN`5%8_Y7g zu(5rTcv9oyOt*<4i!JUhyB*NgY;hHXf|Rs8C3v#n?z_hx=wAC-8kQ)0AjgG}?-)zV z?ehHFF|;~YecAOhbA#>o!`%E*1>xzb2j52{*B}+|MKUU1jub>qXGEnc4YtP|+B+<_ zt_m-QkV5T&uxBc^%M%|ofLn|VZ^l2C^z#n$){R7dpqTdRVfnFB;UY}*wID+{1kr^$O zXLJT!I1jY7^(hszm(@yJWOSpfh2N;7)|AxN4#^+={AS~1^AihrZIVggo}M|9PKR6N z(G@8*QF(^RwvdMgFQGs01C@PeS)#+#Iqj`uk9?c=x>PhPGRBs_F3Q;*M-UD_%gtBOrz&ES+eaTIq18EJooYI zo`RPf?O-gqmdIp<%!G>&S<#MP`)8?sgwU*9_)VQNz0Xwrd*ic1xj|bd?$iNy)8Hxb zcKylVgU05SgeqK~OG=yK5V~jHF3^%OGTrNHcA46COPw#rBV#tkgpxgnem)SC)@Gf) z9H3>qV#P?G_Ktg>PhO{9DZiD%>tQ+nEl7j@)L_nO?#A>{LG*R1o$tQ?%datIE(`^k zp3eE4=@k+HJm->fB{|S?2WI@CbjkFtQ{=^ZOt{NTon-=S@Y03*Zb?Fr zH9bB>W5WpXGXG&;S+K}WAyG^J5auN-+R~hhPk3}4F(@&kq{sZGG1%usgfaBxDpmMI zl1|~5C$-6q`D7X#YX7}sqX3YkJiz-ZQk3-(owSk>+f^fNXqjgOEgl0X&`Nc(E}lat zrhm9CBdF;RK)(%e$InL83+maK)fam?c`AeQ4kSU0D_sS6lMlO$9YgUOU*c0V0xx_m ztL?1zBBEmpxf9&BMrl7}B+cD(P8Pm(F=UK3R|wrKB&SO2w%prX4Oi(3iH(rAB(fnC zB0TYYR8F(nCuqaZ^G;+m)~<# zyaO)TgE_WK9pc?zObsQSU#|LfOxN+NmxFZkLU{~CMs+2%63-sGg1JzL@5$q0=JJ~# zo)_^T3$N)G(6SZ+r^M+{HJ1-nOS<~p_4dYfNx7HI4SL7*_&(mwFyEF`nmBWLJhGCd zGalLo@e<<^B@s4pF~t#Vi{(YLfMQU?2hF61w%OkSyt~HRTYBsM<%Ui9^=B&cOFl>i zU%U8je(y1iSD;(xlM$#gC%|VQo2{uoiFTMkUhVS?WZqpc4_Su?z0wn&HxT?Lu?Pi} zT%DE7M%SeFMh=*DWuQPu!kZS_0}DrhIx`k~yO-&ry^~85EzcPj)LONyFhK+X?*>M0 zF}JwdM}XNA{>+ZAnqACC*UY#ieKyKZU@=RzUb^c z;0-(Um(RR5u;G_anpNQ1rsbN8l2NujIc*lsfZF#Qf68nrB=TABir(+9^V_Vi z&+2xv#LWzSkxwnqq681YUja`}z5vI@JPm#3_BkkRF0)tLFOZ6keT@21{~&#(3RYcW zuxYZX-RrHpSG)P1Ly1!eEe-z{X`(dnUqvAhaHL8)qMJj&67|0k5{1S5;h}MVdKet` zkDiJuJUz9W19t=G?22)5CAc67&MG)K8taBbI-?L+XXHQU2>Z_jEsg)%aMaQQ`Ug1q X1qAuIx&cuLq$&~xl#??sHw69%I8k!K delta 2462 zcmajhS2)`X9|v$FwPUm;5gkfXGn(;_2#!sS8b!^cc8sEmqed%;RWs65>1&IsR*f9v zB{fQE)hdcoq=Tc>-sFUH&U5bGUcBF%-}8K)@7?$2SDkz6dG0B4GCvZHMWFyS02fD2 zBy%Q`xf03T4P;P7y%-V&V9_`PN)3w!Fjx$LZ!&HG4RaG2A)QFkWwy9IMK9Sx#JSY$ z(j~(ru3&Zbs~sj@r?`&K7X(Ai+c-Xz<;}EiEzd48q{$obr>DQ4Y%C$m%Z6&$UGCSZ z1grBE^RMu=xw&{DV|Tt|5Dg~Dml_qa;8gx#XCCfc0fkXCw8Qa3Ud}5Hnz$5$y2KpJ@yHU|{7_8dgOch0gHbJ8Qm9 zhvJ_uvA;2yZ?+o6PVJC0`KT#4zbb3w5OxG#iaw1as@?@&y!IU zcj9>M%Cj5Kv*#wl2TvAX;AaLf-!J(o@OmylOqHWH`G)Fcf`8n(8*{^v>W(!l<6Uyg za?;=ef0bYi7{Hx<_?>IwUI?~B_F7<$F0a1r9{v#%ed1$e|2`F3GfM8Y$?4giZ*Kpi z&)iyhv0=wNH>+00ELDL6vi7+#{ak7LK@Hc{n5MN>kP;^+`jJ#S=p6B5DxA4x1q7;K zQ)x3*5Y|bzS1Hs1BN_4R^lvfuL`?8?ttM8l`HBU72J`VgMwSIso_#aF$HT#TkzQ4bOcATTZ~I$J#^#(5w!EaD@3_e!xVO2AlO0Q4c6wiQ(`78IGU7!! zU9OL)USTgQeP50>DHQqWW%Lb)VX|!xo$h7lZ+P`~r?;nzxe+jgh9to@=DcLpehKjW ze$EA}cbDDfaCF2we>HnVDoWJWzh~p|u5S6mD(bO7;p;y?OV1H`OV|OFbj{ecg*#1Y zpML1a&S0DzC`n$|(|BqNPo#Q`+lND+v68;ZCumpK!#89?d^mesL&|?>OzHHKVaye!nUAaovtkk_pGe^SRhqQp6v!PAkYa&#o0(C_ zFmFMj=kPWg9!R9Qj2dayNy*}FQo36tCynG&T-W)rbc^Isnf+twkhVD|CqiAK;f zms9X6*kABrok7vQ*XQC6PFri}H&-kADU~Rfun=H&EA_WB`xL3tyccz)os#7StBye6 ztx?BM(?>vFIgl@RiaE;)K$q*IU+#|JcjUe#7H~MfAR6#?f3jw_zf+^Sd zZT(hF$vyoR;n#M;XMCHSSWZvhdspHv79? zkD}du*Qs>v*J;4`{`2!$vp&fu;#-tIG#bRfZzw;s=11RLF%^!^11tN4!HfC67gMvo z%0VaPiBqJ2Z%(~y3|!JgSii9wA~xw{NUL@5dEKnI)O_sp_S>KzmYc24;qsJpZtsEY zdXdzz!Es@B3O)TlU z>AJ9`(}esj-FZ20cy1i=Kq!EANo ziqeeV$VgfcK66+X#q}&;pS2zl=SOY?t=n5pe3GE zXIrZ(KGnC>LXFIKa?f#=A~2ZTiT$36LKiqbq%x*G;tor97nJf9r6C+$8oZvr9lsa{ zGm(vpQ|^uth8KdxA2gLJ)^{CdhE5YJx^0+Bl`k)g&2lxr;_1??88*E?26^A=vHp3N zpsniWw`$pWMOO+NWU0R_X}8N5t@yO?g$rnZAhR6^x!k`lftiAu2UA%(sqXYW8DXZX zzdb^ntLF+n0efQT!s$cl71m9K)%@1-`cF<>Vr@)<4J>&GZ@g}_C0~JQVd!YK|F>CF zwnT3sY1Ex!QSqTjxE6@ONzq7JF_Ry)2aSIB((1&yM9i(x93Rs>kDHSpE&hJFzR!EX zY(abQP?y!T*#$!I5;4-qex{f;m|)Bp!Tz2)qtORs%p4@ z?NMPL2z>*KQ6s3TqP+l53=-`DsNzu`SPuZJ=8aOttD#XiEzSSiaM98d2n}-&35y8v TCJ10qXgnGz0EZh|8VURbeq?XJ diff --git a/src/mod/endpoints/mod_khomp/docs/User_Guide.html b/src/mod/endpoints/mod_khomp/docs/User_Guide.html index ceb520b0d2..eb5cfc6c4e 100644 --- a/src/mod/endpoints/mod_khomp/docs/User_Guide.html +++ b/src/mod/endpoints/mod_khomp/docs/User_Guide.html @@ -61,6 +61,7 @@ If you need to set advanced parameters of the board and/or signaling, the progra
  • suppression-delay (former suppressiondelay): Activate ("yes") or disables ("no") the delay necessary to suppress DTMF. If disabled ("no"), also disables suppression of DTMF (local option);
  • trace: Set debugging options. Should not be used in production unless absolutely necessary;
  • user-transfer-digits: Defines a sequence of DTMF digits to initiate the transfer between FreeSWITCH® and another PBX (using user signaling, like QSig or FXO FLASH). +
  • flash-to-digits: Defines the digits to be sent when the FLASH is detected on FXS channels..

  • @@ -123,7 +124,8 @@ For details, please refer to the configuration file for examples.
  • accountcode;
  • calleridnum;
  • calleridname; -
  • mailbox. +
  • mailbox; +
  • flash-to-digits.
  • Each option is separated from each other by a pipe "|" or a slash "/" and defined after the colon ":". Example:

    diff --git a/src/mod/endpoints/mod_khomp/docs/User_Guide.pdf b/src/mod/endpoints/mod_khomp/docs/User_Guide.pdf index fd8027ba2b29bcfae0670899279dfec11473750a..832596bdb255ccbd3bc03c675d3afe7a590008b7 100644 GIT binary patch delta 38395 zcmZU4V{m0rw{3?f9e3=cW81dTv2B~3Xwwr!_lC$I1Q?yI_0cmG+lYWyxA~+5*I1Z{Q4qCk*f|ZlC z<*Xl??>iC;2Qxh*5epXwJrfZNCmTp{6dJQdZUR~y@Pm_siJg;~j+v2zimP zx&jh{iJ7s5ZWG!M41$@11ys8QO$E-#23r5Gm6;I)z5Q=xG? z6B-_Zoskj5x(iMDFFyxJe;3*pJ@cX;d(cf>C6nFJGXSdzMK(8;sdTgvq#XVEzOtE$Y4NLqW?Vn z{LU^;riQk#9$>BsvvwOq$YR?c=uflBOSA?PYd$jRu4ql3l4ri(*ld>KZSiW?w;5K} z#dVv6g&8OKoB-riftaTM^29ZhelF7EanPy#R7V%l6ectvPlg(P{yzX_=VQ+R^VLfE3n1XB@ zjwxV)@(L<{&LyLeC*?cu`ql+_-6f_iF~CiW?y}n7D*d(k0|eZ@PtfjsGk-byng@ki zLsa2Ivsv{7;#@p~<3?~R7~zNwll`c>S>w)J$~Y4jsOa8a%gVHk*30~UTgEYl>(TJy z%fGe3N1#5{P0yfqn~+!@){-D`RA4i#KPl)z@L+&YMs{2#%oq=N~){r6N<%MsdCzh;^#r}8MhQw3i5GYa3&S+yV z!xP=>%P zV3nFLTggjgQEl$LipuR?sf4G%MQkh~S9%3$1r41{T-%gJhI~MnifmQ->H?J==@-CQ zywZ5_+95$;G9y>cVAgoQhH!xpiB6bJxPR7613 zxKC-}K73g?h2vd+w(If%(cgb%M%lM=g4M4{ultGRCnZT|Bw5iZQ^WH&a8DyOrnIec z_+p?<;gs)vM}y$hldwNoy>7WjFf#wVw}QJ$#Xn;FVOq8`v5>10s6+$DhU{tzt7z!M zfT*%A4#7VwH6W40UrYLU24q>`p(s%3n6r^q)EUSZ_(sqvn|V*#K=(2i7E@Ritor>D z^6HOtN_5J%DX>|LXlZb#8xHYgwPcjG*9(Mtc!jxQ*+Y$|U7D;k6fU9Lq~zk~h_AJ= zgh%Z%&+DC)8Kq+8E@;;1oMs#wGM9)>e~>cHEz=G?s;k~?;Hb4FK2Tq>Ci(NMRyq7z z)^aV<32s7TpmNRPZv_W@x((BtaG2s%T2Io?1oq$O zoh07zq;qRf3ve9qji;lpD?VH6kE^43Y8cJt2PeIz^z)=4ElHRn#%AH~ zJSrN3%>_O&*YDLC{I{G%^tU%8v_epoWbh@_`%BCCJjY9|K%G>N!EJov&?dUjHX&Uk z7Foy+b=7+OdSKd5kc*w@Yb=LVXtgf%JGwXZ?eJXq*6@6tE>RmENpfi6DwFdPg04)O zW4T*HGR23ZOUuI}>nd!OsU7fUwwa%M@+5d7DWx%9D}`7S?VFF+*;zWP*2}cI5VFoo@yQnfJJ7M|aEB0v_m2|moi6>o=f(%c zJuZCHbnqjxvPOX(Qwvd?c>cBreIxyJ4xH>F5o!)Jv5)?GdEA=o%zOvTkIsc^u8pS} z#5ui9fg`mv>hZ{w+HwSjdeYb~Jl$%x<>9Swk#LinArFtc{ZFR#Y!<8*v7RwZe)1<1 zYhEohv%nsYfG&+L-FglP#LbE9>|j;eMSN57dDVDB_B7Gc+d#_4vZ08pxH-gdu z;TJR}7?7Fc|1e*Zx~@Gg2eS85jm8NXb2(4eR03_Ao1Zro(^{@vRX$ZN=2=X_O19+T zXv02mTk}?4X-a;N9}?Oql(?;frD0&PBoU148GFW4+T3`onIgx6IZVQr4S$G=%u#s% zlrj5n=*RhPoF4A0!>tq0H$cI`?MtDp_|rx-5NuN2d-<7nD9`h%g_L!=-4sVty?jE9 z;ZS^oS~N`Yltc>!O7Hf_O_h8^MpMiWj7{aBBD~u zT9LA=SYYn+ZIuRP>AFt-L??+WREiQOGcVV3t7&dE^{AB;M572qk4YlyZkJe5NSkTR zs*j$rPD^AtNc`DEOlL}vBAq7XN>iqwwkJ!UnTwB+oE+++<>+4INX`NU`zLBDSy_C3 zoS^Dg;X7?}hj4zYSPNqs<> zI-rWWa4MUAvUswadQ!Zjc`eVhGI%18Tl<%gjzx4;rEUJKJ17RxYqEKYPM+aJ>}a9N zL7_e&_jhzmvs%(j?RC8IKq+d`^4(KIYPEVa#i1mV2MQ5wrRCD4W5mTT@4w+$A12Q_ zRLrZ?9|1GK$=W8DE-GT+2n$)KFM_-zBs1O1%PmUDOBW+_fIs1wWS>Y40 zO|#fJ^0C}0b}1W_#xi=Uk88H*=4Mk#@NPz`>3?wpbwYiCFF!<8Qf7A#5ZUJoggU)x3-hM26dI-i;x z^%7ZR_;lVdphry&#~!beTdnbuo{|#CQsKP0?>XtFTbbtor4R*e+M9lcH^Bc+OD17r z^Nr*Hf+Jx?jvYI@46*SDz>Wqb^GzF9DWG^Dc2YW$5tx?xH?9byF#5&Kwqm1%g~D`& zXgxY=(7E0>xAyZ)vlHXd55)6)tu&!I@lxRpr_w{Ic+*dxM$pF^g|KRQxc+|c&BMw? zyX9|P3T)69-ZZts)`{#tCw__^J0Dj%v<997>l)oV@_pI5B3lBzioHK$MF-Al#)^bl z`W~?Cb1jJ4kA5D1{>3xOUOzW*OI7RL&93gEUBkYpoWERo@LqBVaZJ>98RUJHMhIb- z4iE*m+^A0d8<+P~XNn8Jm==RcoJlgD8KvNZH=a9`Pck~U?mTl4$8Sd$Bdg&aCzUw? zQuNm-mV9**6s4bzT7!J-rs^Lw9#=SYRnNBglZ{h^VF7i}bCP%#USVPyTrh`9kTU$- zLA-o#_*=h41*Wsq@xSJtww-i8IAatgXhtDWzSxs8o{Pw;|9-s>Y_QfFuPZ8BQ?Vj?FfmZqMg^&?n-glGOJ1V30e7x7hrxDNY* z?%*3*SiEB^56UbLIePML4r~M zGSDXgKmlZA|35^Lr6y;;E{@!Ft`6@~1|G&LrC5)~3AIK}ACM~uQ6Y%fRykVKhVUo3 ztzz`^$+JPGp7pZO&bF7am514R`Ep72kH>;j)|joH36w%A!GL zfR0eFQ$g9Q;&lIF`2(H;Sd0JJ*y7^YRlr&719mrQ3ZCI}WhdG=jiH`4YMLl@cUSST z-4J>1(uzx(!8o)zq^(&hj>9~swYY&p?IP2hbYJ}^R*Nmgi}2@Lm_@Dk_D(i4Cx_Fi z?ENhDCKgInq4>hzwRQU4=JI>ZBNq>%P02k_0Cis(Y09g`7jtEDt@KgZisR#^_851V1VWeam+)RST^56_Guu7tvq41 zz~(zgM06)l+Zi(uC_$w36hm>wa(gkV7H$O-QK6%YiRzLmlblS_Oo2xjq`11W05bh}i`xq2N9O3YUE)0508~?DJ0qBoA3yB~ z-{F2+`ur0J+_>ijdZZA|8$Nz(Es7d6IUosbQf(?!`Q&v~*q^$V;@2saT zqF9khSH=`~i+NRE=9fe{>&f0#3d4^|rS%B5uQs6@ptCzkRo>@X?GKGSn228DsfBbz zuO4aNPGo|zMbSKQ?i888m`CZ2?}wsAUhCg)^ge89g2e(Tk2?X3?pgB{)jc5N0EbH* z=`Ew%zDrt~ZUZKCsN8b~U;9#MmXO2S`X3PzBxn>BjTr=X6Qfl}LnLCj3Oeo5MmiMY zY?=$SK)o1k%2I33>g?-jyE(5qBGMggd~TgQ!b%(XYgYMU2)L-pZ*z)~uAx3$IGnO8 zPW^V6Fxav0Z?%JE0>|(Ak7gxb+t>a2&qD^8NqH6?xp7=$vgj+4v3fKcDG&>%8ho~6 zeJMFqfw~Mw$WYsR29qf`3Q%8Yj`pw)2j_Rw)??4Js0Mw^bJrt?S3%2HDowr>5BAZv z6v-8~C|66kYc|ARCodxVMZeBopVL44w+glusNK1sJ{EVF`*9{Q<0dG>_KBP-D5Y9< z>4(-6VwW;SJ2!*QFUNp++rtV({Jt$YKAAocydwe+|EW(q-~nV{Kn|||13Ojf>vsQO z$7fkx_CX1Ukt(5mt&4XML>l%MrzNHbiALjOX(!@jdZpCt@9jP9Ahnusnd@&25z+`s zV=m{zPyVreN?DT=z=428EVY`~09Hg6C)w8( z;J$rfp-AOtjFEHupk|Ar1y`zSu>lXY``6Nb*cX(bm1~^8wFv%!HFVmx5>VwBOWz4i zxEhHh;{GX+4TUQI7A)yBhg#PP*VsJ@wG zM8=5;AuUf*N-KlK6f<+gbElkzszg)>1=HP#bW$Ew4rMDuO>u(3LIv!ry8*S8pxl7C z!-kxNRg^g1^rEiwVYr^u74}(U3NnT}{rb!K(zidOeYcm{GO`?PK!TcQS_$RMx}ban zlrXFe&(g|Pdw-eGNjy|!Sdy|7Y>C_sqH@_yR-$04F_oX%{n`|WZ;^J*W0Y?ZV6UrS z*>0w1K9jC(-;wn&Hb7!6>p)Q1GTC!bzURoA2~O)bYpR+aZ=GzPTo#?JKJTfK4c+I2 zaahYT>NE$=5XhA>Q{qL8wDVF;YsHckE9Z9AaMt^9Fal@JUtraKQ#^S6_@m$zQ@fS1 zq4ec01*)b`{vH!$tD~Z()Vp+XD=j(nEg@G)lgZ#KZ zqgbnFjm*4PGRn$k}qPP9(t2Qg&hu~mF25P9Q-BoR{7g8 z4vJGcx=q^o-Fv-(eND=Wcr)v;_0#$1(xmW27)0PdK3YsSQ z4q|(nSe<5_-xbb`zR=!Ih_9?i3-0bjru;y*#R=;Y*A|DXJkhs1c}?8HQe654;}SCJ z>NOf(G2n}2K-hu~hioiJ>aec=(^Th$PMBAW63 zK`bWQx81gW?j7{dSEiVThK4{v18Q}tsS1Trx*|bTv+`DFp>sZUT^f1L-5oj!nP-0I z-h(`T2E1I&-GrC(80YRbx)vlb#?zJ(!k=67vDEggS~;r!;8x< z4&Oq~w~_~s9{>tv-$;oo^uM9U9Yik$fC1UX07yZ@ zr~vYRn924Z&?Nd_diJE+wf!0+^2e0EV`Q9k5m}uG%&)%2=om|_r#zaskPz8DzvXwU zOtixCueT}0Ji0(B{HjJGv3^Ybt*)o5%nWF#00CHCz#74`<36<4!r6&xi7}TTEx6ux zlNYrG&{3CDVYmLqajq8zc(u883$QTr1pBiYeM3k&9wo#2K zBT0>k(2yK*D1A&bB8+^4c(4{)YR4{V=U|Yhqv47x;)s|xTjk|B@XJq)mg`w2g_PF| zJQ5jFELP0b*Dgl9pewiAIVVyZkv5`tBm**DFr6s9TwYXJwYls`gObe_UFdNIN}7gA zZbVrndY)2R9R&)a+sqNeapu5gCnq8Rm|4NwBE_W)34l2V>1* zR1@dSpopi=ZSJB@M-FJ(E)8xAUErp6DevKZY37R;XbuH ziZIC=PgL4aoc9pcxiaR;0<+j6f^IR(|#; z?U>pFBEdp3|BJE1Q(c;W-02$m7*cwb4pvm6;-{Y4k{bBRfM*1nqR+(Tq(S!ubw^4k5!%I-)) z2kHe?n#NXL=LLXQwqf$741Uwx9UVhY+;GEPGbOPJd4v#LhVH>5|>T>*yELr{?VvYq1>e9$IdX zKww9xz+rlO13wfP9f}TNjPQo$;8Bo5`gn-9|P;J$T~A3T*w;>gFs~}XFYzk`WdQxxPHAH6x9T#)&!L?PC8SS zKdEN}TH@tla)@&LQd(ybvW1N|-kAH0OoWMBqjX*UftMV{*fGY6LrZ2#L zyQm$qhi{EUbe}2b-_v(_pS>A>k%W8?VYLpFEbS6ie27!&B=nI+g$g;E{91RrHK1o6 z@!fiC<0d7v|D-IxwHk7xoNYtak@=OB4?I2On8sx?0;)qDa%~90naPEwaSc`EI<80J zZkQLU{b&~wuQG?<27WrAM&zu)MK4$d8uR$o2M_YuQvKYNQfuReHBZI6N_E=2^&SK= zL(zv4Rd&q1_UoKks^Q7_T7Qn0se#i*R9Md^Xvr6P{Y+&#H~_{+Z&sjf9Oo2U2rZ`oS` zHY9@~%uBk62m`*$^0%e>jUr7y?++#5%Lo}=fZ2^@EKkm6j@4vkwoq1!A;=2YU$3w4 z$Y=3CfPxi};w?`xx~cN|wJOHdKRb&^m=VSV7$r|D;CqhSexZkphT#K!CE*`$xVpaprJ#)q@hH0 z-ozKC{KVQGhD~RFi^7fRG5{~Gmx;cslQr!25{{%^>KpJ4xXD$eim)KjCgaYFf6Ldj zIztu`mMU}lmJ|bB4U}~QsLd%Q*(_dQ1&r`T$D%_nMGIPss;KN(#jDJX4L$7Hxot(E zR(>vAeJ^)ywc18Nid0KJQo1aEOfE7$zTXHJ$wgg;JoNp_$N#DL(?mYnoO76a=IAEG zQ0Q7CHx+pbKg;AUMt7<3rW>6+PEiZ%m&mSc_o-K?*yPfyClGJ)k1_mlch+zU+%#P% z+bB+vNb1Lo-H&05XHDNG9x(VT=VKJ9WFq)bfdF$u;}Szf7CGQ1D6<&PQ$N)nEy+ zoA7OC`sDat4#36+=_@LeGH_Hb*1&PT?n=HJ4~lPD_yO-~G6rvN7dwI~?j8yJC`PjO z@I=S~DVNigAyqRcKxL~>M$11B@VN=G#M@@|)lzr<3%H?MCX9u<4kpW$Jm`sO1swO7 zDyhDkLQb32n>|+_+ zo@a<1D?=X>lHf&;{f7};2>|F|Kt|U8si^)}K^3jGZNJBf?0Z~;mFFW_L{5rES-C?1 zTcoZ^acNifSk#^zj{n!z$b5f>kbCpXm!%oPzqzD9DflAI-mLq@Y@$XUoavLyVKp@J zN1@m;W>lhug~HoFDUu`Fz`u^ku*+%(KDeMWnj(O)%Wt3bv{ z)6p7vfEuB=Os&bIOsGzHqFtb+ol-bL;mZGPzIj7w(hvoqDW{{uhM%+B)b< z@5Itx;qbKSp>TL5a?1()PwxXG-o4^C8iEPkV|bJH03NH2ScYw)P39s|yB((1x7*8` zD4Z2-L?Wrq-(Lxtpc7^L;2&}I5gE>LR#om1B0%~@1qkg&Qa>;^vIF8oX@|eUTmZ9P zn}>#grqPExb4&w|uSMr8t78MV58nL(aVGWNId!;Y>6j7SImk>TETUWp*53Pw3g zMj4W+tjU>WlwKpp3-oVVMykC-iLy|foe*w>HT?D{B=24Tg4vT0DC5x~ z>_8nz8hFY1`JK5|omLD(b6B;&DeoV?OG?GP;8pRy7t7G6RV~R|w$1Dxb{X_i@VQxP zX&V>RG#;5nI->N)#-g+QwfWL%016&1F`2u7{JcF6D*@#_?Xa@&K0 z7UIR{TS*KZBH0))pC5!OzEvJ&MdgNDM{k7zv1vfYRL=MV-X&iv2o3cF`*+Lvx^G%M z7o4IUQddX0uk0!;%M!m-=&R?I_7n7u`>#Tye+4uKt`^abJjAKC*KX>l32y*S!8mSRLN9DaYtv zMi)e20-R0!;a5d-ULsSr?FZE|UYPLFh9p!RoMLs#pG6KjF^{-~Qe#F^SaF51UPllWpeyM1A>c5VsUy|qm63=GEaZT*41 znS+K2K{tM|CrHDyCVoBMCsx7~e>~6-Mli1qE<5#Vxb=Cyz)6$(2LE$4(g#PfKPA~&B5VS0}Kmbr3S0(W7rs=A-S+tmr8446kYX9exjNTquNr7qrO_W};F z;~uz8nc{o&GbcG^Fz(?|l;R>AkjA~6uJoV@yX+Xk0({Xz%s2I?DD<@mT)Y*iyt}j2 zOO#wLgS)r!cSn%CKGFvQ$o#cJe>PnkXD3Dqpzndn{O?=HnSr?|9rfI$QNzFtBM z7RX^~n6c@$Pe5UOU(^%NX_oa4^`Fn(^7Hb@h6&u)ER-o|M^TaBJ=at-67^aoDvgf* z%59?aqP+<_Yf*FXgXzQYUm2ay#qMyA8no+-(;ORNsPcv+R?Jj=5J}>Ri+q(#jRx*p zplCGD(LNhDnOPzy5h`v)U<$P}3boPHQhD_em%4l@aX^b^{gkF!)Zx*UYR^5EHJ+f=Qjs|v7~LL| zL;H~m5v?$>k@Xjg#MZizuR|D!bld`#RL)s0I7K*>`#T+sjAg)S$`R819XaL0Gm9c~ zqjiP|`~*2HA{Kw6=m<47BNJQ-RYIsuL%JgUOc6S&aB*b7Hy?>qC)^?=b&ll}X$X)7 zw6F%P?NF%l;X0`W@RATh3WZ!bwJ@%NS+w5+hf}p{vx4N0t#mCaye_b@Vs`s0wG$sg zt&`tVU9H_w>v7@syJ#QT0#c=haCVWl7!_G0li>-?FpR~L;EG`iYIZIFNhV^D47-j% zg8aa-9u?F?0VPY`AUxxu$IY{LV{Lyx9r6)#FoFs%mbYIE+)AFT)`_#2m<8YDQLziv zs4yZ4lL`qoHRz?DC#?qCBzrMTm9c4>_IvQQa7HMFn&z+$-l~4$Bq}8cD@GiLtS~D>HKCJD(inj z3WW`0&2n*>edlcoxB6+N;#<00XF8v~i8UNRGQV>H%*WLpLRy*{pci16VZdHCCUBz_ z;6Lw?L*Z%?t#0x(Sr2fy2wiz$tS^S7(|t=NiZOj$$^U&UjTk;3-8<{*MgK=pv8`)z zDo^WCaux^mT?PvKu_oGV7^o{6(#cS@e>txJ&aSCAB+&4l-E7!QWirlX ztkr1^ocv4W_{Rd~Ko;-EJ*i3GZN049L?B_W2{-1~IwRh=81~80!s8|u>u$Soyui`z zSI{|H0d@0w9t};UvT;M=(q_ZU^%}KH25&mFAfnvJY0c_~NKAqkW8y~?KL#3wU?w=( zQe7vl20uZ2S3Kvi8*v9AJF8S;a(V*tx)}}#s6Zy&Pat|o)#M?M?<&&Qb|)U4+v1?0 zlyX5e47a~UJ4P3IS*ntF5|s!KP|D(I>=aPXGKg);NIKJ(u+4YJ4dLIL4*-iFjafdJ zDG<~UU!B*3N~#tNPH8elB4ypes9RhzOE_|VS2UorwlUV5koYa>sh6A%sMiy40VqN$ zDjuAdbZ*~@_RK}^+Gn!uY(m#q&b7$fW3?9WcfTU=dZ#I5_TF{HT)TJvq6Zjm<0FcE zEFD!mF#*Fk9&5dQ134bfOE+%Z=3Wa?l_O-(gbgwls>ZI zI8)b~=Q~wzPaHi-1ZEPRe1N4N$H-T=Ue2H)XEYToeK8n5Wz4{7=L=0qMxuQqdhY&U{UJcczYQ2#q>Vdet#nNaG(yA4hD%DRS4}fJQ0tjIKh_ zq_GH{54y@ZsM9Fgt)n?D&Dqt()zm4wDarkpbL=8!YNqq`1xqd9bYGHv&x+q2&wVOcv@bF?Fvy&_^--pL`SOQKk;Km-_ zG%Q#I&9geuc;<47G(j3yq(geS2)iRbZFmN7A#_w%yT?N%vZq(7W8?f1;Vx)Ieu=@u z(S!_;LM@m3t)+bfPT;pdcRoCO>iA4m*6$+RqKP5zSv=D_sIN6? zl5nZGK8$VoraPx-|A8JnDgnKaGVdUk=*g=4H_kdF%irpDc057G2NPQoS@#w#u2z`+ zCJ{#bt?%Qb)S8-fN7#nP@-){|P=sLwOsJ@|Qu<6sWpo_aB~3ct_%ufWvyil1MGJpo zTim#``0aOxdN$>Xf10ApK2N&CTGX+iL?;s;Wk-p0ItsS6A*6XG!F|?X=BwYqTcHlC zCT^C1+}z0{)HD>J*IaYQ9ChCp z#i5(|bvd%DGh(V{@2=v-rb&yQfdMn}t9C_>5oy3V=K4$HvYoXVW_q&*2CiDo5N-NP z#Dl>-M@BPTMV*-UI=k-CX;uHNj5#xvov4_DSxp7F-Kd3nPbGlj?`3(P6O%-evj8R` z_?WcwdQmcAn9N3M0M7Fw$b?LpoGf3+gcmxs*2qDyb?RT)8W=FHBN(Y!gj7nBHZNA> z_IteejxWB*G#c}-nmJnR_ta(Sj$=$@OrE|SycHXd5WT<5_=9dP@Q;{@4zALFC^3>K z3#;XTpDS1dcvWSIi5`cO7gca_2T^kq>%%r(wyF|ozow+k&fTs`F+b-iS1;F4)LMll zkoIQZR$|Yw<|Y9$yu2SU?Jn*=8dbXq!5~V1`o#n^? zsFB4tVJA^8Nlm4pV4T!{rMU(~x0Q_bm6Aef{_Wm@3hyev2Z~CM) zBc;P#&PQBK1r=n({E&cU<$Ch8Y+JH#`}DYbn154PuE|_vJxpxdgsDLX!%~()zVnOu zVR%YxkERl)bM3che=Z=f-HkPHE*gIUJgi-Hfw03uHldC8ywU=&s@0FJ)cyT4U?B-%Id2FAG_nj`)a|fS00mq6Q0UMO9Dc;O-&0=78(fi{JPZ2s` z9DZ8AAg;;l5&8%(h%(frM)jNdRed@{W!VGTd~v(!X(BttUSbPILz`RbEaLk+kS*Ou zr)MaHCl|2i*U$)k)Uf2pofo#@;BG`qgF)JR5jZ$s5ZOqDFuhhTYptDc*<6K`*Cb_V zwH6=wSPHYl!Y~d8zTOxj>O-;S&6_TxpXb=SU*y;D^QuGKIx%}?W{=6&Vn74!9(5kF9G2=OkXLmnwC#t*_t2uEr2_qxl82l{(!4wB=t z3!ivRi9G}Q&5(CQN)&xS>f2o`H`y{ocm6g4vzu;ULFW^xp7{JCRJA;a73_7)1r5rO z@%w-j&597i2=5K667!WuaVTs z^1p5?XrNwRfCwm=6+i~$V&?omYIv1~<$pPUKCbkcenF^+lbzMl%2+D*-ppc2r4PX3 z0J91 zD>864D!hdX<+KZdLiU9i_ZWCE1HrPafL<+6-u0pOweD}@v}Mlx#d@*ia5jVl4|V1! ztLVDvL6iH|c}7gJWT&j^+X{Sb>tBilW2Ibjru=G4hKdxvUjYeA zpHJs|MX6-h;z)Z-c2Y}P4D^S)OM#d#Uikyg9H`Qd(M0q8se9Yg$5%K_i@284to>_0 za3}e@7FdnTctD3LDF4@$pKWTFI`OND2@EA25#72Dnp6;wbHxFyapF*JD!aJ$*Tk+ewDhg8*E@AFB)X5&)Cr#^Q_#Sveu1T`1q(%(&6yV+{1f1IXoNJzJ z%3I+or2(fzvw;+8!%S&Xa9s3(L>fFB|CuPUZ8Od4CTzZSnyHZ`YTQ$;NbRQ{(aGNJ z{W8P8-qBJ)D`6DADYjs#8foH8gcaHJS>tU5S!no$-c!Wpo%^w?I^`J=smiEB|Mul(AoQ zooL%4>si0%-+&C7X=$6ezqSG|7Vbo5=1z!BeYmqa`6Zre8`&g9ekr22qPV! zGEnG_kGpA^76{OuH;Z><@9a=P=7gZ#TA1Mmx_ZClo0=+;Y0?V@)u`=`p12fOtqD*= zBGjlfv~^oHmICXjmx$B)!VyT(zd96ZeVQ?LVZ-~8L=2;ZjSrsKZQL~!d&J{)$h;C+ zSJZ_n>G1a0gxx4m=UWBs^3NRDKmBYD9@Y;?-?z!#@@YMOts^WCOCHVOw=a$T(K$S0 z<2DFjpsUX&T3tbv=l&dL`s*9VL4aQ>Pj&`hUCqmU-~;^2Gs|~mU?qI1we#z&Z%jvb z{Fyyh7l26C1TR!_a7Nv*Qwd;9ph=>qmuwazz6vjXTWPng+S8_hq4rO3ay~ZFxJh`^ zd!BkVGATzePq4qr)r5{}EGoYk!7piPd$@(v?XQD609RkY`l`LhYu7AzvG|U&mi?!X z*Ld7|M4SPO8)rP#Ir)_h0Cd z3*Kd&SLtaH8a9!I6E-X{#%nOaM{0EDIsLtC;vKA{;K2v>)K7RU-odY-Fo!=vJI~a7#B~am`qNK7mkNYKz&LYG`YsO)I_zTJG_T8#i!H4}9Hl;il)+Eb=`US4gvUaQxb(c!_GJ1%V}2Ys zAmq235)$Z-%c^%Cc5(5R#P87eQuHgHugQn;46rZKX~})ICi&RWW!JH6?GCuG0ywddQDN|8Ls+?;&UtG9}amxFB! zavk65SdzF~8Mz%QNRiCUSoLO0+7{4cB0nVK^yo|qz1uN&r3s81%7Eddt6a2-ULp1Y z-=*Ko`hagM_(#w=>UGgCRC-;SE1T2JWR-yc6ZOi*s1W}dBRNJ$*}RO zZvy$3vV1E*;5SPvaE6ByqURKhoo@2q z7XGZYWn{ecJ||_7a{>bj;?MM;NA7bkHo6Wl)fjTW{i0wdW|1R=6?x~d$n@cU5agn~$mvpW&Cu-U3SmlxRpnM+X{Qy*&Y zs-No@i>X-atQ62{E*a1Tdvf{rgMM~{@M)L0JL#theS#3mc<{naz1eV>a*VXlz>|p9 zC?^I>+w7R|3*A{Y2(B$fz^-(yp^Yoqq8T7C;F(imM;{0YUkD{*=FRj;J_fcbIJ#I99cy!Uba5br9I0jaR$pp(!zC5xsx>GP)EQ z$XZg!qYcrNbl=Oj1=018_mn8l>R=xwd4Jacrj|Rg2zkF#vrcK+<0kVQm%4Q@p&<`t z7q7f#@ptwdmt4mRm{ROYT4hz#h=f3I05e*KMkx?7>WP6o?m8-jj*--h1C)}sAi#iZ zFZ)+GRt*X{&5w9H*)J)U`cyGcVGS*8<$jJ zV18H!F|tUA;99l)lLE)Y?wY~$Lc+>2n&c4UE41`Np16(m2X&{ZN#%`PSUtz@pQyBY z<(6`ZK-8MFhjmTKSX|!x-d3ugnq?0Ioa{i03%oZImXY-h1H&QIdb>2(EOg4FEUkBr zX5B~$m+8lF&9|n4<(e<2Dz96wrF4!H3~OkO_C_1WpwQEw#Yp~x8^|I?r(rr4f)RXg zD!g+LUKLgJn}?~#S`Qu6TCOXfO!ylq-joOE6Mi3UGg={1_L)K7jwiBO3nQ<<5bS~4 zy~Yp=OPu?f7O;8G1&L8M5nFthO;fMWtoh4wM+cNbr*3u_DCOaauR-QaxI-|q-;XSwr{$li z`l3c&6yjZs6?<+db+7R*vRKjMG#im&;3q;qShRV8!x+Pxz641-+kMrY=j^|3_R7^4 zy7k#K!#@v3ozedz>l_<23%BOnwr$&*wr$(C?Wb+qwrv|TZM&y!TbYyOL-L*GNm@Gq1fN~mdP&N)lClTzv^CQ_$N&y)v!&?L>p?$yT7%hBE?=UeL9 zIiSmtf6eEGA3(pMvPOx==sR%27h^w_iR91K(j5pNT}I>gM+irjrX5+yRTy&ae+tOh zwdrYN$IhZ)lcefK|K1n5ZDiJI3ae5k@NGQ!h?R2bnoimRRQyhw(iMwD$@zBzQrA&Hi-168}L&V~Rih4MKn ziWI{`La7%8-t-c2^B{H#c74ube1lHedK?^Dxq>TAQz%sNS8OyX5A=>C#hflsU8q#s zLYTFipBF&~aI{_3+9V8cgwF^31pDlA^3kLq5CF5Oyj?6_-K1cS;g}xQ5Qcw+zsaS) z!F5qCu;e49C`8jJm7!l1C#*$JI!O{-Ezge592PKyRq7QXEuzJuy{WfL-(ooiPe1Ytw zDqknfT)^GaWtbY&Iwq#*Sx)EYebZId@4`gozD0NyUE9&_X5D3Pn{qdr6el* zwlbtC$sW}&rRA3qnM9>(u%Jx!+s~j_2w2O>B$9~?#IkJG!@Os{!Vo*O)v&egGi=>g z&DKHz4BLB#Jp~#ORvbgh5G|c=rRZ%m^F9WX9mq2vue~Y{4_w_Lw%3JiSM0?Z45@Zy zxqmP3fRH-r6wRV)WXn8$;mMcD1sb*cSQZddCT<|*G|`8#EXT}+U4+fGG5Mp_ ztL&ZX4l&T;OE+oFy45_eO&gU;%@1y+Bjn7P-wC#dUyUH6JlK8kI})?2H?mj~r!JZS z8>g2XH+F)o`T#lwQpOJrpTtV~^YwcSxbFcy77*+EA4J4D&wRns(eHalzpzfuVo^;e zKlj}Yxz)XGt=-c19}t757q#V34i4hFt*g;$e|S~YI^bKv&7qWvGu>?W#t4;62J&h! zDo{S9G|e=xb4Sb46}7;^x)|HrF$O zj1hm)k5R{ao7V~g7=E~etOfsoA=PS4>Fn_o~r{`fIvDv#o`7ubt#1)|9h?@x-8u0+Wp zV%~yDhrYv2-WTb~>+RY$TadeqpWIjc5Wk9JFFp*X!0;u7I**mn!uDsFPP+=3Kf6pp z*jXS)NyhTAks{^*sQDnra7+M*&xlf%pCZ;qpwM`($UMWoz(!-+cQ+PX-9eM!W^=RZ zbU0Op=Vv)E0#5&KsDu)$AyQ-G>8L$!Ge>wL5*=1IEaze`+g}AN(Xh;Tu_IWWDsA5VLjGLRKlI(5! zaUYL>+Cla;J>;rV#H!l_=3mH-cujQ5yvz5JWzRT&hox0pM2_Y!#c&TZ=ByX#tOxFJ zTAN@xZDN};lFtCQ7+{Mwm3eX6#518+zG!@QH1(!^njlk!&MmI8pN1$@eBI&^Z2P5q z1x2Y=gYq`A+sfpvF{Z|NcK@RLXxj9@ndGr8}4MEM_jNL`U(|~x_DzODc!~T7`Q`?T40tIT`B_1W9K86-s8<=nYWffKuhe1 z=5RV4Z~tM=CGJw(2vrq5##K^|YYJ=8s|h|K2^Nk!+a~Y zG*z4rXwwARR`zDB6`9X;te4*+1oPBy=D;BwXPp83eV0u+QrIXglntmqd}nOwo%6Cw zd1h_}=ZfrND-5+Po}p$nbQ4^F2llZer@7lgW*F*UVo{_p6>M#hCCT)_TVH5Tju=FS zmksnj zwxm$CnzXhk&?KwsJd`+F31GF`Q8siSuWMUjpTmPk1F;sj{HV2N^J6`nl%aIN_aL?( zhgYzxz6=7T|HXz15=?;QZqt&HOoq9Gn3ron$3cy4X5Oa`FnG3Eo_qN0wOT%LK02c(CjYDb5 z6>6Y#Ywx)2Pt;T{W@5|deqH(JI>7*MtaKeQ^s?T=S`IiSE)P_yH3Uc~HF~2JE{mqL zShbmIIJwn95JblIMhL7+1s20jKrL2_2M8e1Op;rK6jnOJo&7~ zkFbN8ORru|EngAqJ0JHI!2-{&U0ed1!k8b6+zO@CDn-`Qi!F2Pp%%Q1)gL=$hFO~8 zGcR=e^KS!WLOLTx@8*s`74=z4`F(Sh2lZ}%XXjEPIAdt}MXFw5megdIBUyiGpKQrkuFNjz^ zb_x?6rLeL>`ZMbEg;&R}6umEYSv8fU8hot6YR1V&IjHX7z%xmzkXq%<1l}{2Snr-k zMA>F73quW{Fa4>-S+h?6AqP}59vhqpSNNRR@{+BbBG@jCh%*?uTVqV+8N+;voh@0* zbx>em`_~Xw8!9%r8qWWnkCDTN<^^q7M++xn&fD*pQkkE%0!alY#Nx^=CyN1O{k&d#Xn!fByADN{ZkM~ zKQFr`!#O8&$-@?xSrmlIx+d1|n6sVq&P^I8sTapX7TuC1BVg&)7;xpz>ZxBA?nm-S zcVZ4$+a}W3=&^_=XG2v;5`B_0lRi~rD)k==FT&_y)t*u123;2j3=43Sfo5@OosDkS zhH}2nhLbdk4+W@~=@0CGR{k!<$b6qRNSuL5En=wak9-43Z7p}Y9*g>-=mV2HpXoXB%Xct$ZFqCWyOpo4Z?G4=vlgR6zm5DS=n$9o+-v|HOw zFqYo+C8>`_n{_z6OM&C-@NRr(b<;r8@CaaBAA{Mu?49QZ_J&-3&nute2@2pjpkz`b zWMa85ief(e^4jg+C}hMeJ)vOV47Qx>3|MmUYrqx8Wz)lxsCCcI`hqR@u-9U##M=f~ zU$3Es;J_@&baHbiL~wKR!pv0Y(jO+s+vu3H=zO{u6*(yU_Hi)#>0oXbM>oH5@3Y<0N0<Wvlz(uks0ttgZB1yUi-_z{dz}yj%!M#F}_MmB6|Fi`gq8ZZ&9;d+Ys< zkicx`8B+AJo3PiG!ws8cI+T1^Llro&rNDA;LPFlk#!2Ln?p}HT<&1ej~NF>zDlNDTUb)*TrakLkY-38yIoHBijeZ) z+?79t${ioGj=cmO@#i!!|C~`Gv+joTl?fy+p1Pw!um+TKRIkB2g7HFpmP_oLBgyM5OBpg4eLl_eICaFBLD;-nsHP)6aie}*Nf7Ze5VX+#mHOJ%7!I$@4I1>kzwN}p`^YcgZ za56{CFYx-Mcm3w;>*sNQcIZ%}n;h}~%5DE4Vz&R)g5&}Q=>2Cd^qZ~EIG&V@Y{Vaz zvUDKV-osF`R8nqLUJM`I8QI+E9_+R+=o08-?bc_4u0ThLX!YQq;c^*^55^+-j5JCc zAPepx;2q*cD1T)S}Ejx6ij?P6{h$+}dXYBzhz69+(=sZ0N!KXN02uMhH7-RaZ9#ub|Q)>?J zTv1DwAC9Tw+EpX5xRB!3QD~xGX+&6?$x{;W_5%UnIa6eMmKSEiHlC+Kag$G%+!$s?ju1lr{GAuiis?k>QZa8Sh1m=&@Lwu;a=Kh zs5K6-25PD$^n73!1HxLA)Zla^`U+)&!IH zDLZN6^abB&sRcS9P#3-;Mj=agCgC=U4Wc(-mW51X)um&4^s-$9AgoZ54(QY#w?$PG z&ZY}!vL{pqZ=rpix98WGHI>=RK@zzd4 z&|ecXZnxLdkT5Psl*z8|PD)_w;<{@7R}hNw!MI`dFa~E1ln;}tXWhJkCXboz`B;hCe0lNo3Jn`Kj(t!g*DUGz55K{ZEydi#tZPk)8l zyt;jA0ymEXk%ON8ZV`PlaKUJD?HW}GpirwaBlIT^TIdsG!YlB#F!F+Zw)5*`e_iY` zGPoXr1&InCV4Emp_*k=AqQ@+EyXcr^maq>A5&lnt=k`a><<=5DA*M7CHuwchd%B|zW3+Qi+|AI_WHGcbKub%!3fH$ zv>}OYNXDx&9xMUVUZ#``*E{WpJyU=Dxx@#U>uYX!s@KAg-kopjN>t(K9L^iq1}5pA zpg&6ov`izu3%$K-UaVb5w#(VxK5Bgh4kJXL~yuLG=P!M4pX^c7BS z5i->xtC8LwMST;s7^HT|Mli~8UIerc1Y4Uy>YcLzExIN;x#STcSQCbX8jPH|L1&>8 za7JcJ-_TLzggP)v$CkpgCxFEQ;ec@JS;p6z=?|na)Oz$m=3+!FDEZkW>xuQ-=ar0N z9c{e5!EVq^@#-RBcn(N_$^ZeSJ^{&T=w5@k z-SKrbVE(jv)bWJ(Z_3x__+b4X7s(ZYFqK?@(f*jyt!oD@O*CjnzLbnaN4=8tTB~){ zCAy9h>WmeuYk01vO`(sP2Xl1*tV-rH6B1t&U5qJiANL1$=*#H)d-oHdppnPBeNo2Q zMN}Y8PBu{s`G?hb91!+>>~MSpBCLCWUgyI&`FpN&Yg20GPgBJx>=5h*TZ;=CYd$w9 zqgZ8@ikDx@w6(5jSBu9M9aIWM3N0~^<|BFXdo{NZGNDJ}uYhDVj(}w{cRCuLc={Yt z%BySUzA$sAPIIM94~&(sBVF5N{`CI38NB9Xgy2PySG`!2QNXd^9O*~&I+0FbbNPb) z(}29`Y~;Ig(H|BU>F^!)v6I23=#4^d+2Cp>y7Jx4ihPRW8d)LWz@`V{L}RO04KJY| zi6%%63#~)Ox@Ld9mgdZ&=j&#TyUek&_c`+nn$X< z4=oJbHynngY67NAE8AMj{ic7=2rjFFA~28k#IkAMd-Hot$^+-N_I^`HHelZWdzAVA zAwJaf92S|-{BG(yHdGSQ=%g0e@J$xhuv9G(O^kg0(RxShc*)%(a^ce%%^}eN0`VZX zcc=qwAx>~wzuw`b_T+wVI{ppa^Wh(9o{)Lm-{Fng6CHRvHRB#aZPD}lC9}qpD}*G} zCHTOZS16a2jmuw>>7u$yJ{@5kG(59etRA@%zwUELzJ_)(Cp-w z@nl4bNIQ`WYP^kT+`l%1<6JZm&G0tB?NoCVW^yuISK-!mzc_Be;}gEQJjQ*hCWPDN zfJljtCK-)8#!h{qWv|Wi!K5+J)!v&48noLDX;VQkW`PMc%fTwB5k0B^@O3j3XqOOL zAitFF6`h8;c*7b~S!;0}9)UH#NYeKsR*OAsO`=O20#9n5^n@H|7Xga@D|w54ZIjyN z^cVY(W7I1tFIT_CZCjB#v8A6#zVo>*dIeY`DFp3_y5Cu>PgAfWYz~qG%S42v22_sZ zCIG(?$&C8?Fj&)$cvR^(;H5f5N4f3sNA;n8#C8A|=)IoYwhK{HEm|D8&NbVqkcuXg zs)Ls5W?UH|n9gUzgZ@q0F-nyk&6Q?yHZXT1N+xy?z)0 zTdvF@?HP2_VG~##px8cj_30~M=zHq{?pd!U@?kxTZHf_-))^ACrTu4JsEoOiYX5a} zw#C0YCV4Jf&Nzb7EL2WfQ?W=prMK^q20u669|)8Sq#vbSzzR|n7?5U=4l&VS z4b^0H`WG1d+_yk%%3LBbO0x5;fv}%v%GqR9tj!Dx2{y&kTmPEiyb)6*1i&ndiX}(H z=o8NrJ=|y@H)aH)gf(cI7slGf)g!0!IzQ08gE&pFGuRsrc!CI9$NGzv2ELpni@Mcv z_?-xq_GW0IsuC4_G`_S@QPo{2Z=b`&HM~Y8?20tQrU#;L^Vqm#P}<3r!mi|z{~Ss^${r-4t>#hf6?9+NG~0o157St(<~zPI6j z)-=;IxlI(lOh8GuI7{)TYg-2L>^7TLR*L33>x0L%_j8tT4fWY$MI}eI4~4HSzwB+M zU~0B3%ZR$Y1nA%~kH|BoCY8UX;tk7@Kzto6tn8b~d zTFw8B2lB#LV-rdW15g1G>Na8=vm!XiSAe4XF5V#4_hT42tAp8xj50X+#DUPLH!E{0 zZ6fXPH#R8;arZU;{Q+CajC!PKo)h75f7G}9reSr$pkE0H;v*g&OZug2Um|kwjG-y$ z(EQRbY(Iz0ShvkX_Y@hfMh{|yuS09q9%S&opN<8$k`1vY0|-@`@@@K2E{i+e>8ci{ zar!da2cY&q4d3qX4;yGqh}>U<2e;~ZD+cGZw_(J`)+F+R;-MGPXKgM`Y{SHDB+ScK z%%*7D2tl~~ZVeW%1}>8fIIm$q@W$s@CJK>-8NG^B)oDZJXVejrd{t(O?ayV$cb7E+ z+jZx-*tdoyCK(`G*f6ns)>rXyl@5DZGn0yL`U%p2vgzIq}X)h6PVfa7Wk~?cjTGIk% zn3kaiT3BqxOT?9JT%oOGcpYE>r6u1cyTL7jlVvr906xxX$`E(iNk6lNT0aioBplevv*Nif%`OKbuC^NyUw}2M@)gujGCP9ONPz>LO&Q+*)*D z8I#7ExCfThg{{+^*rnl0Ud*=s4{r=j8UzFeagi=UA{*_@qUy?*ufvD3Njb0ou&qbf zo$R zh4V@d9NA?yXLHHQNuBdd)hVaA!&hu znbVD|AyEmEqW4+u|ZR|bmWA}_;dB;{W(o7dj06&W64q0A#CW|kc6$U;sDYa~Y9JgW-8 z*^sV!tz1Z{>ZK7A&rW3L*8KXOK90GKU14#txDbFmSgrwPhOsI&O?w|lg(;%G*D5a# z?nqW8AiI)H%Pd~-nJS%oy~t`ty$V;B9U>4X@H$ynZA3w0+ z`PZSaEDBL|e64aXpGE~#>P%TxbC|X*yUUyFwV5b?Z}$-7i7lRvCd)VszIp<9>Yad1 z>2Nk?w3$OZTWYZvPX7fQ?5WOi?UU%)KYps2nkrM+LT-atR_B&|dep`i2N zzLlE8+fulUco_+2q%x2#Q&yi*IGEX2gTYM-imFN#o2Etz3GLH<;(!WS3nC0(%`1S0 zsFlYkb*#nLp1(F3xJFB`Uj-b@3b6Vh=N6dyojgW_Y(rF@AGS z^&@2scZgo~4mELCpeSa#|EXpegqIG30Yujq1um^}afUnCp$6a!Gcp6-6dke?%bK3p zXNy7J-t}iF-OTygrRn)~c5vZymB7@IlGuVqPrsB}?XVGtN%8erfxqKf7%RUil`3!E zU4B*O(BfBbRqGFr<8}y0rb$H4oWpMlKCEzJO(~Gpz?lvPGThKFfFAN0#dx^Pu?_tZ z5y8g{GIlP0$x$EIg>PzPD4}&p@mN@auxC3qyfBd>iEesw+*)&j_NbUz!uuuZNdDMI z!)|e+C>49j7O7cyh)_1g1odtoaLt`69StkWC&6T^K%VfzQrQE@ZR(Q)uYTd*Tf=pR z!}19VmXYN<%eHsja>5Wei@V|X#dSFZ3k0WU87hl|A((I^v0T!eUH(&HuEKLB!EwWH zD11V5u^6M*=8DBjkF}KQ*HrQlMaC>!YI$5M1+jTLiJ5F=~LAD+~ z?&y2{k`Yr<-{J=#Rf>05Vv<~Hy_+EZVh3jTBFq=D7ZR+m5Fe|++Z$TW5;tiad>yYF z5y?v(cQ=$f&i*}Iv!33kFY4yeW8UGRF9(-VuB9Oz+Crs;pg-*ORYuyR56?|=@Et28 z19*o8?xJKT)fikAYZl1koWCvAU`k8DWcaeFe4cwdx}XJwY)YnXg3WpnDehn@(kf)& zSaj>ir#pFa8O-_e*S-*Wa=nosVt<{Nl;+b+`C2ol5&zXG;Q+hh?F`6lfqWn)A+R#9UI^x8lNT?Au|Tj zH2q8xiq7V9(d%p07>3p_eY4L+UkFxi4(Mzd6`~mcBW(rhy##_aU=JSqJheF&vnXL4 zA(p06r&HckQ?o@q>GwOftBO|>3rRF@7FWM0gVyavx#-!)r}2$H4FNR<&%fq^(0YpI zrrXbf{8lNHhX79=N(hFX2@f7DZ@*{btVz&Yi}cxBVnUmVPj#=;_}sYX30xOwp;0|1 zJf$ZmWj1sPvTVPAM(1pvUj;rsld#2K1EOZeD*a-YxPLfFQgFp z(QUh=gy@c=4cKG+82>t722=`Hx_=5>NCoQJnif+tk3(cGxTR%YR!A~GkpmjCCDHUx%FoWK^SxSP53j81&O=TO=(kf61|^rk+PdOtzRc$B!)wSZdy_(+z4 zW}_gG-wl!k*##f4e=M3lGzRb`E{N6bt=w~a2wC;0Z9*Wgccqc>ZxZn;Xs9D17pfFV zlzyDH9lQ8VWBfoa0@`Z$+cQW(7H>FO-+Q&fh@-Wl`I?Ht+bLEtQ(dz2x8|AB|5+BV zdKVs>j}U$iYXckiNQN{MUapG_o#W%eLvm_;#3~C!AD4;Dg_F=>2lxJiEHtE# z`ZsGv>YOdbZlUzS&`&nH6NFTbVCTfa6n&oVAy*FVE3cP^f@SD4|K}-zd>X9eiK0hK zFP+SWO8X8;U{_`yGx30?`JLRCopTf5H?dr>UCN(>B-`?nHK$03OB|t!JPz9};M|3P z8ZD7#bLApW*zR8*^|C`S3c=&XkCLgPTG%HuN6H66J!h3K0^A_>1*F*mLD4NZexeT@ z&U*>b*)=)Ci%|Z|(iUJy*t!$qb{&`bD^I*}V-Ron*dWCtp_~-Q<%7@X9LDy5wW}Xg z$H@+?$7)SyXnfp|SODxSpFvSg)FQa3=y0Qjh5^HQb38$rAkG8Yc8GS51w5r;Z3kp* zZbA6~A*ACPbZnA3EpbEWG9RZn*iC&>#RPA7If{ouv5Lbi2r@pvGP8&SCvx+OS?(xl z6BD#HlenrF%wjZi?*|W4wt5io9U~YIgDUOy%=wf!cN;Ed)sbX~-fPIZR_w~!<=JQ) z#Gb(k;c{*xW99&!JZ=~x&}W~3_r+b6jnE5wVP`acm4&3pmhtEhhMz2IqOTC7X#>Hb zKES+w;v_4nG1u^=ww!C|r-0+Mjj*EXEK_BC)qB%n8?W>fUM<6^Lf;3VJIosMm*7_8 z(P+hEukaE%FXbCxQ>M@Cb$(V8>$Pa1dUHrhA5z z-#?ax*>|DOWbR2<li#**)KDn22!~p48SoL zsx2a26LZJ(f;EMl#P0>bYwYo=%cj?@dt4aWbd3s8B&I4P#1p>5r>cL7BfGgTy;tGUGPMU50V0J>I z3MY|Xv-dpt_;8nFB{45{kSfy~Ma6rdS>KUU2R7?DcxLm2%Q#;^V=8AzIToxJRYu5{ z!LL3Q%IPmLLv^#eBC0dta@XrO8*!xY^eu=?GG(vQo_flB${!F~;6kMT{;xB0r1$zm z9uocct$(PxoJ%n$QtyYxBePFK`XB%j6F|0O&`RlL|c$AA8za_t$1sdFdAbTa%oRw$9nUwKG7K(oWjGRQ+oL_I_PSv>{#E zkPv1hyN14PzTH57vpbDdPaW$+6UsC7`4YD}rj5h}y0C2vLE28D-H#Ct?9Y|D`XL_noJ1jUm0xwG*Zw*2Y#+D)T!OA+@&aYMUJ z25L~(FAMPci%kONCojF<=6+a=6jnYmC$WiCy0yKICnQ)|M!yWStFWIX4uDwsbHN&(?_ zNTDWk(YIhuv)?u7&jK*PR0YC*KSQ5M6%Y}?pAL$qXh?!Tbs@xPoB-&3u|fk0+sZ6J-TIXzw;u5*JH(rF>;-O8K-5 za6V37l~27+CGyvuPp>2~ag6?`%j)n)rQHcXW)t6y;A#{yj=Nuwcqy9i1t)5=6R$e&yrL77c7Y^ zgWS`pXY&m2oBP1*4Ayg805|i)PnKu#3}hLZemDSJWvpy)iyYzP&bBk>0Ds9ZYMU0L z8QX-`8{Fp54*q(J9$dq7`)+(vg!_&A4fA^!@mG68FeE83fNGj>Lnqrl$S|=@Do2Nr zO>EqjT$#Aiblad`#QKsuDV0VLNM`uWll8_aPXZ3*)1*Pxs0~OdHqU6Z?BSI?S3yOx z44UrVwhM-k(Y^_eAGZV7Pdok=HjnSSS;5gM6?EFLcl01yEY4y@tVPn0ek{F*PAEf| z`;{N#4$>h9;JPc|tNDYar%RsDEai zt^8XUH=S}DW7lvWjs|79N`Y>osqud;ipSsVtbB`#o>_E)x)TJ8PKLj))r%p7(M zqgTI7^)=Rizm%H|uMJpX_fML2|6k$MsT<_dX0<;_ZB-voMag@-FR`GN`M74?bF)z8 zZJ~gDfNzI3Osg6nk@-5ZPhpK^N_<3U;a^7GR0|4g_tWaf`mt|c#K@R?&FL!kv`s$S zc?*+nku0TI0{v7>9x|*pIE#Lc7wq{%Qu%I|0@rA29O1&8y|tKYPNMY#7sh;RwxOHXd z6Vi$*1~YQE{1Moo)UIcYhJ6#6p|@%V(BzzU8Y(bb?+&;p7pXvnXxzB=qBnjfKI_s{ zfR0tExM{+-oX3&|+j+bY3aD!;+^W!AlD>|H1Tk`1)g6hT7vMyFf@j?`+Bqs@MO0Nn zcojP@$J>>vNZ9(W+7AG{oPXbk1|9EpPDV!reA3@lWOB zFmkB^Q3M$j$eK)2mxl`pT#E9DHz&a`fRBh55=p-F$XAKZYX4j0pUzcsCS`&*KkFk%Q z-Arxb^#Q|h@Eq}vw&fBl=R9}}lmB#T|0s}ijgZ;C907?13;=FCgmg^j$dpxrMoS)m z#L@{cx1CHpGIj3%ZX?HzfP+(Q6f7s?_UqDd00jZ|hmN5Rfi^wbgQqY>%LZ8S79que zNS4i8E)eYeDS{#(`^5X~#@U13An;#8xF!J27_yFDne6zbbp(MlK+_#N=%408jny-A z+>k>r*w`LM3rGX#eBppGkp(t($@K*g{sa-^3)SZ{yio*(w#$bu4T$|oxh@r)Kz1ir z5mqqN2nv%}V?Por&hRip!AH(6`+kha2iUC;N=M}auBoykWobrP;MKHO36Fe~m%FN$4kYaSjx?nsoG>l!B z->UE`QhZOiRxUQwbd3<^YtH3u>qp#vb*5J(0ce<%)?EP;bpH-LNO6U8sLw z)@8$h=3(!2WNpl9e`4H=c!E;|nz^f^*@nmR0z$JJ!W%ufN6GkNdZ*%#rfpVBDd<;? z99f^~x74-xXE6;DLmms%nPypJ{`jekD$j;J+g^_9n`*ZW-;`|bhdtI|Z9uJhiWz$g z0k%p!jd+HsIwxn&?z|H~ym40p2HY`V;d3YvzM0{w+r;^TitH zK2gF%iVMjJ;COqSbI+_5(`$@z;5s&q8cRv4g3QCYq9aU8VE3L4Ij#f4WcRQgU6FfN zw)Y$)qICrR=riGAlD*AY&FCD^+n)0J1polM00ZV0*JzwVv*9Qo%0-02Xdb>6*A|@P zEjT0m3vYG`%AF*{Y0eSD;u#NMXegY~V$+#p>2d3l;aXBxxQ;6>)VK6fy^cDS;%1RM zQ9t|rX(CI9OLQ*W9WyYs^dBW9Yt-RUG}z=@a*g@?t&DL8u1;3=iRZh=p$$Lw^&Z%A z=H}6~O#v_6|(@k=X)e6pvNx>BE z73Chtz-6$aSY$#l)7!PeVh2rJmBi$ocJgN%M(?upij7MVm= z^R0xytax&Wx&uqNjar-={xxz39VwrOb;Y5bqn6#ppE?t4XH=@pjTM#s+=IjR#kQd2 zVqe{)fg`@Z>^`x@Im=YU+H{ikwsvQdemPH!wK-fHa+qeF)PX#qjpP$&fLiJ2xA$P| zZ818MFO>X-y+v1GX&)QyRqEKx{C149;DFqcttGjM?4S4ivvs{pVwN+SGfwy5oOKk5 zl-Z4}kJ2~dlIN)JpXPXWJqT5a?w!=NygARRq4tR72UM}rAm9Eg0g?z9m@8d95t0O; z+{EDTVojlBOB*>X%er`GYKW4Aln4YGpq^TP!yq`7g412gYZB|o)y?Vi47AHb40p#E zVg*(V{f`9B^LuD-D^~nO2yEC8D*25wWB$;PnP50IC_Yz13ev*yWZ-mPQ&twML+t zrJf}ZL7RGFE#ZZ}h1GU^Jmi2k)I)5A7juTTTAU60`gL#LsoB>VF#9iAXNX<{)--Ys zN>mUg5JdF)!1;~zo_HX9R(@+^%&_;{4=AafS$EuH`W3={*TAnYa{uaxQnOECPYsXJ zsPQvJcV}xv<4+u`@R;EK+++d32guj@^Ae8#Fb8`lSXx`1mE=})lV$O5;6*b~c<>YA zgxXZYm?mG;GaONluRa1zF{F5TF#WuMrx%NYzz-{tx~y>5{@Dup4MSf~S1jm9Iv=nf zL4tHkYTr3-YcWomb}3$bJF5FZ!6prS7F@i~cxv-m&QfEC20B{mO-d5LlPuDU0v<*| zo$8ZsbT|~}_l~AM*li&~+(C=}9?_OdN-3&JVap;Xy8Gd#nk29AKKE(knPRai$d}V0 z&oPIo&SA-=JId1h8X)U(Kn|;pP;@F*!)z0`A-egRhdb5*WolChI+nfgamRs6z;(x| zG#7;YZ%>5WUOz8OVqKw8yP`Lu`Im_Zv> zO~+6Z`S^50oTMAs%E7teR-ZAWE2Is{jdrd0OFBHo1dd~8GY1Qx%|$r{Nj|q>-izf! zCRnekm-x~io1jZj%y$;tKM=6#N>tJybllCoh^VhNPS&L=DV7njk5RP{dVg|3jBH37 z+a7C^Ns$OZyooWT^e2*07%iT*rM$<3N>y@+Kd2wF(sTB zO@iuEeFCj%hK&}$IRy-<9-wnutuC`z7;nZ~J82A_q%xneLr4=3g^+2MS>Tg+bVa0E zog#&K_LFAKGu7LZXHtbsG+bw&3Z4(o({pflTFN3m=TnhvXP_k4G}5 zL+@e0qq5j%PB4G?s4f4m!ma}-imY3MLEICf->41QsWE4dtIEa#i2ofbq z6BGnQK*3Q!GAbw_SqX|55Ok3sS%Q)TMo>Um0o~WU|NZ;^?S55nYO1E{>wE7x_dDM? zx8`=w+!D>ZiKl>ssPEr7vrWuL2Wzn+_ z)CF1&>CRnOwMyOo>!|y-3nnX`4FZnov3?BCU*E?_w9jwn56PeDelF3~3~iSMHhALfr(se*|~v>E*pPlz)y)iRd!N zP_9<~n{;EwR{bmPZB#XhkKt0v1JU8CMy%zl4QOZH$$*z1y%s78Ju8m%HJD;Qo5-;bw*BR8i{+HYHlyfhM3@|%xU>l9s@~Q*x+La54N4=>i zMSRRtN}SU9_0l5jjo2!m<&)Bt`_7}Me?~aL>t&@a9uflk?PP8-IX*2_Nf6u%aPz8Nu_nB)m?x^Gz-`Xn2cYVa!b`Hml_7fyZ-tFe7ESLBgVSYD#5*s`UEE!y$r zpOdqq+V%Np;+*)Xcba2!n{!ou-#ZcWOKyE{t5sv~eY0(jms303FS0E7MEjG5<_>eK zg!M?~x=UUcUM&b31||qCv90;Hh6G- z>K#64UF;dkW}joWearDPX{Etj{skt58tm0%-4jhl)lF{WSr;Wq{6{y(3Ep_QC094P z^N2%rab!AJ!ts#p7P4E?Q{7cXuM*An)0Zmk4ZdT~5M$*W27APPUP*QG?y~G0>9L-P zMWklmNi-%;?QH(4Ve;A}K#(lw7_1q;DXk;(SmB}ESNg}UXdI{yr`tZ>K@U6C`~9oZ zBjLs?(=KaIxTBTM1C|K~=Kw&BpW-@q)Q=;Ex?+VwJGn0xr-`1;1hPcG~%7*Nl2v~BW{lV0#oSAK6iw))uUprCL*vz;oSdu3YpL{3AH z%3_Kj_vhtm5s8?WtYgxLIc#JK)ze>PnF-wW5iIy&-N-SZZ5NU}@b)Qh;t>OniVzle z3oyU^>R$#IN7%_aIfk9;aVxH_>!{ME_!WK5w~L9qcfJU`KV92?x4mdoI#AYmPy4rF zxSicEe6Lwl?q1H3^>jhi^eE~rf4yBV_GF9&jjui{d5P}!Hp;1nZg;*( zlD$1tHjf;)KR1+M|4=1f`nWS9eXO^3{%-NAX87jOa@yyIq88Ibb^?OeD3=dRQsgLc z9Q&f+fMlb1Hof?4xdw(%pzgI`!}z?tQAh5cjkZ`w^$i{53R7&fS%6Mg33Jz?IU75_ z|Ht#<0Y_WChRE1`Af>5~n>tn1P8}NV;()u90qCfK(Y!-FsND4S zb;gaBm8llxe38*hmWZgyhhgPJ^UU?|uwY23Tk6CSGu1CF?3bS74y%1#!z`YX${yxla9-nx2t-)+sCrzl2ZN+vg+)*6QRYr<|WA9ydl>w;)b6 z^08+JE%^qEE$fzQtQ;A`hFjZ==MydDUz9kVh%cb+^Azn$lO4@zRS9uRL#13MmxNUd zXASrL#>|b=4at%(2~*yx{#{piIN0SJN@^)l4_c9GDiE0*=zo>mc!s=sj4HXt7?>CC zX^Fe&jddFE$u??;4UO4IgwruaxV-`R-hO(aFaWq$H+y z@9_wc7`b0}a!%}e`b2n4gLim`%Z2*9KEZBAjTMLY0tY(wr&Ps|{5h=vw{LTlGwJW6F=Ah>KOh*81+OKBd%PV(I=}m=%bP4%(m8uull9BubluAe{?6!7=}(1%>b!9sp_Z4F z#>>qbP|3dQk3_2?XKp;d$xCgN>kaLul#$+V&sv(u%4CW^>3On`GVJ!uv8-uMh+}G& z1dkX#l90Bx=^hsvlZ7V=Dxycr&2D*CWc4fe1|L_sZ)Y{>_VSQ^N9!c zs-oJ80v^^T4mzD&n|qr_O$00Ro%KB1GyxKM<3;i!@ojtpbTR@$c#J}(kck+b#*}Qp zh5!kdC^UqK!Bhf9rP7%`*brFKZW#X$FDNt$g^1A!-eQ)B-U0y8TL7jJ#-mgJ$Mr4$ zJADcrM3};j*tCf5A~b?eR0@@d(Wo@0{l*YI3SlM)Oo#a^1CF5rTK>$Hp5HqrNBcd=w$CCyj2zG}2KYfSER6^py z6a>bL1;(O^4-8DhM2H`c22n6Iq5sHL7=U2B?=YQA!$%9IBQ%0xkOC46LsUZffFa;N zf`I<3RKYMzkQ0oM30@;)Dixmt2v+Ivia;m;K_v(UBoo@9REUhH2B9KE3?NhSl0dMa z5->Uy#kp*onR5|K|Viq{5^P;HgF+8i7^>D=7r05i%ik2v+5A;iO~n{&zNS z*xkJme+;Biafv}EQz#&nS>B8lE*#_7B^thbVi*7r+tCp!ll>_sbDX5WZGm7>r*$F$|&O@)Ao93SKN5 z34`NjKgKbQhEHk?qmv1w(Lj8_v33whXR18oQ9nU-Mw~$!f~`IP4R(P6#NH8toSgye p?SfEU5G{@Ww}q{i7N4KLy{~_eud@puoeWUOR6ZFQy+itZ{{>*>R}laJ delta 38297 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�fE+EE%JML)VIV=7WsJDq@tTKUr2Zs=V^ks$90UKZdbq7$VaL}$o~sBU zGjR+?2{FbogzO-`^(BEZJ`N-13=H7D5LCr6kb*FXUQ;1rR^tO<3L)+|hSyBexil(y z97-dR1DE;#H|+FZ*$)HYuZr}qG`KP#l~`zS3?gPaj=>;wlfRlx-og&Ewt;P65Jas3 z+A%wuW6&|smWJmo07F)`7_eve{~ckzXAh@`r>x4W$!Cq6k!qi{+|sq5|I{0}QQ B_1pje diff --git a/src/mod/endpoints/mod_khomp/include/khomp_pvt_kxe1.h b/src/mod/endpoints/mod_khomp/include/khomp_pvt_kxe1.h index 85b1af0e17..722bd80737 100644 --- a/src/mod/endpoints/mod_khomp/include/khomp_pvt_kxe1.h +++ b/src/mod/endpoints/mod_khomp/include/khomp_pvt_kxe1.h @@ -995,6 +995,7 @@ struct KhompPvtFXS: public KhompPvt std::string _language; std::string _accountcode; std::string _mailbox; + std::string _flash; static Opt::OrigToNseqMapType generateNseqMap(); static void dialTimer(KhompPvt * pvt); diff --git a/src/mod/endpoints/mod_khomp/include/opt.h b/src/mod/endpoints/mod_khomp/include/opt.h index 0f93215a2b..3458f9e9de 100644 --- a/src/mod/endpoints/mod_khomp/include/opt.h +++ b/src/mod/endpoints/mod_khomp/include/opt.h @@ -155,6 +155,7 @@ public: static unsigned int _transferdigittimeout; + static std::string _flash; static std::string _blindxfer; static std::string _atxfer; diff --git a/src/mod/endpoints/mod_khomp/include/revision.h b/src/mod/endpoints/mod_khomp/include/revision.h index bbb7f6b61b..fe9ef9eb47 100644 --- a/src/mod/endpoints/mod_khomp/include/revision.h +++ b/src/mod/endpoints/mod_khomp/include/revision.h @@ -1 +1 @@ -#define MOD_KHOMP_VERSION "1.0 - (rev: 5823)" +#define MOD_KHOMP_VERSION "1.0 - (rev: 5841)" diff --git a/src/mod/endpoints/mod_khomp/src/khomp_pvt_kxe1.cpp b/src/mod/endpoints/mod_khomp/src/khomp_pvt_kxe1.cpp index b5acfd18e6..c0eb1a3403 100644 --- a/src/mod/endpoints/mod_khomp/src/khomp_pvt_kxe1.cpp +++ b/src/mod/endpoints/mod_khomp/src/khomp_pvt_kxe1.cpp @@ -2055,6 +2055,7 @@ void BoardE1::KhompPvtFXS::loadOptions() _language = Opt::_global_language; _accountcode = Opt::_accountcode; _mailbox.clear(); + _flash = Opt::_flash; Opt::BranchToOptMapType::iterator it3 = Opt::_branch_options.find(_fxs_orig_addr); @@ -2181,6 +2182,10 @@ bool BoardE1::KhompPvtFXS::parseBranchOptions(std::string options_str) { _mailbox = opt_value; } + else if (opt_name == "flash-to-digits") + { + _flash = opt_value; + } else { DBG(FUNC, PVT_FMT(_target, "[fxs-options] invalid option on branch %s: \"%s\".") % _fxs_orig_addr.c_str() % opt_name.c_str()); @@ -3001,12 +3006,23 @@ bool BoardE1::KhompPvtFXS::onDtmfSendFinish(K3L_EVENT *e) bool BoardE1::KhompPvtFXS::onFlashDetected(K3L_EVENT *e) { - DBG(FUNC, PVT_FMT(_target, "(FXS) c")); + DBG(FUNC, PVT_FMT(_target, "(FXS) c (%s)") % _flash); try { ScopedPvtLock lock(this); + for(std::string::const_iterator it = _flash.begin(); it != _flash.end(); it++) + { + signalDTMF(*it); + } + + DBG(FUNC, PVT_FMT(_target, "(FXS) r")); + + return true; + +/******************************************************************************/ + //Old implementation, not used if(callFXS()->_flags.check(Kflags::FXS_FLASH_TRANSFER)) { DBG(FUNC, PVT_FMT(_target, "(FXS) transfer canceled")); @@ -3043,6 +3059,7 @@ bool BoardE1::KhompPvtFXS::onFlashDetected(K3L_EVENT *e) DBG(FUNC, PVT_FMT(target(), "(FXS) r (unable to start transfer)")); return false; } +/******************************************************************************/ } catch (ScopedLockFailed & err) diff --git a/src/mod/endpoints/mod_khomp/src/opt.cpp b/src/mod/endpoints/mod_khomp/src/opt.cpp index 946f508528..8a08023b37 100644 --- a/src/mod/endpoints/mod_khomp/src/opt.cpp +++ b/src/mod/endpoints/mod_khomp/src/opt.cpp @@ -79,6 +79,7 @@ unsigned int Opt::_fxs_digit_timeout; unsigned int Opt::_transferdigittimeout; +std::string Opt::_flash; std::string Opt::_atxfer; std::string Opt::_blindxfer; @@ -154,7 +155,9 @@ void Opt::initialize(void) Globals::options.add(ConfigOption("transferdigittimeout", _transferdigittimeout, 3000u, 0u, 90000u)); - Globals::options.add(ConfigOption("atxfer", _atxfer, "")); + Globals::options.add(ConfigOption("flash-to-digits", _flash, "*1")); + + Globals::options.add(ConfigOption("atxfer", _atxfer, "")); Globals::options.add(ConfigOption("blindxfer", _blindxfer, "")); Globals::options.add(ConfigOption("delay-ringback-co", _ringback_co_delay, 1500u, 0u, 999000u)); diff --git a/src/mod/endpoints/mod_khomp/src/utils.cpp b/src/mod/endpoints/mod_khomp/src/utils.cpp index a0e6856322..cc6eaef082 100644 --- a/src/mod/endpoints/mod_khomp/src/utils.cpp +++ b/src/mod/endpoints/mod_khomp/src/utils.cpp @@ -249,6 +249,12 @@ bool MatchExtension::canMatch(std::string & context, std::string & exten, if(finished != std::string::npos) { + if(exten.size() <= 1) + { + DBG(FUNC, FMT("exten=%s size=%d") % exten % exten.size()); + return true; + } + exten.erase(finished); DBG(FUNC, FMT("match exact!!! exten=%s") % exten); return false; From d205755ae082f9dcf854d836b31d5cd0e5f87e86 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 4 Nov 2010 14:38:43 -0500 Subject: [PATCH 191/230] typo --- src/mod/endpoints/mod_sofia/sofia.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index c29c35185f..7cb4c5b528 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -2093,10 +2093,10 @@ static void parse_gateways(sofia_profile_t *profile, switch_xml_t gateways_tag) gateway->reg_timeout_seconds = atoi(timeout_seconds); - if (gateway->retry_seconds < 5) { + if (gateway->reg_timeout_seconds < 5) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Invalid timeout-seconds of %d on gateway %s, using the value of 60 instead.\n", gateway->reg_timeout_seconds, name); - gateway->reg_timeout_seconds = 30; + gateway->reg_timeout_seconds = 60; } From dcdd38119550b861a45fc34d92e7f93d0a23e7ca Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 4 Nov 2010 15:30:02 -0500 Subject: [PATCH 192/230] fire DTMF event when converting dtmf to inband with start_dtmf_generate --- src/switch_ivr_async.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 23a634cc92..afd0fdbb70 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -2187,6 +2187,20 @@ static switch_status_t generate_on_dtmf(switch_core_session_t *session, const sw switch_zmalloc(dt, sizeof(*dt)); *dt = *dtmf; if (switch_queue_trypush(pvt->digit_queue, dt) == SWITCH_STATUS_SUCCESS) { + switch_event_t *event; + + if (switch_event_create(&event, SWITCH_EVENT_DTMF) == SWITCH_STATUS_SUCCESS) { + switch_channel_event_set_data(channel, event); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "DTMF-Digit", "%c", dtmf->digit); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "DTMF-Duration", "%u", dtmf->duration); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "DTMF-Conversion", "native:inband"); + if (switch_channel_test_flag(channel, CF_DIVERT_EVENTS)) { + switch_core_session_queue_event(session, &event); + } else { + switch_event_fire(&event); + } + } + dt = NULL; /* SWITCH_STATUS_FALSE indicates pretend there never was a DTMF From 7dafe4e2c7019be291bd029d7efd9e64cdf51927 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 4 Nov 2010 15:40:00 -0500 Subject: [PATCH 193/230] fail calls with uninitialized frame --- src/switch_core_io.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/switch_core_io.c b/src/switch_core_io.c index 2478df351f..42f45859d1 100644 --- a/src/switch_core_io.c +++ b/src/switch_core_io.c @@ -666,6 +666,13 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess return status; } + if (!(frame->codec && frame->codec->implementation)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "%s has received a bad frame with no codec!\n", + switch_channel_get_name(session->channel)); + switch_channel_hangup(session->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + return SWITCH_STATUS_FALSE; + } + switch_assert(frame->codec != NULL); switch_assert(frame->codec->implementation != NULL); From 7217b9dc7c141fee27f92d3c23a68a5f8709c8b6 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Thu, 4 Nov 2010 17:59:53 -0500 Subject: [PATCH 194/230] add fs_cli to windows wix install --- w32/Setup/Setup.wixproj | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/w32/Setup/Setup.wixproj b/w32/Setup/Setup.wixproj index 4df748f967..9aba3a1d34 100644 --- a/w32/Setup/Setup.wixproj +++ b/w32/Setup/Setup.wixproj @@ -48,6 +48,15 @@ Binaries;Content;Satellites INSTALLLOCATION + + fs_cli + {d2fb8043-d208-4aee-8f18-3b5857c871b9} + True + + + Binaries;Content;Satellites + INSTALLLOCATION + libteletone {89385c74-5860-4174-9caf-a39e7c48909c} From 145d64b623d7dbfc629d38da1aa3b6254c5ffa12 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Fri, 5 Nov 2010 10:12:25 -0500 Subject: [PATCH 195/230] windows wix installer - add more options for fs_cli --- w32/Setup/Product.wxs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/w32/Setup/Product.wxs b/w32/Setup/Product.wxs index f1fea35af7..775001d498 100644 --- a/w32/Setup/Product.wxs +++ b/w32/Setup/Product.wxs @@ -56,7 +56,14 @@ Target="[INSTALLLOCATION]FreeSwitchConsole.exe" WorkingDirectory="INSTALLLOCATION"/> - + + + + @@ -72,8 +79,13 @@ + + + + + From 957262fac1c3da9f2f6face0c929db55ac5a3230 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Fri, 5 Nov 2010 10:36:13 -0500 Subject: [PATCH 196/230] windows installer fix to last commit --- w32/Setup/Product.wxs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/w32/Setup/Product.wxs b/w32/Setup/Product.wxs index 775001d498..2f072aa8ca 100644 --- a/w32/Setup/Product.wxs +++ b/w32/Setup/Product.wxs @@ -56,6 +56,7 @@ Target="[INSTALLLOCATION]FreeSwitchConsole.exe" WorkingDirectory="INSTALLLOCATION"/> + - + From 8315b954fd22d42547ab72c1f7eb854136998928 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 5 Nov 2010 12:26:30 -0500 Subject: [PATCH 197/230] tweak --- src/switch_core_io.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/switch_core_io.c b/src/switch_core_io.c index 42f45859d1..cd25622b5d 100644 --- a/src/switch_core_io.c +++ b/src/switch_core_io.c @@ -666,18 +666,19 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess return status; } + switch_mutex_lock(session->codec_write_mutex); + if (!(frame->codec && frame->codec->implementation)) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "%s has received a bad frame with no codec!\n", switch_channel_get_name(session->channel)); switch_channel_hangup(session->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + switch_mutex_unlock(session->codec_write_mutex); return SWITCH_STATUS_FALSE; } switch_assert(frame->codec != NULL); switch_assert(frame->codec->implementation != NULL); - switch_mutex_lock(session->codec_write_mutex); - if (!(switch_core_codec_ready(session->write_codec) && frame->codec) || !switch_channel_ready(session->channel) || !switch_channel_media_ready(session->channel)) { switch_mutex_unlock(session->codec_write_mutex); From f69f4a77477d59ee2734dce74f5c984bd9a4d678 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 5 Nov 2010 15:24:11 -0500 Subject: [PATCH 198/230] refactor --- src/switch_core_state_machine.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/switch_core_state_machine.c b/src/switch_core_state_machine.c index 439f9b7d89..c77f3f1a68 100644 --- a/src/switch_core_state_machine.c +++ b/src/switch_core_state_machine.c @@ -409,6 +409,8 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session) message = NULL; } + switch_ivr_parse_all_events(session); + if (switch_channel_get_state(session->channel) == switch_channel_get_running_state(session->channel)) { switch_channel_set_flag(session->channel, CF_THREAD_SLEEPING); if (switch_channel_get_state(session->channel) == switch_channel_get_running_state(session->channel)) { @@ -417,6 +419,8 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session) switch_channel_clear_flag(session->channel, CF_THREAD_SLEEPING); } + switch_ivr_parse_all_events(session); + while (switch_core_session_dequeue_message(session, &message) == SWITCH_STATUS_SUCCESS) { switch_core_session_receive_message(session, message); message = NULL; From e0c37c1f6ec06b44bba38a0370c48d7a275898e8 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 5 Nov 2010 18:20:09 -0500 Subject: [PATCH 199/230] allow process_import to specify a prefix --- src/include/switch_ivr.h | 2 +- src/mod/applications/mod_fifo/mod_fifo.c | 10 ++++++---- src/switch_ivr_originate.c | 14 ++++++++++---- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/include/switch_ivr.h b/src/include/switch_ivr.h index 34c5db8e42..249ac63a58 100644 --- a/src/include/switch_ivr.h +++ b/src/include/switch_ivr.h @@ -840,7 +840,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_say_ip(switch_core_session_t *session SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *session, const char *data); SWITCH_DECLARE(switch_status_t) switch_ivr_sound_test(switch_core_session_t *session); -SWITCH_DECLARE(void) switch_process_import(switch_core_session_t *session, switch_channel_t *peer_channel, const char *varname); +SWITCH_DECLARE(void) switch_process_import(switch_core_session_t *session, switch_channel_t *peer_channel, const char *varname, const char *prefix); SWITCH_DECLARE(switch_bool_t) switch_ivr_uuid_exists(const char *uuid); diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index 520e0628d4..33697a0ca6 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -998,8 +998,10 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_ if (caller_channel) { switch_channel_set_variable(caller_channel, "fifo_role", "caller"); - switch_process_import(consumer_session, caller_channel, "fifo_caller_consumer_import"); - switch_process_import(caller_session, consumer_channel, "fifo_consumer_caller_import"); + switch_process_import(consumer_session, caller_channel, "fifo_caller_consumer_import", + switch_channel_get_variable(consumer_channel, "fifo_import_prefix")); + switch_process_import(caller_session, consumer_channel, "fifo_consumer_caller_import", + switch_channel_get_variable(caller_channel, "fifo_import_prefix")); } @@ -2846,8 +2848,8 @@ SWITCH_STANDARD_APP(fifo_function) switch_core_media_bug_resume(session); switch_core_media_bug_resume(other_session); - switch_process_import(session, other_channel, "fifo_caller_consumer_import"); - switch_process_import(other_session, channel, "fifo_consumer_caller_import"); + switch_process_import(session, other_channel, "fifo_caller_consumer_import", switch_channel_get_variable(channel, "fifo_import_prefix")); + switch_process_import(other_session, channel, "fifo_consumer_caller_import", switch_channel_get_variable(other_channel, "fifo_import_prefix")); if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) { switch_channel_event_set_data(channel, event); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]); diff --git a/src/switch_ivr_originate.c b/src/switch_ivr_originate.c index 749f18e1ea..007d7d9fc1 100644 --- a/src/switch_ivr_originate.c +++ b/src/switch_ivr_originate.c @@ -1038,7 +1038,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_wait_for_answer(switch_core_session_t return status; } -SWITCH_DECLARE(void) switch_process_import(switch_core_session_t *session, switch_channel_t *peer_channel, const char *varname) +SWITCH_DECLARE(void) switch_process_import(switch_core_session_t *session, switch_channel_t *peer_channel, const char *varname, const char *prefix) { const char *import, *val; switch_channel_t *caller_channel; @@ -1054,7 +1054,13 @@ SWITCH_DECLARE(void) switch_process_import(switch_core_session_t *session, switc if ((argc = switch_separate_string(mydata, ',', argv, (sizeof(argv) / sizeof(argv[0]))))) { for (i = 0; i < argc; i++) { if ((val = switch_channel_get_variable(peer_channel, argv[i]))) { - switch_channel_set_variable(caller_channel, argv[i], val); + if (prefix) { + char *var = switch_mprintf("%s%s", prefix, argv[i]); + switch_channel_set_variable(caller_channel, var, val); + free(var); + } else { + switch_channel_set_variable(caller_channel, argv[i], val); + } } } } @@ -3296,7 +3302,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess } else { status = SWITCH_STATUS_FALSE; if (caller_channel && peer_channel) { - switch_process_import(oglobals.session, peer_channel, "import"); + switch_process_import(oglobals.session, peer_channel, "import", NULL); } peer_channel = NULL; goto done; @@ -3347,7 +3353,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess if (caller_channel) { switch_channel_set_variable(caller_channel, "originate_disposition", "call accepted"); if (peer_channel) { - switch_process_import(oglobals.session, peer_channel, "import"); + switch_process_import(oglobals.session, peer_channel, "import", NULL); } } switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(oglobals.session), SWITCH_LOG_DEBUG, "Originate Resulted in Success: [%s]\n", From 40ac860aaa836d5822bad804b91059ac43fb5246 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Fri, 5 Nov 2010 20:24:31 -0400 Subject: [PATCH 200/230] fix missing name and potential segfault in gateway status --- src/mod/endpoints/mod_sofia/mod_sofia.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 08040809ee..aa927bfd45 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -2293,11 +2293,14 @@ static const char *sofia_state_names[] = { "FAIL_WAIT", "EXPIRED", "NOREG", + "TIMEOUT", NULL }; const char *sofia_state_string(int state) { + if (state >= REG_STATE_LAST) return ""; + return sofia_state_names[state]; } From 77e7f589866a850a4873abfbd04e8dfaf37224ff Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Fri, 5 Nov 2010 21:15:03 -0500 Subject: [PATCH 201/230] VS2010 Swig --- .../mod_managed/freeswitch_wrap.2010.cxx | Bin 1036467 -> 1042048 bytes .../mod_managed/managed/swig.2010.cs | Bin 1371033 -> 1378869 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx b/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx index 5a2a757e57771622e9b67c9eeb990f198fae24b0..c55a6d63edd3c2f14e4e90431ba17f05a30fb1f5 100644 GIT binary patch delta 1524 zcmcgsO=whC6z0v$yYEfrzB9?pNTM|9i;XlfQ4<;kQ8GyiMUa3l1Q&%k4VsGSWRi^d zH)4W;S-8*&&Ic{DW}y`9VuEd-BBPVGLUphvtDVw+K|Y0Nu%Fpi#QYz1zp8uN&J>^Jr<#-FiP zH!}BORU^9DLVDx@>w@{5@e1NxC+ozEux4Ob)iyd9^M|z64u(+iLO|zLO|26|{mB-y zxj8mE*wM1C%M~7W+EmltV+)R#_?CXOzSUz{p&0#=In7d8?J_A%_0fpy56 z0S5bbPc6C?s?YSW2-??sTd|=w(2%jJ+Hm@w7)?`=x8nR^7Dn~Yst=EbSqO=D_-ZR% zBX!bACCWTQfgk3Rn#=z=Do=Np!m`Cglp+siCejnaW;)Tqr|wgO?QLBQd?zM zy6N-7v_=|fpO|+s%cQGz-lsau{=^mxXPCl+4vte-^U&W=Nh#A5&g`eqa>I4^QxL@@ zsmqC_^Jbff-oRcuMjKtej&mLp#qSrTm}6AusE{snX`IN!cJ={^V-)#sS9{hkrHmzM zjjU0Goi4oSq7n853QOjZ-Tvdq?p++x zLg=c}ghZSS_Y-A;Hpz?3NB2>^9I3q3yiX~a!;kZx1|)VZ)$MFlR=Ewz+uWeihhmCM zY&|9xCVt$_ICFv`R{jXxYOA~t!X8@?y+9v1O-#4?B5=pzL}tDcofJ=sj~z!yg45%(|wA96+~z6nX}aAwl@C_4amzX`OKJWU-{4opc?DcMd~sta8omM^c7B> y_?GrBGv_w{OWVg$%6W&7%~8<0b(zYwZvj~Pg|`12@cdm0rEeC*SR>H7y;RwXw8 delta 227 zcmZoTYrlD+eM1Xl3sVbo3(FSP^wZPdpJk0~zjB&&`<2sdPEOM!gxH0qPuRhyKi%Ow zn`OJNAUhCq05K;Ja{)2;c3(lBSr4WQh_bLxe>;cAewqNY(DZYST*}i6KJmy-zwnGz zWV(SKv-UJ8Zn^0R&zXd#_wfOhT7Blxp1$BIGs|=XLw=#@3DbC#ryKP0uuR|jndkrX z50*gghqa6x?YuvDw)6hro!LI!VFI7vcAE}9P2KHvJNO)Urwg3qzz!3|cgaeeImTzRzKYgFpJXs{K!`;As}cTd~v z?E|s-;m2WN3=OcG#gqpYBSz{PF*;!`VatWYSu_%p@7kez3OTI3ZGBQlq;LNLF#KV3 z$2!khVBurrhQg1K10KAEIN;7B7UZ>#)sR1doZ9=zM^TFs;9YZ+=LYG&npt>w};P${q)6`=>0g6Lwcy64bIwiQ|&tOI-k zYtra`ii;s>V{`PFp;c^iRC2S_tcv8eS;t0SG&`a6u+0zSXAy?yD=oCaKbsl&C1HzX zOjkvRtq9^#8xL1LK@L-@@2CF4o4{X!DQv*2sOmTb2wax{#cD{A&qh$m;n5Jb!_9rzglG;}OjtZ12Wg9S*G?bq z)1Fkz7MF09cF>}ytMME9)#97xH6Y$I5%4{^L_!PtybOo3gG%f0I?V%Ds?BwjG7s?} zDT3k)7RoY6!E%VK2dM{lz}q2G3_Dh_TOiqrZR&9&j9tUkzqDR^JYtEkr zxZ1^HW$>UdJgHS$?Yp>48X`eb4nKBdR@;Q*TrP-alF{;DFKN;5Jtw$An9aVwgFGQ2lKk9c?D5na&<}s$?}RJm>lz z#Le_)t}a$;LO*kEgZG0Oj6Cmg1^=u`hAdAzDbujQl}eG4rrl4Ekf-%b%KQkqY=Dc0 zNsH2TkeGcSR=SEZWo?D0PLuS1OIT7gqLyiy{v7Z@@=hv{{;%9{_b8XAl+KWSr`K$D z*hI0RwraPur%tNh+1L=!C*zro%Jn<^RYNrF&r!mD*KUE`RktTxv!^it>*`%O%2?3# G@XX(&?xQvU delta 447 zcmZvWPe@cz9EF*8-#9b(PTqNUMlEPUtVNQg2swk0xhfb4f{853N0SO68J3_c|AFw( z5^Y}0VGtZ$ganZ#>W^BKM1iCbM1vSE+-jQv7w)wC_ANd*2R=Aw<<+hHR(fR2w`?3G zFt_Csh$fA5Zu8@_PG8cXz9buZ=uT~i+zsaxP7;@H|4fzJ`@0U+lSTx)1BMLrXP!OD z^mJkLkx_%8N~0V_;#Jt2VdHqv#ZIH}ngw&8cmS8?Sv7_iS%@|ZY!65^o3)s}Z`Px9 z+ib+zSLM$wDL-1$=3TTt7ba#)xRm1D<)nh@D>ewat$ zSX|D%=VAOI&hd`;3;m^xHb3%(w^-{DigvmMtDw}V*!FvuIQ@0Ry^y!cp<@DHrbWQ3 z!fDTXgf%BL<)^KFjYmn8QiH(t`x#mIpVZ?3X1z6WC+UJ_Iqw4$@#ltsVd>P`j? zQdu~kP)~6)B`h4e>H|vG1t&S7K3~CHr)ot!V=B7vLw(CqZOK~j<$lT Date: Sat, 6 Nov 2010 16:06:42 +0100 Subject: [PATCH 202/230] FreeTDM: Update .gitignore, add files shipped with libtool (build/{libtool,lt*}.m4) and compiled test binaries --- libs/freetdm/.gitignore | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libs/freetdm/.gitignore b/libs/freetdm/.gitignore index 5018c5311b..2b06b30218 100644 --- a/libs/freetdm/.gitignore +++ b/libs/freetdm/.gitignore @@ -11,6 +11,20 @@ config.* configure libtool aclocal.m4 +build/libtool.m4 +build/ltoptions.m4 +build/ltsugar.m4 +build/ltversion.m4 +build/lt~obsolete.m4 + +testanalog +testapp +testboost +testcid +testpri +testr2 +testsangomaboost +testtones !/sample/boost/Makefile !/sample/dso/Makefile From 3d5ccf055d90134c48bcbe697daea19d5acafa81 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Sat, 6 Nov 2010 16:08:07 +0100 Subject: [PATCH 203/230] ftmod_libpri: Initial support for BRI and various cleanups + double locking fix Fixes: - Fix double locking in check_state(): remove ftdm_mutex_(un)lock calls. New: - Add lpwrap_init_bri() to initialize libpri in BRI mode - Use trunk type to determine PRI/BRI and PTP/PTMP mode (no additional configuration required). - Improve libpri detection code in configure.ac, check whether libpri is usable and if BRI support is available (needs more work) Cleanups: - Whitespace and indentation cleanups - Rename str2* functions to parse_* - Simplify libpri_configure_span() option parsing and bail out on error - Add "ftdm libpri help" command that displays usage information - Coding style cleanups and other (minor) changes Known issues: - BRI PTMP TE Q.921 link does not go beyond TEI ASSIGNED state, SABME requests are ignored by NT (EuroISDN DTAG, DAHDI-2.3.0.1, vzaphfc) Signed-off-by: Stefan Knoblich --- libs/freetdm/configure.ac | 59 ++- .../src/ftmod/ftmod_libpri/ftmod_libpri.c | 415 +++++++++--------- .../src/ftmod/ftmod_libpri/lpwrap_pri.c | 82 +++- .../src/ftmod/ftmod_libpri/lpwrap_pri.h | 2 + 4 files changed, 314 insertions(+), 244 deletions(-) diff --git a/libs/freetdm/configure.ac b/libs/freetdm/configure.ac index 9f74d9465d..c27d1160dc 100644 --- a/libs/freetdm/configure.ac +++ b/libs/freetdm/configure.ac @@ -144,21 +144,6 @@ fi ## AC_MSG_RESULT([${as_nl}<<>> Modules and optional features]) -## -# libpri (TODO: add checks) -# -HAVE_LIBPRI="no" -AC_ARG_WITH([libpri], - [AS_HELP_STRING([--with-libpri], [Install ftmod_libpri])], - [case "${withval}" in - no) enable_libpri="no" ;; - *) enable_libpri="yes" ;; - esac], - [enable_libpri="no"] -) -HAVE_LIBPRI="${enable_libpri}" -AM_CONDITIONAL([HAVE_LIBPRI],[test "${enable_libpri}" = "yes"]) - ## # pritap (TODO: add checks) # @@ -193,6 +178,50 @@ AC_CHECK_LIB([openr2], [openr2_context_set_io_type], [HAVE_OPENR2="yes"]) AC_MSG_RESULT([checking whether to build ftmod_r2... ${HAVE_OPENR2}]) AM_CONDITIONAL([HAVE_OPENR2], [test "${HAVE_OPENR2}" = "yes"]) +## +# Digium libpri (TODO: add checks) +# +HAVE_LIBPRI="no" +AC_ARG_WITH([libpri], + [AS_HELP_STRING([--with-libpri], [Install ftmod_libpri])], + [case "${withval}" in + no) enable_libpri="no" ;; + *) enable_libpri="yes" ;; + esac], + [enable_libpri="no"] +) +if test "${enable_libpri}" != "no" +then + AC_MSG_RESULT([${as_nl}<<>> Digium libpri]) + + save_LIBS="${LIBS}" + LIBS="${LIBS} -lpri" + AC_MSG_CHECKING([whether libpri is usable]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include ], + [const char *version = pri_get_version();] + )], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([libpri is not installed or unusable (see config.log for details)])] + ) + + AC_MSG_CHECKING([whether libpri has BRI support]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [extern void pri_new_bri_cb(void);], + [pri_new_bri_cb();] + )], + [AC_DEFINE([HAVE_LIBPRI_BRI], [1], [libpri has bri support]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + LIBS="${save_LIBS}" +fi +HAVE_LIBPRI="${enable_libpri}" +AM_CONDITIONAL([HAVE_LIBPRI],[test "${enable_libpri}" = "yes"]) + ## # Sangoma Wanpipe # diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index 444b907911..6e09562a7e 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -1,23 +1,23 @@ /* * Copyright (c) 2007, Anthony Minessale II * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * + * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - * + * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * + * * * Neither the name of the original author; nor the names of any contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * - * + * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -140,35 +140,7 @@ static void s_pri_message(char *s) static void s_pri_message(struct pri *pri, char *s) #endif { - ftdm_log(FTDM_LOG_DEBUG, "%s", s); -} - -/** - * \brief Parses an option string to flags - * \param in String to parse for configuration options - * \return Flags - */ -static uint32_t parse_opts(const char *in) -{ - uint32_t flags = 0; - - if (!in) { - return 0; - } - - if (strstr(in, "suggest_channel")) { - flags |= FTMOD_LIBPRI_OPT_SUGGEST_CHANNEL; - } - - if (strstr(in, "omit_display")) { - flags |= FTMOD_LIBPRI_OPT_OMIT_DISPLAY_IE; - } - - if (strstr(in, "omit_redirecting_number")) { - flags |= FTMOD_LIBPRI_OPT_OMIT_REDIRECTING_NUMBER_IE; - } - - return flags; + ftdm_log(FTDM_LOG_DEBUG, "%s", s); } /** @@ -187,43 +159,33 @@ static int parse_debug(const char *in) if (strstr(in, "q921_raw")) { flags |= PRI_DEBUG_Q921_RAW; } - if (strstr(in, "q921_dump")) { flags |= PRI_DEBUG_Q921_DUMP; } - if (strstr(in, "q921_state")) { flags |= PRI_DEBUG_Q921_STATE; } - if (strstr(in, "config")) { flags |= PRI_DEBUG_CONFIG; } - if (strstr(in, "q931_dump")) { flags |= PRI_DEBUG_Q931_DUMP; } - if (strstr(in, "q931_state")) { flags |= PRI_DEBUG_Q931_STATE; } - if (strstr(in, "q931_anomaly")) { flags |= PRI_DEBUG_Q931_ANOMALY; } - if (strstr(in, "apdu")) { flags |= PRI_DEBUG_APDU; } - if (strstr(in, "aoc")) { flags |= PRI_DEBUG_AOC; } - if (strstr(in, "all")) { flags |= PRI_DEBUG_ALL; } - if (strstr(in, "none")) { flags = 0; } @@ -231,9 +193,13 @@ static int parse_debug(const char *in) return flags; } +static ftdm_status_t ftdm_libpri_start(ftdm_span_t *span); static ftdm_io_interface_t ftdm_libpri_interface; -static ftdm_status_t ftdm_libpri_start(ftdm_span_t *span); +static const char *ftdm_libpri_usage = + "Usage:\n" + "libpri kill \n" + "libpri debug \n"; /** * \brief API function to kill or debug a libpri span @@ -244,13 +210,20 @@ static ftdm_status_t ftdm_libpri_start(ftdm_span_t *span); static FIO_API_FUNCTION(ftdm_libpri_api) { char *mycmd = NULL, *argv[10] = { 0 }; - int argc = 0; - + int argc = 0; + if (data) { mycmd = ftdm_strdup(data); argc = ftdm_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); } + if (argc == 1) { + if (!strcasecmp(argv[0], "help") || !strcasecmp(argv[0], "usage")) { + stream->write_function(stream, ftdm_libpri_usage); + goto done; + } + } + if (argc == 2) { if (!strcasecmp(argv[0], "kill")) { int span_id = atoi(argv[1]); @@ -285,7 +258,7 @@ static FIO_API_FUNCTION(ftdm_libpri_api) goto done; } - pri_set_debug(isdn_data->spri.pri, parse_debug(argv[2])); + pri_set_debug(isdn_data->spri.pri, parse_debug(argv[2])); stream->write_function(stream, "%s: +OK debug set.\n", __FILE__); goto done; } else { @@ -295,16 +268,15 @@ static FIO_API_FUNCTION(ftdm_libpri_api) } } - stream->write_function(stream, "%s: -ERR invalid command.\n", __FILE__); - - done: +done: ftdm_safe_free(mycmd); return FTDM_SUCCESS; } + /** * \brief Loads libpri IO module * \param fio FreeTDM IO interface @@ -313,10 +285,10 @@ static FIO_API_FUNCTION(ftdm_libpri_api) static FIO_IO_LOAD_FUNCTION(ftdm_libpri_io_init) { assert(fio != NULL); - memset(&ftdm_libpri_interface, 0, sizeof(ftdm_libpri_interface)); + memset(&ftdm_libpri_interface, 0, sizeof(ftdm_libpri_interface)); ftdm_libpri_interface.name = "libpri"; - ftdm_libpri_interface.api = ftdm_libpri_api; + ftdm_libpri_interface.api = &ftdm_libpri_api; *fio = &ftdm_libpri_interface; @@ -445,8 +417,6 @@ static ftdm_state_map_t isdn_state_map = { {FTDM_CHANNEL_STATE_UP, FTDM_END}, {FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_TERMINATING, FTDM_END}, }, - - } }; @@ -461,11 +431,9 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) ftdm_status_t status; ftdm_sigmsg_t sig; q931_call *call = (q931_call *) ftdmchan->call_data; - - - ftdm_log(FTDM_LOG_DEBUG, "%d:%d STATE [%s]\n", - ftdmchan->span_id, ftdmchan->chan_id, ftdm_channel_state2str(ftdmchan->state)); + ftdm_log(FTDM_LOG_DEBUG, "%d:%d STATE [%s]\n", + ftdmchan->span_id, ftdmchan->chan_id, ftdm_channel_state2str(ftdmchan->state)); #if 0 if (!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_OUTBOUND) && !call) { @@ -473,7 +441,7 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) } #endif - + memset(&sig, 0, sizeof(sig)); sig.chan_id = ftdmchan->chan_id; sig.span_id = ftdmchan->span_id; @@ -484,7 +452,7 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) case FTDM_CHANNEL_STATE_DOWN: { ftdmchan->call_data = NULL; - ftdm_channel_done(ftdmchan); + ftdm_channel_done(ftdmchan); } break; case FTDM_CHANNEL_STATE_PROGRESS: @@ -562,7 +530,6 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) return; } - dp = ftdmchan->caller_data.dnis.type; switch(dp) { case FTDM_TON_NATIONAL: @@ -584,15 +551,18 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) pri_sr_set_channel(sr, ftdmchan->chan_id, 0, 0); pri_sr_set_bearer(sr, 0, isdn_data->l1); pri_sr_set_called(sr, ftdmchan->caller_data.dnis.digits, dp, 1); - pri_sr_set_caller(sr, ftdmchan->caller_data.cid_num.digits, (isdn_data->opts & FTMOD_LIBPRI_OPT_OMIT_DISPLAY_IE ? NULL : ftdmchan->caller_data.cid_name), - dp, (ftdmchan->caller_data.pres != 1 ? PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN : PRES_PROHIB_USER_NUMBER_NOT_SCREENED)); + pri_sr_set_caller(sr, ftdmchan->caller_data.cid_num.digits, + (isdn_data->opts & FTMOD_LIBPRI_OPT_OMIT_DISPLAY_IE ? NULL : ftdmchan->caller_data.cid_name), + dp, + (ftdmchan->caller_data.pres != 1 ? PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN : PRES_PROHIB_USER_NUMBER_NOT_SCREENED)); if (!(isdn_data->opts & FTMOD_LIBPRI_OPT_OMIT_REDIRECTING_NUMBER_IE)) { - pri_sr_set_redirecting(sr, ftdmchan->caller_data.cid_num.digits, dp, PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN, PRI_REDIR_UNCONDITIONAL); + pri_sr_set_redirecting(sr, ftdmchan->caller_data.cid_num.digits, dp, + PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN, PRI_REDIR_UNCONDITIONAL); } if (pri_setup(isdn_data->spri.pri, call, sr)) { - ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_DESTINATION_OUT_OF_ORDER; + ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_DESTINATION_OUT_OF_ORDER; ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_HANGUP); } @@ -606,7 +576,7 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) pri_hangup(isdn_data->spri.pri, call, ftdmchan->caller_data.hangup_cause); pri_destroycall(isdn_data->spri.pri, call); ftdmchan->call_data = NULL; - } + } ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_DOWN); } break; @@ -633,21 +603,23 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) */ static __inline__ void check_state(ftdm_span_t *span) { - if (ftdm_test_flag(span, FTDM_SPAN_STATE_CHANGE)) { - uint32_t j; - ftdm_clear_flag_locked(span, FTDM_SPAN_STATE_CHANGE); - for(j = 1; j <= span->chan_count; j++) { - if (ftdm_test_flag((span->channels[j]), FTDM_CHANNEL_STATE_CHANGE)) { - ftdm_mutex_lock(span->channels[j]->mutex); - ftdm_channel_lock(span->channels[j]); - ftdm_clear_flag((span->channels[j]), FTDM_CHANNEL_STATE_CHANGE); - state_advance(span->channels[j]); - ftdm_channel_complete_state(span->channels[j]); - ftdm_mutex_unlock(span->channels[j]->mutex); - ftdm_channel_unlock(span->channels[j]); - } - } - } + if (ftdm_test_flag(span, FTDM_SPAN_STATE_CHANGE)) { + uint32_t j; + + ftdm_clear_flag_locked(span, FTDM_SPAN_STATE_CHANGE); + + for (j = 1; j <= span->chan_count; j++) { + if (ftdm_test_flag((span->channels[j]), FTDM_CHANNEL_STATE_CHANGE)) { + ftdm_channel_lock(span->channels[j]); + + ftdm_clear_flag((span->channels[j]), FTDM_CHANNEL_STATE_CHANGE); + state_advance(span->channels[j]); + ftdm_channel_complete_state(span->channels[j]); + + ftdm_channel_unlock(span->channels[j]); + } + } + } } /** @@ -659,7 +631,6 @@ static __inline__ void check_state(ftdm_span_t *span) */ static int on_info(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event *pevent) { - ftdm_log(FTDM_LOG_DEBUG, "number is: %s\n", pevent->ring.callednum); if (strlen(pevent->ring.callednum) > 3) { ftdm_log(FTDM_LOG_DEBUG, "final number is: %s\n", pevent->ring.callednum); @@ -681,7 +652,7 @@ static int on_hangup(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_even ftdm_channel_t *ftdmchan = NULL; q931_call *call = NULL; ftdmchan = span->channels[pevent->hangup.channel]; - + if (!ftdmchan) { ftdm_log(FTDM_LOG_CRIT, "-- Hangup on channel %d:%d %s but it's not in use?\n", spri->span->span_id, pevent->hangup.channel); return 0; @@ -698,7 +669,7 @@ static int on_hangup(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_even ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Ignoring remote hangup in state %s with no call data\n", ftdm_channel_state2str(ftdmchan->state)); goto done; } - + call = (q931_call *) ftdmchan->call_data; ftdm_log(FTDM_LOG_DEBUG, "-- Hangup on channel %d:%d\n", spri->span->span_id, pevent->hangup.channel); ftdmchan->caller_data.hangup_cause = pevent->hangup.cause; @@ -727,13 +698,12 @@ static int on_answer(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_even ftdm_channel_t *ftdmchan = NULL; ftdmchan = span->channels[pevent->answer.channel]; - + if (ftdmchan) { ftdm_log(FTDM_LOG_DEBUG, "-- Answer on channel %d:%d\n", spri->span->span_id, pevent->answer.channel); ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_UP); } else { ftdm_log(FTDM_LOG_DEBUG, "-- Answer on channel %d:%d %s but it's not in use?\n", spri->span->span_id, pevent->answer.channel, ftdmchan->chan_id); - } return 0; @@ -750,9 +720,9 @@ static int on_proceed(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_eve { ftdm_span_t *span = spri->private_info; ftdm_channel_t *ftdmchan = NULL; - + ftdmchan = span->channels[pevent->proceeding.channel]; - + if (ftdmchan) { ftdm_log(FTDM_LOG_DEBUG, "-- Proceeding on channel %d:%d\n", spri->span->span_id, pevent->proceeding.channel); ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA); @@ -777,7 +747,7 @@ static int on_ringing(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_eve ftdm_channel_t *ftdmchan = NULL; ftdmchan = span->channels[pevent->ringing.channel]; - + if (ftdmchan) { ftdm_log(FTDM_LOG_DEBUG, "-- Ringing on channel %d:%d\n", spri->span->span_id, pevent->ringing.channel); /* we may get on_ringing even when we're already in FTDM_CHANNEL_STATE_PROGRESS_MEDIA */ @@ -808,7 +778,7 @@ static int on_ring(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event int ret = 0; //switch_mutex_lock(globals.channel_mutex); - + ftdmchan = span->channels[pevent->ring.channel]; if (!ftdmchan || ftdmchan->state != FTDM_CHANNEL_STATE_DOWN || ftdm_test_flag(ftdmchan, FTDM_CHANNEL_INUSE)) { ftdm_log(FTDM_LOG_WARNING, "--Duplicate Ring on channel %d:%d (ignored)\n", spri->span->span_id, pevent->ring.channel); @@ -821,13 +791,12 @@ static int on_ring(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event ret = 0; goto done; } - ftdm_log(FTDM_LOG_NOTICE, "-- Ring on channel %d:%d (from %s to %s)\n", spri->span->span_id, pevent->ring.channel, pevent->ring.callingnum, pevent->ring.callednum); - + memset(&ftdmchan->caller_data, 0, sizeof(ftdmchan->caller_data)); - + ftdm_set_string(ftdmchan->caller_data.cid_num.digits, (char *)pevent->ring.callingnum); if (!ftdm_strlen_zero((char *)pevent->ring.callingname)) { ftdm_set_string(ftdmchan->caller_data.cid_name, (char *)pevent->ring.callingname); @@ -836,19 +805,18 @@ static int on_ring(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event } ftdm_set_string(ftdmchan->caller_data.ani.digits, (char *)pevent->ring.callingani); ftdm_set_string(ftdmchan->caller_data.dnis.digits, (char *)pevent->ring.callednum); - + if (pevent->ring.ani2 >= 0) { snprintf(ftdmchan->caller_data.aniII, 5, "%.2d", pevent->ring.ani2); } - + // scary to trust this pointer, you'd think they would give you a copy of the call data so you own it...... ftdmchan->call_data = pevent->ring.call; - - ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_RING); - - done: - //switch_mutex_unlock(globals.channel_mutex); + ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_RING); + +done: + //switch_mutex_unlock(globals.channel_mutex); return ret; } @@ -861,8 +829,13 @@ static int on_ring(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event static __inline__ ftdm_status_t process_event(ftdm_span_t *span, ftdm_event_t *event) { ftdm_alarm_flag_t alarmbits; - ftdm_log(FTDM_LOG_DEBUG, "EVENT [%s][%d][%d:%d] STATE [%s]\n", - ftdm_oob_event2str(event->enum_id), event->enum_id, event->channel->span_id, event->channel->chan_id, ftdm_channel_state2str(event->channel->state)); + + ftdm_log(FTDM_LOG_DEBUG, "EVENT [%s][%d][%d:%d] STATE [%s]\n", + ftdm_oob_event2str(event->enum_id), + event->enum_id, + event->channel->span_id, + event->channel->chan_id, + ftdm_channel_state2str(event->channel->state)); switch(event->enum_id) { case FTDM_OOB_ALARM_TRAP: @@ -872,11 +845,9 @@ static __inline__ ftdm_status_t process_event(ftdm_span_t *span, ftdm_event_t *e ftdm_set_state_locked(event->channel, FTDM_CHANNEL_STATE_RESTART); } } - ftdm_set_flag(event->channel, FTDM_CHANNEL_SUSPENDED); - ftdm_channel_get_alarms(event->channel, &alarmbits); ftdm_log(FTDM_LOG_WARNING, "channel %d:%d (%d:%d) has alarms! [%s]\n", event->channel->span_id, event->channel->chan_id, @@ -886,7 +857,6 @@ static __inline__ ftdm_status_t process_event(ftdm_span_t *span, ftdm_event_t *e break; case FTDM_OOB_ALARM_CLEAR: { - ftdm_log(FTDM_LOG_WARNING, "channel %d:%d (%d:%d) alarms Cleared!\n", event->channel->span_id, event->channel->chan_id, event->channel->physical_span_id, event->channel->physical_chan_id); @@ -905,14 +875,11 @@ static __inline__ ftdm_status_t process_event(ftdm_span_t *span, ftdm_event_t *e */ static __inline__ void check_events(ftdm_span_t *span) { - ftdm_status_t status; - - status = ftdm_span_poll_event(span, 5); - - switch(status) { + switch (ftdm_span_poll_event(span, 5)) { case FTDM_SUCCESS: { ftdm_event_t *event; + while (ftdm_span_next_event(span, &event) == FTDM_SUCCESS) { if (event->enum_id == FTDM_OOB_NOOP) { continue; @@ -923,12 +890,12 @@ static __inline__ void check_events(ftdm_span_t *span) } } break; + case FTDM_FAIL: - { - ftdm_log(FTDM_LOG_DEBUG, "Event Failure! %d\n", ftdm_running()); - ftdm_sleep(2000); - } + ftdm_log(FTDM_LOG_DEBUG, "Event Failure! %d\n", ftdm_running()); + ftdm_sleep(2000); break; + default: break; } @@ -949,8 +916,6 @@ static int check_flags(lpwrap_pri_t *spri) check_state(span); check_events(span); - - return 0; } @@ -967,7 +932,7 @@ static int on_restart(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_eve ftdm_channel_t *ftdmchan; ftdm_log(FTDM_LOG_NOTICE, "-- Restarting %d:%d\n", spri->span->span_id, pevent->restart.channel); - + spri->dchan->state = FTDM_CHANNEL_STATE_UP; ftdmchan = span->channels[pevent->restart.channel]; @@ -998,19 +963,23 @@ static int on_dchan_up(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_ev ftdm_channel_t *ftdmchan = NULL; ftdm_sigmsg_t sig; int i; + ftdm_log(FTDM_LOG_INFO, "Span %d D-Chan UP!\n", spri->span->span_id); ftdm_set_flag(spri, LPWRAP_PRI_READY); ftdm_set_state_all(spri->span, FTDM_CHANNEL_STATE_RESTART); ftdm_log(FTDM_LOG_NOTICE, "%d:Signaling link status changed to %s\n", spri->span->span_id, ftdm_signaling_status2str(status)); - for(i=1; i <= spri->span->chan_count; i++) { + + for (i = 1; i <= spri->span->chan_count; i++) { ftdmchan = spri->span->channels[i]; + memset(&sig, 0, sizeof(sig)); sig.chan_id = ftdmchan->chan_id; sig.span_id = ftdmchan->span_id; sig.channel = ftdmchan; sig.event_id = FTDM_SIGEVENT_SIGSTATUS_CHANGED; sig.raw_data = &status; + ftdm_span_send_signal(spri->span, &sig); } } @@ -1025,26 +994,29 @@ static int on_dchan_up(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_ev * \return 0 */ static int on_dchan_down(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event *pevent) -{ +{ if (ftdm_test_flag(spri, LPWRAP_PRI_READY)) { ftdm_signaling_status_t status = FTDM_SIG_STATE_DOWN; ftdm_channel_t *ftdmchan = NULL; ftdm_sigmsg_t sig; int i; + ftdm_log(FTDM_LOG_INFO, "Span %d D-Chan DOWN!\n", spri->span->span_id); ftdm_clear_flag(spri, LPWRAP_PRI_READY); ftdm_set_state_all(spri->span, FTDM_CHANNEL_STATE_RESTART); - ftdm_log(FTDM_LOG_NOTICE, "%d:Signaling link status changed to %s\n", spri->span->span_id, ftdm_signaling_status2str(status)); - for(i=1; i <= spri->span->chan_count; i++) { + + for (i = 1; i <= spri->span->chan_count; i++) { ftdmchan = spri->span->channels[i]; + memset(&sig, 0, sizeof(sig)); sig.chan_id = ftdmchan->chan_id; sig.span_id = ftdmchan->span_id; sig.channel = ftdmchan; sig.event_id = FTDM_SIGEVENT_SIGSTATUS_CHANGED; sig.raw_data = &status; + ftdm_span_send_signal(spri->span, &sig); } } @@ -1061,7 +1033,6 @@ static int on_dchan_down(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_ */ static int on_anything(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event *pevent) { - ftdm_log(FTDM_LOG_DEBUG, "Caught Event span %d %u (%s)\n", spri->span->span_id, event_type, lpwrap_pri_event_str(event_type)); return 0; } @@ -1075,7 +1046,6 @@ static int on_anything(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_ev */ static int on_io_fail(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event *pevent) { - ftdm_log(FTDM_LOG_DEBUG, "Caught Event span %d %u (%s)\n", spri->span->span_id, event_type, lpwrap_pri_event_str(event_type)); return 0; } @@ -1084,20 +1054,24 @@ static int on_io_fail(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_eve * \brief Main thread function for libpri span (monitor) * \param me Current thread * \param obj Span to run in this thread + * + * \todo Move all init stuff outside of loop or into ftdm_libpri_configure_span() */ static void *ftdm_libpri_run(ftdm_thread_t *me, void *obj) { ftdm_span_t *span = (ftdm_span_t *) obj; ftdm_libpri_data_t *isdn_data = span->signal_data; - int i, x = 0; int down = 0; int got_d = 0; - + int res = 0; + ftdm_set_flag(span, FTDM_SPAN_IN_THREAD); - - while(ftdm_running() && !ftdm_test_flag(span, FTDM_SPAN_STOP_THREAD)) { + + while (ftdm_running() && !ftdm_test_flag(span, FTDM_SPAN_STOP_THREAD)) { if (!got_d) { - for(i = 1; i <= span->chan_count; i++) { + int i, x; + + for (i = 1, x = 0; i <= span->chan_count; i++) { if (span->channels[i]->type == FTDM_CHAN_TYPE_DQ921) { if (ftdm_channel_open(span->span_id, i, &isdn_data->dchan) == FTDM_SUCCESS) { ftdm_log(FTDM_LOG_DEBUG, "opening d-channel #%d %d:%d\n", x, isdn_data->dchan->span_id, isdn_data->dchan->chan_id); @@ -1110,22 +1084,33 @@ static void *ftdm_libpri_run(ftdm_thread_t *me, void *obj) } } } - if (!got_d) { ftdm_log(FTDM_LOG_ERROR, "Failed to get a D-channel in span %d\n", span->span_id); break; } - - - if (lpwrap_init_pri(&isdn_data->spri, - span, // span - isdn_data->dchan, // dchan - isdn_data->pswitch, - isdn_data->node, - isdn_data->debug) < 0) { - snprintf(span->last_error, sizeof(span->last_error), "PRI init FAIL!"); - } else { + /* Initialize libpri trunk */ + switch (span->trunk_type) { + case FTDM_TRUNK_E1: + case FTDM_TRUNK_T1: + case FTDM_TRUNK_J1: + res = lpwrap_init_pri(&isdn_data->spri, span, isdn_data->dchan, + isdn_data->pswitch, isdn_data->node, isdn_data->debug); + break; + case FTDM_TRUNK_BRI: + res = lpwrap_init_bri(&isdn_data->spri, span, isdn_data->dchan, + isdn_data->pswitch, isdn_data->node, 0, isdn_data->debug); + break; + case FTDM_TRUNK_BRI_PTMP: + res = lpwrap_init_bri(&isdn_data->spri, span, isdn_data->dchan, + isdn_data->pswitch, isdn_data->node, 1, isdn_data->debug); + break; + default: + snprintf(span->last_error, sizeof(span->last_error), "Invalid trunk type"); + goto out; + } + + if (res == 0) { LPWRAP_MAP_PRI_EVENT(isdn_data->spri, LPWRAP_PRI_EVENT_ANY, on_anything); LPWRAP_MAP_PRI_EVENT(isdn_data->spri, LPWRAP_PRI_EVENT_RING, on_ring); LPWRAP_MAP_PRI_EVENT(isdn_data->spri, LPWRAP_PRI_EVENT_RINGING, on_ringing); @@ -1148,8 +1133,10 @@ static void *ftdm_libpri_run(ftdm_thread_t *me, void *obj) isdn_data->spri.on_loop = check_flags; isdn_data->spri.private_info = span; - lpwrap_run_pri(&isdn_data->spri); + lpwrap_run_pri(&isdn_data->spri); + } else { + snprintf(span->last_error, sizeof(span->last_error), "PRI init FAIL!"); } if (!ftdm_running() || ftdm_test_flag(span, FTDM_SPAN_STOP_THREAD)) { @@ -1172,7 +1159,7 @@ static void *ftdm_libpri_run(ftdm_thread_t *me, void *obj) down++; ftdm_sleep(5000); } - +out: ftdm_log(FTDM_LOG_DEBUG, "PRI thread ended on span %d\n", span->span_id); ftdm_clear_flag(span, FTDM_SPAN_IN_THREAD); @@ -1197,11 +1184,15 @@ static ftdm_status_t ftdm_libpri_stop(ftdm_span_t *span) } ftdm_set_state_all(span, FTDM_CHANNEL_STATE_RESTART); + check_state(span); + ftdm_set_flag(span, FTDM_SPAN_STOP_THREAD); - while(ftdm_test_flag(span, FTDM_SPAN_IN_THREAD)) { + + while (ftdm_test_flag(span, FTDM_SPAN_IN_THREAD)) { ftdm_sleep(100); } + check_state(span); return FTDM_SUCCESS; @@ -1241,7 +1232,7 @@ static ftdm_status_t ftdm_libpri_start(ftdm_span_t *span) * \param node Node string to convert * \return -1 on failure, node value on success */ -static int str2node(char *node) +static int parse_node(const char *node) { if (!strcasecmp(node, "cpe") || !strcasecmp(node, "user")) return PRI_CPE; @@ -1255,7 +1246,7 @@ static int str2node(char *node) * \param swtype Swtype string to convert * \return Switch value */ -static int str2switch(char *swtype) +static int parse_switch(const char *swtype) { if (!strcasecmp(swtype, "ni1")) return PRI_SWITCH_NI1; @@ -1273,6 +1264,7 @@ static int str2switch(char *swtype) return PRI_SWITCH_GR303_EOC; if (!strcasecmp(swtype, "gr303tmc")) return PRI_SWITCH_GR303_TMC; + return PRI_SWITCH_DMS100; } @@ -1281,11 +1273,11 @@ static int str2switch(char *swtype) * \param l1 L1 string to convert * \return L1 value */ -static int str2l1(char *l1) +static int parse_l1(const char *l1) { if (!strcasecmp(l1, "alaw")) return PRI_LAYER_1_ALAW; - + return PRI_LAYER_1_ULAW; } @@ -1294,7 +1286,7 @@ static int str2l1(char *l1) * \param dp DP string to convert * \return DP value */ -static int str2dp(char *dp) +static int parse_numplan(const char *dp) { if (!strcasecmp(dp, "international")) return PRI_INTERNATIONAL_ISDN; @@ -1310,6 +1302,32 @@ static int str2dp(char *dp) return PRI_UNKNOWN; } +/** + * \brief Parses an option string to flags + * \param in String to parse for configuration options + * \return Flags + */ +static uint32_t parse_opts(const char *in) +{ + uint32_t flags = 0; + + if (!in) { + return 0; + } + + if (strstr(in, "suggest_channel")) { + flags |= FTMOD_LIBPRI_OPT_SUGGEST_CHANNEL; + } + if (strstr(in, "omit_display")) { + flags |= FTMOD_LIBPRI_OPT_OMIT_DISPLAY_IE; + } + if (strstr(in, "omit_redirecting_number")) { + flags |= FTMOD_LIBPRI_OPT_OMIT_REDIRECTING_NUMBER_IE; + } + + return flags; +} + /** * \brief Initialises a libpri span from configuration variables * \param span Span to configure @@ -1323,13 +1341,12 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_libpri_configure_span) //ftdm_channel_t *dchans[2] = {0}; ftdm_libpri_data_t *isdn_data; char *var, *val; - char *debug = NULL; if (span->trunk_type >= FTDM_TRUNK_NONE) { ftdm_log(FTDM_LOG_WARNING, "Invalid trunk type '%s' defaulting to T1.\n", ftdm_trunk_type2str(span->trunk_type)); span->trunk_type = FTDM_TRUNK_T1; } - + for(i = 1; i <= span->chan_count; i++) { if (span->channels[i]->type == FTDM_CHAN_TYPE_DQ921) { if (x > 1) { @@ -1346,7 +1363,7 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_libpri_configure_span) } } } - + #if 0 if (!x) { snprintf(span->last_error, sizeof(span->last_error), "Span has no D-Channels!"); @@ -1358,88 +1375,77 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_libpri_configure_span) assert(isdn_data != NULL); memset(isdn_data, 0, sizeof(*isdn_data)); - if (span->trunk_type == FTDM_TRUNK_E1) { - ftdm_log(FTDM_LOG_NOTICE, "Setting default Layer 1 to ALAW since this is an E1 trunk\n"); - isdn_data->l1 = PRI_LAYER_1_ALAW; - } else if (span->trunk_type == FTDM_TRUNK_T1) { - ftdm_log(FTDM_LOG_NOTICE, "Setting default Layer 1 to ULAW since this is a T1 trunk\n"); - isdn_data->l1 = PRI_LAYER_1_ULAW; - } - - while((var = va_arg(ap, char *))) { + if (span->trunk_type == FTDM_TRUNK_E1) { + ftdm_log(FTDM_LOG_NOTICE, "Setting default Layer 1 to ALAW since this is an E1 trunk\n"); + isdn_data->l1 = PRI_LAYER_1_ALAW; + } else if (span->trunk_type == FTDM_TRUNK_T1) { + ftdm_log(FTDM_LOG_NOTICE, "Setting default Layer 1 to ULAW since this is a T1 trunk\n"); + isdn_data->l1 = PRI_LAYER_1_ULAW; + } + + while ((var = va_arg(ap, char *))) { + val = va_arg(ap, char *); + + if (!val) { + ftdm_log(FTDM_LOG_ERROR, "Parameter '%s' has no value\n", var); + return FTDM_FAIL; + } + if (!strcasecmp(var, "node")) { - int node; - if (!(val = va_arg(ap, char *))) { - break; - } - node = str2node(val); - if (-1 == node) { - ftdm_log(FTDM_LOG_ERROR, "Unknown node type %s, defaulting to CPE mode\n", val); - node = PRI_CPE; - } - isdn_data->node = node; - } else if (!strcasecmp(var, "switch")) { - if (!(val = va_arg(ap, char *))) { - break; - } - isdn_data->pswitch = str2switch(val); - } else if (!strcasecmp(var, "opts")) { - if (!(val = va_arg(ap, char *))) { - break; + if ((isdn_data->node = parse_node(val)) == -1) { + ftdm_log(FTDM_LOG_ERROR, "Unknown node type '%s', defaulting to CPE mode\n", val); + isdn_data->node = PRI_CPE; } + } + else if (!strcasecmp(var, "switch")) { + isdn_data->pswitch = parse_switch(val); + } + else if (!strcasecmp(var, "opts")) { isdn_data->opts = parse_opts(val); - } else if (!strcasecmp(var, "dp")) { - if (!(val = va_arg(ap, char *))) { - break; - } - isdn_data->dp = str2dp(val); - } else if (!strcasecmp(var, "l1")) { - if (!(val = va_arg(ap, char *))) { - break; - } - isdn_data->l1 = str2l1(val); - } else if (!strcasecmp(var, "debug")) { - if (!(val = va_arg(ap, char *))) { - break; - } - debug = val; - } else { + } + else if (!strcasecmp(var, "dp")) { + isdn_data->dp = parse_numplan(val); + } + else if (!strcasecmp(var, "l1")) { + isdn_data->l1 = parse_l1(val); + } + else if (!strcasecmp(var, "debug")) { + isdn_data->debug = parse_debug(val); + } + else { snprintf(span->last_error, sizeof(span->last_error), "Unknown parameter [%s]", var); return FTDM_FAIL; } } - + span->start = ftdm_libpri_start; - span->stop = ftdm_libpri_stop; + span->stop = ftdm_libpri_stop; span->signal_cb = sig_cb; //isdn_data->dchans[0] = dchans[0]; //isdn_data->dchans[1] = dchans[1]; //isdn_data->dchan = isdn_data->dchans[0]; - - isdn_data->debug = parse_debug(debug); - span->signal_data = isdn_data; span->signal_type = FTDM_SIGTYPE_ISDN; span->outgoing_call = isdn_outgoing_call; + span->state_map = &isdn_state_map; + span->get_channel_sig_status = isdn_get_channel_sig_status; span->get_span_sig_status = isdn_get_span_sig_status; - + if ((isdn_data->opts & FTMOD_LIBPRI_OPT_SUGGEST_CHANNEL)) { span->channel_request = isdn_channel_request; ftdm_set_flag(span, FTDM_SPAN_SUGGEST_CHAN_ID); } - span->state_map = &isdn_state_map; - return FTDM_SUCCESS; } /** * \brief FreeTDM libpri signaling and IO module definition */ -ftdm_module_t ftdm_module = { +ftdm_module_t ftdm_module = { "libpri", ftdm_libpri_io_init, ftdm_libpri_unload, @@ -1448,7 +1454,6 @@ ftdm_module_t ftdm_module = { NULL }; - /* For Emacs: * Local Variables: * mode:c diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c index 8dfba34ec3..2cfdd82228 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c @@ -1,23 +1,23 @@ /* * Copyright (c) 2009, Anthony Minessale II * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * + * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - * + * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * + * * * Neither the name of the original author; nor the names of any contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * - * + * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -106,7 +106,7 @@ static struct lpwrap_pri_event_list LPWRAP_PRI_EVENT_LIST[] = { #define LINE "--------------------------------------------------------------------------------" const char *lpwrap_pri_event_str(lpwrap_pri_event_t event_id) -{ +{ return LPWRAP_PRI_EVENT_LIST[event_id].name; } @@ -124,7 +124,7 @@ static int __pri_lpwrap_read(struct pri *pri, void *buf, int buflen) } else { ftdm_log(FTDM_LOG_CRIT, "span %d D-READ TIMEOUT\n", spri->span->span_id); } - + ftdm_clear_flag(spri, LPWRAP_PRI_READY); return -1; } @@ -173,21 +173,56 @@ int lpwrap_init_pri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t * int ret = -1; memset(spri, 0, sizeof(struct lpwrap_pri)); - spri->dchan = dchan; - spri->span = span; + spri->span = span; - if (spri->dchan && (spri->pri = pri_new_cb(spri->dchan->sockfd, node, swtype, __pri_lpwrap_read, __pri_lpwrap_write, spri))){ - unsigned char buf[4] = { 0 }; - size_t buflen = sizeof(buf), len = 0; - pri_set_debug(spri->pri, debug); - ret = 0; - - ftdm_channel_write(spri->dchan, buf, buflen, &len); - } else { - fprintf(stderr, "Unable to create PRI\n"); + if (!spri->dchan) { + ftdm_log(FTDM_LOG_ERROR, "No D-Channel available, unable to create PRI\n"); + return ret; } + if ((spri->pri = pri_new_cb(spri->dchan->sockfd, node, swtype, __pri_lpwrap_read, __pri_lpwrap_write, spri))) { + unsigned char buf[4] = { 0 }; + size_t buflen = sizeof(buf), len = 0; + + pri_set_debug(spri->pri, debug); + ftdm_channel_write(spri->dchan, buf, buflen, &len); + + ret = 0; + } else { + ftdm_log(FTDM_LOG_ERROR, "Unable to create PRI\n"); + } + return ret; +} + +int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int ptmp, int debug) +{ + int ret = -1; +#ifdef HAVE_LIBPRI_BRI + memset(spri, 0, sizeof(struct lpwrap_pri)); + spri->dchan = dchan; + spri->span = span; + + if (!spri->dchan) { + ftdm_log(FTDM_LOG_ERROR, "No D-Channel available, unable to create BRI\n"); + return ret; + } + + if ((spri->pri = pri_new_bri_cb(spri->dchan->sockfd, ptmp, node, swtype, __pri_lpwrap_read, __pri_lpwrap_write, spri))) { + unsigned char buf[4] = { 0 }; + size_t buflen = sizeof(buf), len = 0; + + pri_set_debug(spri->pri, debug); + ftdm_channel_write(spri->dchan, buf, buflen, &len); + + ret = 0; + } else { + ftdm_log(FTDM_LOG_ERROR, "Unable to create BRI\n"); + } +#else + ftdm_log(FTDM_LOG_ERROR, "Installed libpri version (%s) has no BRI support\n", + pri_get_version()); +#endif return ret; } @@ -198,8 +233,8 @@ int lpwrap_one_loop(struct lpwrap_pri *spri) struct timeval now = {0,0}, *next; pri_event *event; event_handler handler; - int sel; - + int sel; + if (spri->on_loop) { if ((sel = spri->on_loop(spri)) < 0) { return sel; @@ -269,7 +304,7 @@ int lpwrap_one_loop(struct lpwrap_pri *spri) int lpwrap_run_pri(struct lpwrap_pri *spri) { int ret = 0; - + for (;;){ ret = lpwrap_one_loop(spri); @@ -280,7 +315,7 @@ int lpwrap_run_pri(struct lpwrap_pri *spri) /* Igonore an interrupted system call */ continue; } -#endif +#endif ftdm_log(FTDM_LOG_CRIT, "Error = %i [%s]\n", ret, strerror(errno)); break; } @@ -300,4 +335,3 @@ int lpwrap_run_pri(struct lpwrap_pri *spri) * For VIM: * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ - diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h index f92c5bbafa..d3d1c43768 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h +++ b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h @@ -121,6 +121,8 @@ struct lpwrap_pri_event_list { const char *lpwrap_pri_event_str(lpwrap_pri_event_t event_id); int lpwrap_one_loop(struct lpwrap_pri *spri); int lpwrap_init_pri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int debug); +int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int ptmp, int debug); int lpwrap_run_pri(struct lpwrap_pri *spri); +#define lpwrap_run_bri(x) lpwrap_run_pri(x) #endif From 30fb69bbabab3ce098638642680976c463593238 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Sat, 6 Nov 2010 17:58:41 +0100 Subject: [PATCH 204/230] ftmod_libpri: temporary segfault fix if libpri does not have BRI support --- libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index 6e09562a7e..9fed12da88 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -1100,10 +1100,16 @@ static void *ftdm_libpri_run(ftdm_thread_t *me, void *obj) case FTDM_TRUNK_BRI: res = lpwrap_init_bri(&isdn_data->spri, span, isdn_data->dchan, isdn_data->pswitch, isdn_data->node, 0, isdn_data->debug); +#ifndef HAVE_LIBPRI_BRI + goto out; +#endif break; case FTDM_TRUNK_BRI_PTMP: res = lpwrap_init_bri(&isdn_data->spri, span, isdn_data->dchan, isdn_data->pswitch, isdn_data->node, 1, isdn_data->debug); +#ifndef HAVE_LIBPRI_BRI + goto out; +#endif break; default: snprintf(span->last_error, sizeof(span->last_error), "Invalid trunk type"); From 6ca919be615a2a6db1a3096e5068b9b9265ad28a Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Sat, 6 Nov 2010 18:12:27 +0100 Subject: [PATCH 205/230] ftmod_libpri: BRI Support requires libpri-1.4.12_beta1 or newer, add message to configure check --- libs/freetdm/configure.ac | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/freetdm/configure.ac b/libs/freetdm/configure.ac index c27d1160dc..7589957999 100644 --- a/libs/freetdm/configure.ac +++ b/libs/freetdm/configure.ac @@ -215,7 +215,8 @@ then )], [AC_DEFINE([HAVE_LIBPRI_BRI], [1], [libpri has bri support]) AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no])] + [AC_MSG_RESULT([no]) + AC_MSG_NOTICE([You will need libpri-1.4.12_beta1 or newer for BRI support])] ) LIBS="${save_LIBS}" fi From 1627f6a541239d14db1db6cefd781c4f8aebd127 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Sat, 6 Nov 2010 12:24:30 -0500 Subject: [PATCH 206/230] windows openssl fix spaces is build path --- libs/win32/openssl/libeay32.2008.vcproj | 8 +++---- libs/win32/openssl/libeay32.2010.vcxproj | 29 ++++++------------------ libs/win32/openssl/ssleay32.2008.vcproj | 8 +++---- libs/win32/openssl/ssleay32.2010.vcxproj | 8 +++---- 4 files changed, 19 insertions(+), 34 deletions(-) diff --git a/libs/win32/openssl/libeay32.2008.vcproj b/libs/win32/openssl/libeay32.2008.vcproj index 84cc80b4ee..5681c7cfb9 100644 --- a/libs/win32/openssl/libeay32.2008.vcproj +++ b/libs/win32/openssl/libeay32.2008.vcproj @@ -32,7 +32,7 @@ > - copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h -copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c -copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h -copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def + copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h" +copy /Y "$(ProjectDir)applink.c" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c" +copy /Y "$(ProjectDir)buildinf.h" "$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h" +copy /Y "$(ProjectDir)libeay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def" if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S @@ -115,12 +115,7 @@ if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$ - copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h -copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c -copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h -copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def -if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S - + copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h" X64 @@ -151,12 +146,7 @@ if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$ - copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h -copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c -copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h -copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def -if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S - + copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h" /Gs0 %(AdditionalOptions) @@ -185,12 +175,7 @@ if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$ - copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h -copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c -copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h -copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def -if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S - + copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h" X64 diff --git a/libs/win32/openssl/ssleay32.2008.vcproj b/libs/win32/openssl/ssleay32.2008.vcproj index 1d8654a882..fef7e5c947 100644 --- a/libs/win32/openssl/ssleay32.2008.vcproj +++ b/libs/win32/openssl/ssleay32.2008.vcproj @@ -29,7 +29,7 @@ > - copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def + copy /Y "$(ProjectDir)ssleay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def" /Gs0 %(AdditionalOptions) @@ -107,7 +107,7 @@ - copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def + copy /Y "$(ProjectDir)ssleay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def" /Gs0 %(AdditionalOptions) @@ -134,7 +134,7 @@ - copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def + copy /Y "$(ProjectDir)ssleay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def" X64 @@ -164,7 +164,7 @@ - copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def + copy /Y "$(ProjectDir)ssleay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def" X64 From b9391cffc2e82c27184e81cd8723677d9e100ce2 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Sat, 6 Nov 2010 18:28:37 +0100 Subject: [PATCH 207/230] ftmod_libpri: Fix reversed PTP/PTMP mode parameter --- libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c | 4 ++-- libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c | 5 +++-- libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index 9fed12da88..137efae52b 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -1099,14 +1099,14 @@ static void *ftdm_libpri_run(ftdm_thread_t *me, void *obj) break; case FTDM_TRUNK_BRI: res = lpwrap_init_bri(&isdn_data->spri, span, isdn_data->dchan, - isdn_data->pswitch, isdn_data->node, 0, isdn_data->debug); + isdn_data->pswitch, isdn_data->node, 1, isdn_data->debug); #ifndef HAVE_LIBPRI_BRI goto out; #endif break; case FTDM_TRUNK_BRI_PTMP: res = lpwrap_init_bri(&isdn_data->spri, span, isdn_data->dchan, - isdn_data->pswitch, isdn_data->node, 1, isdn_data->debug); + isdn_data->pswitch, isdn_data->node, 0, isdn_data->debug); #ifndef HAVE_LIBPRI_BRI goto out; #endif diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c index 2cfdd82228..5b04abec1b 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c @@ -195,9 +195,10 @@ int lpwrap_init_pri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t * return ret; } -int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int ptmp, int debug) +int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int ptp, int debug) { int ret = -1; + #ifdef HAVE_LIBPRI_BRI memset(spri, 0, sizeof(struct lpwrap_pri)); spri->dchan = dchan; @@ -208,7 +209,7 @@ int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t * return ret; } - if ((spri->pri = pri_new_bri_cb(spri->dchan->sockfd, ptmp, node, swtype, __pri_lpwrap_read, __pri_lpwrap_write, spri))) { + if ((spri->pri = pri_new_bri_cb(spri->dchan->sockfd, ptp, node, swtype, __pri_lpwrap_read, __pri_lpwrap_write, spri))) { unsigned char buf[4] = { 0 }; size_t buflen = sizeof(buf), len = 0; diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h index d3d1c43768..4701e27e18 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h +++ b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h @@ -121,7 +121,7 @@ struct lpwrap_pri_event_list { const char *lpwrap_pri_event_str(lpwrap_pri_event_t event_id); int lpwrap_one_loop(struct lpwrap_pri *spri); int lpwrap_init_pri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int debug); -int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int ptmp, int debug); +int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int ptp, int debug); int lpwrap_run_pri(struct lpwrap_pri *spri); #define lpwrap_run_bri(x) lpwrap_run_pri(x) From b0e622987a6242156ed9009a4f555deb6d882943 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Sat, 6 Nov 2010 13:22:20 -0500 Subject: [PATCH 208/230] windows fix for last openssl commit --- libs/win32/openssl/libeay32.2010.vcxproj | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/libs/win32/openssl/libeay32.2010.vcxproj b/libs/win32/openssl/libeay32.2010.vcxproj index 135f482312..ce341a547a 100644 --- a/libs/win32/openssl/libeay32.2010.vcxproj +++ b/libs/win32/openssl/libeay32.2010.vcxproj @@ -115,7 +115,12 @@ if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$ - copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h" + copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h" +copy /Y "$(ProjectDir)applink.c" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c" +copy /Y "$(ProjectDir)buildinf.h" "$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h" +copy /Y "$(ProjectDir)libeay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def" +if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S + X64 @@ -146,7 +151,12 @@ if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$ - copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h" + copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h" +copy /Y "$(ProjectDir)applink.c" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c" +copy /Y "$(ProjectDir)buildinf.h" "$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h" +copy /Y "$(ProjectDir)libeay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def" +if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S + /Gs0 %(AdditionalOptions) @@ -175,7 +185,12 @@ if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$ - copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h" + copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h" +copy /Y "$(ProjectDir)applink.c" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c" +copy /Y "$(ProjectDir)buildinf.h" "$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h" +copy /Y "$(ProjectDir)libeay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def" +if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S + X64 From 46a9fa3910fa594188cb49b50b014e1ff6a1d403 Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Sat, 6 Nov 2010 17:14:31 -0400 Subject: [PATCH 209/230] freetdm: add debugging msgs for zt wait errors --- libs/freetdm/mod_freetdm/mod_freetdm.c | 2 +- libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c index 3ad4393ab5..48bff28b0a 100755 --- a/libs/freetdm/mod_freetdm/mod_freetdm.c +++ b/libs/freetdm/mod_freetdm/mod_freetdm.c @@ -657,7 +657,7 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch status = ftdm_channel_wait(tech_pvt->ftdmchan, &wflags, chunk); if (status == FTDM_FAIL) { - ftdm_log(FTDM_LOG_WARNING, "failed to wait for I/O\n"); + ftdm_log(FTDM_LOG_ERROR, "Failed to wait for I/O\n"); goto fail; } diff --git a/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c b/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c index ae9398418a..692b505716 100644 --- a/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c +++ b/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c @@ -867,7 +867,7 @@ static FIO_WAIT_FUNCTION(zt_wait) { int32_t inflags = 0; int result; - struct pollfd pfds[1]; + struct pollfd pfds[1]; if (*flags & FTDM_READ) { inflags |= POLLIN; @@ -882,13 +882,14 @@ static FIO_WAIT_FUNCTION(zt_wait) } - memset(&pfds[0], 0, sizeof(pfds[0])); - pfds[0].fd = ftdmchan->sockfd; - pfds[0].events = inflags; - result = poll(pfds, 1, to); + memset(&pfds[0], 0, sizeof(pfds[0])); + pfds[0].fd = ftdmchan->sockfd; + pfds[0].events = inflags; + result = poll(pfds, 1, to); *flags = 0; if (pfds[0].revents & POLLERR) { + ftdm_log_chan_msg(ftdmchan, FTDM_LOG_ERROR, "DAHDI device got POLLERR\n"); result = -1; } @@ -900,6 +901,7 @@ static FIO_WAIT_FUNCTION(zt_wait) if (result < 0){ snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "Poll failed"); + ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Failed to poll DAHDI device: %s\n", strerror(errno)); return FTDM_FAIL; } From 6e217401d93091729a7fd7dd22a36a822e6eacb4 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Sun, 7 Nov 2010 15:48:39 +0100 Subject: [PATCH 210/230] ftmod_libpri: Rework debug flag handling, make BRI/BRI PTMP default to alaw too (does not work yet) Signed-off-by: Stefan Knoblich --- .../src/ftmod/ftmod_libpri/ftmod_libpri.c | 141 +++++++++++------- 1 file changed, 91 insertions(+), 50 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index 137efae52b..c8713d35b3 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -34,6 +34,10 @@ #include "private/ftdm_core.h" #include "ftmod_libpri.h" +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(x) (sizeof((x)) / sizeof((x)[0])) +#endif + /** * \brief Unloads libpri IO module * \return Success @@ -143,54 +147,54 @@ static void s_pri_message(struct pri *pri, char *s) ftdm_log(FTDM_LOG_DEBUG, "%s", s); } +static const struct ftdm_libpri_debug { + const char *name; + const int flags; +} ftdm_libpri_debug[] = { + { "q921_raw", PRI_DEBUG_Q921_RAW }, + { "q921_dump", PRI_DEBUG_Q921_DUMP }, + { "q921_state", PRI_DEBUG_Q921_STATE }, + { "q921_all", (PRI_DEBUG_Q921_RAW | PRI_DEBUG_Q921_DUMP | PRI_DEBUG_Q921_STATE) }, + + { "q931_dump", PRI_DEBUG_Q931_DUMP }, + { "q931_state", PRI_DEBUG_Q931_STATE }, + { "q931_anomaly", PRI_DEBUG_Q931_ANOMALY }, + { "q931_all", (PRI_DEBUG_Q931_DUMP | PRI_DEBUG_Q931_STATE | PRI_DEBUG_Q931_ANOMALY) }, + + { "config", PRI_DEBUG_CONFIG }, + { "apdu", PRI_DEBUG_APDU }, + { "aoc", PRI_DEBUG_AOC } +}; + /** * \brief Parses a debug string to flags * \param in Debug string to parse for - * \return Flags + * \return Flags or -1 if nothing matched */ -static int parse_debug(const char *in) +static int parse_debug(const char *in, int *flags) { - int flags = 0; + int res = -1; + int i; - if (!in) { + if (!in || !flags) + return -1; + + if (!strcmp(in, "all")) { + *flags = PRI_DEBUG_ALL; + return 0; + } + if (strstr(in, "none")) { + *flags = 0; return 0; } - if (strstr(in, "q921_raw")) { - flags |= PRI_DEBUG_Q921_RAW; + for (i = 0; i < ARRAY_SIZE(ftdm_libpri_debug); i++) { + if (strstr(in, ftdm_libpri_debug[i].name)) { + *flags |= ftdm_libpri_debug[i].flags; + res = 0; + } } - if (strstr(in, "q921_dump")) { - flags |= PRI_DEBUG_Q921_DUMP; - } - if (strstr(in, "q921_state")) { - flags |= PRI_DEBUG_Q921_STATE; - } - if (strstr(in, "config")) { - flags |= PRI_DEBUG_CONFIG; - } - if (strstr(in, "q931_dump")) { - flags |= PRI_DEBUG_Q931_DUMP; - } - if (strstr(in, "q931_state")) { - flags |= PRI_DEBUG_Q931_STATE; - } - if (strstr(in, "q931_anomaly")) { - flags |= PRI_DEBUG_Q931_ANOMALY; - } - if (strstr(in, "apdu")) { - flags |= PRI_DEBUG_APDU; - } - if (strstr(in, "aoc")) { - flags |= PRI_DEBUG_AOC; - } - if (strstr(in, "all")) { - flags |= PRI_DEBUG_ALL; - } - if (strstr(in, "none")) { - flags = 0; - } - - return flags; + return res; } static ftdm_status_t ftdm_libpri_start(ftdm_span_t *span); @@ -199,7 +203,25 @@ static ftdm_io_interface_t ftdm_libpri_interface; static const char *ftdm_libpri_usage = "Usage:\n" "libpri kill \n" - "libpri debug \n"; + "libpri debug \n" + "\n" + "Possible debug flags:\n" + "\tq921_raw - Q.921 Raw messages\n" + "\tq921_dump - Q.921 Decoded messages\n" + "\tq921_state - Q.921 State machine changes\n" + "\tq921_all - Enable all Q.921 debug options\n" + "\n" + "\tq931_dump - Q.931 Messages\n" + "\tq931_state - Q.931 State machine changes\n" + "\tq931_anomaly - Q.931 Anomalies\n" + "\tq931_all - Enable all Q.931 debug options\n" + "\n" + "\tapdu - Application protocol data unit\n" + "\taoc - Advice of Charge messages\n" + "\tconfig - Configuration\n" + "\n" + "\tnone - Disable debugging\n" + "\tall - Enable all debug options\n"; /** * \brief API function to kill or debug a libpri span @@ -253,13 +275,20 @@ static FIO_API_FUNCTION(ftdm_libpri_api) if (ftdm_span_find_by_name(argv[1], &span) == FTDM_SUCCESS) { ftdm_libpri_data_t *isdn_data = span->signal_data; + int flags = 0; + if (span->start != ftdm_libpri_start) { stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__); goto done; } - pri_set_debug(isdn_data->spri.pri, parse_debug(argv[2])); - stream->write_function(stream, "%s: +OK debug set.\n", __FILE__); + if (parse_debug(argv[2], &flags) == -1) { + stream->write_function(stream, "%s: -ERR invalid debug flags given\n", __FILE__); + goto done; + } + + pri_set_debug(isdn_data->spri.pri, flags); + stream->write_function(stream, "%s: +OK debug %s.\n", __FILE__, (flags) ? "enabled" : "disabled"); goto done; } else { stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__); @@ -1090,7 +1119,7 @@ static void *ftdm_libpri_run(ftdm_thread_t *me, void *obj) } /* Initialize libpri trunk */ - switch (span->trunk_type) { + switch (ftdm_span_get_trunk_type(span)) { case FTDM_TRUNK_E1: case FTDM_TRUNK_T1: case FTDM_TRUNK_J1: @@ -1348,9 +1377,9 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_libpri_configure_span) ftdm_libpri_data_t *isdn_data; char *var, *val; - if (span->trunk_type >= FTDM_TRUNK_NONE) { - ftdm_log(FTDM_LOG_WARNING, "Invalid trunk type '%s' defaulting to T1.\n", ftdm_trunk_type2str(span->trunk_type)); - span->trunk_type = FTDM_TRUNK_T1; + if (ftdm_span_get_trunk_type(span) >= FTDM_TRUNK_NONE) { + ftdm_log(FTDM_LOG_WARNING, "Invalid trunk type '%s' defaulting to T1.\n", ftdm_trunk_type2str(ftdm_span_get_trunk_type(span))); + ftdm_span_set_trunk_type(span, FTDM_TRUNK_T1); } for(i = 1; i <= span->chan_count; i++) { @@ -1381,12 +1410,21 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_libpri_configure_span) assert(isdn_data != NULL); memset(isdn_data, 0, sizeof(*isdn_data)); - if (span->trunk_type == FTDM_TRUNK_E1) { - ftdm_log(FTDM_LOG_NOTICE, "Setting default Layer 1 to ALAW since this is an E1 trunk\n"); + switch (ftdm_span_get_trunk_type(span)) { + case FTDM_TRUNK_E1: + case FTDM_TRUNK_BRI: + case FTDM_TRUNK_BRI_PTMP: + ftdm_log(FTDM_LOG_NOTICE, "Setting default Layer 1 to ALAW since this is an E1/BRI/BRI PTMP trunk\n"); isdn_data->l1 = PRI_LAYER_1_ALAW; - } else if (span->trunk_type == FTDM_TRUNK_T1) { - ftdm_log(FTDM_LOG_NOTICE, "Setting default Layer 1 to ULAW since this is a T1 trunk\n"); + break; + case FTDM_TRUNK_T1: + case FTDM_TRUNK_J1: + ftdm_log(FTDM_LOG_NOTICE, "Setting default Layer 1 to ULAW since this is a T1/J1 trunk\n"); isdn_data->l1 = PRI_LAYER_1_ULAW; + break; + default: + ftdm_log(FTDM_LOG_ERROR, "Invalid trunk type\n"); + return FTDM_FAIL; } while ((var = va_arg(ap, char *))) { @@ -1416,7 +1454,10 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_libpri_configure_span) isdn_data->l1 = parse_l1(val); } else if (!strcasecmp(var, "debug")) { - isdn_data->debug = parse_debug(val); + if (parse_debug(val, &isdn_data->debug) == -1) { + ftdm_log(FTDM_LOG_ERROR, "Invalid debug flag, ignoring parameter\n"); + isdn_data->debug = 0; + } } else { snprintf(span->last_error, sizeof(span->last_error), "Unknown parameter [%s]", var); From 78eff1d82195bcf72614d62776a72e6770e05e78 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Sun, 7 Nov 2010 17:00:54 +0100 Subject: [PATCH 211/230] freetdm: convert ftmod_libpri (+ libpri_spans) to use new ftdm_configure_span_signaling() interface. This fixes several issues with parameter handling (e.g. default alaw/ulaw selection being totally useless). Signed-off-by: Stefan Knoblich --- libs/freetdm/mod_freetdm/mod_freetdm.c | 81 +++++-------------- .../src/ftmod/ftmod_libpri/ftmod_libpri.c | 17 ++-- 2 files changed, 30 insertions(+), 68 deletions(-) diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c index 48bff28b0a..3b74f2e884 100755 --- a/libs/freetdm/mod_freetdm/mod_freetdm.c +++ b/libs/freetdm/mod_freetdm/mod_freetdm.c @@ -3087,85 +3087,44 @@ static switch_status_t load_config(void) if ((spans = switch_xml_child(cfg, "libpri_spans"))) { for (myspan = switch_xml_child(spans, "span"); myspan; myspan = myspan->next) { - char *id = (char *) switch_xml_attr(myspan, "id"); char *name = (char *) switch_xml_attr(myspan, "name"); + ftdm_conf_parameter_t spanparameters[10]; ftdm_status_t zstatus = FTDM_FAIL; - const char *context = "default"; + const char *context = "default"; const char *dialplan = "XML"; - - const char *o_node = "cpe"; - const char *o_switch = "dms100"; - const char *o_dp = "unknown"; - const char *o_l1 = "ulaw"; - const char *o_debug = "none"; - const char* opts = "none"; - - uint32_t span_id = 0; + unsigned paramindex = 0; ftdm_span_t *span = NULL; + uint32_t span_id = 0; - - for (param = switch_xml_child(myspan, "param"); param; param = param->next) { + if (!name) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "span missing required attribute 'name'\n"); + continue; + } + + for (param = switch_xml_child(myspan, "param"); param && paramindex < 10; param = param->next) { char *var = (char *) switch_xml_attr_soft(param, "name"); char *val = (char *) switch_xml_attr_soft(param, "value"); - if (!strcasecmp(var, "node")) { - o_node = val; - } else if (!strcasecmp(var, "switch")) { - o_switch = val; - } else if (!strcasecmp(var, "dp")) { - o_dp = val; - } else if (!strcasecmp(var, "l1")) { - o_l1 = val; - } else if (!strcasecmp(var, "debug")) { - o_debug = val; - } else if (!strcasecmp(var, "context")) { + if (!strcasecmp(var, "context")) { context = val; - } else if (!strcasecmp(var, "opts")) { - opts = val; } else if (!strcasecmp(var, "dialplan")) { dialplan = val; - } - } - - if (!id && !name) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "span missing required param 'id'\n"); - continue; - } - - if (name) { - zstatus = ftdm_span_find_by_name(name, &span); - } else { - if (switch_is_number(id)) { - span_id = atoi(id); - zstatus = ftdm_span_find(span_id, &span); - } - - if (zstatus != FTDM_SUCCESS) { - zstatus = ftdm_span_find_by_name(id, &span); + } else { + spanparameters[paramindex].var = var; + spanparameters[paramindex].val = val; + paramindex++; } } + zstatus = ftdm_span_find_by_name(name, &span); if (zstatus != FTDM_SUCCESS) { - ftdm_log(FTDM_LOG_ERROR, "Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name)); + ftdm_log(FTDM_LOG_ERROR, "Error finding FreeTDM span %s\n", name); continue; } - if (!span_id) { - span_id = ftdm_span_get_id(span); - } - - - if (ftdm_configure_span(span, "libpri", on_clear_channel_signal, - "node", o_node, - "switch", o_switch, - "dp", o_dp, - "l1", o_l1, - "debug", o_debug, - "opts", opts, - FTDM_TAG_END) != FTDM_SUCCESS) { - ftdm_log(FTDM_LOG_ERROR, "Error starting FreeTDM span %d node: %s switch: %s dp: %s l1: %s debug: %s error: %s\n", - span_id, switch_str_nil(o_node), switch_str_nil(o_switch), switch_str_nil(o_dp), switch_str_nil(o_l1), switch_str_nil(o_debug), - ftdm_span_get_last_error(span)); + span_id = ftdm_span_get_id(span); + if (ftdm_configure_span_signaling(span, "libpri", on_clear_channel_signal, spanparameters) != FTDM_SUCCESS) { + ftdm_log(FTDM_LOG_ERROR, "Error configuring FreeTDM span %s\n", name); continue; } diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index c8713d35b3..114e656cb6 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -1367,15 +1367,16 @@ static uint32_t parse_opts(const char *in) * \brief Initialises a libpri span from configuration variables * \param span Span to configure * \param sig_cb Callback function for event signals - * \param ap List of configuration variables + * \param ftdm_parameters List of configuration variables * \return Success or failure */ -static FIO_SIG_CONFIGURE_FUNCTION(ftdm_libpri_configure_span) +static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_libpri_configure_span) { uint32_t i, x = 0; + uint32_t paramindex = 0; //ftdm_channel_t *dchans[2] = {0}; ftdm_libpri_data_t *isdn_data; - char *var, *val; + const char *var, *val; if (ftdm_span_get_trunk_type(span) >= FTDM_TRUNK_NONE) { ftdm_log(FTDM_LOG_WARNING, "Invalid trunk type '%s' defaulting to T1.\n", ftdm_trunk_type2str(ftdm_span_get_trunk_type(span))); @@ -1427,8 +1428,9 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_libpri_configure_span) return FTDM_FAIL; } - while ((var = va_arg(ap, char *))) { - val = va_arg(ap, char *); + for (paramindex = 0; paramindex < 10 && ftdm_parameters[paramindex].var; paramindex++) { + var = ftdm_parameters[paramindex].var; + val = ftdm_parameters[paramindex].val; if (!val) { ftdm_log(FTDM_LOG_ERROR, "Parameter '%s' has no value\n", var); @@ -1497,8 +1499,9 @@ ftdm_module_t ftdm_module = { ftdm_libpri_io_init, ftdm_libpri_unload, ftdm_libpri_init, - ftdm_libpri_configure_span, - NULL + NULL, + NULL, + ftdm_libpri_configure_span }; /* For Emacs: From 81515b7bd84247e2005b5a34505bc937fe527711 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Sun, 7 Nov 2010 17:22:22 +0100 Subject: [PATCH 212/230] ftmod_libpri: Improve "ftdm libpri debug" usage information. "all" and "none" can only be used alone, other flags are additive. Signed-off-by: Stefan Knoblich --- libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index 114e656cb6..51f7164e0e 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -203,7 +203,7 @@ static ftdm_io_interface_t ftdm_libpri_interface; static const char *ftdm_libpri_usage = "Usage:\n" "libpri kill \n" - "libpri debug \n" + "libpri debug \n" "\n" "Possible debug flags:\n" "\tq921_raw - Q.921 Raw messages\n" From 428d05349a343339820b16d65c742515885e2e49 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Sun, 7 Nov 2010 19:55:00 +0100 Subject: [PATCH 213/230] ftmod_libpri: Write fatal error message during span configuration to console (and to span error log). Signed-off-by: Stefan Knoblich --- libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index 51f7164e0e..ccb2342b02 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -1424,7 +1424,8 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_libpri_configure_span) isdn_data->l1 = PRI_LAYER_1_ULAW; break; default: - ftdm_log(FTDM_LOG_ERROR, "Invalid trunk type\n"); + ftdm_log(FTDM_LOG_ERROR, "Invalid trunk type: '%s'\n", ftdm_trunk_type2str(ftdm_span_get_trunk_type(span))); + snprintf(span->last_error, sizeof(span->last_error), "Invalid trunk type [%s]", ftdm_trunk_type2str(ftdm_span_get_trunk_type(span))); return FTDM_FAIL; } @@ -1434,6 +1435,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_libpri_configure_span) if (!val) { ftdm_log(FTDM_LOG_ERROR, "Parameter '%s' has no value\n", var); + snprintf(span->last_error, sizeof(span->last_error), "Parameter [%s] has no value", var); return FTDM_FAIL; } @@ -1462,6 +1464,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_libpri_configure_span) } } else { + ftdm_log(FTDM_LOG_ERROR, "Unknown parameter '%s', aborting configuration\n", var); snprintf(span->last_error, sizeof(span->last_error), "Unknown parameter [%s]", var); return FTDM_FAIL; } From ab87f627f77be6fb1453ac1c91b8c896a2f36469 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Sun, 7 Nov 2010 13:05:01 -0600 Subject: [PATCH 214/230] FS-2826 FreeSwitchCoreLib Visual Studio x64 build error --- w32/Library/FreeSwitchCore.2008.vcproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/w32/Library/FreeSwitchCore.2008.vcproj b/w32/Library/FreeSwitchCore.2008.vcproj index 0f85d44c69..ca15da8b52 100644 --- a/w32/Library/FreeSwitchCore.2008.vcproj +++ b/w32/Library/FreeSwitchCore.2008.vcproj @@ -297,7 +297,7 @@ From c57d5452a4a8674928953fce3c0cbd51689efb32 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Sun, 7 Nov 2010 14:35:29 -0600 Subject: [PATCH 215/230] FS-2826 more fixes for sounds --- Freeswitch.2008.sln | 32 ++++++------ libs/win32/Sound_Files/16khz.2008.vcproj | 52 ++++++++++++++++++- libs/win32/Sound_Files/16khzmusic.2008.vcproj | 48 +++++++++++++++++ libs/win32/Sound_Files/32khz.2008.vcproj | 52 ++++++++++++++++++- libs/win32/Sound_Files/32khzmusic.2008.vcproj | 48 +++++++++++++++++ libs/win32/Sound_Files/8khz.2008.vcproj | 52 ++++++++++++++++++- libs/win32/Sound_Files/8khzmusic.2008.vcproj | 48 +++++++++++++++++ 7 files changed, 310 insertions(+), 22 deletions(-) diff --git a/Freeswitch.2008.sln b/Freeswitch.2008.sln index 8e6df5cc57..01a4cf43c1 100644 --- a/Freeswitch.2008.sln +++ b/Freeswitch.2008.sln @@ -2042,18 +2042,18 @@ Global {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.Build.0 = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.ActiveCfg = Debug|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.Build.0 = Debug|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.Build.0 = Debug|x64 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.ActiveCfg = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.Build.0 = Release|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.Build.0 = Release|x64 {7EB71250-F002-4ED8-92CA-CA218114537A}.All|Win32.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.All|x64.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Win32.ActiveCfg = Debug|Win32 - {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|x64 {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32 - {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|x64 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|Win32.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x64.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Win32.ActiveCfg = Debug|Win32 @@ -2063,9 +2063,9 @@ Global {464AAB78-5489-4916-BE51-BF8D61822311}.All|Win32.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.All|x64.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Win32.ActiveCfg = Debug|Win32 - {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|x64 {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32 - {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|Win32.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.Build.0 = Release|x64 @@ -2482,24 +2482,24 @@ Global {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.Build.0 = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.ActiveCfg = Debug|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.Build.0 = Debug|Win32 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.ActiveCfg = Debug|Win32 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.Build.0 = Debug|Win32 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.ActiveCfg = Debug|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.Build.0 = Debug|x64 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.ActiveCfg = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.Build.0 = Release|Win32 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.ActiveCfg = Release|Win32 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.Build.0 = Release|Win32 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.ActiveCfg = Release|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.Build.0 = Release|x64 {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|Win32.ActiveCfg = Release|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x64.ActiveCfg = Release|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|Win32.ActiveCfg = Debug|Win32 - {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64.ActiveCfg = Debug|Win32 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64.ActiveCfg = Debug|x64 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|Win32.ActiveCfg = Release|Win32 - {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64.ActiveCfg = Release|Win32 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64.ActiveCfg = Release|x64 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|Win32.ActiveCfg = Release|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x64.ActiveCfg = Release|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|Win32.ActiveCfg = Debug|Win32 - {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64.ActiveCfg = Debug|Win32 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64.ActiveCfg = Debug|x64 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|Win32.ActiveCfg = Release|Win32 - {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64.ActiveCfg = Release|Win32 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|Win32.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.Build.0 = Release|x64 diff --git a/libs/win32/Sound_Files/16khz.2008.vcproj b/libs/win32/Sound_Files/16khz.2008.vcproj index d8f80bbde6..026987197d 100644 --- a/libs/win32/Sound_Files/16khz.2008.vcproj +++ b/libs/win32/Sound_Files/16khz.2008.vcproj @@ -11,6 +11,9 @@ + @@ -33,7 +36,7 @@ /> + + + + + + + + + + + + diff --git a/libs/win32/Sound_Files/16khzmusic.2008.vcproj b/libs/win32/Sound_Files/16khzmusic.2008.vcproj index 932d1c5b4f..c09a5aec90 100644 --- a/libs/win32/Sound_Files/16khzmusic.2008.vcproj +++ b/libs/win32/Sound_Files/16khzmusic.2008.vcproj @@ -11,6 +11,9 @@ + @@ -58,6 +61,51 @@ CommandLine="xcopy "$(SolutionDir)libs\sounds\music\16000\*.*" "$(OutDir)\sounds\music\16000" /C /D /Y /S /I " /> + + + + + + + + + + + + diff --git a/libs/win32/Sound_Files/32khz.2008.vcproj b/libs/win32/Sound_Files/32khz.2008.vcproj index d2ac0af2e3..cdf3fa93fc 100644 --- a/libs/win32/Sound_Files/32khz.2008.vcproj +++ b/libs/win32/Sound_Files/32khz.2008.vcproj @@ -11,6 +11,9 @@ + @@ -33,7 +36,7 @@ /> + + + + + + + + + + + + diff --git a/libs/win32/Sound_Files/32khzmusic.2008.vcproj b/libs/win32/Sound_Files/32khzmusic.2008.vcproj index aafc1ef50d..7ff356e038 100644 --- a/libs/win32/Sound_Files/32khzmusic.2008.vcproj +++ b/libs/win32/Sound_Files/32khzmusic.2008.vcproj @@ -11,6 +11,9 @@ + @@ -58,6 +61,51 @@ CommandLine="xcopy "$(SolutionDir)libs\sounds\music\32000\*.*" "$(OutDir)\sounds\music\32000" /C /D /Y /S /I" /> + + + + + + + + + + + + diff --git a/libs/win32/Sound_Files/8khz.2008.vcproj b/libs/win32/Sound_Files/8khz.2008.vcproj index 413c47dc63..5f6d36803e 100644 --- a/libs/win32/Sound_Files/8khz.2008.vcproj +++ b/libs/win32/Sound_Files/8khz.2008.vcproj @@ -11,6 +11,9 @@ + @@ -33,7 +36,7 @@ /> + + + + + + + + + + + + diff --git a/libs/win32/Sound_Files/8khzmusic.2008.vcproj b/libs/win32/Sound_Files/8khzmusic.2008.vcproj index 2e46ecff8e..a89d14f9f0 100644 --- a/libs/win32/Sound_Files/8khzmusic.2008.vcproj +++ b/libs/win32/Sound_Files/8khzmusic.2008.vcproj @@ -11,6 +11,9 @@ + @@ -58,6 +61,51 @@ CommandLine="xcopy "$(SolutionDir)libs\sounds\music\8000\*.*" "$(OutDir)\sounds\music\8000" /C /D /Y /S /I " /> + + + + + + + + + + + + From 55975c7f3c1cc8eb581b3ffad489698bec88f88b Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Sun, 7 Nov 2010 16:57:11 -0500 Subject: [PATCH 216/230] openzap: fix mismatch in enum types --- .../src/ozmod/ozmod_sangoma_boost/ozmod_sangoma_boost.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/openzap/src/ozmod/ozmod_sangoma_boost/ozmod_sangoma_boost.c b/libs/openzap/src/ozmod/ozmod_sangoma_boost/ozmod_sangoma_boost.c index 937c67b328..dc2218012e 100644 --- a/libs/openzap/src/ozmod/ozmod_sangoma_boost/ozmod_sangoma_boost.c +++ b/libs/openzap/src/ozmod/ozmod_sangoma_boost/ozmod_sangoma_boost.c @@ -898,7 +898,7 @@ tryagain: static void handle_call_loop_start(zap_span_t *span, sangomabc_connection_t *mcon, sangomabc_short_event_t *event) { - zap_status_t res = ZAP_FAIL; + zap_state_change_result_t res = ZAP_FAIL; zap_channel_t *zchan; if (!(zchan = find_zchan(span, (sangomabc_short_event_t*)event, 0))) { @@ -923,7 +923,7 @@ static void handle_call_loop_start(zap_span_t *span, sangomabc_connection_t *mco static __inline__ void stop_loop(zap_channel_t *zchan) { - zap_status_t res = ZAP_FAIL; + zap_state_change_result_t res = ZAP_STATE_CHANGE_FAIL; zap_channel_command(zchan, ZAP_COMMAND_DISABLE_LOOP, NULL); /* even when we did not sent a msg we set this flag to avoid sending call stop in the DOWN state handler */ zap_set_flag(zchan, SFLAG_SENT_FINAL_MSG); From b7d92655621e5d2d3542fa945adf6c75946522e5 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Mon, 8 Nov 2010 00:43:09 +0100 Subject: [PATCH 217/230] ftmod_libpri: First attempt at getting AOC Facility messages going (and minor cleanups) Requires libpri-1.4.12_beta1 or newer! Completely untested, AOC-S/D/E ChargingRequest operations are sent to NT (DTAG BRI PTMP), but rejected with "Unrecognized Operation". NOTE: FreeTDM core needs support for this to be useful! Only AOC-E events are decoded and sent to the log. To enable: Set (or add) in your libpri_spans span config. Signed-off-by: Stefan Knoblich --- libs/freetdm/configure.ac | 14 +- .../src/ftmod/ftmod_libpri/ftmod_libpri.c | 199 +++++++++++++++++- .../src/ftmod/ftmod_libpri/ftmod_libpri.h | 5 +- .../src/ftmod/ftmod_libpri/lpwrap_pri.c | 59 +++--- .../src/ftmod/ftmod_libpri/lpwrap_pri.h | 6 +- 5 files changed, 245 insertions(+), 38 deletions(-) diff --git a/libs/freetdm/configure.ac b/libs/freetdm/configure.ac index 7589957999..2b5ded8e7d 100644 --- a/libs/freetdm/configure.ac +++ b/libs/freetdm/configure.ac @@ -213,11 +213,23 @@ then [extern void pri_new_bri_cb(void);], [pri_new_bri_cb();] )], - [AC_DEFINE([HAVE_LIBPRI_BRI], [1], [libpri has bri support]) + [AC_DEFINE([HAVE_LIBPRI_BRI], [1], [libpri has BRI support]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_NOTICE([You will need libpri-1.4.12_beta1 or newer for BRI support])] ) + + AC_MSG_CHECKING([whether libpri has AOC event support]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [extern void pri_aoc_events_enable(void);], + [pri_aoc_events_enable();] + )], + [AC_DEFINE([HAVE_LIBPRI_AOC], [1], [libpri has AOC event support]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_NOTICE([You will need libpri-1.4.12_beta1 or newer for AOC event support])] + ) LIBS="${save_LIBS}" fi HAVE_LIBPRI="${enable_libpri}" diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index ccb2342b02..65148f393e 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -30,7 +30,6 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #include "private/ftdm_core.h" #include "ftmod_libpri.h" @@ -578,7 +577,7 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) sr = pri_sr_new(); assert(sr); pri_sr_set_channel(sr, ftdmchan->chan_id, 0, 0); - pri_sr_set_bearer(sr, 0, isdn_data->l1); + pri_sr_set_bearer(sr, PRI_TRANS_CAP_SPEECH, isdn_data->l1); pri_sr_set_called(sr, ftdmchan->caller_data.dnis.digits, dp, 1); pri_sr_set_caller(sr, ftdmchan->caller_data.cid_num.digits, (isdn_data->opts & FTMOD_LIBPRI_OPT_OMIT_DISPLAY_IE ? NULL : ftdmchan->caller_data.cid_name), @@ -589,7 +588,13 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) pri_sr_set_redirecting(sr, ftdmchan->caller_data.cid_num.digits, dp, PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN, PRI_REDIR_UNCONDITIONAL); } - +#ifdef HAVE_LIBPRI_AOC + if (isdn_data->opts & FTMOD_LIBPRI_OPT_FACILITY_AOC) { + /* request AOC on call */ + pri_sr_set_aoc_charging_request(sr, (PRI_AOC_REQUEST_S | PRI_AOC_REQUEST_E | PRI_AOC_REQUEST_D)); + ftdm_log(FTDM_LOG_DEBUG, "Requesting AOC-S/D/E on call\n"); + } +#endif if (pri_setup(isdn_data->spri.pri, call, sr)) { ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_DESTINATION_OUT_OF_ORDER; ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_HANGUP); @@ -978,6 +983,182 @@ static int on_restart(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_eve return 0; } +/* + * FACILITY Advice-On-Charge handler + */ +#ifdef HAVE_LIBPRI_AOC +static const char *aoc_billing_id(const int id) +{ + switch (id) { + case PRI_AOC_E_BILLING_ID_NOT_AVAILABLE: + return "not available"; + case PRI_AOC_E_BILLING_ID_NORMAL: + return "normal"; + case PRI_AOC_E_BILLING_ID_REVERSE: + return "reverse"; + case PRI_AOC_E_BILLING_ID_CREDIT_CARD: + return "credit card"; + case PRI_AOC_E_BILLING_ID_CALL_FORWARDING_UNCONDITIONAL: + return "call forwarding unconditional"; + case PRI_AOC_E_BILLING_ID_CALL_FORWARDING_BUSY: + return "call forwarding busy"; + case PRI_AOC_E_BILLING_ID_CALL_FORWARDING_NO_REPLY: + return "call forwarding no reply"; + case PRI_AOC_E_BILLING_ID_CALL_DEFLECTION: + return "call deflection"; + case PRI_AOC_E_BILLING_ID_CALL_TRANSFER: + return "call transfer"; + default: + return "unknown\n"; + } +} + +static float aoc_money_amount(const struct pri_aoc_amount *amount) +{ + switch (amount->multiplier) { + case PRI_AOC_MULTIPLIER_THOUSANDTH: + return amount->cost * 0.001f; + case PRI_AOC_MULTIPLIER_HUNDREDTH: + return amount->cost * 0.01f; + case PRI_AOC_MULTIPLIER_TENTH: + return amount->cost * 0.1f; + case PRI_AOC_MULTIPLIER_TEN: + return amount->cost * 10.0f; + case PRI_AOC_MULTIPLIER_HUNDRED: + return amount->cost * 100.0f; + case PRI_AOC_MULTIPLIER_THOUSAND: + return amount->cost * 1000.0f; + default: + return amount->cost; + } +} + +static int handle_facility_aoc_s(const struct pri_subcmd_aoc_s *aoc_s) +{ + /* Left as an excercise to the reader */ + return 0; +} + +static int handle_facility_aoc_d(const struct pri_subcmd_aoc_d *aoc_d) +{ + /* Left as an excercise to the reader */ + return 0; +} + +static int handle_facility_aoc_e(const struct pri_subcmd_aoc_e *aoc_e) +{ + char tmp[1024] = { 0 }; + int x = 0, offset = 0; + + switch (aoc_e->charge) { + case PRI_AOC_DE_CHARGE_FREE: + strcat(tmp, "\tcharge-type: none\n"); + offset = strlen(tmp); + break; + + case PRI_AOC_DE_CHARGE_CURRENCY: + sprintf(tmp, "\tcharge-type: money\n\tcharge-amount: %.2f\n\tcharge-currency: %s\n", + aoc_money_amount(&aoc_e->recorded.money.amount), + aoc_e->recorded.money.currency); + offset = strlen(tmp); + break; + + case PRI_AOC_DE_CHARGE_UNITS: + strcat(tmp, "\tcharge-type: units\n"); + offset = strlen(tmp); + + for (x = 0; x < aoc_e->recorded.unit.num_items; x++) { + sprintf(&tmp[offset], "\tcharge-amount: %ld (type: %d)\n", + aoc_e->recorded.unit.item[x].number, + aoc_e->recorded.unit.item[x].type); + offset += strlen(&tmp[offset]); + } + break; + + default: + strcat(tmp, "\tcharge-type: not available\n"); + offset = strlen(tmp); + } + + sprintf(&tmp[offset], "\tbilling-id: %s\n", aoc_billing_id(aoc_e->billing_id)); + offset += strlen(&tmp[offset]); + + strcat(&tmp[offset], "\tassociation-type: "); + offset += strlen(&tmp[offset]); + + switch (aoc_e->associated.charging_type) { + case PRI_AOC_E_CHARGING_ASSOCIATION_NOT_AVAILABLE: + strcat(&tmp[offset], "not available\n"); + break; + case PRI_AOC_E_CHARGING_ASSOCIATION_NUMBER: + sprintf(&tmp[offset], "number\n\tassociation-number: %s\n", aoc_e->associated.charge.number.str); + break; + case PRI_AOC_E_CHARGING_ASSOCIATION_ID: + sprintf(&tmp[offset], "id\n\tassociation-id: %d\n", aoc_e->associated.charge.id); + break; + default: + strcat(&tmp[offset], "unknown\n"); + } + + ftdm_log(FTDM_LOG_INFO, "AOC-E:\n%s", tmp); + return 0; +} +#endif + +/** + * \brief Handler for libpri facility events + * \param spri Pri wrapper structure (libpri, span, dchan) + * \param event_type Event type (unused) + * \param pevent Event + * \return 0 + */ +static int on_facility(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event *pevent) +{ + struct pri_event_facility *pfac = (struct pri_event_facility *)pevent; + int i = 0; + + if (!pevent) + return 0; + + if (!pfac->subcmds || pfac->subcmds->counter_subcmd <= 0) + return 0; + + for (i = 0; i < pfac->subcmds->counter_subcmd; i++) { + struct pri_subcommand *sub = &pfac->subcmds->subcmd[i]; + int res = -1; + + switch (sub->cmd) { +#ifdef HAVE_LIBPRI_AOC + case PRI_SUBCMD_AOC_S: /* AOC-S: Start of call */ + res = handle_facility_aoc_s(&sub->u.aoc_s); + break; + case PRI_SUBCMD_AOC_D: /* AOC-D: During call */ + res = handle_facility_aoc_d(&sub->u.aoc_d); + break; + case PRI_SUBCMD_AOC_E: /* AOC-E: End of call */ + res = handle_facility_aoc_e(&sub->u.aoc_e); + break; + case PRI_SUBCMD_AOC_CHARGING_REQ: + ftdm_log(FTDM_LOG_NOTICE, "AOC Charging Request received\n"); + break; + case PRI_SUBCMD_AOC_CHARGING_REQ_RSP: + ftdm_log(FTDM_LOG_NOTICE, "AOC Charging Request Response received [aoc_s data: %s, req: %x, resp: %x]\n", + sub->u.aoc_request_response.valid_aoc_s ? "yes" : "no", + sub->u.aoc_request_response.charging_request, + sub->u.aoc_request_response.charging_response); + break; +#endif + default: + ftdm_log(FTDM_LOG_DEBUG, "FACILITY subcommand %d is not implemented, ignoring\n", sub->cmd); + } + + ftdm_log(FTDM_LOG_DEBUG, "FACILITY subcommand %d handler returned %d\n", sub->cmd, res); + } + + ftdm_log(FTDM_LOG_DEBUG, "Caught Event on span %d %u (%s)\n", spri->span->span_id, event_type, lpwrap_pri_event_str(event_type)); + return 0; +} + /** * \brief Handler for libpri dchan up event * \param spri Pri wrapper structure (libpri, span, dchan) @@ -1145,6 +1326,13 @@ static void *ftdm_libpri_run(ftdm_thread_t *me, void *obj) goto out; } +#ifdef HAVE_LIBPRI_AOC + /* enable FACILITY on trunk, if needed */ + if (isdn_data->opts & FTMOD_LIBPRI_OPT_FACILITY_AOC) { + pri_facility_enable(isdn_data->spri.pri); + } +#endif + if (res == 0) { LPWRAP_MAP_PRI_EVENT(isdn_data->spri, LPWRAP_PRI_EVENT_ANY, on_anything); LPWRAP_MAP_PRI_EVENT(isdn_data->spri, LPWRAP_PRI_EVENT_RING, on_ring); @@ -1159,6 +1347,7 @@ static void *ftdm_libpri_run(ftdm_thread_t *me, void *obj) LPWRAP_MAP_PRI_EVENT(isdn_data->spri, LPWRAP_PRI_EVENT_INFO_RECEIVED, on_info); LPWRAP_MAP_PRI_EVENT(isdn_data->spri, LPWRAP_PRI_EVENT_RESTART, on_restart); LPWRAP_MAP_PRI_EVENT(isdn_data->spri, LPWRAP_PRI_EVENT_IO_FAIL, on_io_fail); + LPWRAP_MAP_PRI_EVENT(isdn_data->spri, LPWRAP_PRI_EVENT_FACILITY, on_facility); if (down) { ftdm_log(FTDM_LOG_INFO, "PRI back up on span %d\n", isdn_data->spri.span->span_id); @@ -1359,7 +1548,9 @@ static uint32_t parse_opts(const char *in) if (strstr(in, "omit_redirecting_number")) { flags |= FTMOD_LIBPRI_OPT_OMIT_REDIRECTING_NUMBER_IE; } - + if (strstr(in, "aoc")) { + flags |= FTMOD_LIBPRI_OPT_FACILITY_AOC; + } return flags; } diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.h b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.h index 0bf8c46817..b11baec6c5 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.h +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.h @@ -42,8 +42,9 @@ typedef enum { FTMOD_LIBPRI_OPT_SUGGEST_CHANNEL = (1 << 0), FTMOD_LIBPRI_OPT_OMIT_DISPLAY_IE = (1 << 1), FTMOD_LIBPRI_OPT_OMIT_REDIRECTING_NUMBER_IE = (1 << 2), - - FTMOD_LIBPRI_OPT_MAX = (1 << 3) + FTMOD_LIBPRI_OPT_FACILITY_AOC = (1 << 3), + + FTMOD_LIBPRI_OPT_MAX = (1 << 4) } ftdm_isdn_opts_t; typedef enum { diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c index 5b04abec1b..317c9a5428 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c @@ -92,7 +92,7 @@ static struct lpwrap_pri_event_list LPWRAP_PRI_EVENT_LIST[] = { {8, LPWRAP_PRI_EVENT_ANSWER, "ANSWER"}, {9, LPWRAP_PRI_EVENT_HANGUP_ACK, "HANGUP_ACK"}, {10, LPWRAP_PRI_EVENT_RESTART_ACK, "RESTART_ACK"}, - {11, LPWRAP_PRI_EVENT_FACNAME, "FACNAME"}, + {11, LPWRAP_PRI_EVENT_FACILITY, "FACILITY"}, {12, LPWRAP_PRI_EVENT_INFO_RECEIVED, "INFO_RECEIVED"}, {13, LPWRAP_PRI_EVENT_PROCEEDING, "PROCEEDING"}, {14, LPWRAP_PRI_EVENT_SETUP_ACK, "SETUP_ACK"}, @@ -107,6 +107,9 @@ static struct lpwrap_pri_event_list LPWRAP_PRI_EVENT_LIST[] = { const char *lpwrap_pri_event_str(lpwrap_pri_event_t event_id) { + if (event_id < 0 || event_id >= LPWRAP_PRI_EVENT_MAX) + return ""; + return LPWRAP_PRI_EVENT_LIST[event_id].name; } @@ -114,8 +117,8 @@ static int __pri_lpwrap_read(struct pri *pri, void *buf, int buflen) { struct lpwrap_pri *spri = (struct lpwrap_pri *) pri_get_userdata(pri); ftdm_size_t len = buflen; - int res; ftdm_status_t zst; + int res; if ((zst = ftdm_channel_read(spri->dchan, buf, &len)) != FTDM_SUCCESS) { if (zst == FTDM_FAIL) { @@ -130,25 +133,25 @@ static int __pri_lpwrap_read(struct pri *pri, void *buf, int buflen) } spri->errs = 0; res = (int)len; - memset(&((unsigned char*)buf)[res],0,2); - res+=2; + + memset(&((unsigned char*)buf)[res], 0, 2); + res += 2; #ifdef IODEBUG { char bb[2048] = { 0 }; print_hex_bytes(buf, res - 2, bb, sizeof(bb)); - ftdm_log(FTDM_LOG_DEBUG, "READ %d\n", res-2); + ftdm_log(FTDM_LOG_DEBUG, "READ %d\n", res - 2); } #endif - return res; } static int __pri_lpwrap_write(struct pri *pri, void *buf, int buflen) { struct lpwrap_pri *spri = (struct lpwrap_pri *) pri_get_userdata(pri); - ftdm_size_t len = buflen -2; + ftdm_size_t len = buflen - 2; if (ftdm_channel_write(spri->dchan, buf, buflen, &len) != FTDM_SUCCESS) { ftdm_log(FTDM_LOG_CRIT, "span %d D-WRITE FAIL! [%s]\n", spri->span->span_id, spri->dchan->last_error); @@ -161,11 +164,10 @@ static int __pri_lpwrap_write(struct pri *pri, void *buf, int buflen) char bb[2048] = { 0 }; print_hex_bytes(buf, buflen - 2, bb, sizeof(bb)); - ftdm_log(FTDM_LOG_DEBUG, "WRITE %d\n", (int)buflen-2); + ftdm_log(FTDM_LOG_DEBUG, "WRITE %d\n", (int)buflen - 2); } #endif - - return (int) buflen; + return (int)buflen; } int lpwrap_init_pri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int debug) @@ -186,6 +188,9 @@ int lpwrap_init_pri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t * size_t buflen = sizeof(buf), len = 0; pri_set_debug(spri->pri, debug); +#ifdef HAVE_LIBPRI_AOC + pri_aoc_events_enable(spri->pri, 1); +#endif ftdm_channel_write(spri->dchan, buf, buflen, &len); ret = 0; @@ -214,6 +219,9 @@ int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t * size_t buflen = sizeof(buf), len = 0; pri_set_debug(spri->pri, debug); +#ifdef HAVE_LIBPRI_AOC + pri_aoc_events_enable(spri->pri, 1); +#endif ftdm_channel_write(spri->dchan, buf, buflen, &len); ret = 0; @@ -267,9 +275,6 @@ int lpwrap_one_loop(struct lpwrap_pri *spri) now.tv_usec = 100000; sel = select(pri_fd(spri->pri) + 1, &rfds, NULL, &efds, &now); - - event = NULL; - if (!sel) { if ((next = pri_schedule_next(spri->pri))) { gettimeofday(&now, NULL); @@ -284,33 +289,29 @@ int lpwrap_one_loop(struct lpwrap_pri *spri) if (event) { /* 0 is catchall event handler */ - if ((handler = spri->eventmap[event->e] ? spri->eventmap[event->e] : spri->eventmap[0] ? spri->eventmap[0] : NULL)) { + if (event->e < 0 || event->e >= LPWRAP_PRI_EVENT_MAX) { + handler = spri->eventmap[0]; + } else if (spri->eventmap[event->e]) { + handler = spri->eventmap[event->e]; + } else { + handler = spri->eventmap[0]; + } + + if (handler) { handler(spri, event->e, event); } else { ftdm_log(FTDM_LOG_CRIT, "No event handler found for event %d.\n", event->e); } } - - return sel; - - - if ((handler = spri->eventmap[LPWRAP_PRI_EVENT_IO_FAIL] ? spri->eventmap[LPWRAP_PRI_EVENT_IO_FAIL] : spri->eventmap[0] ? spri->eventmap[0] : NULL)) { - handler(spri, LPWRAP_PRI_EVENT_IO_FAIL, NULL); - } - - return -1; } int lpwrap_run_pri(struct lpwrap_pri *spri) { int ret = 0; - for (;;){ - ret = lpwrap_one_loop(spri); - - if (ret < 0) { - + for (;;) { + if ((ret = lpwrap_one_loop(spri)) < 0) { #ifndef WIN32 //This needs to be adressed fror WIN32 still if (errno == EINTR){ /* Igonore an interrupted system call */ @@ -321,9 +322,7 @@ int lpwrap_run_pri(struct lpwrap_pri *spri) break; } } - return ret; - } /* For Emacs: diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h index 4701e27e18..b62e5fb176 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h +++ b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.h @@ -51,7 +51,11 @@ typedef enum { LPWRAP_PRI_EVENT_ANSWER = PRI_EVENT_ANSWER, LPWRAP_PRI_EVENT_HANGUP_ACK = PRI_EVENT_HANGUP_ACK, LPWRAP_PRI_EVENT_RESTART_ACK = PRI_EVENT_RESTART_ACK, - LPWRAP_PRI_EVENT_FACNAME = PRI_EVENT_FACNAME, +#ifdef PRI_EVENT_FACILITY + LPWRAP_PRI_EVENT_FACILITY = PRI_EVENT_FACILITY, +#else + LPWRAP_PRI_EVENT_FACILITY = PRI_EVENT_FACNAME, +#endif LPWRAP_PRI_EVENT_INFO_RECEIVED = PRI_EVENT_INFO_RECEIVED, LPWRAP_PRI_EVENT_PROCEEDING = PRI_EVENT_PROCEEDING, LPWRAP_PRI_EVENT_SETUP_ACK = PRI_EVENT_SETUP_ACK, From 0a0e79e1fe75307956f4410ab6c61205c0649e28 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Mon, 8 Nov 2010 00:57:50 +0100 Subject: [PATCH 218/230] ftmod_libpri: clarify why we enable facility conditionally Signed-off-by: Stefan Knoblich --- libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index 65148f393e..b714b3569a 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -1327,7 +1327,10 @@ static void *ftdm_libpri_run(ftdm_thread_t *me, void *obj) } #ifdef HAVE_LIBPRI_AOC - /* enable FACILITY on trunk, if needed */ + /* + * Only enable facility on trunk if really required, + * this may help avoid problems on troublesome lines. + */ if (isdn_data->opts & FTMOD_LIBPRI_OPT_FACILITY_AOC) { pri_facility_enable(isdn_data->spri.pri); } From 4bbd9a4c0fd9ad4c23921197dc92a63c75656f21 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Mon, 8 Nov 2010 08:05:23 -0600 Subject: [PATCH 219/230] FS-2825 add additional info when fail --- src/switch_core_sqldb.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index 9551e5dea2..509d989581 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -702,8 +702,11 @@ SWITCH_DECLARE(switch_status_t) switch_cache_db_persistant_execute_trans(switch_ if (runtime.odbc_dbtype == DBTYPE_DEFAULT) { switch_cache_db_execute_sql_real(dbh, "BEGIN", &errmsg); } else { - if (switch_odbc_SQLSetAutoCommitAttr(dbh->native_handle.odbc_dbh, 0) != SWITCH_ODBC_SUCCESS) { - errmsg = strdup("Unable to Set AutoCommit Off.");; + switch_odbc_status_t result; + if ((result = switch_odbc_SQLSetAutoCommitAttr(dbh->native_handle.odbc_dbh, 0)) != SWITCH_ODBC_SUCCESS) { + char tmp[100]; + switch_snprintf(tmp, sizeof(tmp), "%s-%i", "Unable to Set AutoCommit Off", result); + errmsg = strdup(tmp); } } From 10119e9e88b0021c36558172cce1f3a7da0c88d5 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 8 Nov 2010 10:13:35 -0600 Subject: [PATCH 220/230] FS-2824 --- src/mod/endpoints/mod_sofia/mod_sofia.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index aa927bfd45..3c8404dd6b 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -2208,6 +2208,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi SIPTAG_CONTACT_STR(tech_pvt->reply_contact), SOATAG_REUSE_REJECTED(1), SOATAG_ORDERED_USER(1), + SOATAG_RTP_SELECT(1), SOATAG_ADDRESS(tech_pvt->adv_sdp_audio_ip), SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str), SOATAG_AUDIO_AUX("cn telephone-event"), TAG_IF(call_info, SIPTAG_CALL_INFO_STR(call_info)), From 5875905285309a89d1e83463560d8ba93f247512 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 8 Nov 2010 10:14:46 -0600 Subject: [PATCH 221/230] FS-2827 --- src/mod/event_handlers/mod_event_socket/mod_event_socket.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mod/event_handlers/mod_event_socket/mod_event_socket.c b/src/mod/event_handlers/mod_event_socket/mod_event_socket.c index be417600a2..941db22c84 100644 --- a/src/mod/event_handlers/mod_event_socket/mod_event_socket.c +++ b/src/mod/event_handlers/mod_event_socket/mod_event_socket.c @@ -1363,7 +1363,7 @@ static void *SWITCH_THREAD_FUNC api_exec(switch_thread_t *thread, void *obj) if (acs->console_execute) { if ((status = switch_console_execute(acs->api_cmd, 0, &stream)) != SWITCH_STATUS_SUCCESS) { - stream.write_function(&stream, "%s: Command not found!\n", acs->api_cmd); + stream.write_function(&stream, "-ERR %s Command not found!\n", acs->api_cmd); } } else { status = switch_api_execute(acs->api_cmd, acs->arg, NULL, &stream); @@ -1372,7 +1372,7 @@ static void *SWITCH_THREAD_FUNC api_exec(switch_thread_t *thread, void *obj) if (status == SWITCH_STATUS_SUCCESS) { reply = stream.data; } else { - freply = switch_mprintf("%s: Command not found!\n", acs->api_cmd); + freply = switch_mprintf("-ERR %s Command not found!\n", acs->api_cmd); reply = freply; } From 0a8c1a04c48f409e827b80ccb8ea562bdca8a9fb Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Mon, 8 Nov 2010 20:57:21 +0100 Subject: [PATCH 222/230] ftmod_libpri: Minor cleanups. Signed-off-by: Stefan Knoblich --- libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c index 317c9a5428..de4fa2b232 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/lpwrap_pri.c @@ -35,8 +35,8 @@ #include "private/ftdm_core.h" #include "lpwrap_pri.h" -#ifndef HAVE_GETTIMEOFDAY +#ifndef HAVE_GETTIMEOFDAY #ifdef WIN32 #include @@ -239,8 +239,8 @@ int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t * int lpwrap_one_loop(struct lpwrap_pri *spri) { fd_set rfds, efds; - struct timeval now = {0,0}, *next; - pri_event *event; + struct timeval now = {0,0}, *next = NULL; + pri_event *event = NULL; event_handler handler; int sel; From 49b6237ed2dc0b536ffd8114e0c5f233e133e3ff Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 8 Nov 2010 15:04:51 -0600 Subject: [PATCH 223/230] avoid hypothetical problem with flushing queue with delayed events --- src/switch_core_session.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/switch_core_session.c b/src/switch_core_session.c index 1589bebb67..b3bb638c76 100644 --- a/src/switch_core_session.c +++ b/src/switch_core_session.c @@ -790,10 +790,17 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_dequeue_message(switch_core_ SWITCH_DECLARE(switch_status_t) switch_core_session_flush_message(switch_core_session_t *session) { + switch_status_t status = SWITCH_STATUS_FALSE; + void *pop; switch_core_session_message_t *message; - while (switch_core_session_dequeue_message(session, &message) == SWITCH_STATUS_SUCCESS) { - switch_core_session_free_message(&message); + switch_assert(session != NULL); + + if (session->message_queue) { + while ((status = (switch_status_t) switch_queue_trypop(session->message_queue, &pop)) == SWITCH_STATUS_SUCCESS) { + message = (switch_core_session_message_t *) pop; + switch_core_session_free_message(&message); + } } return SWITCH_STATUS_SUCCESS; From b36869498f392044859d864ef5973ec496e4851c Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Mon, 8 Nov 2010 16:11:06 -0500 Subject: [PATCH 224/230] freetdm: Fix for ftmod_wanpipe failing to compile because some structures are not compatible with std=c99 --- libs/freetdm/Makefile.am | 5 ++++- libs/freetdm/configure.ac | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libs/freetdm/Makefile.am b/libs/freetdm/Makefile.am index 2177a96ed1..bc92e1db58 100644 --- a/libs/freetdm/Makefile.am +++ b/libs/freetdm/Makefile.am @@ -49,6 +49,7 @@ if HAVE_SNG_ISDN INCS += -I/usr/include/sng_isdn endif +FTDM_COMPAT_CFLAGS = $(INCS) -DFTDM_CONFIG_DIR=\"@confdir@\" -DFTDM_MOD_DIR=\"$(moddir)\" @COMP_VENDOR_COMPAT_CFLAGS@ @DEFS@ FTDM_CFLAGS = $(INCS) -DFTDM_CONFIG_DIR=\"@confdir@\" -DFTDM_MOD_DIR=\"$(moddir)\" @COMP_VENDOR_CFLAGS@ @DEFS@ COMPILE = $(CC) $(FTDM_CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(COMPILE) @@ -186,7 +187,9 @@ ftmod_analog_em_la_LIBADD = libfreetdm.la if HAVE_LIBSANGOMA mod_LTLIBRARIES += ftmod_wanpipe.la ftmod_wanpipe_la_SOURCES = $(SRC)/ftmod/ftmod_wanpipe/ftmod_wanpipe.c -ftmod_wanpipe_la_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS) -D__LINUX__ -I/usr/include/wanpipe +#some structures within Wanpipe drivers are not c99 compatible, so we need to compile ftmod_wanpipe +#without c99 flags +ftmod_wanpipe_la_CFLAGS = $(AM_CFLAGS) $(FTDM_COMPAT_CFLAGS) -D__LINUX__ -I/usr/include/wanpipe ftmod_wanpipe_la_LDFLAGS = -shared -module -avoid-version -lsangoma ftmod_wanpipe_la_LIBADD = libfreetdm.la endif diff --git a/libs/freetdm/configure.ac b/libs/freetdm/configure.ac index 2b5ded8e7d..8b878edc09 100644 --- a/libs/freetdm/configure.ac +++ b/libs/freetdm/configure.ac @@ -77,11 +77,14 @@ sun) fi ;; *) - COMP_VENDOR_CFLAGS="-std=c99 -Wall -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes" + COMP_VENDOR_COMPAT_CFLAGS="-Wall -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes" + COMP_VENDOR_CFLAGS="-std=c99 $COMP_VENDOR_COMPAT_CFLAGS" ;; esac +AC_SUBST([COMP_VENDOR_COMPAT_CFLAGS]) AC_SUBST([COMP_VENDOR_CFLAGS]) + # Enable debugging AC_ARG_ENABLE([debug], [AC_HELP_STRING([--enable-debug], [build with debug information])], From ff7a617098756610f3e5564d04affc8d48b4652f Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Tue, 9 Nov 2010 15:51:30 +0100 Subject: [PATCH 225/230] ftmod_libpri: Bail out with an error message if libpri is too old and selected trunk type is BRI or BRI_PTMP Signed-off-by: Stefan Knoblich --- libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index b714b3569a..af5ab5f515 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -1606,9 +1606,14 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_libpri_configure_span) memset(isdn_data, 0, sizeof(*isdn_data)); switch (ftdm_span_get_trunk_type(span)) { - case FTDM_TRUNK_E1: case FTDM_TRUNK_BRI: case FTDM_TRUNK_BRI_PTMP: +#ifndef HAVE_LIBPRI_BRI + ftdm_log(FTDM_LOG_ERROR, "Unsupported trunk type: '%s', libpri too old\n", ftdm_trunk_type2str(ftdm_span_get_trunk_type(span))); + snprintf(span->last_error, sizeof(span->last_error), "Unsupported trunk type [%s], libpri too old", ftdm_trunk_type2str(ftdm_span_get_trunk_type(span))); + return FTDM_FAIL; +#endif + case FTDM_TRUNK_E1: ftdm_log(FTDM_LOG_NOTICE, "Setting default Layer 1 to ALAW since this is an E1/BRI/BRI PTMP trunk\n"); isdn_data->l1 = PRI_LAYER_1_ALAW; break; From 3885eea76520bb3cf293e4419889db86be45c313 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 9 Nov 2010 09:46:03 -0600 Subject: [PATCH 226/230] add outbound_ring_timeout param to mod_fifo --- src/mod/applications/mod_fifo/mod_fifo.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index 33697a0ca6..8641e29848 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -308,6 +308,7 @@ struct fifo_node { int outbound_per_cycle; char *outbound_name; outbound_strategy_t outbound_strategy; + int ring_timeout; }; typedef struct fifo_node fifo_node_t; @@ -1213,7 +1214,7 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void switch_event_create_brackets(h->originate_string, '{', '}', ',', &ovars, &parsed); switch_event_del_header(ovars, "fifo_outbound_uuid"); - if (!h->timeout) h->timeout = 60; + if (!h->timeout) h->timeout = node->ring_timeout; if (timeout < h->timeout) timeout = h->timeout; stream.write_function(&stream, "[leg_timeout=%d,fifo_outbound_uuid=%s,fifo_name=%s]%s,", @@ -3928,6 +3929,7 @@ static switch_status_t load_config(int reload, int del_all) int taking_calls_i = 1; int timeout_i = 60; int lag_i = 10; + int ring_timeout = 60; name = switch_xml_attr(fifo, "name"); @@ -3981,7 +3983,16 @@ static switch_status_t load_config(int reload, int del_all) node->has_outbound = 1; } - + if ((val = switch_xml_attr(fifo, "outbound_ring_timeout"))) { + int tmp = atoi(val); + if (tmp > 10) { + ring_timeout = tmp; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Invalid ring_timeout: must be > 10 for queue %s\n", node->name); + } + } + + node->ring_timeout = ring_timeout; node->outbound_per_cycle = outbound_per_cycle; node->outbound_priority = outbound_priority; From dd4fb5bee5641fd2ce5da04979240cc7cff2fc9e Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 9 Nov 2010 10:30:06 -0600 Subject: [PATCH 227/230] add default_lag to fifo --- src/mod/applications/mod_fifo/mod_fifo.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index 8641e29848..3943ac6ea6 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -309,6 +309,7 @@ struct fifo_node { char *outbound_name; outbound_strategy_t outbound_strategy; int ring_timeout; + int default_lag; }; typedef struct fifo_node fifo_node_t; @@ -3519,6 +3520,12 @@ static void list_node(fifo_node_t *node, switch_xml_t x_report, int *off, int ve switch_snprintf(tmp, sizeof(buffer), "%u", node->outbound_per_cycle); switch_xml_set_attr_d(x_fifo, "outbound_per_cycle", tmp); + switch_snprintf(tmp, sizeof(buffer), "%u", node->ring_timeout); + switch_xml_set_attr_d(x_fifo, "ring_timeout", tmp); + + switch_snprintf(tmp, sizeof(buffer), "%u", node->default_lag); + switch_xml_set_attr_d(x_fifo, "default_lag", tmp); + switch_snprintf(tmp, sizeof(buffer), "%u", node->outbound_priority); switch_xml_set_attr_d(x_fifo, "outbound_priority", tmp); @@ -3930,6 +3937,7 @@ static switch_status_t load_config(int reload, int del_all) int timeout_i = 60; int lag_i = 10; int ring_timeout = 60; + int default_lag = 30; name = switch_xml_attr(fifo, "name"); @@ -3992,11 +4000,20 @@ static switch_status_t load_config(int reload, int del_all) } } + if ((val = switch_xml_attr(fifo, "outbound_default_lag"))) { + int tmp = atoi(val); + if (tmp > 10) { + default_lag = tmp; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Invalid default_lag: must be > 10 for queue %s\n", node->name); + } + } + node->ring_timeout = ring_timeout; node->outbound_per_cycle = outbound_per_cycle; node->outbound_priority = outbound_priority; + node->default_lag = default_lag; - if (outbound_strategy) { node->outbound_strategy = parse_strat(outbound_strategy); node->has_outbound = 1; @@ -4028,14 +4045,14 @@ static switch_status_t load_config(int reload, int del_all) if (timeout) { if ((timeout_i = atoi(timeout)) < 10) { - timeout_i = 60; + timeout_i = ring_timeout; } } if (lag) { if ((lag_i = atoi(lag)) < 0) { - lag_i = 10; + lag_i = default_lag; } } From 633599021a71f2e61646200c69a9713dae369a9a Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Tue, 9 Nov 2010 12:22:53 -0500 Subject: [PATCH 228/230] freetdm: minor changes to ftmod_r2 --- libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c | 101 ++++++++++----------- 1 file changed, 47 insertions(+), 54 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c b/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c index 56c0bc6e73..086656128e 100644 --- a/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c +++ b/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c @@ -403,6 +403,7 @@ static void ftdm_r2_on_call_init(openr2_chan_t *r2chan) if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_INUSE)) { ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Cannot start call when channel is in use (state = %s)\n", ftdm_channel_state2str(ftdmchan->state)); ftdm_mutex_unlock(ftdmchan->mutex); + return; } if (ftdmchan->state != FTDM_CHANNEL_STATE_DOWN) { @@ -436,9 +437,6 @@ static void ftdm_r2_on_call_init(openr2_chan_t *r2chan) ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_COLLECT); ftdm_mutex_unlock(ftdmchan->mutex); - - ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Span is not threaded, not launching thread for this call\n"); - return; } /* only called for incoming calls when the ANI, DNIS etc is complete and the user has to decide either to accept or reject the call */ @@ -447,9 +445,7 @@ static void ftdm_r2_on_call_offered(openr2_chan_t *r2chan, const char *ani, cons ftdm_channel_t *ftdmchan = openr2_chan_get_client_data(r2chan); ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Call offered with ANI = %s, DNIS = %s, Priority = (%d)\n", ani, dnis, category); - //ftdmchan->caller_data.priority = category; ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_RING); - } static void ftdm_r2_on_call_accepted(openr2_chan_t *r2chan, openr2_call_mode_t mode) @@ -602,8 +598,8 @@ static void ftdm_r2_on_line_idle(openr2_chan_t *r2chan) ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Far end unblocked in state %s\n", ftdm_channel_state2str(ftdmchan->state)); ftdm_clear_flag(ftdmchan, FTDM_CHANNEL_SUSPENDED); - /* XXX when should we set/unset this flag? XXX */ - ftdm_set_flag(ftdmchan, FTDM_CHANNEL_SIG_UP); + /* XXX when should we set/unset this flag? XXX */ + ftdm_set_flag(ftdmchan, FTDM_CHANNEL_SIG_UP); } static void ftdm_r2_write_log(openr2_log_level_t level, const char *file, const char *function, int line, const char *message) @@ -1116,7 +1112,7 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_r2_configure_span) memset(r2call, 0, sizeof(*r2call)); openr2_chan_set_logging_func(r2chan, ftdm_r2_on_chan_log); openr2_chan_set_client_data(r2chan, span->channels[i]); - r2call->r2chan = r2chan; + r2call->r2chan = r2chan; span->channels[i]->call_data = r2call; /* value and key are the same so just free one of them */ snprintf(r2call->name, sizeof(r2call->name), "chancall%d", i); @@ -1331,8 +1327,8 @@ static int ftdm_r2_state_advance(ftdm_channel_t *ftdmchan) static void *ftdm_r2_run(ftdm_thread_t *me, void *obj) { openr2_chan_t *r2chan; - ftdm_r2_call_t *r2call = NULL; - ftdm_channel_t *ftdmchan = NULL; + ftdm_r2_call_t *r2call = NULL; + ftdm_channel_t *ftdmchan = NULL; ftdm_status_t status; ftdm_span_t *span = (ftdm_span_t *) obj; ftdm_r2_data_t *r2data = span->signal_data; @@ -1368,16 +1364,14 @@ static void *ftdm_r2_run(ftdm_thread_t *me, void *obj) } #ifndef WIN32 - /* figure out what event to poll each channel for. POLLPRI when the channel is down, - * POLLPRI|POLLIN|POLLOUT otherwise. - */ - memset(poll_events, 0, sizeof(short)*span->chan_count); - for (i = 0; i < span->chan_count; i++) { - r2chan = R2CALL(span->channels[(i+1)])->r2chan; - ftdmchan = openr2_chan_get_client_data(r2chan); - - poll_events[i] = ftdmchan->state == FTDM_CHANNEL_STATE_DOWN ? POLLPRI : (POLLPRI | POLLIN | POLLOUT); - } + /* figure out what event to poll each channel for. POLLPRI when the channel is down, + * POLLPRI|POLLIN|POLLOUT otherwise */ + memset(poll_events, 0, sizeof(short)*span->chan_count); + for (i = 0; i < span->chan_count; i++) { + r2chan = R2CALL(span->channels[(i+1)])->r2chan; + ftdmchan = openr2_chan_get_client_data(r2chan); + poll_events[i] = ftdmchan->state == FTDM_CHANNEL_STATE_DOWN ? POLLPRI : (POLLPRI | POLLIN | POLLOUT); + } status = ftdm_span_poll_event(span, waitms, poll_events); #else @@ -1394,62 +1388,61 @@ static void *ftdm_r2_run(ftdm_thread_t *me, void *obj) continue; } - if (FTDM_SUCCESS == status) { + if (FTDM_SUCCESS == status) { ftdm_event_t *event; while (ftdm_span_next_event(span, &event) == FTDM_SUCCESS) { if (event->enum_id == FTDM_OOB_CAS_BITS_CHANGE) { - r2call = R2CALL(event->channel); - r2chan = r2call->r2chan; + r2call = R2CALL(event->channel); + r2chan = r2call->r2chan; ftdm_log(FTDM_LOG_DEBUG, "Handling CAS on channel %d.\n", openr2_chan_get_number(r2chan)); // we only expect CAS and other OOB events on this thread/loop, once a call is started // the MF events (in-band signaling) are handled in the call thread openr2_chan_process_cas_signaling(r2chan); - } else { ftdm_log(FTDM_LOG_DEBUG, "Ignoring event %d on channel %d.\n", event->enum_id, openr2_chan_get_number(r2chan)); // XXX TODO: handle alarms here XXX } } - /* XXX - * when ftdm_span_poll_event() returns FTDM_SUCCESS, means there are events pending on the span. - * is it possible to know on which channels those events are pending, without trasvering the span? - * XXX - */ - for (i = 1; i <= span->chan_count; i++) { - r2chan = R2CALL(span->channels[i])->r2chan; - ftdmchan = openr2_chan_get_client_data(r2chan); - r2call = R2CALL(ftdmchan); + /* XXX + * when ftdm_span_poll_event() returns FTDM_SUCCESS, means there are events pending on the span. + * is it possible to know on which channels those events are pending, without traversing the span? + * XXX */ + for (i = 1; i <= span->chan_count; i++) { + r2chan = R2CALL(span->channels[i])->r2chan; + ftdmchan = openr2_chan_get_client_data(r2chan); + r2call = R2CALL(ftdmchan); - ftdm_mutex_lock(ftdmchan->mutex); - ftdm_set_flag(r2call, FTDM_R2_PROCESSING); + ftdm_mutex_lock(ftdmchan->mutex); + ftdm_set_flag(r2call, FTDM_R2_PROCESSING); - if (ftdm_r2_state_advance(ftdmchan)) { - ftdm_clear_flag(r2call, FTDM_R2_PROCESSING); - ftdm_mutex_unlock(ftdmchan->mutex); - continue; - } + if (ftdm_r2_state_advance(ftdmchan)) { + ftdm_clear_flag(r2call, FTDM_R2_PROCESSING); + ftdm_mutex_unlock(ftdmchan->mutex); + continue; + } - /* handle timeout events first if any */ - openr2_chan_run_schedule(r2chan); + /* handle timeout events first if any */ + openr2_chan_run_schedule(r2chan); - /* process mf tones, if any */ - if (openr2_chan_get_read_enabled(r2chan)) - openr2_chan_process_mf_signaling(r2chan); + /* process mf tones, if any */ + if (openr2_chan_get_read_enabled(r2chan)) { + openr2_chan_process_mf_signaling(r2chan); + } - if (ftdm_r2_state_advance(ftdmchan)) { - ftdm_clear_flag(r2call, FTDM_R2_PROCESSING); - ftdm_mutex_unlock(ftdmchan->mutex); - continue; - } + if (ftdm_r2_state_advance(ftdmchan)) { + ftdm_clear_flag(r2call, FTDM_R2_PROCESSING); + ftdm_mutex_unlock(ftdmchan->mutex); + continue; + } - ftdm_clear_flag(r2call, FTDM_R2_PROCESSING); - ftdm_mutex_unlock(ftdmchan->mutex); - } + ftdm_clear_flag(r2call, FTDM_R2_PROCESSING); + ftdm_mutex_unlock(ftdmchan->mutex); + } } else if (status != FTDM_TIMEOUT) { ftdm_log(FTDM_LOG_ERROR, "ftdm_span_poll_event returned %d.\n", status); - } + } ftdm_sleep(20); } From a0b164c1322e1d08e3d3a707d8d3ae53551772e1 Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Tue, 9 Nov 2010 16:34:34 -0500 Subject: [PATCH 229/230] freetdm: ISDN - Fix for not waking up the line on power-saving lines --- libs/freetdm/src/ftdm_io.c | 7 +- .../freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c | 1 - .../ftmod_sangoma_isdn/ftmod_sangoma_isdn.c | 83 ++++++++++++++----- .../ftmod_sangoma_isdn/ftmod_sangoma_isdn.h | 4 + .../ftmod_sangoma_isdn_cfg.c | 4 + .../ftmod_sangoma_isdn_stack_cntrl.c | 34 ++++++++ .../ftmod_sangoma_isdn_stack_out.c | 7 -- .../ftmod_sangoma_isdn_support.c | 22 +++++ .../src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c | 13 +-- libs/freetdm/src/include/private/ftdm_core.h | 2 + libs/freetdm/src/include/private/ftdm_types.h | 3 +- 11 files changed, 145 insertions(+), 35 deletions(-) diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c index f02c9c48db..1ede703a41 100644 --- a/libs/freetdm/src/ftdm_io.c +++ b/libs/freetdm/src/ftdm_io.c @@ -1751,7 +1751,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open_chan(ftdm_channel_t *ftdmchan) goto done; } - if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM)) { + if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM) && !ftdm_test_flag(ftdmchan->span, FTDM_SPAN_PWR_SAVING)) { snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", "Channel is alarmed\n"); ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "Cannot open channel when is alarmed\n"); goto done; @@ -3927,6 +3927,11 @@ static ftdm_status_t ftdm_set_channels_alarms(ftdm_span_t *span, int currindex) ftdm_log(FTDM_LOG_ERROR, "%d:%d: Failed to get alarms\n", span->channels[chan_index]->physical_span_id, span->channels[chan_index]->physical_chan_id); return FTDM_FAIL; } + if (span->channels[chan_index]->alarm_flags) { + ftdm_set_flag_locked(span->channels[chan_index], FTDM_CHANNEL_IN_ALARM); + } else { + ftdm_clear_flag_locked(span->channels[chan_index], FTDM_CHANNEL_IN_ALARM); + } } return FTDM_SUCCESS; } diff --git a/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c b/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c index 65c9dfc11f..d64e711e73 100644 --- a/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c +++ b/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c @@ -53,7 +53,6 @@ //#define IODEBUG /* helper macros */ -#define FTDM_SPAN_IS_BRI(x) ((x)->trunk_type == FTDM_TRUNK_BRI || (x)->trunk_type == FTDM_TRUNK_BRI_PTMP) #define FTDM_SPAN_IS_NT(x) (((ftdm_isdn_data_t *)(x)->signal_data)->mode == Q921_NT) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c index 22c89cb920..39231a0f39 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c @@ -47,6 +47,7 @@ static ftdm_status_t ftdm_sangoma_isdn_start(ftdm_span_t *span); ftdm_channel_t* ftdm_sangoma_isdn_process_event_states(ftdm_span_t *span, sngisdn_event_data_t *sngisdn_event); static void ftdm_sangoma_isdn_advance_chan_states(ftdm_channel_t *ftdmchan); +static void ftdm_sangoma_isdn_poll_events(ftdm_span_t *span); static void ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan); static void ftdm_sangoma_isdn_process_stack_event (ftdm_span_t *span, sngisdn_event_data_t *sngisdn_event); @@ -238,6 +239,50 @@ static __inline__ void ftdm_sangoma_isdn_advance_chan_states(ftdm_channel_t *ftd } } +static void ftdm_sangoma_isdn_poll_events(ftdm_span_t *span) +{ + ftdm_status_t ret_status; + ftdm_channel_t *ftdmchan; + ftdm_iterator_t *chaniter = NULL; + ftdm_iterator_t *curr = NULL; + + ret_status = ftdm_span_poll_event(span, 0, NULL); + switch(ret_status) { + case FTDM_SUCCESS: + { + ftdm_event_t *event; + while (ftdm_span_next_event(span, &event) == FTDM_SUCCESS) { + + if (FTDM_SPAN_IS_BRI(span)) { + switch (event->enum_id) { + /* Check if the span woke up from power-saving mode */ + case FTDM_OOB_ALARM_CLEAR: + { + chaniter = ftdm_span_get_chan_iterator(span, NULL); + for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) { + ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr); + sngisdn_chan_data_t *sngisdn_info = ftdmchan->call_data; + + if (ftdm_test_flag(sngisdn_info, FLAG_ACTIVATING)) { + ftdm_clear_flag(sngisdn_info, FLAG_ACTIVATING); + sngisdn_snd_setup((ftdm_channel_t*)ftdmchan); + } + } + ftdm_iterator_free(chaniter); + } + } + } + } + } + break; + case FTDM_TIMEOUT: + /* No events pending */ + break; + default: + ftdm_log(FTDM_LOG_WARNING, "%s:Failed to poll span event\n", span->name); + } +} + static void *ftdm_sangoma_isdn_run(ftdm_thread_t *me, void *obj) { ftdm_interrupt_t *ftdm_sangoma_isdn_int[2]; @@ -300,21 +345,8 @@ static void *ftdm_sangoma_isdn_run(ftdm_thread_t *me, void *obj) } /* Poll for events, e.g HW DTMF */ - ret_status = ftdm_span_poll_event(span, 0, NULL); - switch(ret_status) { - case FTDM_SUCCESS: - { - ftdm_event_t *event; - while (ftdm_span_next_event(span, &event) == FTDM_SUCCESS); - } - break; - case FTDM_TIMEOUT: - /* No events pending */ - break; - default: - ftdm_log(FTDM_LOG_WARNING, "%s:Failed to poll span event\n", span->name); - } - + ftdm_sangoma_isdn_poll_events(span); + if (ftdm_sched_get_time_to_next_timer(signal_data->sched, &sleep) == FTDM_SUCCESS) { if (sleep < 0 || sleep > SNGISDN_EVENT_POLL_RATE) { sleep = SNGISDN_EVENT_POLL_RATE; @@ -498,8 +530,20 @@ static void ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan) } break; case FTDM_CHANNEL_STATE_DIALING: /* outgoing call request */ - { - sngisdn_snd_setup(ftdmchan); + { + if (FTDM_SPAN_IS_BRI(ftdmchan->span) && + ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM) && + ftdm_test_flag(ftdmchan->span, FTDM_SPAN_PWR_SAVING)) { + + sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data; + + ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Requesting Line activation\n"); + sngisdn_set_flag(sngisdn_info, FLAG_ACTIVATING); + sng_isdn_wake_up_phy(ftdmchan->span); + ftdm_sched_timer(signal_data->sched, "timer_t3", signal_data->timer_t3*1000, sngisdn_t3_timeout, (void*) sngisdn_info, NULL); + } else { + sngisdn_snd_setup(ftdmchan); + } } break; case FTDM_CHANNEL_STATE_PROGRESS: @@ -856,8 +900,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_sangoma_isdn_span_config) if (span->trunk_type == FTDM_TRUNK_BRI_PTMP || span->trunk_type == FTDM_TRUNK_BRI) { - - ftdm_set_flag(span, FTDM_SPAN_USE_AV_RATE); + sng_isdn_set_avail_rate(span, SNGISDN_AVAIL_PWR_SAVING); } @@ -914,7 +957,7 @@ static FIO_SIG_LOAD_FUNCTION(ftdm_sangoma_isdn_init) /* initalize sng_isdn library */ - ftdm_assert_return(!sng_isdn_init(&g_sngisdn_event_interface), FTDM_FAIL, "Failed to initialize stack\n"); + ftdm_assert_return(!sng_isdn_init(&g_sngisdn_event_interface), FTDM_FAIL, "Failed to initialize stack\n"); return FTDM_SUCCESS; } diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h index e84392e22a..a3d48a8e11 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h @@ -74,6 +74,7 @@ typedef enum { FLAG_DELAYED_REL = (1 << 7), FLAG_SENT_PROCEED = (1 << 8), FLAG_SEND_DISC = (1 << 9), + FLAG_ACTIVATING = (1 << 10), /* Used for BRI only, flag is set after we request line CONNECTED */ } sngisdn_flag_t; @@ -181,6 +182,7 @@ typedef struct sngisdn_span_data { uint8_t facility; int8_t facility_timeout; uint8_t num_local_numbers; + uint8_t timer_t3; char* local_numbers[SNGISDN_NUM_LOCAL_NUMBERS]; ftdm_sched_t *sched; ftdm_queue_t *event_queue; @@ -368,11 +370,13 @@ void sngisdn_delayed_release(void* p_sngisdn_info); void sngisdn_delayed_connect(void* p_sngisdn_info); void sngisdn_delayed_disconnect(void* p_sngisdn_info); void sngisdn_facility_timeout(void* p_sngisdn_info); +void sngisdn_t3_timeout(void* p_sngisdn_info); /* Stack management functions */ ftdm_status_t sng_isdn_stack_cfg(ftdm_span_t *span); ftdm_status_t sng_isdn_stack_start(ftdm_span_t *span); ftdm_status_t sng_isdn_stack_stop(ftdm_span_t *span); +ftdm_status_t sng_isdn_wake_up_phy(ftdm_span_t *span); void sngisdn_print_phy_stats(ftdm_stream_handle_t *stream, ftdm_span_t *span); void sngisdn_print_spans(ftdm_stream_handle_t *stream); diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c index 64d7a2403f..18ca9c38dd 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c @@ -98,6 +98,8 @@ ftdm_status_t parse_switchtype(const char* switch_name, ftdm_span_t *span) ftdm_log(FTDM_LOG_ERROR, "%s:Unsupported switchtype %s for trunktype:%s\n", span->name, switch_name, ftdm_trunk_type2str(span->trunk_type)); return FTDM_FAIL; } + ftdm_set_flag(span, FTDM_SPAN_USE_AV_RATE); + ftdm_set_flag(span, FTDM_SPAN_PWR_SAVING); /* can be > 1 for some BRI variants */ break; default: @@ -179,6 +181,7 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_ signal_data->min_digits = 8; signal_data->overlap_dial = SNGISDN_OPT_DEFAULT; signal_data->setup_arb = SNGISDN_OPT_DEFAULT; + signal_data->timer_t3 = 8; signal_data->link_id = span->span_id; span->default_caller_data.bearer_capability = IN_ITC_SPEECH; @@ -189,6 +192,7 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_ if (span->trunk_type == FTDM_TRUNK_BRI || span->trunk_type == FTDM_TRUNK_BRI_PTMP) { + ftdm_span_set_npi("unknown", &span->default_caller_data.dnis.plan); ftdm_span_set_ton("unknown", &span->default_caller_data.dnis.type); ftdm_span_set_npi("unknown", &span->default_caller_data.cid_num.plan); diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c index 27c16c2a51..bfc00d07ba 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c @@ -113,6 +113,40 @@ ftdm_status_t sng_isdn_stack_stop(ftdm_span_t *span) } +ftdm_status_t sng_isdn_wake_up_phy(ftdm_span_t *span) +{ + L1Mngmt cntrl; + Pst pst; + + sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data; + + /* initalize the post structure */ + stack_pst_init(&pst); + + /* insert the destination Entity */ + pst.dstEnt = ENTL1; + + /* initalize the control structure */ + memset(&cntrl, 0, sizeof(cntrl)); + + /* initalize the control header */ + stack_hdr_init(&cntrl.hdr); + + cntrl.hdr.msgType = TCNTRL; /* configuration */ + cntrl.hdr.entId.ent = ENTL1; /* entity */ + cntrl.hdr.entId.inst = S_INST; /* instance */ + cntrl.hdr.elmId.elmnt = STTSAP; /* SAP Specific cntrl */ + + cntrl.t.cntrl.action = AENA; + cntrl.t.cntrl.subAction = SAELMNT; + cntrl.t.cntrl.sapId = signal_data->link_id; + + if (sng_isdn_phy_cntrl(&pst, &cntrl)) { + return FTDM_FAIL; + } + return FTDM_SUCCESS; +} + ftdm_status_t sng_isdn_activate_phy(ftdm_span_t *span) { diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c index 3284d54165..425c281a94 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c @@ -38,13 +38,6 @@ extern ftdm_status_t cpy_calling_num_from_user(CgPtyNmb *cgPtyNmb, ftdm_caller_d extern ftdm_status_t cpy_called_num_from_user(CdPtyNmb *cdPtyNmb, ftdm_caller_data_t *ftdm); extern ftdm_status_t cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmchan); -void sngisdn_snd_setup(ftdm_channel_t *ftdmchan); -void sngisdn_snd_proceed(ftdm_channel_t *ftdmchan); -void sngisdn_snd_progress(ftdm_channel_t *ftdmchan); -void sngisdn_snd_connect(ftdm_channel_t *ftdmchan); -void sngisdn_snd_disconnect(ftdm_channel_t *ftdmchan); -void sngisdn_snd_release(ftdm_channel_t *ftdmchan, uint8_t glare); - void sngisdn_snd_setup(ftdm_channel_t *ftdmchan) { diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c index f54f7db61c..5987823283 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c @@ -382,6 +382,28 @@ ftdm_status_t cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmc return FTDM_SUCCESS; } +void sngisdn_t3_timeout(void* p_sngisdn_info) +{ + sngisdn_chan_data_t *sngisdn_info = (sngisdn_chan_data_t*)p_sngisdn_info; + ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan; + sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data; + + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Timer T3 expired (suId:%d suInstId:%u spInstId:%u)\n", + signal_data->cc_id, sngisdn_info->glare.spInstId, sngisdn_info->glare.suInstId); + ftdm_mutex_lock(ftdmchan->mutex); + if (ftdm_test_flag(sngisdn_info, FLAG_ACTIVATING)){ + /* PHY layer timed-out, need to clear the call */ + ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Failed to Wake-Up line (suId:%d suInstId:%u spInstId:%u)\n", + signal_data->cc_id, sngisdn_info->glare.spInstId, sngisdn_info->glare.suInstId); + + ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_NO_ROUTE_DESTINATION; + ftdm_clear_flag(sngisdn_info, FLAG_ACTIVATING); + ftdm_set_flag(sngisdn_info, FLAG_LOCAL_ABORT); + ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_TERMINATING); + } + ftdm_mutex_unlock(ftdmchan->mutex); +} + void sngisdn_delayed_release(void* p_sngisdn_info) { sngisdn_chan_data_t *sngisdn_info = (sngisdn_chan_data_t*)p_sngisdn_info; diff --git a/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c b/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c index e2d85f7ea1..b95b34d2d2 100644 --- a/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c +++ b/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c @@ -1011,13 +1011,15 @@ static FIO_GET_ALARMS_FUNCTION(wanpipe_get_alarms) } alarms = tdm_api.wp_tdm_cmd.fe_alarms; #endif -#if 1 - /* DAVIDY - Temporary fix: in the current trunk of libsangoma, for BRI, +#ifdef WIN32 + /* Temporary fix: in the current trunk of libsangoma, for BRI, WAN_TE_BIT_ALARM_RED bit is set if the card is in disconnected state, but this has not been ported to Windows-libsangoma yet */ - if (alarms) { - ftdmchan->alarm_flags |= FTDM_ALARM_RED; - alarms = 0; + if (FTDM_SPAN_IS_BRI(ftdmchan->span)) { + if (alarms) { + ftdmchan->alarm_flags |= FTDM_ALARM_RED; + alarms = 0; + } } #endif @@ -1027,6 +1029,7 @@ static FIO_GET_ALARMS_FUNCTION(wanpipe_get_alarms) ftdmchan->alarm_flags |= FTDM_ALARM_RED; alarms &= ~WAN_TE_BIT_ALARM_RED; } + if (alarms & WAN_TE_BIT_ALARM_AIS) { ftdmchan->alarm_flags |= FTDM_ALARM_BLUE; diff --git a/libs/freetdm/src/include/private/ftdm_core.h b/libs/freetdm/src/include/private/ftdm_core.h index 8bdbdd60f8..dbf108020b 100644 --- a/libs/freetdm/src/include/private/ftdm_core.h +++ b/libs/freetdm/src/include/private/ftdm_core.h @@ -222,6 +222,8 @@ extern "C" { #define ftdm_is_dtmf(key) ((key > 47 && key < 58) || (key > 64 && key < 69) || (key > 96 && key < 101) || key == 35 || key == 42 || key == 87 || key == 119) +#define FTDM_SPAN_IS_BRI(x) ((x)->trunk_type == FTDM_TRUNK_BRI || (x)->trunk_type == FTDM_TRUNK_BRI_PTMP) + /*! \brief Copy flags from one arbitrary object to another \command dest the object to copy the flags to diff --git a/libs/freetdm/src/include/private/ftdm_types.h b/libs/freetdm/src/include/private/ftdm_types.h index bddefd9be6..78ac8f63eb 100644 --- a/libs/freetdm/src/include/private/ftdm_types.h +++ b/libs/freetdm/src/include/private/ftdm_types.h @@ -176,10 +176,11 @@ typedef enum { FTDM_SPAN_USE_CHAN_QUEUE = (1 << 6), FTDM_SPAN_SUGGEST_CHAN_ID = (1 << 7), FTDM_SPAN_USE_AV_RATE = (1 << 8), + FTDM_SPAN_PWR_SAVING = (1 << 9), /* If you use this flag, you MUST call ftdm_span_trigger_signals to deliver the user signals * after having called ftdm_send_span_signal(), which with this flag it will just enqueue the signal * for later delivery */ - FTDM_SPAN_USE_SIGNALS_QUEUE = (1 << 9), + FTDM_SPAN_USE_SIGNALS_QUEUE = (1 << 10), } ftdm_span_flag_t; /*! \brief Channel supported features */ From d7a136cd1a836c4172a16dad2a0000fe5464794d Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Wed, 10 Nov 2010 10:32:50 -0500 Subject: [PATCH 230/230] freetdm:Fix for RDNIS not set --- .../src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c | 1 + .../src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c | 1 + 2 files changed, 2 insertions(+) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c index 7ca408538a..83a8faa465 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c @@ -135,6 +135,7 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event) cpy_calling_num_from_stack(&ftdmchan->caller_data, &conEvnt->cgPtyNmb); cpy_called_num_from_stack(&ftdmchan->caller_data, &conEvnt->cdPtyNmb); cpy_calling_name_from_stack(&ftdmchan->caller_data, &conEvnt->display); + cpy_redir_num_from_stack(&ftdmchan->caller_data, &conEvnt->redirNmb); ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_INFO, "Incoming call: Called No:[%s] Calling No:[%s]\n", ftdmchan->caller_data.dnis.digits, ftdmchan->caller_data.cid_num.digits); if (conEvnt->bearCap[0].eh.pres) { diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c index 425c281a94..e269809c1c 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c @@ -140,6 +140,7 @@ void sngisdn_snd_setup(ftdm_channel_t *ftdmchan) cpy_called_num_from_user(&conEvnt.cdPtyNmb, &ftdmchan->caller_data); cpy_calling_num_from_user(&conEvnt.cgPtyNmb, &ftdmchan->caller_data); + cpy_redir_num_from_user(&conEvnt.redirNmb, &ftdmchan->caller_data); cpy_calling_name_from_user(&conEvnt, ftdmchan); ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending SETUP (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces);

    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 z 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