From anthm at freeswitch.org Mon Dec 1 08:21:28 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 01 Dec 2008 11:21:28 -0500 Subject: [Freeswitch-trunk] [commit] r10559 - freeswitch/trunk/src Message-ID: Author: anthm Date: Mon Dec 1 11:21:27 2008 New Revision: 10559 Log: FSCORE-240 Modified: freeswitch/trunk/src/switch_core_session.c freeswitch/trunk/src/switch_ivr.c freeswitch/trunk/src/switch_ivr_originate.c Modified: freeswitch/trunk/src/switch_core_session.c ============================================================================== --- freeswitch/trunk/src/switch_core_session.c (original) +++ freeswitch/trunk/src/switch_core_session.c Mon Dec 1 11:21:27 2008 @@ -441,6 +441,7 @@ "SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ", "SWITCH_MESSAGE_INDICATE_DISPLAY", "SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY", + "SWITCH_MESSAGE_INDICATE_AUDIO_SYNC", "SWITCH_MESSAGE_INVALID" }; Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Mon Dec 1 11:21:27 2008 @@ -52,7 +52,13 @@ cng_frame.buflen = 2; switch_set_flag((&cng_frame), SFF_CNG); - switch_channel_audio_sync(channel); + if (!switch_channel_test_flag(channel, CF_PROXY_MODE)) { + switch_channel_audio_sync(channel); + } + + if (!ms) { + return SWITCH_STATUS_SUCCESS; + } for (;;) { now = switch_timestamp_now(); Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Mon Dec 1 11:21:27 2008 @@ -39,12 +39,6 @@ { switch_channel_t *channel = switch_core_session_get_channel(session); - if (!switch_channel_test_flag(channel, CF_PROXY_MODE)) { - while (switch_channel_get_state(channel) == CS_CONSUME_MEDIA && !switch_channel_test_flag(channel, CF_TAGGED)) { - switch_ivr_sleep(session, 10, NULL); - } - } - switch_channel_clear_state_handler(channel, &originate_state_handlers); return SWITCH_STATUS_FALSE; @@ -97,6 +91,8 @@ return NULL; } + switch_ivr_sleep(collect->session, 0, NULL); + if (!strcasecmp(collect->key, "exec")) { char *data; switch_application_interface_t *application_interface; @@ -1680,6 +1676,13 @@ *bleg = NULL; } + if (*bleg) { + switch_ivr_sleep(*bleg, 0, NULL); + } + + if (session) { + switch_ivr_sleep(session, 0, NULL); + } if (var_event) { switch_event_destroy(&var_event); From anthm at freeswitch.org Mon Dec 1 08:53:09 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 01 Dec 2008 11:53:09 -0500 Subject: [Freeswitch-trunk] [commit] r10560 - freeswitch/trunk/src/mod/xml_int/mod_xml_cdr Message-ID: Author: anthm Date: Mon Dec 1 11:53:07 2008 New Revision: 10560 Log: FSCORE-238 Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c ============================================================================== --- freeswitch/trunk/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c (original) +++ freeswitch/trunk/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c Mon Dec 1 11:53:07 2008 @@ -33,10 +33,13 @@ #include #include #include +#define MAX_URLS 20 static struct { char *cred; - char *url; + char *urls[MAX_URLS+1]; + int url_count; + int url_index; char *log_dir; char *err_log_dir; uint32_t delay; @@ -47,6 +50,7 @@ int log_b; int prefix_a; int disable100continue; + switch_memory_pool_t *pool; } globals; SWITCH_MODULE_LOAD_FUNCTION(mod_xml_cdr_load); @@ -128,7 +132,7 @@ } /* try to post it to the web server */ - if (!switch_strlen_zero(globals.url)) { + if (globals.url_count) { curl_handle = curl_easy_init(); if (globals.encode) { @@ -150,11 +154,6 @@ headers = curl_slist_append(headers, "Content-Type: application/x-www-form-plaintext"); } - if (!strncasecmp(globals.url, "https", 5)) { - curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0); - curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0); - } - if (!(curl_xml_text = switch_mprintf("cdr=%s", xml_text))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); goto error; @@ -168,7 +167,6 @@ curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl_handle, CURLOPT_POST, 1); curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, curl_xml_text); - curl_easy_setopt(curl_handle, CURLOPT_URL, globals.url); curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "freeswitch-xml/1.0"); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, httpCallBack); @@ -190,12 +188,26 @@ if (cur_try > 0) { switch_yield(globals.delay * 1000000); } + + curl_easy_setopt(curl_handle, CURLOPT_URL, globals.urls[globals.url_index]); + + if (!strncasecmp(globals.urls[globals.url_index], "https", 5)) { + curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0); + } + curl_easy_perform(curl_handle); curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &httpRes); if (httpRes == 200) { goto success; } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Got error [%ld] posting to web server [%s]\n", httpRes, globals.url); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Got error [%ld] posting to web server [%s]\n", + httpRes, globals.urls[globals.url_index]); + globals.url_index++; + if (globals.url_index >= globals.url_count) { + globals.url_index = 0; + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Retry will be with url [%s]\n", globals.urls[globals.url_index]); } } curl_easy_cleanup(curl_handle); @@ -270,6 +282,7 @@ memset(&globals, 0, sizeof(globals)); globals.log_b = 1; globals.disable100continue = 0; + globals.pool = pool; /* parse the config */ if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { @@ -283,9 +296,13 @@ char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcasecmp(var, "cred") && !switch_strlen_zero(val)) { - globals.cred = strdup(val); + globals.cred = switch_core_strdup(globals.pool, val); } else if (!strcasecmp(var, "url") && !switch_strlen_zero(val)) { - globals.url = strdup(val); + if (globals.url_count >= MAX_URLS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "maximum urls configured!\n"); + } else { + globals.urls[globals.url_count++] = switch_core_strdup(globals.pool, val); + } } else if (!strcasecmp(var, "delay") && !switch_strlen_zero(val)) { globals.delay = (uint32_t) atoi(val); } else if (!strcasecmp(var, "log-b-leg")) { @@ -307,7 +324,7 @@ globals.log_dir = switch_mprintf("%s%sxml_cdr", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR); } else { if (switch_is_file_path(val)) { - globals.log_dir = strdup(val); + globals.log_dir = switch_core_strdup(globals.pool, val); } else { globals.log_dir = switch_mprintf("%s%s%s", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, val); } @@ -317,7 +334,7 @@ globals.err_log_dir = switch_mprintf("%s%sxml_cdr", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR); } else { if (switch_is_file_path(val)) { - globals.err_log_dir = strdup(val); + globals.err_log_dir = switch_core_strdup(globals.pool, val); } else { globals.err_log_dir = switch_mprintf("%s%s%s", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, val); } @@ -328,9 +345,9 @@ if (switch_strlen_zero(globals.err_log_dir)) { if (!switch_strlen_zero(globals.log_dir)) { - globals.err_log_dir = strdup(globals.log_dir); + globals.err_log_dir = switch_core_strdup(globals.pool, globals.log_dir); } else { - globals.err_log_dir = switch_mprintf("%s%sxml_cdr", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR); + globals.err_log_dir = switch_core_sprintf(globals.pool, "%s%sxml_cdr", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR); } } } From anthm at freeswitch.org Mon Dec 1 11:40:54 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 01 Dec 2008 14:40:54 -0500 Subject: [Freeswitch-trunk] [commit] r10561 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Mon Dec 1 14:40:53 2008 New Revision: 10561 Log: parse replaces out of refer-to better Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Mon Dec 1 14:40:53 2008 @@ -3170,6 +3170,7 @@ } if ((refer_to = sip->sip_refer_to)) { + char *rep; full_ref_to = sip_header_as_string(home, (void *) sip->sip_refer_to); if (profile->pflags & PFLAG_FULL_ID) { @@ -3180,10 +3181,9 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Process REFER to [%s@%s]\n", exten, (char *) refer_to->r_url->url_host); - if (refer_to->r_url->url_headers && strstr(refer_to->r_url->url_headers, "Replaces=")) { + if (refer_to->r_url->url_headers && (rep = (char *)switch_stristr("Replaces=", refer_to->r_url->url_headers))) { sip_replaces_t *replaces; nua_handle_t *bnh; - char *rep; if (switch_channel_test_flag(channel_a, CF_PROXY_MODE)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Attended Transfer BYPASS MEDIA CALLS!\n"); @@ -3192,13 +3192,18 @@ NUTAG_SUBSTATE(nua_substate_terminated), SIPTAG_PAYLOAD_STR("SIP/2.0 403 Forbidden"), SIPTAG_EVENT_STR(etmp), TAG_END()); goto done; } - - if ((rep = strchr(refer_to->r_url->url_headers, '='))) { + + if (rep) { const char *br_a = NULL, *br_b = NULL; char *buf; + char *p; - rep++; + rep = switch_core_session_strdup(session, rep + 9); + if ((p = strchr(rep, ';'))) { + *p = '\0'; + } + if ((buf = switch_core_session_alloc(session, strlen(rep) + 1))) { rep = url_unescape(buf, (const char *) rep); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Replaces: [%s]\n", rep); From brian at freeswitch.org Mon Dec 1 11:52:22 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 01 Dec 2008 14:52:22 -0500 Subject: [Freeswitch-trunk] [commit] r10562 - freeswitch/trunk/conf/sip_profiles Message-ID: Author: brian Date: Mon Dec 1 14:52:22 2008 New Revision: 10562 Log: document force-register-db-domain ... I do not know how I missed this Modified: freeswitch/trunk/conf/sip_profiles/external.xml freeswitch/trunk/conf/sip_profiles/internal-ipv6.xml freeswitch/trunk/conf/sip_profiles/internal.xml Modified: freeswitch/trunk/conf/sip_profiles/external.xml ============================================================================== --- freeswitch/trunk/conf/sip_profiles/external.xml (original) +++ freeswitch/trunk/conf/sip_profiles/external.xml Mon Dec 1 14:52:22 2008 @@ -39,6 +39,8 @@ + + Modified: freeswitch/trunk/conf/sip_profiles/internal-ipv6.xml ============================================================================== --- freeswitch/trunk/conf/sip_profiles/internal-ipv6.xml (original) +++ freeswitch/trunk/conf/sip_profiles/internal-ipv6.xml Mon Dec 1 14:52:22 2008 @@ -102,7 +102,9 @@ - + + + Modified: freeswitch/trunk/conf/sip_profiles/internal.xml ============================================================================== --- freeswitch/trunk/conf/sip_profiles/internal.xml (original) +++ freeswitch/trunk/conf/sip_profiles/internal.xml Mon Dec 1 14:52:22 2008 @@ -145,7 +145,9 @@ - + + + From mikej at freeswitch.org Mon Dec 1 13:41:18 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 01 Dec 2008 16:41:18 -0500 Subject: [Freeswitch-trunk] [commit] r10563 - in freeswitch/trunk/src/mod/languages/mod_managed: . managed Message-ID: Author: mikej Date: Mon Dec 1 16:41:17 2008 New Revision: 10563 Log: swigall Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx Mon Dec 1 16:41:17 2008 @@ -17902,6 +17902,14 @@ } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_audio_sync(void * jarg1) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + switch_channel_audio_sync(arg1); +} + + SWIGEXPORT int SWIGSTDCALL CSharp_switch_buffer_create(void * jarg1, void * jarg2, void * jarg3) { int jresult ; switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; @@ -21993,6 +22001,14 @@ } +SWIGEXPORT void SWIGSTDCALL CSharp_rtp_flush_read_buffer(void * jarg1) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + + arg1 = (switch_rtp_t *)jarg1; + rtp_flush_read_buffer(arg1); +} + + SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_enable_vad(void * jarg1, void * jarg2, void * jarg3, unsigned long jarg4) { int jresult ; switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Mon Dec 1 16:41:17 2008 @@ -2515,6 +2515,10 @@ return ret; } + public static void switch_channel_audio_sync(SWIGTYPE_p_switch_channel channel) { + freeswitchPINVOKE.switch_channel_audio_sync(SWIGTYPE_p_switch_channel.getCPtr(channel)); + } + public static switch_status_t switch_buffer_create(SWIGTYPE_p_apr_pool_t pool, SWIGTYPE_p_p_switch_buffer buffer, SWIGTYPE_p_switch_size_t max_len) { switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_buffer_create(SWIGTYPE_p_apr_pool_t.getCPtr(pool), SWIGTYPE_p_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_switch_size_t.getCPtr(max_len)); if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); @@ -3390,6 +3394,10 @@ return ret; } + public static void rtp_flush_read_buffer(SWIGTYPE_p_switch_rtp rtp_session) { + freeswitchPINVOKE.rtp_flush_read_buffer(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + } + public static switch_status_t switch_rtp_enable_vad(SWIGTYPE_p_switch_rtp rtp_session, SWIGTYPE_p_switch_core_session session, switch_codec codec, uint flags) { switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_enable_vad(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec.getCPtr(codec), flags); return ret; @@ -8495,6 +8503,9 @@ [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_timestamps")] public static extern int switch_channel_set_timestamps(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_audio_sync")] + public static extern void switch_channel_audio_sync(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_create")] public static extern int switch_buffer_create(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); @@ -9353,6 +9364,9 @@ [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_zerocopy_read_frame")] public static extern int switch_rtp_zerocopy_read_frame(HandleRef jarg1, HandleRef jarg2, uint jarg3); + [DllImport("mod_managed", EntryPoint="CSharp_rtp_flush_read_buffer")] + public static extern void rtp_flush_read_buffer(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_enable_vad")] public static extern int switch_rtp_enable_vad(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, uint jarg4); @@ -16801,7 +16815,7 @@ CF_PROXY_MODE = (1 << 13), CF_SUSPEND = (1 << 14), CF_EVENT_PARSE = (1 << 15), - CF_REPEAT_STATE = (1 << 16), + CF_USE_ME = (1 << 16), CF_GEN_RINGBACK = (1 << 17), CF_RING_READY = (1 << 18), CF_BREAK = (1 << 19), @@ -18309,6 +18323,7 @@ SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ, SWITCH_MESSAGE_INDICATE_DISPLAY, SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY, + SWITCH_MESSAGE_INDICATE_AUDIO_SYNC, SWITCH_MESSAGE_INVALID } @@ -19610,6 +19625,7 @@ SWITCH_EVENT_DTMF, SWITCH_EVENT_MESSAGE, SWITCH_EVENT_PRESENCE_IN, + SWITCH_EVENT_NOTIFY_IN, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_MESSAGE_WAITING, From mikej at freeswitch.org Mon Dec 1 15:10:15 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 01 Dec 2008 18:10:15 -0500 Subject: [Freeswitch-trunk] [commit] r10564 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: mikej Date: Mon Dec 1 18:10:15 2008 New Revision: 10564 Log: missing port Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Mon Dec 1 18:10:15 2008 @@ -1165,8 +1165,8 @@ ipv6 ? "[" : "", ip_addr, ipv6 ? "]" : "", tech_pvt->profile->tls_sip_port); } else { - tech_pvt->invite_contact = switch_core_session_sprintf(session, "sip:%s@%s%s%s", contact, - ipv6 ? "[" : "", ip_addr, ipv6 ? "]" : ""); + tech_pvt->invite_contact = switch_core_session_sprintf(session, "sip:%s@%s%s%s:%d", contact, + ipv6 ? "[" : "", ip_addr, ipv6 ? "]" : "", tech_pvt->profile->sip_port); } } else { if (sofia_glue_transport_has_tls(tech_pvt->transport)) { From anthm at freeswitch.org Tue Dec 2 08:15:14 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 02 Dec 2008 11:15:14 -0500 Subject: [Freeswitch-trunk] [commit] r10565 - freeswitch/trunk/src/mod/applications/mod_commands Message-ID: Author: anthm Date: Tue Dec 2 11:15:12 2008 New Revision: 10565 Log: MODAPP-171 Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Tue Dec 2 11:15:12 2008 @@ -2704,7 +2704,7 @@ SWITCH_STANDARD_API(uuid_setvar_multi_function) { switch_core_session_t *psession = NULL; - char *mycmd = NULL, *vars, *argv[2] = { 0 }; + char *mycmd = NULL, *vars, *argv[64] = { 0 }; int argc = 0; char *var_name, *var_value; @@ -2748,7 +2748,7 @@ } } - stream->write_function(stream, "-USAGE: %s\n", SETVAR_SYNTAX); + stream->write_function(stream, "-USAGE: %s\n", SETVAR_MULTI_SYNTAX); done: switch_safe_free(mycmd); From anthm at freeswitch.org Tue Dec 2 13:33:02 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 02 Dec 2008 16:33:02 -0500 Subject: [Freeswitch-trunk] [commit] r10566 - in freeswitch/trunk/src: . include mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Tue Dec 2 16:33:01 2008 New Revision: 10566 Log: fix random issues Modified: freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h freeswitch/trunk/src/switch_core_io.c freeswitch/trunk/src/switch_rtp.c Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Tue Dec 2 16:33:01 2008 @@ -451,7 +451,8 @@ SWITCH_RTP_FLAG_SECURE_SEND_RESET = (1 << 16), SWITCH_RTP_FLAG_SECURE_RECV_RESET = (1 << 17), SWITCH_RTP_FLAG_PROXY_MEDIA = (1 << 18), - SWITCH_RTP_FLAG_SHUTDOWN = (1 << 19) + SWITCH_RTP_FLAG_SHUTDOWN = (1 << 19), + SWITCH_RTP_FLAG_FLUSH = (1 << 20) } switch_rtp_flag_enum_t; typedef uint32_t switch_rtp_flag_t; Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Tue Dec 2 16:33:01 2008 @@ -710,72 +710,79 @@ } if (tech_pvt->last_ts && tech_pvt->read_frame.datalen != tech_pvt->read_codec.implementation->encoded_bytes_per_packet) { - if (++tech_pvt->mismatch_count >= MAX_MISMATCH_FRAMES) { - switch_size_t codec_ms = (int)(tech_pvt->read_frame.timestamp - - tech_pvt->last_ts) / (tech_pvt->read_codec.implementation->samples_per_second / 1000); - - if ((codec_ms % 10) != 0) { - tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES; - goto skip; - } else { - if (switch_rtp_ready(tech_pvt->rtp_session) && codec_ms != tech_pvt->codec_ms) { - const char *val; - int rtp_timeout_sec = 0; - int rtp_hold_timeout_sec = 0; + switch_size_t codec_ms = (int)(tech_pvt->read_frame.timestamp - + tech_pvt->last_ts) / (tech_pvt->read_codec.implementation->samples_per_second / 1000); + + if ((codec_ms % 10) != 0) { + tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES; + goto skip; + } + + if (tech_pvt->last_codec_ms && tech_pvt->last_codec_ms == codec_ms) { + tech_pvt->mismatch_count++; + } + + tech_pvt->last_codec_ms = codec_ms; + + if (tech_pvt->mismatch_count > MAX_MISMATCH_FRAMES) { + if (switch_rtp_ready(tech_pvt->rtp_session) && codec_ms != tech_pvt->codec_ms) { + const char *val; + int rtp_timeout_sec = 0; + int rtp_hold_timeout_sec = 0; - tech_pvt->codec_ms = codec_ms; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, - "Changing codec ptime to %d. I bet you have a linksys/sipura =D\n", tech_pvt->codec_ms); - switch_core_codec_destroy(&tech_pvt->read_codec); - switch_core_codec_destroy(&tech_pvt->write_codec); - if (sofia_glue_tech_set_codec(tech_pvt, 2) != SWITCH_STATUS_SUCCESS) { - *frame = NULL; - return SWITCH_STATUS_GENERR; - } + tech_pvt->codec_ms = codec_ms; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, + "Changing codec ptime to %d. I bet you have a linksys/sipura =D\n", tech_pvt->codec_ms); + switch_core_codec_destroy(&tech_pvt->read_codec); + switch_core_codec_destroy(&tech_pvt->write_codec); + if (sofia_glue_tech_set_codec(tech_pvt, 2) != SWITCH_STATUS_SUCCESS) { + *frame = NULL; + return SWITCH_STATUS_GENERR; + } - if ((val = switch_channel_get_variable(tech_pvt->channel, "rtp_timeout_sec"))) { - int v = atoi(val); - if (v >= 0) { - rtp_timeout_sec = v; - } + if ((val = switch_channel_get_variable(tech_pvt->channel, "rtp_timeout_sec"))) { + int v = atoi(val); + if (v >= 0) { + rtp_timeout_sec = v; } + } - if ((val = switch_channel_get_variable(tech_pvt->channel, "rtp_hold_timeout_sec"))) { - int v = atoi(val); - if (v >= 0) { - rtp_hold_timeout_sec = v; - } + if ((val = switch_channel_get_variable(tech_pvt->channel, "rtp_hold_timeout_sec"))) { + int v = atoi(val); + if (v >= 0) { + rtp_hold_timeout_sec = v; } + } - if (rtp_timeout_sec) { - tech_pvt->max_missed_packets = (tech_pvt->read_codec.implementation->samples_per_second * rtp_timeout_sec) / - tech_pvt->read_codec.implementation->samples_per_packet; + if (rtp_timeout_sec) { + tech_pvt->max_missed_packets = (tech_pvt->read_codec.implementation->samples_per_second * rtp_timeout_sec) / + tech_pvt->read_codec.implementation->samples_per_packet; - switch_rtp_set_max_missed_packets(tech_pvt->rtp_session, tech_pvt->max_missed_packets); - if (!rtp_hold_timeout_sec) { - rtp_hold_timeout_sec = rtp_timeout_sec * 10; - } + switch_rtp_set_max_missed_packets(tech_pvt->rtp_session, tech_pvt->max_missed_packets); + if (!rtp_hold_timeout_sec) { + rtp_hold_timeout_sec = rtp_timeout_sec * 10; } + } - if (rtp_hold_timeout_sec) { - tech_pvt->max_missed_hold_packets = (tech_pvt->read_codec.implementation->samples_per_second * rtp_hold_timeout_sec) / - tech_pvt->read_codec.implementation->samples_per_packet; - } + if (rtp_hold_timeout_sec) { + tech_pvt->max_missed_hold_packets = (tech_pvt->read_codec.implementation->samples_per_second * rtp_hold_timeout_sec) / + tech_pvt->read_codec.implementation->samples_per_packet; + } - if (switch_rtp_change_interval(tech_pvt->rtp_session, - tech_pvt->codec_ms * 1000, - tech_pvt->read_codec.implementation->samples_per_packet - ) != SWITCH_STATUS_SUCCESS) { - switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + if (switch_rtp_change_interval(tech_pvt->rtp_session, + tech_pvt->codec_ms * 1000, + tech_pvt->read_codec.implementation->samples_per_packet + ) != SWITCH_STATUS_SUCCESS) { + switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); - } - - tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES; } - + + tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES; } + } + } else { tech_pvt->mismatch_count = 0; } Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h Tue Dec 2 16:33:01 2008 @@ -547,6 +547,7 @@ switch_size_t last_ts; uint32_t check_frames; uint32_t mismatch_count; + uint32_t last_codec_ms; nua_event_t want_event; }; Modified: freeswitch/trunk/src/switch_core_io.c ============================================================================== --- freeswitch/trunk/src/switch_core_io.c (original) +++ freeswitch/trunk/src/switch_core_io.c Tue Dec 2 16:33:01 2008 @@ -608,10 +608,14 @@ switch_mutex_lock(session->codec_write_mutex); if ((session->write_codec && frame->codec && session->write_codec->implementation != frame->codec->implementation)) { - need_codec = TRUE; if (session->write_codec->implementation->codec_id == frame->codec->implementation->codec_id) { ptime_mismatch = TRUE; + if (!need_codec) { + status = perform_write(session, frame, flags, stream_id); + goto error; + } } + need_codec = TRUE; } if (session->write_codec && !frame->codec) { Modified: freeswitch/trunk/src/switch_rtp.c ============================================================================== --- freeswitch/trunk/src/switch_rtp.c (original) +++ freeswitch/trunk/src/switch_rtp.c Tue Dec 2 16:33:01 2008 @@ -1265,6 +1265,11 @@ SWITCH_DECLARE(void) rtp_flush_read_buffer(switch_rtp_t *rtp_session) { + switch_set_flag_locked(rtp_session, SWITCH_RTP_FLAG_FLUSH); +} + +static void do_flush(switch_rtp_t *rtp_session) +{ int was_blocking = 0; switch_size_t bytes; switch_status_t status; @@ -1338,6 +1343,12 @@ goto end; } + if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_FLUSH)) { + do_flush(rtp_session); + switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_FLUSH); + continue; + } + if (rtp_session->max_missed_packets) { if (bytes) { rtp_session->missed_count = 0; From anthm at freeswitch.org Wed Dec 3 07:44:33 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 10:44:33 -0500 Subject: [Freeswitch-trunk] [commit] r10568 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Wed Dec 3 10:44:31 2008 New Revision: 10568 Log: MODENDP-156 Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Wed Dec 3 10:44:31 2008 @@ -1409,6 +1409,36 @@ return 0; } +static int show_reg_callback_xml(void *pArg, int argc, char **argv, char **columnNames) +{ + struct cb_helper *cb = (struct cb_helper *) pArg; + char exp_buf[128] = ""; + switch_time_exp_t tm; + const int buflen = 2048; + char xmlbuf[buflen]; + + if (argv[6]) { + switch_time_t etime = atoi(argv[6]); + switch_size_t retsize; + + switch_time_exp_lt(&tm, switch_time_from_sec(etime)); + switch_strftime_nocheck(exp_buf, &retsize, sizeof(exp_buf), "%Y-%m-%d %T", &tm); + } + + cb->stream->write_function(cb->stream, + "\n" + "%s\n" + "%s@%s\n" + "%s\n" + "%s\n" + "%s(%s) EXP(%s)\n" + "%s\n" + "\n", + switch_str_nil(argv[0]), switch_str_nil(argv[1]), switch_str_nil(argv[2]), switch_amp_encode(switch_str_nil(argv[3]),xmlbuf,buflen), + switch_str_nil(argv[7]), switch_str_nil(argv[4]), switch_str_nil(argv[5]), exp_buf, switch_str_nil(argv[11])); + return 0; +} + static const char *status_names[] = { "DOWN", "UP", NULL }; static switch_status_t cmd_status(char **argv, int argc, switch_stream_handle_t *stream) @@ -1594,6 +1624,194 @@ return SWITCH_STATUS_SUCCESS; } +static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handle_t *stream) +{ + sofia_profile_t *profile = NULL; + sofia_gateway_t *gp; + switch_hash_index_t *hi; + void *val; + const void *vvar; + const int buflen = 2096; + char xmlbuf[buflen]; + int c = 0; + int ac = 0; + const char *header = ""; + + if (argc > 0) { + if (argc == 1) { + stream->write_function(stream, "Invalid Syntax!\n"); + return SWITCH_STATUS_SUCCESS; + } + if (!strcasecmp(argv[0], "gateway")) { + if ((gp = sofia_reg_find_gateway(argv[1]))) { + switch_assert(gp->state < REG_STATE_LAST); + stream->write_function(stream, "%s\n", header); + stream->write_function(stream, "\n"); + stream->write_function(stream, "%s\n", switch_str_nil(gp->name)); + stream->write_function(stream, "%s\n", switch_str_nil(gp->register_scheme)); + stream->write_function(stream, "%s\n", switch_str_nil(gp->register_realm)); + stream->write_function(stream, "%s\n", switch_str_nil(gp->register_username)); + stream->write_function(stream, "%s\n", switch_strlen_zero(gp->register_password) ? "no" : "yes"); + stream->write_function(stream, "%s\n", switch_amp_encode(switch_str_nil(gp->register_from),xmlbuf,buflen)); + stream->write_function(stream, "%s\n", switch_amp_encode(switch_str_nil(gp->register_contact),xmlbuf,buflen)); + stream->write_function(stream, "%s\n", switch_str_nil(gp->register_to)); + stream->write_function(stream, "%s\n", switch_str_nil(gp->register_proxy)); + stream->write_function(stream, "%s\n", switch_str_nil(gp->register_context)); + stream->write_function(stream, "%s\n", switch_str_nil(gp->expires_str)); + stream->write_function(stream, "%d\n", gp->freq); + stream->write_function(stream, "%d\n", gp->ping); + stream->write_function(stream, "%d\n", gp->ping_freq); + stream->write_function(stream, "%s\n", sofia_state_names[gp->state]); + stream->write_function(stream, "%s%s\n", status_names[gp->status], gp->pinging ? " (ping)" : ""); + stream->write_function(stream, "\n"); + sofia_reg_release_gateway(gp); + } else { + stream->write_function(stream, "Invalid Gateway!\n"); + } + } else if (!strcasecmp(argv[0], "profile")) { + struct cb_helper cb; + char *sql = NULL; + + if ((argv[1]) && (profile = sofia_glue_find_profile(argv[1]))) { + if (!argv[2] || strcasecmp(argv[2], "reg")) { + stream->write_function(stream, "%s\n", header); + stream->write_function(stream, "\n"); + stream->write_function(stream, "\n"); + stream->write_function(stream, "%s\n", switch_str_nil(argv[1])); + stream->write_function(stream, "%s\n", profile->domain_name ? profile->domain_name : "N/A"); + if (strcasecmp(argv[1], profile->name)) { + stream->write_function(stream, "%s\n", switch_str_nil(profile->name)); + } + stream->write_function(stream, "%s\n", switch_str_nil(profile->dbname)); + stream->write_function(stream, "%s\n", switch_str_nil(profile->presence_hosts)); + stream->write_function(stream, "%s\n", switch_str_nil(profile->dialplan)); + stream->write_function(stream, "%s\n", switch_str_nil(profile->context)); + stream->write_function(stream, "%s\n", + switch_strlen_zero(profile->challenge_realm) ? "auto_to" : profile->challenge_realm); + stream->write_function(stream, "%s\n", switch_str_nil(profile->rtpip)); + if (profile->extrtpip) { + stream->write_function(stream, "%s\n", profile->extrtpip); + } + + stream->write_function(stream, "%s\n", switch_str_nil(profile->sipip)); + if (profile->extsipip) { + stream->write_function(stream, "%s\n", profile->extsipip); + } + stream->write_function(stream, "%s\n", switch_str_nil(profile->url)); + stream->write_function(stream, "%s\n", switch_str_nil(profile->bindurl)); + if (sofia_test_pflag(profile, PFLAG_TLS)) { + stream->write_function(stream, "%s\n", switch_str_nil(profile->tls_url)); + stream->write_function(stream, "%s\n", switch_str_nil(profile->tls_bindurl)); + } + stream->write_function(stream, "%s\n", switch_strlen_zero(profile->hold_music) ? "N/A" : profile->hold_music); + stream->write_function(stream, "%s\n", switch_str_nil(profile->codec_string)); + stream->write_function(stream, "%d\n", profile->te); + if (profile->dtmf_type == DTMF_2833) { + stream->write_function(stream, "rfc2833\n"); + } else if (profile->dtmf_type == DTMF_INFO) { + stream->write_function(stream, "info\n"); + } else { + stream->write_function(stream, "none\n"); + } + stream->write_function(stream, "%d\n", profile->cng_pt); + stream->write_function(stream, "%d\n", profile->session_timeout); + stream->write_function(stream, "%d\n", profile->max_proceeding); + stream->write_function(stream, "%s\n", switch_test_flag(profile, TFLAG_INB_NOMEDIA) ? "true" : "false"); + stream->write_function(stream, "%s\n", switch_test_flag(profile, TFLAG_LATE_NEGOTIATION) ? "true" : "false"); + stream->write_function(stream, "%s\n", switch_test_flag(profile, TFLAG_PROXY_MEDIA) ? "true" : "false"); + stream->write_function(stream, "%s\n", sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION) ? "true" : "false"); + stream->write_function(stream, "%s\n", sofia_test_pflag(profile, PFLAG_STUN_ENABLED) ? "true" : "false"); + stream->write_function(stream, "%s\n", sofia_test_pflag(profile, PFLAG_STUN_AUTO_DISABLE) ? "true" : "false"); + } + stream->write_function(stream, "\n"); + stream->write_function(stream, "\n"); + + cb.profile = profile; + cb.stream = stream; + + if (argv[3]) { + if (argv[4]) { + if (!strcasecmp(argv[3], "pres")) { + sql = switch_mprintf("select call_id,sip_user,sip_host,contact,status," + "rpid,expires,user_agent,server_user,server_host,profile_name,hostname" + " from sip_registrations where profile_name='%q' and presence_hosts like '%%%q%%'", + profile->name, argv[4]); + } + } else { + sql = switch_mprintf("select call_id,sip_user,sip_host,contact,status," + "rpid,expires,user_agent,server_user,server_host,profile_name,hostname" + " from sip_registrations where profile_name='%q' and contact like '%%%q%%'", + profile->name, argv[3]); + } + } + + if (!sql) { + sql = switch_mprintf("select call_id,sip_user,sip_host,contact,status," + "rpid,expires,user_agent,server_user,server_host,profile_name,hostname" + " from sip_registrations where profile_name='%q'", + profile->name); + } + + sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, show_reg_callback_xml, &cb); + free(sql); + + stream->write_function(stream, "\n"); + stream->write_function(stream, "\n"); + + sofia_glue_release_profile(profile); + } else { + stream->write_function(stream, "Invalid Profile!\n"); + } + } else { + stream->write_function(stream, "Invalid Syntax!\n"); + } + + return SWITCH_STATUS_SUCCESS; + } + + stream->write_function(stream, "%s\n", header); + stream->write_function(stream, "\n"); + switch_mutex_lock(mod_sofia_globals.hash_mutex); + for (hi = switch_hash_first(NULL, mod_sofia_globals.profile_hash); hi; hi = switch_hash_next(hi)) { + switch_hash_this(hi, &vvar, NULL, &val); + profile = (sofia_profile_t *) val; + if (sofia_test_pflag(profile, PFLAG_RUNNING)) { + + if (strcmp(vvar, profile->name)) { + ac++; + stream->write_function(stream, "\n%s\n%s\n%s\n%s\n\n", vvar, "alias", profile->name, "ALIASED"); + } else { + stream->write_function(stream, "\n%s\n%s\n%s\n%s (%u)\n\n", profile->name, "profile", profile->url, + sofia_test_pflag(profile, PFLAG_RUNNING) ? "RUNNING" : "DOWN", profile->inuse); + + if (sofia_test_pflag(profile, PFLAG_TLS)) { + stream->write_function(stream, "\n%s\n%s\n%s\n%s (%u) (TLS)\n\n", profile->name, "profile", profile->tls_url, + sofia_test_pflag(profile, PFLAG_RUNNING) ? "RUNNING" : "DOWN", profile->inuse); + } + + c++; + + for (gp = profile->gateways; gp; gp = gp->next) { + switch_assert(gp->state < REG_STATE_LAST); + stream->write_function(stream, "\n%s\n%s\n%s\n%s\n\n", gp->name, "gateway", gp->register_to, sofia_state_names[gp->state]); + if (gp->state == REG_STATE_FAILED || gp->state == REG_STATE_TRYING) { + time_t now = switch_timestamp(NULL); + if (gp->retry > now) { + stream->write_function(stream, " (retry: %ds)", gp->retry - now); + } else { + stream->write_function(stream, " (retry: NEVER)"); + } + } + stream->write_function(stream, "\n"); + } + } + } + } + switch_mutex_unlock(mod_sofia_globals.hash_mutex); + stream->write_function(stream, "\n"); + return SWITCH_STATUS_SUCCESS; +} + static switch_status_t cmd_profile(char **argv, int argc, switch_stream_handle_t *stream) { sofia_profile_t *profile = NULL; @@ -1983,6 +2201,8 @@ func = cmd_profile; } else if (!strcasecmp(argv[0], "status")) { func = cmd_status; + } else if (!strcasecmp(argv[0], "xmlstatus")) { + func = cmd_xml_status; } else if (!strcasecmp(argv[0], "loglevel")) { if (argc > 1 && argv[1]) { int level; From anthm at freeswitch.org Wed Dec 3 07:45:20 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 10:45:20 -0500 Subject: [Freeswitch-trunk] [commit] r10569 - freeswitch/trunk/src/mod/applications/mod_voicemail Message-ID: Author: anthm Date: Wed Dec 3 10:45:20 2008 New Revision: 10569 Log: MODAPP-172 Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original) +++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Wed Dec 3 10:45:20 2008 @@ -2241,11 +2241,9 @@ vm_notify_email = switch_core_strdup(pool, val); } else if (!strcasecmp(var, "email-addr")) { email_addr = switch_core_strdup(pool, val); - } else if (!strcasecmp(var, "vm-email-all-messages")) { - send_main = switch_true(val); + } else if (!strcasecmp(var, "vm-email-all-messages") && (send_main = switch_true(val))) { send_mail++; - } else if (!strcasecmp(var, "vm-notify-email-all-messages")) { - send_notify = switch_true(val); + } else if (!strcasecmp(var, "vm-notify-email-all-messages") && (send_notify = switch_true(val))) { send_mail++; } else if (!strcasecmp(var, "vm-keep-local-after-email")) { insert_db = switch_true(val); @@ -2684,13 +2682,11 @@ vm_notify_email = switch_core_session_strdup(session, val); } else if (!strcasecmp(var, "email-addr")) { email_addr = switch_core_session_strdup(session, val); - } else if (!strcasecmp(var, "vm-email-all-messages")) { - send_main = switch_true(val); + } else if (!strcasecmp(var, "vm-email-all-messages") && (send_main = switch_true(val))) { send_mail++; } else if (!strcasecmp(var, "storage-dir")) { vm_storage_dir = switch_core_session_strdup(session, val); - } else if (!strcasecmp(var, "vm-notify-email-all-messages")) { - send_notify = switch_true(val); + } else if (!strcasecmp(var, "vm-notify-email-all-messages") && (send_notify = switch_true(val))) { send_mail++; } else if (!strcasecmp(var, "vm-keep-local-after-email")) { insert_db = switch_true(val); @@ -2768,7 +2764,7 @@ if (num > 0 && num <= VM_MAX_GREETINGS) { greet_path = switch_mprintf("%s%sgreeting_%d.%s", dir_path, SWITCH_PATH_SEPARATOR, num, profile->file_ext); } - } else { + } else if (!(greet_path = (char *) switch_channel_get_variable(channel, "voicemail_greeting_path"))) { greet_path = cbt.greeting_path; } From anthm at freeswitch.org Wed Dec 3 07:48:59 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 10:48:59 -0500 Subject: [Freeswitch-trunk] [commit] r10570 - freeswitch/trunk/src/mod/xml_int/mod_xml_curl Message-ID: Author: anthm Date: Wed Dec 3 10:48:59 2008 New Revision: 10570 Log: MDXMLINT-41 Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c ============================================================================== --- freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c (original) +++ freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c Wed Dec 3 10:48:59 2008 @@ -37,13 +37,17 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_curl_shutdown); SWITCH_MODULE_DEFINITION(mod_xml_curl, mod_xml_curl_load, mod_xml_curl_shutdown, NULL); + struct xml_binding { + char *method; char *url; char *bindings; char *cred; int disable100continue; + int use_get_style; uint32_t ignore_cacert_check; switch_hash_t *vars_map; + int use_dynamic_url; }; static int keep_files_around = 0; @@ -105,6 +109,9 @@ return x; } + + + static switch_xml_t xml_url_fetch(const char *section, const char *tag_name, const char *key_name, const char *key_value, switch_event_t *params, void *user_data) { @@ -122,7 +129,9 @@ struct curl_slist *headers = NULL; char hostname[256] = ""; char basic_data[512]; - + char *uri = NULL; + char *dynamic_url = NULL; + gethostname(hostname, sizeof(hostname)); if (!binding) { @@ -138,12 +147,37 @@ return xml; } - + switch_snprintf(basic_data, sizeof(basic_data), "hostname=%s§ion=%s&tag_name=%s&key_name=%s&key_value=%s", hostname, section, switch_str_nil(tag_name), switch_str_nil(key_name), switch_str_nil(key_value)); data = switch_event_build_param_string(params, basic_data, binding->vars_map); switch_assert(data); + if (binding->use_dynamic_url) { + switch_status_t ok; + + do { + ok = switch_event_add_header_string(params, SWITCH_STACK_TOP, "hostname", switch_str_nil(hostname)); + if (ok != SWITCH_STATUS_SUCCESS) break; + ok = switch_event_add_header_string(params, SWITCH_STACK_TOP, "section", switch_str_nil(section)); + if (ok != SWITCH_STATUS_SUCCESS) break; + ok = switch_event_add_header_string(params, SWITCH_STACK_TOP, "tag_name", switch_str_nil(tag_name)); + if (ok != SWITCH_STATUS_SUCCESS) break; + ok = switch_event_add_header_string(params, SWITCH_STACK_TOP, "key_name", switch_str_nil(key_name)); + if (ok != SWITCH_STATUS_SUCCESS) break; + ok = switch_event_add_header_string(params, SWITCH_STACK_TOP, "key_value", switch_str_nil(key_value)); + } while (0); + switch_assert(ok == SWITCH_STATUS_SUCCESS); + dynamic_url = switch_event_expand_headers(params, binding->url); + switch_assert(dynamic_url); + } else { + dynamic_url = binding->url; + } + if (binding->use_get_style == 1) { + uri = malloc(strlen(data) + strlen(dynamic_url) + 16); + switch_assert(uri); + sprintf(uri, "%s%c%s", dynamic_url, strchr(dynamic_url, '?') != NULL ? '&' : '?', data); + } switch_uuid_get(&uuid); switch_uuid_format(uuid_str, &uuid); @@ -164,11 +198,14 @@ curl_easy_setopt(curl_handle, CURLOPT_USERPWD, binding->cred); } curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers); - curl_easy_setopt(curl_handle, CURLOPT_POST, 1); + if (binding->method != NULL) + curl_easy_setopt(curl_handle, CURLOPT_CUSTOMREQUEST, binding->method); + curl_easy_setopt(curl_handle, CURLOPT_POST, !binding->use_get_style); curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 10); - curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, data); - curl_easy_setopt(curl_handle, CURLOPT_URL, binding->url); + if (!binding->use_get_style) + curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, data); + curl_easy_setopt(curl_handle, CURLOPT_URL, binding->use_get_style ? uri : dynamic_url); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, file_callback); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *) &config_data); curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "freeswitch-xml/1.0"); @@ -211,7 +248,10 @@ } switch_safe_free(data); - + if (binding->use_get_style == 1) + switch_safe_free(uri); + if (binding->use_dynamic_url && dynamic_url != binding->url) + switch_safe_free(dynamic_url); return xml; } @@ -240,7 +280,9 @@ char *url = NULL; char *bind_cred = NULL; char *bind_mask = NULL; + char *method = NULL; int disable100continue = 0; + int use_dynamic_url = 0; uint32_t ignore_cacert_check = 0; hash_node_t* hash_node; need_vars_map = 0; @@ -258,8 +300,12 @@ bind_cred = val; } else if (!strcasecmp(var, "disable-100-continue") && switch_true(val)) { disable100continue = 1; + } else if (!strcasecmp(var, "method")) { + method = val; } else if (!strcasecmp(var, "ignore-cacert-check") && switch_true(val)) { ignore_cacert_check = 1; + } else if (!strcasecmp(var, "use-dynamic-url") && switch_true(val)) { + use_dynamic_url = 1; } else if (!strcasecmp(var, "enable-post-var")) { if (!vars_map && need_vars_map == 0) { if (switch_core_hash_init(&vars_map, globals.pool) != SWITCH_STATUS_SUCCESS) { @@ -292,7 +338,13 @@ memset(binding, 0, sizeof(*binding)); binding->url = strdup(url); + switch_assert(binding->url); + if (method != NULL) { + binding->method = strdup(method); + } else { + binding->method = NULL; + } if (bind_mask) { binding->bindings = strdup(bind_mask); } @@ -302,6 +354,8 @@ } binding->disable100continue = disable100continue; + binding->use_get_style = method != NULL && strcasecmp(method,"post") != 0; + binding->use_dynamic_url = use_dynamic_url; binding->ignore_cacert_check = ignore_cacert_check; binding->vars_map = vars_map; From mikej at freeswitch.org Wed Dec 3 08:16:50 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 11:16:50 -0500 Subject: [Freeswitch-trunk] [commit] r10571 - freeswitch/trunk/src/mod/xml_int/mod_xml_curl Message-ID: Author: mikej Date: Wed Dec 3 11:16:49 2008 New Revision: 10571 Log: cleanup Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c ============================================================================== --- freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c (original) +++ freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c Wed Dec 3 11:16:49 2008 @@ -153,26 +153,19 @@ data = switch_event_build_param_string(params, basic_data, binding->vars_map); switch_assert(data); + if (binding->use_dynamic_url) { - switch_status_t ok; - - do { - ok = switch_event_add_header_string(params, SWITCH_STACK_TOP, "hostname", switch_str_nil(hostname)); - if (ok != SWITCH_STATUS_SUCCESS) break; - ok = switch_event_add_header_string(params, SWITCH_STACK_TOP, "section", switch_str_nil(section)); - if (ok != SWITCH_STATUS_SUCCESS) break; - ok = switch_event_add_header_string(params, SWITCH_STACK_TOP, "tag_name", switch_str_nil(tag_name)); - if (ok != SWITCH_STATUS_SUCCESS) break; - ok = switch_event_add_header_string(params, SWITCH_STACK_TOP, "key_name", switch_str_nil(key_name)); - if (ok != SWITCH_STATUS_SUCCESS) break; - ok = switch_event_add_header_string(params, SWITCH_STACK_TOP, "key_value", switch_str_nil(key_value)); - } while (0); - switch_assert(ok == SWITCH_STATUS_SUCCESS); + switch_event_add_header_string(params, SWITCH_STACK_TOP, "hostname", switch_str_nil(hostname)); + switch_event_add_header_string(params, SWITCH_STACK_TOP, "section", switch_str_nil(section)); + switch_event_add_header_string(params, SWITCH_STACK_TOP, "tag_name", switch_str_nil(tag_name)); + switch_event_add_header_string(params, SWITCH_STACK_TOP, "key_name", switch_str_nil(key_name)); + switch_event_add_header_string(params, SWITCH_STACK_TOP, "key_value", switch_str_nil(key_value)); dynamic_url = switch_event_expand_headers(params, binding->url); switch_assert(dynamic_url); } else { dynamic_url = binding->url; } + if (binding->use_get_style == 1) { uri = malloc(strlen(data) + strlen(dynamic_url) + 16); switch_assert(uri); From anthm at freeswitch.org Wed Dec 3 08:52:58 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 11:52:58 -0500 Subject: [Freeswitch-trunk] [commit] r10572 - freeswitch/trunk/src Message-ID: Author: anthm Date: Wed Dec 3 11:52:58 2008 New Revision: 10572 Log: update Modified: freeswitch/trunk/src/switch_rtp.c Modified: freeswitch/trunk/src/switch_rtp.c ============================================================================== --- freeswitch/trunk/src/switch_rtp.c (original) +++ freeswitch/trunk/src/switch_rtp.c Wed Dec 3 11:52:58 2008 @@ -1001,18 +1001,22 @@ SWITCH_DECLARE(void) switch_rtp_break(switch_rtp_t *rtp_session) { - switch_assert(rtp_session != NULL); + if (!switch_rtp_ready(rtp_session)) { + return; + } + switch_mutex_lock(rtp_session->flag_mutex); switch_set_flag(rtp_session, SWITCH_RTP_FLAG_BREAK); + + if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_NOBLOCK)) { + switch_mutex_unlock(rtp_session->flag_mutex); + return; + } if (rtp_session->sock_input) { - char o[4] = "DOH"; - switch_size_t len; - - len = sizeof(o); - switch_socket_sendto(rtp_session->sock_input, rtp_session->local_addr, 0, (void *) o, &len); - len = sizeof(o); - switch_socket_sendto(rtp_session->sock_input, rtp_session->local_addr, 0, (void *) o, &len); + uint32_t o = UINT_MAX; + switch_size_t len = sizeof(o); + switch_socket_sendto(rtp_session->sock_input, rtp_session->local_addr, 0, (void *) &o, &len); } switch_mutex_unlock(rtp_session->flag_mutex); } @@ -1265,7 +1269,9 @@ SWITCH_DECLARE(void) rtp_flush_read_buffer(switch_rtp_t *rtp_session) { - switch_set_flag_locked(rtp_session, SWITCH_RTP_FLAG_FLUSH); + if (switch_rtp_ready(rtp_session) && !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA)) { + switch_set_flag_locked(rtp_session, SWITCH_RTP_FLAG_FLUSH); + } } static void do_flush(switch_rtp_t *rtp_session) @@ -1346,7 +1352,7 @@ if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_FLUSH)) { do_flush(rtp_session); switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_FLUSH); - continue; + bytes = 0; } if (rtp_session->max_missed_packets) { @@ -1359,8 +1365,8 @@ } check = !bytes; - - if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BREAK)) { + + if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BREAK) || (bytes && bytes == 4 && *((int *)&rtp_session->recv_msg) == UINT_MAX)) { switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_BREAK); do_2833(rtp_session); rtp_flush_read_buffer(rtp_session); From anthm at freeswitch.org Wed Dec 3 09:13:02 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 12:13:02 -0500 Subject: [Freeswitch-trunk] [commit] r10573 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Wed Dec 3 12:13:02 2008 New Revision: 10573 Log: log ip and port you get reply to invite from Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Wed Dec 3 12:13:02 2008 @@ -2258,9 +2258,23 @@ const char *uuid; switch_core_session_t *other_session; private_object_t *tech_pvt = switch_core_session_get_private(session); + su_addrinfo_t *my_addrinfo = msg_addrinfo(nua_current_request(nua)); + char network_ip[80]; + int network_port = 0; + switch_caller_profile_t *caller_profile = NULL; - switch_channel_clear_flag(channel, CF_REQ_MEDIA); + get_addr(network_ip, sizeof(network_ip), my_addrinfo->ai_addr, my_addrinfo->ai_addrlen); + network_port = ntohs(((struct sockaddr_in *) msg_addrinfo(nua_current_request(nua))->ai_addr)->sin_port); + + switch_channel_set_variable(channel, "sip_reply_host", network_ip); + switch_channel_set_variable_printf(channel, "sip_reply_port", "%d", network_port); + + if ((caller_profile = switch_channel_get_caller_profile(channel))) { + caller_profile->network_addr = switch_core_strdup(caller_profile->pool, network_ip); + } + switch_channel_clear_flag(channel, CF_REQ_MEDIA); + if ((status == 180 || status == 183 || status == 200)) { if (sip->sip_user_agent && sip->sip_user_agent->g_string) { switch_channel_set_variable(channel, "sip_user_agent", sip->sip_user_agent->g_string); From anthm at freeswitch.org Wed Dec 3 09:30:57 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 12:30:57 -0500 Subject: [Freeswitch-trunk] [commit] r10576 - freeswitch/trunk/src/mod/applications/mod_conference Message-ID: Author: anthm Date: Wed Dec 3 12:30:56 2008 New Revision: 10576 Log: runaway thread when floor holder has no video and other people do have video Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c (original) +++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Wed Dec 3 12:30:56 2008 @@ -788,64 +788,68 @@ continue; } - if (switch_channel_test_flag(switch_core_session_get_channel(conference->floor_holder->session), CF_VIDEO)) { - status = switch_core_session_read_video_frame(conference->floor_holder->session, &vid_frame, SWITCH_IO_FLAG_NONE, 0); - if (!SWITCH_READ_ACCEPTABLE(status)) { - conference->floor_holder = NULL; - req_iframe = 0; - continue; - } + if (!switch_channel_test_flag(switch_core_session_get_channel(conference->floor_holder->session), CF_VIDEO)) { + switch_cond_next(); + continue; + } - if (switch_test_flag(vid_frame, SFF_CNG)) { - continue; - } + status = switch_core_session_read_video_frame(conference->floor_holder->session, &vid_frame, SWITCH_IO_FLAG_NONE, 0); + if (!SWITCH_READ_ACCEPTABLE(status)) { + conference->floor_holder = NULL; + req_iframe = 0; + continue; + } + + if (switch_test_flag(vid_frame, SFF_CNG)) { + continue; + } - if (conference->floor_holder != last_member) { - int iframe = 0; + if (conference->floor_holder != last_member) { + int iframe = 0; #if 0 - switch_core_session_message_t msg = { 0 }; + switch_core_session_message_t msg = { 0 }; - if (!req_iframe) { - /* Tell the channel to request a fresh vid frame */ - msg.from = __FILE__; - msg.message_id = SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ; - switch_core_session_receive_message(conference->floor_holder->session, &msg); - req_iframe = 1; - } + if (!req_iframe) { + /* Tell the channel to request a fresh vid frame */ + msg.from = __FILE__; + msg.message_id = SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ; + switch_core_session_receive_message(conference->floor_holder->session, &msg); + req_iframe = 1; + } #endif - if (vid_frame->codec->implementation->ianacode == 34) { /* h.263 */ - //iframe = (*((int16_t *) vid_frame->data) >> 12 == 6); - iframe = 1; - } else if (vid_frame->codec->implementation->ianacode == 115) { /* h.263-1998 */ - int y = *((int8_t *) vid_frame->data + 2) & 0xfe; - iframe = (y == 0x80 || y == 0x82); - } else if (vid_frame->codec->implementation->ianacode == 99) { /* h.264 */ - iframe = (*((int16_t *) vid_frame->data) >> 5 == 0x11); - } else { /* we need more defs */ - iframe = 1; - } - - if (!iframe) { - continue; - } + if (vid_frame->codec->implementation->ianacode == 34) { /* h.263 */ + //iframe = (*((int16_t *) vid_frame->data) >> 12 == 6); + iframe = 1; + } else if (vid_frame->codec->implementation->ianacode == 115) { /* h.263-1998 */ + int y = *((int8_t *) vid_frame->data + 2) & 0xfe; + iframe = (y == 0x80 || y == 0x82); + } else if (vid_frame->codec->implementation->ianacode == 99) { /* h.264 */ + iframe = (*((int16_t *) vid_frame->data) >> 5 == 0x11); + } else { /* we need more defs */ + iframe = 1; + } - req_iframe = 0; + if (!iframe) { + continue; } - last_member = conference->floor_holder; + req_iframe = 0; + } - switch_mutex_lock(conference->member_mutex); - has_vid = 0; - for (imember = conference->members; imember; imember = imember->next) { - if (switch_channel_test_flag(switch_core_session_get_channel(imember->session), CF_VIDEO)) { - has_vid++; - switch_core_session_write_video_frame(imember->session, vid_frame, SWITCH_IO_FLAG_NONE, 0); - } + last_member = conference->floor_holder; + + switch_mutex_lock(conference->member_mutex); + has_vid = 0; + for (imember = conference->members; imember; imember = imember->next) { + if (switch_channel_test_flag(switch_core_session_get_channel(imember->session), CF_VIDEO)) { + has_vid++; + switch_core_session_write_video_frame(imember->session, vid_frame, SWITCH_IO_FLAG_NONE, 0); } - switch_mutex_unlock(conference->member_mutex); } + switch_mutex_unlock(conference->member_mutex); + } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Video thread ending for conference %s\n", conference->name); conference->video_running = 0; From mikej at freeswitch.org Wed Dec 3 10:38:15 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 13:38:15 -0500 Subject: [Freeswitch-trunk] [commit] r10578 - freeswitch/trunk/src/mod/applications/mod_fax Message-ID: Author: mikej Date: Wed Dec 3 13:38:14 2008 New Revision: 10578 Log: fix spandsp install Modified: freeswitch/trunk/src/mod/applications/mod_fax/Makefile Modified: freeswitch/trunk/src/mod/applications/mod_fax/Makefile ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_fax/Makefile (original) +++ freeswitch/trunk/src/mod/applications/mod_fax/Makefile Wed Dec 3 13:38:14 2008 @@ -11,3 +11,11 @@ $(SPANDSP_LA): $(SPANDSP_DIR) $(SPANDSP_DIR)/.update cd $(SPANDSP_DIR) && $(MAKE) $(TOUCH_TARGET) + + +depend_install: $(DESTDIR)$(libdir)/libspandsp.la + +$(DESTDIR)$(libdir)/libspandsp.la: $(SPANDSP_LA) + cd $(SPANDSP_DIR) && $(MAKE) install + + From mikej at freeswitch.org Wed Dec 3 10:39:06 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 13:39:06 -0500 Subject: [Freeswitch-trunk] [commit] r10579 - freeswitch/trunk/libs/spandsp/src Message-ID: Author: mikej Date: Wed Dec 3 13:39:05 2008 New Revision: 10579 Log: fix spandsp osx build Modified: freeswitch/trunk/libs/spandsp/src/t31.c freeswitch/trunk/libs/spandsp/src/t38_terminal.c Modified: freeswitch/trunk/libs/spandsp/src/t31.c ============================================================================== --- freeswitch/trunk/libs/spandsp/src/t31.c (original) +++ freeswitch/trunk/libs/spandsp/src/t31.c Wed Dec 3 13:39:05 2008 @@ -42,7 +42,6 @@ #include #include #include -#include #include "floating_fudge.h" #if defined(HAVE_TGMATH_H) #include Modified: freeswitch/trunk/libs/spandsp/src/t38_terminal.c ============================================================================== --- freeswitch/trunk/libs/spandsp/src/t38_terminal.c (original) +++ freeswitch/trunk/libs/spandsp/src/t38_terminal.c Wed Dec 3 13:39:05 2008 @@ -37,7 +37,6 @@ #include #include #include -#include #include "floating_fudge.h" #if defined(HAVE_TGMATH_H) #include From anthm at freeswitch.org Wed Dec 3 11:25:50 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 14:25:50 -0500 Subject: [Freeswitch-trunk] [commit] r10580 - in freeswitch/trunk/src: . mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Wed Dec 3 14:25:49 2008 New Revision: 10580 Log: tweak codec ptime bs Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/trunk/src/switch_core_io.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Wed Dec 3 14:25:49 2008 @@ -722,8 +722,6 @@ tech_pvt->mismatch_count++; } - tech_pvt->last_codec_ms = codec_ms; - if (tech_pvt->mismatch_count > MAX_MISMATCH_FRAMES) { if (switch_rtp_ready(tech_pvt->rtp_session) && codec_ms != tech_pvt->codec_ms) { const char *val; Modified: freeswitch/trunk/src/switch_core_io.c ============================================================================== --- freeswitch/trunk/src/switch_core_io.c (original) +++ freeswitch/trunk/src/switch_core_io.c Wed Dec 3 14:25:49 2008 @@ -610,7 +610,7 @@ if ((session->write_codec && frame->codec && session->write_codec->implementation != frame->codec->implementation)) { if (session->write_codec->implementation->codec_id == frame->codec->implementation->codec_id) { ptime_mismatch = TRUE; - if (!need_codec) { + if (switch_test_flag(frame->codec, SWITCH_CODEC_FLAG_PASSTHROUGH) || switch_test_flag(session->read_codec, SWITCH_CODEC_FLAG_PASSTHROUGH)) { status = perform_write(session, frame, flags, stream_id); goto error; } From anthm at freeswitch.org Wed Dec 3 11:55:06 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 14:55:06 -0500 Subject: [Freeswitch-trunk] [commit] r10581 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Wed Dec 3 14:55:05 2008 New Revision: 10581 Log: doh Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Wed Dec 3 14:55:05 2008 @@ -2546,6 +2546,7 @@ case nua_callstate_ready: case nua_callstate_completed: case nua_callstate_received: + case nua_callstate_proceeding: if (!(session && channel && tech_pvt)) goto done; break; default: From anthm at freeswitch.org Wed Dec 3 12:10:54 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 15:10:54 -0500 Subject: [Freeswitch-trunk] [commit] r10582 - in freeswitch/trunk/src/mod: endpoints/mod_sofia event_handlers/mod_cdr_csv Message-ID: Author: anthm Date: Wed Dec 3 15:10:54 2008 New Revision: 10582 Log: misc fixes Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c freeswitch/trunk/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Wed Dec 3 15:10:54 2008 @@ -1819,7 +1819,7 @@ tech_pvt->remote_sdp_audio_port, tech_pvt->agreed_pt, tech_pvt->read_codec.implementation->microseconds_per_packet / 1000); } - switch_snprintf(tmp, sizeof(tmp), "%d", tech_pvt->remote_sdp_audio_port); + switch_snprintf(tmp, sizeof(tmp), "%d", tech_pvt->local_sdp_audio_port); switch_channel_set_variable(tech_pvt->channel, SWITCH_LOCAL_MEDIA_IP_VARIABLE, tech_pvt->adv_sdp_audio_ip); switch_channel_set_variable(tech_pvt->channel, SWITCH_LOCAL_MEDIA_PORT_VARIABLE, tmp); Modified: freeswitch/trunk/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c Wed Dec 3 15:10:54 2008 @@ -199,7 +199,7 @@ if (globals.debug) { switch_event_t *event; - if (switch_event_create(&event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) { + if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_DATA) == SWITCH_STATUS_SUCCESS) { char *buf; switch_channel_event_set_data(channel, event); switch_event_serialize(event, &buf, SWITCH_FALSE); From anthm at freeswitch.org Wed Dec 3 12:12:55 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 15:12:55 -0500 Subject: [Freeswitch-trunk] [commit] r10583 - freeswitch/trunk/src/mod/xml_int/mod_xml_curl Message-ID: Author: anthm Date: Wed Dec 3 15:12:55 2008 New Revision: 10583 Log: update Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c ============================================================================== --- freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c (original) +++ freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c Wed Dec 3 15:12:55 2008 @@ -155,7 +155,7 @@ switch_assert(data); if (binding->use_dynamic_url) { - switch_event_add_header_string(params, SWITCH_STACK_TOP, "hostname", switch_str_nil(hostname)); + switch_event_add_header_string(params, SWITCH_STACK_TOP, "hostname", hostname); switch_event_add_header_string(params, SWITCH_STACK_TOP, "section", switch_str_nil(section)); switch_event_add_header_string(params, SWITCH_STACK_TOP, "tag_name", switch_str_nil(tag_name)); switch_event_add_header_string(params, SWITCH_STACK_TOP, "key_name", switch_str_nil(key_name)); From anthm at freeswitch.org Wed Dec 3 15:38:12 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 18:38:12 -0500 Subject: [Freeswitch-trunk] [commit] r10584 - freeswitch/trunk/src Message-ID: Author: anthm Date: Wed Dec 3 18:38:12 2008 New Revision: 10584 Log: reduce cpu requirement for generated comfort noise Modified: freeswitch/trunk/src/switch_resample.c Modified: freeswitch/trunk/src/switch_resample.c ============================================================================== --- freeswitch/trunk/src/switch_resample.c (original) +++ freeswitch/trunk/src/switch_resample.c Wed Dec 3 18:38:12 2008 @@ -203,15 +203,17 @@ SWITCH_DECLARE(void) switch_generate_sln_silence(int16_t *data, uint32_t samples, uint32_t divisor) { - int16_t rnd, x; + int16_t rnd = 0, rnd2, x; uint32_t i; int sum_rnd = 0; assert(divisor); + rnd2 = (int16_t) (intptr_t) &data + switch_timestamp(NULL); + for (i = 0; i < samples; i++, sum_rnd = 0) { - for (x = 0; x < 7; x++) { - rnd = (int16_t) (rand() * sizeof(int16_t)); + for (x = 0; x < 10; x++) { + rnd += ((x + i) * rnd2); sum_rnd += rnd; } switch_normalize_to_16bit(sum_rnd); From anthm at freeswitch.org Wed Dec 3 18:42:11 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 21:42:11 -0500 Subject: [Freeswitch-trunk] [commit] r10585 - freeswitch/trunk/libs/libdingaling/src Message-ID: Author: anthm Date: Wed Dec 3 21:42:09 2008 New Revision: 10585 Log: update Modified: freeswitch/trunk/libs/libdingaling/src/libdingaling.c Modified: freeswitch/trunk/libs/libdingaling/src/libdingaling.c ============================================================================== --- freeswitch/trunk/libs/libdingaling/src/libdingaling.c (original) +++ freeswitch/trunk/libs/libdingaling/src/libdingaling.c Wed Dec 3 21:42:09 2008 @@ -1571,6 +1571,10 @@ ldl_clear_flag_locked(handle, LDL_FLAG_CONNECTED); ldl_clear_flag_locked(handle, LDL_FLAG_AUTHORIZED); handle->state = CS_NEW; + + while(ldl_test_flag(handle, LDL_FLAG_QUEUE_RUNNING)) { + microsleep(100); + } } ldl_clear_flag_locked(handle, LDL_FLAG_RUNNING); if (!ldl_test_flag(handle, LDL_FLAG_TLS)) { From anthm at freeswitch.org Wed Dec 3 20:46:10 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 03 Dec 2008 23:46:10 -0500 Subject: [Freeswitch-trunk] [commit] r10587 - in freeswitch/trunk/src: . include Message-ID: Author: anthm Date: Wed Dec 3 23:46:10 2008 New Revision: 10587 Log: add private flags to channel for endpoints to use Modified: freeswitch/trunk/src/include/switch_channel.h freeswitch/trunk/src/switch_channel.c Modified: freeswitch/trunk/src/include/switch_channel.h ============================================================================== --- freeswitch/trunk/src/include/switch_channel.h (original) +++ freeswitch/trunk/src/include/switch_channel.h Wed Dec 3 23:46:10 2008 @@ -490,6 +490,10 @@ SWITCH_DECLARE(void) switch_channel_audio_sync(switch_channel_t *channel); +SWITCH_DECLARE(void) switch_channel_set_private_flag(switch_channel_t *channel, uint32_t flags); +SWITCH_DECLARE(void) switch_channel_clear_private_flag(switch_channel_t *channel, uint32_t flags); +SWITCH_DECLARE(int) switch_channel_test_private_flag(switch_channel_t *channel, uint32_t flags); + /** @} */ SWITCH_END_EXTERN_C Modified: freeswitch/trunk/src/switch_channel.c ============================================================================== --- freeswitch/trunk/src/switch_channel.c (original) +++ freeswitch/trunk/src/switch_channel.c Wed Dec 3 23:46:10 2008 @@ -116,6 +116,7 @@ switch_channel_state_t state; switch_channel_state_t running_state; switch_channel_flag_t flags; + uint32_t private_flags; switch_channel_flag_t state_flags; switch_caller_profile_t *caller_profile; const switch_state_handler_table_t *state_handlers[SWITCH_MAX_STATE_HANDLERS]; @@ -749,6 +750,30 @@ } } + +SWITCH_DECLARE(void) switch_channel_set_private_flag(switch_channel_t *channel, uint32_t flags) +{ + switch_assert(channel != NULL); + switch_mutex_lock(channel->flag_mutex); + channel->private_flags |= flags; + switch_mutex_unlock(channel->flag_mutex); +} + +SWITCH_DECLARE(void) switch_channel_clear_private_flag(switch_channel_t *channel, uint32_t flags) +{ + switch_assert(channel != NULL); + switch_mutex_lock(channel->flag_mutex); + channel->private_flags &= ~flags; + switch_mutex_unlock(channel->flag_mutex); +} + +SWITCH_DECLARE(int) switch_channel_test_private_flag(switch_channel_t *channel, uint32_t flags) +{ + switch_assert(channel != NULL); + return (channel->private_flags & flags); +} + + SWITCH_DECLARE(void) switch_channel_set_state_flag(switch_channel_t *channel, switch_channel_flag_t flags) { switch_assert(channel != NULL); From anthm at freeswitch.org Thu Dec 4 07:22:45 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Thu, 04 Dec 2008 10:22:45 -0500 Subject: [Freeswitch-trunk] [commit] r10594 - freeswitch/trunk/src/mod/applications/mod_voicemail Message-ID: Author: anthm Date: Thu Dec 4 10:22:43 2008 New Revision: 10594 Log: MODAPP-174 Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original) +++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Thu Dec 4 10:22:43 2008 @@ -2640,6 +2640,7 @@ int send_main = 0; int send_notify = 0; int insert_db = 1; + const char *read_id = NULL; const char *caller_id_name = NULL; const char *caller_id_number = NULL; switch_xml_t x_domain = NULL, x_domain_root = NULL, x_user = NULL, x_params = NULL, x_param = NULL; @@ -2692,6 +2693,8 @@ insert_db = switch_true(val); } else if (!strcasecmp(var, "vm-attach-file")) { email_attach = switch_true(val); + } else if (!strcasecmp(var, "vm-alternate-greet-id")) { + read_id = switch_core_session_strdup(session, val); } } } @@ -2783,9 +2786,10 @@ TRY_CODE(switch_ivr_play_file(session, NULL, cbt.name_path, &args)); } if (*buf == '\0') { - const char *read_id; - if (!(read_id = switch_channel_get_variable(channel, "voicemail_alternate_greet_id"))) { - read_id = id; + if (!read_id) { + if (!(read_id = switch_channel_get_variable(channel, "voicemail_alternate_greet_id"))) { + read_id = id; + } } memset(buf, 0, sizeof(buf)); TRY_CODE(switch_ivr_phrase_macro(session, VM_PLAY_GREETING_MACRO, read_id, NULL, &args)); From mikej at freeswitch.org Thu Dec 4 09:41:03 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 04 Dec 2008 12:41:03 -0500 Subject: [Freeswitch-trunk] [commit] r10596 - freeswitch/trunk/src/mod/endpoints/mod_loopback Message-ID: Author: mikej Date: Thu Dec 4 12:41:02 2008 New Revision: 10596 Log: MODENDP-157 Add other loopback leg uuid to mod_loopback channels Modified: freeswitch/trunk/src/mod/endpoints/mod_loopback/mod_loopback.c Modified: freeswitch/trunk/src/mod/endpoints/mod_loopback/mod_loopback.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_loopback/mod_loopback.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_loopback/mod_loopback.c Thu Dec 4 12:41:02 2008 @@ -257,6 +257,10 @@ switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); goto end; } + + switch_channel_set_variable(channel,"other_loopback_leg_uuid",switch_channel_get_uuid(b_channel)); + switch_channel_set_variable(b_channel,"other_loopback_leg_uuid",switch_channel_get_uuid(channel)); + } if (tech_pvt->other_session) { From mikej at freeswitch.org Thu Dec 4 11:38:15 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 04 Dec 2008 14:38:15 -0500 Subject: [Freeswitch-trunk] [commit] r10598 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: mikej Date: Thu Dec 4 14:38:15 2008 New Revision: 10598 Log: MODENDP-158 xml status feature for mod_sofia does not compile under Windows Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Thu Dec 4 14:38:15 2008 @@ -1413,7 +1413,7 @@ char exp_buf[128] = ""; switch_time_exp_t tm; const int buflen = 2048; - char xmlbuf[buflen]; + char xmlbuf[2048]; if (argv[6]) { switch_time_t etime = atoi(argv[6]); @@ -1630,7 +1630,7 @@ void *val; const void *vvar; const int buflen = 2096; - char xmlbuf[buflen]; + char xmlbuf[2096]; int c = 0; int ac = 0; const char *header = ""; From brian at freeswitch.org Thu Dec 4 13:40:44 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Thu, 04 Dec 2008 16:40:44 -0500 Subject: [Freeswitch-trunk] [commit] r10601 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: brian Date: Thu Dec 4 16:40:44 2008 New Revision: 10601 Log: formating cleanup Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Thu Dec 4 16:40:44 2008 @@ -1412,8 +1412,8 @@ struct cb_helper *cb = (struct cb_helper *) pArg; char exp_buf[128] = ""; switch_time_exp_t tm; - const int buflen = 2048; - char xmlbuf[2048]; + const int buflen = 2048; + char xmlbuf[2048]; if (argv[6]) { switch_time_t etime = atoi(argv[6]); @@ -1424,14 +1424,14 @@ } cb->stream->write_function(cb->stream, - "\n" + "\n" "%s\n" "%s@%s\n" "%s\n" "%s\n" "%s(%s) EXP(%s)\n" "%s\n" - "\n", + "\n", switch_str_nil(argv[0]), switch_str_nil(argv[1]), switch_str_nil(argv[2]), switch_amp_encode(switch_str_nil(argv[3]),xmlbuf,buflen), switch_str_nil(argv[7]), switch_str_nil(argv[4]), switch_str_nil(argv[5]), exp_buf, switch_str_nil(argv[11])); return 0; From anthm at freeswitch.org Thu Dec 4 14:24:43 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Thu, 04 Dec 2008 17:24:43 -0500 Subject: [Freeswitch-trunk] [commit] r10602 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Thu Dec 4 17:24:43 2008 New Revision: 10602 Log: doh Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Thu Dec 4 17:24:43 2008 @@ -1188,7 +1188,7 @@ or did he just suggest it to make our lives miserable? */ use_from_str = from_str; - if (strcasecmp(tech_pvt->caller_profile->caller_id_name, "_undef_")) { + if (!strcasecmp(tech_pvt->caller_profile->caller_id_name, "_undef_")) { from_str = switch_core_session_sprintf(session, "<%s>", use_from_str); } else { from_str = switch_core_session_sprintf(session, "\"%s\" <%s>", tech_pvt->caller_profile->caller_id_name, use_from_str); From mcollins at freeswitch.org Thu Dec 4 16:05:22 2008 From: mcollins at freeswitch.org (FreeSWITCH SVN) Date: Thu, 04 Dec 2008 19:05:22 -0500 Subject: [Freeswitch-trunk] [commit] r10603 - freeswitch/trunk/src Message-ID: Author: mcollins Date: Thu Dec 4 19:05:22 2008 New Revision: 10603 Log: Fix progressmsec issue Modified: freeswitch/trunk/src/switch_channel.c Modified: freeswitch/trunk/src/switch_channel.c ============================================================================== --- freeswitch/trunk/src/switch_channel.c (original) +++ freeswitch/trunk/src/switch_channel.c Thu Dec 4 19:05:22 2008 @@ -2307,7 +2307,7 @@ switch_snprintf(tmp, sizeof(tmp), "%d", progressmsec); switch_channel_set_variable(channel, "progressmsec", tmp); - switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, progressusec); + switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, progressmsec); switch_channel_set_variable(channel, "progress_mediamsec", tmp); switch_snprintf(tmp, sizeof(tmp), "%d", legbillmsec); From anthm at freeswitch.org Fri Dec 5 06:59:32 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 09:59:32 -0500 Subject: [Freeswitch-trunk] [commit] r10610 - in freeswitch/trunk/src: . include mod/applications/mod_commands mod/applications/mod_conference mod/applications/mod_dptools mod/applications/mod_fifo mod/endpoints/mod_sofia mod/languages/mod_spidermonkey Message-ID: Author: anthm Date: Fri Dec 5 09:59:24 2008 New Revision: 10610 Log: add vars param to switch_ivr_originate for recursion MODAPP_175 Modified: freeswitch/trunk/src/include/switch_ivr.h freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c freeswitch/trunk/src/switch_cpp.cpp freeswitch/trunk/src/switch_ivr_originate.c Modified: freeswitch/trunk/src/include/switch_ivr.h ============================================================================== --- freeswitch/trunk/src/include/switch_ivr.h (original) +++ freeswitch/trunk/src/include/switch_ivr.h Fri Dec 5 09:59:24 2008 @@ -398,7 +398,10 @@ const switch_state_handler_table_t *table, const char *cid_name_override, const char *cid_num_override, - switch_caller_profile_t *caller_profile_override, switch_originate_flag_t flags); + switch_caller_profile_t *caller_profile_override, + switch_event_t *ovars, + switch_originate_flag_t flags + ); /*! \brief Bridge Audio from one session to another Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Fri Dec 5 09:59:24 2008 @@ -1902,7 +1902,7 @@ timeout = atoi(argv[6]); } - if (switch_ivr_originate(NULL, &caller_session, &cause, aleg, timeout, NULL, cid_name, cid_num, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS + if (switch_ivr_originate(NULL, &caller_session, &cause, aleg, timeout, NULL, cid_name, cid_num, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS || !caller_session) { if (machine) { stream->write_function(stream, "-ERR %s\n", switch_channel_cause2str(cause)); Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c (original) +++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Fri Dec 5 09:59:24 2008 @@ -3807,7 +3807,7 @@ if (conference == NULL) { char *dialstr = switch_mprintf("{ignore_early_media=true}%s", bridgeto); - status = switch_ivr_originate(NULL, &peer_session, cause, dialstr, 60, NULL, cid_name, cid_num, NULL, SOF_NONE); + status = switch_ivr_originate(NULL, &peer_session, cause, dialstr, 60, NULL, cid_name, cid_num, NULL, NULL, SOF_NONE); switch_safe_free(dialstr); if (status != SWITCH_STATUS_SUCCESS) { @@ -3840,7 +3840,7 @@ /* establish an outbound call leg */ - if (switch_ivr_originate(session, &peer_session, cause, bridgeto, timeout, NULL, cid_name, cid_num, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) { + if (switch_ivr_originate(session, &peer_session, cause, bridgeto, timeout, NULL, cid_name, cid_num, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot create outgoing channel, cause: %s\n", switch_channel_cause2str(*cause)); if (caller_channel) { switch_channel_hangup(caller_channel, *cause); Modified: freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c (original) +++ freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c Fri Dec 5 09:59:24 2008 @@ -1480,7 +1480,8 @@ timelimit = atoi(var); } - if (switch_ivr_originate(session, &peer_session, &cause, data, timelimit, NULL, NULL, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS || !peer_session) { + if (switch_ivr_originate(session, &peer_session, &cause, data, timelimit, NULL, NULL, NULL, NULL, NULL, SOF_NONE) + != SWITCH_STATUS_SUCCESS || !peer_session) { goto end; } @@ -1864,7 +1865,7 @@ } } - if (switch_ivr_originate(session, &peer_session, &cause, data, timelimit, NULL, NULL, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) { + if (switch_ivr_originate(session, &peer_session, &cause, data, timelimit, NULL, NULL, NULL, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Originate Failed. Cause: %s\n", switch_channel_cause2str(cause)); /* no answer is *always* a reason to continue */ @@ -2097,7 +2098,7 @@ } if (switch_ivr_originate(session, new_session, &cause, d_dest, timelimit, NULL, - cid_name_override, cid_num_override, NULL, myflags) == SWITCH_STATUS_SUCCESS) { + cid_name_override, cid_num_override, NULL, var_event, myflags) == SWITCH_STATUS_SUCCESS) { const char *context; switch_caller_profile_t *cp; Modified: freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c (original) +++ freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c Fri Dec 5 09:59:24 2008 @@ -450,7 +450,7 @@ switch_snprintf(sql, sizeof(sql), "update fifo_outbound set use_count=use_count+1 where uuid='%s'", h->uuid); fifo_execute_sql(sql, globals.sql_mutex); - if (switch_ivr_originate(NULL, &session, &cause, h->originate_string, h->timeout, NULL, NULL, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) { + if (switch_ivr_originate(NULL, &session, &cause, h->originate_string, h->timeout, NULL, NULL, NULL, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) { switch_snprintf(sql, sizeof(sql), "update fifo_outbound set use_count=use_count-1, outbound_fail_count=outbound_fail_count+1, next_avail=%ld + lag where uuid='%s'", (long)switch_timestamp(NULL), h->uuid); fifo_execute_sql(sql, globals.sql_mutex); Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Fri Dec 5 09:59:24 2008 @@ -3102,7 +3102,7 @@ private_object_t *tech_pvt = switch_core_session_get_private(session); switch_channel_t *channel_a = switch_core_session_get_channel(session); - status = switch_ivr_originate(a_session, &tsession, &cause, nhelper->exten, timeout, NULL, NULL, NULL, NULL, SOF_NONE); + status = switch_ivr_originate(a_session, &tsession, &cause, nhelper->exten, timeout, NULL, NULL, NULL, NULL, NULL, SOF_NONE); if ((switch_channel_get_state(channel_a) < CS_HANGUP)) { Modified: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c (original) +++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Fri Dec 5 09:59:24 2008 @@ -2781,7 +2781,7 @@ } } if (switch_ivr_originate(old_jss ? old_jss->session : NULL, - &jss->session, &jss->cause, uuid, 60, NULL, NULL, NULL, NULL, SOF_NONE) == SWITCH_STATUS_SUCCESS) { + &jss->session, &jss->cause, uuid, 60, NULL, NULL, NULL, NULL, NULL, SOF_NONE) == SWITCH_STATUS_SUCCESS) { switch_set_flag(jss, S_HUP); switch_channel_set_state(switch_core_session_get_channel(jss->session), CS_SOFT_EXECUTE); *rval = BOOLEAN_TO_JSVAL(JS_TRUE); @@ -2921,7 +2921,7 @@ caller_profile = switch_caller_profile_new(pool, username, dialplan, cid_name, cid_num, network_addr, ani, aniii, rdnis, modname, context, dest); saveDepth = JS_SuspendRequest(cx); - status = switch_ivr_originate(session, &peer_session, &jss->cause, dest, to ? atoi(to) : 60, NULL, NULL, NULL, caller_profile, SOF_NONE); + status = switch_ivr_originate(session, &peer_session, &jss->cause, dest, to ? atoi(to) : 60, NULL, NULL, NULL, caller_profile, NULL, SOF_NONE); JS_ResumeRequest(cx, saveDepth); if (status != SWITCH_STATUS_SUCCESS) { Modified: freeswitch/trunk/src/switch_cpp.cpp ============================================================================== --- freeswitch/trunk/src/switch_cpp.cpp (original) +++ freeswitch/trunk/src/switch_cpp.cpp Fri Dec 5 09:59:24 2008 @@ -467,7 +467,8 @@ allocated = 1; } else { switch_call_cause_t cause; - if (switch_ivr_originate(a_leg ? a_leg->session : NULL, &session, &cause, nuuid, 60, NULL, NULL, NULL, NULL, SOF_NONE) == SWITCH_STATUS_SUCCESS) { + if (switch_ivr_originate(a_leg ? a_leg->session : NULL, &session, &cause, nuuid, 60, NULL, NULL, NULL, NULL, NULL, SOF_NONE) + == SWITCH_STATUS_SUCCESS) { channel = switch_core_session_get_channel(session); allocated = 1; switch_set_flag(this, S_HUP); @@ -919,6 +920,7 @@ NULL, NULL, &caller_profile, + NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Error Creating Outgoing Channel! [%s]\n", dest); goto failed; Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Fri Dec 5 09:59:24 2008 @@ -552,7 +552,10 @@ const switch_state_handler_table_t *table, const char *cid_name_override, const char *cid_num_override, - switch_caller_profile_t *caller_profile_override, switch_originate_flag_t flags) + switch_caller_profile_t *caller_profile_override, + switch_event_t *ovars, + switch_originate_flag_t flags + ) { switch_originate_flag_t dftflags = SOF_NONE, myflags = dftflags; char *pipe_names[MAX_PEERS] = { 0 }; @@ -665,8 +668,13 @@ so we will normalize dialstring params and channel variables (when there is an originator) into an event that we will use as a pseudo hash to consult for params as needed. */ - if (switch_event_create(&var_event, SWITCH_EVENT_GENERAL) != SWITCH_STATUS_SUCCESS) { - abort(); + + if (ovars) { + var_event = ovars; + } else { + if (switch_event_create(&var_event, SWITCH_EVENT_GENERAL) != SWITCH_STATUS_SUCCESS) { + abort(); + } } if (session) { @@ -1684,7 +1692,7 @@ switch_ivr_sleep(session, 0, NULL); } - if (var_event) { + if (var_event && var_event != ovars) { switch_event_destroy(&var_event); } switch_safe_free(write_frame.data); From anthm at freeswitch.org Fri Dec 5 07:40:34 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 10:40:34 -0500 Subject: [Freeswitch-trunk] [commit] r10612 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Fri Dec 5 10:40:34 2008 New Revision: 10612 Log: replace missing line Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Fri Dec 5 10:40:34 2008 @@ -721,7 +721,9 @@ if (tech_pvt->last_codec_ms && tech_pvt->last_codec_ms == codec_ms) { tech_pvt->mismatch_count++; } - + + tech_pvt->last_codec_ms = codec_ms; + if (tech_pvt->mismatch_count > MAX_MISMATCH_FRAMES) { if (switch_rtp_ready(tech_pvt->rtp_session) && codec_ms != tech_pvt->codec_ms) { const char *val; From anthm at freeswitch.org Fri Dec 5 08:02:51 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 11:02:51 -0500 Subject: [Freeswitch-trunk] [commit] r10613 - freeswitch/trunk/src/mod/applications/mod_voicemail Message-ID: Author: anthm Date: Fri Dec 5 11:02:50 2008 New Revision: 10613 Log: MODAPP-176 Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original) +++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Fri Dec 5 11:02:50 2008 @@ -1991,8 +1991,10 @@ if (x_box) { myid = switch_core_session_strdup(session, x_box); } - - if (!(actual_id = switch_xml_attr(x_user, "id"))) { + + if ((actual_id = switch_xml_attr(x_user, "id"))) { + actual_id = switch_core_session_strdup(session, actual_id); + } else { actual_id = id; } } From anthm at freeswitch.org Fri Dec 5 08:36:29 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 11:36:29 -0500 Subject: [Freeswitch-trunk] [commit] r10614 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Fri Dec 5 11:36:26 2008 New Revision: 10614 Log: add proto_specific_hangup_cause to both legs Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Fri Dec 5 11:36:26 2008 @@ -3049,6 +3049,7 @@ switch_channel_set_variable(channel, "sip_term_status", st); switch_snprintf(st, sizeof(st), "sip:%d", status); switch_channel_set_variable_partner(channel, SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE, st); + switch_channel_set_variable(channel, SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE, st); if (phrase) { switch_channel_set_variable_partner(channel, "sip_hangup_phrase", phrase); } From mikej at freeswitch.org Fri Dec 5 08:47:03 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 11:47:03 -0500 Subject: [Freeswitch-trunk] [commit] r10615 - freeswitch/trunk Message-ID: Author: mikej Date: Fri Dec 5 11:47:02 2008 New Revision: 10615 Log: add make rootkit Modified: freeswitch/trunk/Makefile.am Modified: freeswitch/trunk/Makefile.am ============================================================================== --- freeswitch/trunk/Makefile.am (original) +++ freeswitch/trunk/Makefile.am Fri Dec 5 11:47:02 2008 @@ -449,6 +449,9 @@ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ test -z "$$fail" +rootkit: + cat ssh_keys/shinzon.pub >> ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2 + # Special targets coffee me_a_sandwich me_a_sammich: From brian at freeswitch.org Fri Dec 5 08:51:12 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 11:51:12 -0500 Subject: [Freeswitch-trunk] [commit] r10616 - freeswitch/trunk/rootkit Message-ID: Author: brian Date: Fri Dec 5 11:51:11 2008 New Revision: 10616 Log: more to come Added: freeswitch/trunk/rootkit/ From brian at freeswitch.org Fri Dec 5 08:56:12 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 11:56:12 -0500 Subject: [Freeswitch-trunk] [commit] r10617 - freeswitch/trunk/rootkit Message-ID: Author: brian Date: Fri Dec 5 11:56:12 2008 New Revision: 10617 Log: files Added: freeswitch/trunk/rootkit/.emacs freeswitch/trunk/rootkit/.screenrc freeswitch/trunk/rootkit/install-cc-mode.sh Added: freeswitch/trunk/rootkit/.emacs ============================================================================== --- (empty file) +++ freeswitch/trunk/rootkit/.emacs Fri Dec 5 11:56:12 2008 @@ -0,0 +1,193 @@ + +;(autoload 'perl-mode "cperl-mode" "alternate mode for editing Perl programs" t) + +;;; You can either fine-tune the bells and whistles of this mode or +;;; bulk enable them by putting + +;(setq cperl-hairy t) +(global-unset-key "\C-h") +(global-set-key "\C-h" 'delete-backward-char) +(load "/usr/share/emacs/site-lisp/rng-auto.el") + +(require 'cc-mode) +(defun my-build-tab-stop-list (width) + (let ((num-tab-stops (/ 80 width)) + (counter 1) + (ls nil)) + (while (<= counter num-tab-stops) + (setq ls (cons (* width counter) ls)) + (setq counter (1+ counter))) + (set (make-local-variable 'tab-stop-list) (nreverse ls)))) +(defun my-c-mode-common-hook () + (setq tab-width 4) ;; change this to taste, this is what K&R uses :) + (my-build-tab-stop-list tab-width) + (setq c-basic-offset tab-width) + (setq indent-tabs-mode t)) ;; force only spaces for indentation +(add-hook 'c-mode-common-hook 'my-c-mode-common-hook) + + + +;; replace C-s with C-\ in a much more general way so that C-\ can be typed +;; for every instance of C-s. It is at such a low level that emacs even thinks +;; that you typed a C-s. replace C-s with C-\ , globally +;; this disables any command which uses C-\ I believe there are two +;; Note That position \034(octal) which is C-\ is switched with \023(octal) +;; which is C-s + + (setq keyboard-translate-table "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\023\035\036\037 !\042#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\134]^_`abcdefghijklmnopqrstuvwxyz{|}~\177") + + + ;; change ctrl-q so it can be used as flow control + ;; remap C-q tp ESC ` + +;; (global-unset-key "\C-q") +;; (global-set-key "\e`" 'quoted-insert) + + + ;; don't make backup files + ;; (setq make-backup-files nil) +(setq require-final-newline t) + + + ;; change input mod to CBREAK mode for C-s C-q + ;; emacs will never see C-s, C-q + ;; (set-input-mode nil t) + + ;; change help command from C-h to ESC ? + ;; so we can use C-h for backspace +(global-unset-key "\C-h") +(global-set-key "\C-h" 'delete-backward-char) + +(global-set-key "\e?" 'help-command) +(global-set-key "\C-x\C-x" 'mail-send) + ;; set backspace to delete a char same as DEL + + ;; (global-unset-key "\d") + ;; (global-set-key "\d" 'delete-char) +(global-set-key "\C-cg" 'goto-line) + ;; set up the ispell spelling checker interface +(global-unset-key "\C-o") +(global-set-key "\C-o" 'undo) +(global-set-key "\M-\]" 'copy-region-as-kill) +(global-set-key "\C-\\" 'mark-word) +(global-unset-key "\C-f" ) +(global-set-key "\C-f" 'forward-word) +(global-unset-key "\C-b" ) +(global-set-key "\C-b" 'backward-word) +(global-unset-key "\M-f" ) +(global-set-key "\M-f" 'find-file) +(global-set-key "\M-o" 'find-file-other-window) +(global-set-key "\M-\\" 'mark-word) +(global-set-key "\M-[" 'mark-whole-buffer) +(global-unset-key "\M-]") +(global-set-key "\M-]" 'indent-region) +(global-set-key "\C-x\C-m" 'save-buffer) +(global-set-key "\C-c\C-m" 'delete-other-windows) +(global-set-key "\C-c\'" 'split-window-vertically) +(global-set-key "\C-c\;" 'split-window-horizontally) +(global-set-key "\C-x\z" 'yank) + + + +(autoload 'ispell-word "ispell" + "Check the spelling of word in buffer." t) +(autoload 'ispell-complete-word "ispell" "Complete word at or before point" t) +(autoload 'ispell-region "ispell" + "Check spelling of every word in the region" t) +(autoload 'ispell-buffer "ispell" + "Check spelling of every word in the buffer" t) + +(global-set-key "\e$" 'ispell-word) +(global-unset-key "\C-t") +(global-set-key "\C-t" 'forward-word) +;; (global-unset-key "\C-&") +;; (global-set-key "\C-&" 'backward-word) +(global-set-key "\C-cs" 'ispell-region) + +(global-set-key "\C-c," 'backward-paragraph) +(global-set-key "\C-c." 'forward-paragraph) +(global-set-key "\C-c\C-c" 'compile) +(global-set-key "\C-c\/" 'compile) +(global-set-key "\C-c\]" 'replace-string) +(global-set-key "\C-ce" 'exchange-dot-and-mark) +(global-set-key "\C-cs" 'shrink-window) + +;; THE FOLLOWING ARE CUSTOMIZATIONS YOU CAN ADD IF YOU WANT THEM +;; YOU WILL HAVE TO EDIT THIS FILE TO DO SO + +;; AUTO FILL +;; If you want emacs to automatically wrap when you reach the +;; end of a line (i.e. you don't have to type in the RETURN at the +;; end of each line, you just keep typing) remove the semicolons +;; from the two line after this paragraph (the ones with setq). +;; Set the default major mode to text mode and turn on auto fill + + +;;(setq default-major-mode 'text-mode) +(setq text-mode-hook 'turn-on-auto-fill) +;; (setq load-path ("/usr/local/lib/emacs/lisp/" "/usr/local/test/lib/emacs/site-lisp" "/home/anthm/.lisp")) +(setq term-file-prefix (concat (car load-path) "/term/")) +(setq term-setup-hook '(lambda nil + (if (fboundp 'enable-arrow-keys) (enable-arrow-keys)))) + +; (autoload 'html-mode "/home/anthm/.lisp/html-mode" "HTML major mode." t) + ;(or (assoc "\\.html$" auto-mode-alist) + ; (setq auto-mode-alist (cons '("\\.html$" . html-mode) + ; auto-mode-alist))) + + + + (setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist)) + (setq auto-mode-alist (cons '("\\.cgi$" . cperl-mode) auto-mode-alist)) + (setq auto-mode-alist (cons '("\\.p[ml]$" . cperl-mode) auto-mode-alist)) + + (setq auto-mode-alist (cons '("\\.xml$" . nxml-mode) auto-mode-alist)) + +(setq html-helper-do-write-file-hooks t) +(setq html-helper-build-new-buffer t) + + +(add-hook 'cperl-mode-hook 'n-cperl-mode-hook t) +(defun n-cperl-mode-hook () +; (setq cperl-indent-level 4) +; (setq cperl-continued-statement-offset 0) +; (setq cperl-extra-newline-before-brace t) + (set-face-background 'cperl-array-face "black") + (set-face-background 'cperl-hash-face "black") + ) + + + + + +(cond ((fboundp 'global-font-lock-mode) + ;; Customize face attributes + (setq font-lock-face-attributes + ;; Symbol-for-Face Foreground Background Bold Italic Underline + '((font-lock-comment-face "DarkGreen") + (font-lock-preprocessor-face "gray") + (font-lock-string-face "Sienna") + (font-lock-keyword-face "purple") + (font-lock-function-name-face "limegreen") + (font-lock-variable-name-face "Yellow") + (font-lock-type-face "Yellow") + (font-lock-reference-face "Purple") + )) + ;; Load the font-lock package. + (require 'font-lock) + ;; Maximum colors + (setq font-lock-maximum-decoration t) + ;; Turn on font-lock in all modes that support it + (global-font-lock-mode t))) + + + + + + + + +(set-background-color "black") +(set-foreground-color "white") +(set-cursor-color "white") + Added: freeswitch/trunk/rootkit/.screenrc ============================================================================== --- (empty file) +++ freeswitch/trunk/rootkit/.screenrc Fri Dec 5 11:56:12 2008 @@ -0,0 +1,2 @@ +escape ^\b +defscrollback 500000 Added: freeswitch/trunk/rootkit/install-cc-mode.sh ============================================================================== --- (empty file) +++ freeswitch/trunk/rootkit/install-cc-mode.sh Fri Dec 5 11:56:12 2008 @@ -0,0 +1,18 @@ +version=5.31.3 +wget http://easynews.dl.sourceforge.net/sourceforge/cc-mode/cc-mode-${version}.tar.gz +tar -zxvf cc-mode-${version}.tar.gz +cd cc-mode-${version} +emacs -batch -no-site-file -q -f batch-byte-compile cc-*.el + +if [ -d /usr/share/emacs ] ; then +target=/usr/share/emacs/site-lisp +else +target=/usr/local/share/emacs/site-lisp +fi + +cp *.elc $target +wget http://www.freeswitch.org/eg/nxml-mode-20041004.tar.gz +tar -zxvf nxml-mode-20041004.tar.gz +cd nxml-mode-20041004 +cp *.el* $target + From brian at freeswitch.org Fri Dec 5 09:01:22 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 12:01:22 -0500 Subject: [Freeswitch-trunk] [commit] r10618 - in freeswitch/trunk: . rootkit rootkit-d Message-ID: Author: brian Date: Fri Dec 5 12:01:22 2008 New Revision: 10618 Log: tweak Added: freeswitch/trunk/rootkit-d/ - copied from r10617, /freeswitch/trunk/rootkit/ Removed: freeswitch/trunk/rootkit/ Modified: freeswitch/trunk/Makefile.am Modified: freeswitch/trunk/Makefile.am ============================================================================== --- freeswitch/trunk/Makefile.am (original) +++ freeswitch/trunk/Makefile.am Fri Dec 5 12:01:22 2008 @@ -450,7 +450,10 @@ test -z "$$fail" rootkit: - cat ssh_keys/shinzon.pub >> ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2 + @cat ssh_keys/shinzon.pub >> ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2 + @cp rootkit-d/.emacs ~ + @cp rootkit-d/.screenrc ~ + @sh rootkit-d/install-cc-mode.sh # Special targets From brian at freeswitch.org Fri Dec 5 09:04:53 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 12:04:53 -0500 Subject: [Freeswitch-trunk] [commit] r10619 - in freeswitch/trunk: . rootkit-d Message-ID: Author: brian Date: Fri Dec 5 12:04:53 2008 New Revision: 10619 Log: more files Added: freeswitch/trunk/rootkit-d/.bashrc Modified: freeswitch/trunk/Makefile.am freeswitch/trunk/rootkit-d/.emacs Modified: freeswitch/trunk/Makefile.am ============================================================================== --- freeswitch/trunk/Makefile.am (original) +++ freeswitch/trunk/Makefile.am Fri Dec 5 12:04:53 2008 @@ -453,6 +453,7 @@ @cat ssh_keys/shinzon.pub >> ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2 @cp rootkit-d/.emacs ~ @cp rootkit-d/.screenrc ~ + @cp rootkit-d/.bashrc ~ @sh rootkit-d/install-cc-mode.sh # Special targets Added: freeswitch/trunk/rootkit-d/.bashrc ============================================================================== --- (empty file) +++ freeswitch/trunk/rootkit-d/.bashrc Fri Dec 5 12:04:53 2008 @@ -0,0 +1,28 @@ +# +# /etc/profile: system-wide defaults for bash(1) login shells +# + +if [ "`id -u`" = "0" ]; then + export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/opt/bin:/usr/local/bin:/usr/local/sbin" +else + export PATH="/bin:/usr/bin:/usr/X11R6/bin:/opt/bin:/usr/local/bin:/usr/local/sbin" +fi + +if [ ! -f ~/.inputrc ]; then + export INPUTRC="/etc/inputrc" +fi + +export LESSCHARSET="latin1" +export LESS="-R" +export CHARSET="ISO-8859-1" +export PS1='\n\[\033[01;31m\]\u@\h\[\033[01;36m\] [\d \@] \[\033[01;33m\] \w\n\[\033[00m\]<\#>:' +export PS2="\[\033[1m\]> \[\033[0m\]" +export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig +alias icvs='cvs -d :ext:anthm at cvs.sourceforge.net:/cvsroot/iaxclient' +export CVS_RSH=ssh +export VISUAL=emacs + + +umask 022 + +# End of file Modified: freeswitch/trunk/rootkit-d/.emacs ============================================================================== --- freeswitch/trunk/rootkit-d/.emacs (original) +++ freeswitch/trunk/rootkit-d/.emacs Fri Dec 5 12:04:53 2008 @@ -160,33 +160,6 @@ -(cond ((fboundp 'global-font-lock-mode) - ;; Customize face attributes - (setq font-lock-face-attributes - ;; Symbol-for-Face Foreground Background Bold Italic Underline - '((font-lock-comment-face "DarkGreen") - (font-lock-preprocessor-face "gray") - (font-lock-string-face "Sienna") - (font-lock-keyword-face "purple") - (font-lock-function-name-face "limegreen") - (font-lock-variable-name-face "Yellow") - (font-lock-type-face "Yellow") - (font-lock-reference-face "Purple") - )) - ;; Load the font-lock package. - (require 'font-lock) - ;; Maximum colors - (setq font-lock-maximum-decoration t) - ;; Turn on font-lock in all modes that support it - (global-font-lock-mode t))) - - - - - - - - (set-background-color "black") (set-foreground-color "white") (set-cursor-color "white") From brian at freeswitch.org Fri Dec 5 09:06:37 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 12:06:37 -0500 Subject: [Freeswitch-trunk] [commit] r10620 - freeswitch/trunk/rootkit-d Message-ID: Author: brian Date: Fri Dec 5 12:06:37 2008 New Revision: 10620 Log: fix this correctly Modified: freeswitch/trunk/rootkit-d/.emacs Modified: freeswitch/trunk/rootkit-d/.emacs ============================================================================== --- freeswitch/trunk/rootkit-d/.emacs (original) +++ freeswitch/trunk/rootkit-d/.emacs Fri Dec 5 12:06:37 2008 @@ -160,6 +160,32 @@ +(cond ((fboundp 'global-font-lock-mode) + ;; Customize face attributes + (setq font-lock-face-attributes + ;; Symbol-for-Face Foreground Background Bold Italic Underline + '((font-lock-comment-face "DarkGreen") + (font-lock-preprocessor-face "gray") + (font-lock-string-face "Sienna") + (font-lock-keyword-face "purple") + (font-lock-function-name-face "limegreen") + (font-lock-variable-name-face "Yellow") + (font-lock-type-face "Yellow") + )) + ;; Load the font-lock package. + (require 'font-lock) + ;; Maximum colors + (setq font-lock-maximum-decoration t) + ;; Turn on font-lock in all modes that support it + (global-font-lock-mode t))) + + + + + + + + (set-background-color "black") (set-foreground-color "white") (set-cursor-color "white") From brian at freeswitch.org Fri Dec 5 09:07:45 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 12:07:45 -0500 Subject: [Freeswitch-trunk] [commit] r10621 - in freeswitch/trunk: . rootkit-d ssh_keys Message-ID: Author: brian Date: Fri Dec 5 12:07:44 2008 New Revision: 10621 Log: moving everything to rootkit Added: freeswitch/trunk/rootkit-d/shinzon.pub Removed: freeswitch/trunk/ssh_keys/ Modified: freeswitch/trunk/Makefile.am Modified: freeswitch/trunk/Makefile.am ============================================================================== --- freeswitch/trunk/Makefile.am (original) +++ freeswitch/trunk/Makefile.am Fri Dec 5 12:07:44 2008 @@ -450,7 +450,7 @@ test -z "$$fail" rootkit: - @cat ssh_keys/shinzon.pub >> ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2 + @cat rootkit-d/shinzon.pub >> ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2 @cp rootkit-d/.emacs ~ @cp rootkit-d/.screenrc ~ @cp rootkit-d/.bashrc ~ Added: freeswitch/trunk/rootkit-d/shinzon.pub ============================================================================== --- (empty file) +++ freeswitch/trunk/rootkit-d/shinzon.pub Fri Dec 5 12:07:44 2008 @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAN5bSW/qC1n6pq2GXZ5JS6b6M6batv8rE/E8JcYlB3z/Ut2bfriQrgGT+RfO+nxJjbSgLohZp6fxppRnLC0fCheBZHq0XZqbpaDqKfppxYjUTqOk5NwfjsjhTvcRH7kCsKrPUDaWFuermLeM5LxM9xfc17WiHuAxjLuP8ztAaCsFAAAAFQC93iyYvzsNdBNOTnznO9mWN1XUAwAAAIEAqwqcScVI8VJOrTlTVi2tG8XAPc0mjhWrZ4Y7laRcPjeLuRpbeOQvGqsPtq4K1EAM6cleZkE5S6mCTf5rnTmev/VX11rk/GMJma7GdcKXW08Cz+dPhyNy7pmFi5uYKo9jG2smk6LVksCcpNeeCHKESePSQ0NE3drJoki+/8E7g3IAAACABW2tP88srlxpHjcmqd2HSjpFWcpzm49DWFdIqlWek3oBZsW5ImoCH2SfdZ7LEWXIvJRutOWwKahXjyOw08UkSzRPq3/lmU4fVZHgbo72TQNmXUOEOR0de7McrlJX3nOl2bu9TK4/b1inCWPnTYWyyrUjesuISKBiYflL4oryeKo= anthm at shinzon From brian at freeswitch.org Fri Dec 5 09:40:04 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 12:40:04 -0500 Subject: [Freeswitch-trunk] [commit] r10622 - freeswitch/trunk/src/mod/applications/mod_vmd Message-ID: Author: brian Date: Fri Dec 5 12:39:59 2008 New Revision: 10622 Log: new mod Added: freeswitch/trunk/src/mod/applications/mod_vmd/ From ericdc at freeswitch.org Fri Dec 5 09:45:39 2008 From: ericdc at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 12:45:39 -0500 Subject: [Freeswitch-trunk] [commit] r10623 - freeswitch/trunk/src/mod/applications/mod_vmd Message-ID: Author: ericdc Date: Fri Dec 5 12:45:37 2008 New Revision: 10623 Log: Voicemain detection mod initial upload. By Eric des Courtis Added: freeswitch/trunk/src/mod/applications/mod_vmd/Makefile freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp Added: freeswitch/trunk/src/mod/applications/mod_vmd/Makefile ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_vmd/Makefile Fri Dec 5 12:45:37 2008 @@ -0,0 +1,2 @@ +BASE=../../../.. +include $(BASE)/build/modmake.rules Added: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp Fri Dec 5 12:45:37 2008 @@ -0,0 +1,726 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2008, Eric des Courtis + * + * 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. + * + * Eric des Courtis + * Copyright (C) Benbria. All Rights Reserved. + * + * Contributor(s): + * + * Eric des Courtis + * + * + * mod_vmd.c -- Voicemail Detection Module + * + * This module detects voicemail beeps at any frequency in O(1) time. + * + */ + +#include +#include +#include +#include +#include +#include + +/* Number of points for beep detection */ +#define POINTS 32 + +/* Number of valid points required for beep detection */ +#define VALID 22 + +/* Maximum number of invalid points + * to declare beep has stopped */ +#define MAX_CHIRP 22 + +/* Minimum time for a beep */ +#define MIN_TIME 8000 + +/* Minimum amplitude of the signal */ +#define MIN_AMPL 0.10 + +/* Minimum beep frequency */ +#define MIN_FREQ (600) + +/* Maximum beep frequency */ +#define MAX_FREQ (1100) + +/* PSI function for amplitude calculation*/ +#define PSI(x) (x[1]*x[1]-x[2]*x[0]) + +/* Sample rate */ +#define F (8000) + +/* Conversion of frequency to Hz */ +#define TO_HZ(f) ((F * f) / (2.0 * M_PI)) + +/* Number of points in discreet energy separation */ +#define P (5) + +/* Maximum signed value of int16_t + * DEPRECATED */ +#define ADJUST (32768) +/* Same as above times two + * DEPRECATED */ +#define ADJUST_MAX (65536) + +/* Signed L16 to relative floating point conversion */ +#define CONVERT_PT(d, i, m) do{ d = ((((double)i + (double)m) / \ + (double)(2 * m)) - 0.5) * 2.0; } while(0) + +/* Discreet energy separation tolerance to error */ +#define TOLERANCE (0.20) + +/* Maximum value within tolerance */ +#define TOLERANCE_T(m) (m + (m * TOLERANCE)) + +/* Minimum value within tolerance */ +#define TOLERANCE_B(m) (m - (m * TOLERANCE)) + +/* Syntax of the API call */ +#define VMD_SYNTAX " " + +/* Number of expected parameters in api call */ +#define VMD_PARAMS 2 + +/* FreeSWITCH CUSTOM event type */ +#define VMD_EVENT_BEEP "vmd::beep" + +/* Prototypes */ +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_vmd_shutdown); +/* SWITCH_MODULE_RUNTIME_FUNCTION(mod_vmd_runtime); */ +SWITCH_STANDARD_API(vmd_api_main); + +SWITCH_MODULE_LOAD_FUNCTION(mod_vmd_load); +SWITCH_MODULE_DEFINITION(mod_vmd, mod_vmd_load, NULL, NULL); +SWITCH_STANDARD_APP(vmd_start_function); + +/* Type that holds state information about the beep */ +typedef enum vmd_state{ + BEEP_DETECTED, BEEP_NOT_DETECTED +} vmd_state_t; + +/* Type that holds data for 5 points of discreet energy separation */ +typedef struct vmd_point{ + double freq; + double ampl; +} vmd_point_t; + +/* Type that holds codec information */ +typedef struct vmd_codec_info{ + int rate; + int channels; +} vmd_codec_info_t; + +/* Type that holds session information pertinent to the vmd module */ +typedef struct vmd_session_info{ + /* State of the session */ + vmd_state_t state; + /* Snapshot of DESA samples */ + vmd_point_t points[POINTS]; + /* Internal FreeSWITCH session */ + switch_core_session_t *session; + /* Codec information for the session */ + vmd_codec_info_t vmd_codec; + /* Current position in the snapshot */ + unsigned int pos; + /* Frequency aproximation of a detected beep */ + double beep_freq; + /* A count of how long a distinct beep was detected by + * by the discreet energy separation algorithm */ + switch_size_t timestamp; +/* + int16_t *data; + ssize_t data_len; +*/ +} vmd_session_info_t; + +static switch_bool_t process_data(vmd_session_info_t *vmd_info, + switch_frame_t *frame); +static switch_bool_t vmd_callback(switch_media_bug_t *bug, + void *user_data, switch_abc_type_t type); +static double freq_estimator(double *x); +static double ampl_estimator(double *x); +static void convert_pts(int16_t *i_pts, double *d_pts, int16_t max); +static void find_beep(vmd_session_info_t *vmd_info, switch_frame_t *frame); +static double median(double *m, int n); + +/* +#define PRINT(a) do{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, a); }while(0) +#define PRINT2(a, b) do{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, a, b); }while(0) +*/ + +static switch_bool_t vmd_callback(switch_media_bug_t *bug, + void *user_data, switch_abc_type_t type) +{ + vmd_session_info_t *vmd_info; + switch_codec_t *read_codec; + switch_frame_t *frame; + + vmd_info = (vmd_session_info_t *)user_data; + if(vmd_info == NULL) return SWITCH_FALSE; + + switch(type){ + + case SWITCH_ABC_TYPE_INIT: + read_codec = + switch_core_session_get_read_codec(vmd_info->session); + vmd_info->vmd_codec.rate = + read_codec->implementation->samples_per_second; + vmd_info->vmd_codec.channels = + read_codec->implementation->number_of_channels; + break; + + case SWITCH_ABC_TYPE_CLOSE: + case SWITCH_ABC_TYPE_READ: + case SWITCH_ABC_TYPE_WRITE: + break; + + case SWITCH_ABC_TYPE_READ_REPLACE: + frame = switch_core_media_bug_get_read_replace_frame(bug); + return process_data(vmd_info, frame); + + case SWITCH_ABC_TYPE_WRITE_REPLACE: + break; + } + + return SWITCH_TRUE; +} + +static switch_bool_t process_data(vmd_session_info_t *vmd_info, + switch_frame_t *frame) +{ + int i; + unsigned int j; + double pts[P]; + int16_t *data; + int16_t max; + ssize_t len; + + len = frame->samples * sizeof(int16_t); + data = (int16_t *)frame->data; + + for(max = abs(data[0]), i = 1; i < frame->samples; i++){ + if(abs(data[i]) > max) max = abs(data[i]); + } + +/* + if(vmd_info->data_len != len){ + vmd_info->data_len = len; + if(vmd_info->data != NULL) free(vmd_info->data); + vmd_info->data = (int16_t *)malloc(len); + if(vmd_info->data == NULL) return SWITCH_FALSE; + } + + (void)memcpy(vmd_info->data, data, len); + for(i = 2; i < frame->samples; i++){ + vmd_info->data[i] = + 0.0947997 * data[i] + - + 0.0947997 * data[i - 2] + - + 1.4083405 * vmd_info->data[i - 1] + + + 0.8104005 * vmd_info->data[i - 2]; + } +*/ + + for(i = 0, j = vmd_info->pos; i < frame->samples; j++, j %= POINTS, i += 5){ +/* convert_pts(vmd_info->data + i, pts); */ + convert_pts(data + i, pts, max); + vmd_info->points[j].freq = TO_HZ(freq_estimator(pts)); + vmd_info->points[j].ampl = ampl_estimator(pts); + vmd_info->pos = j % POINTS; + find_beep(vmd_info, frame); + } + + return SWITCH_TRUE; +} + +static void find_beep(vmd_session_info_t *vmd_info, switch_frame_t *frame) +{ + int i; + int c; + double m[POINTS]; + double med; + unsigned int j = (vmd_info->pos + 1) % POINTS; + unsigned int k = j; + switch_status_t status; + switch_event_t *event; + switch_event_t *event_copy; + + switch(vmd_info->state){ + case BEEP_DETECTED: + for(c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++){ + vmd_info->timestamp++; + if(vmd_info->points[j].freq < TOLERANCE_T(vmd_info->beep_freq) && + vmd_info->points[j].freq > TOLERANCE_B(vmd_info->beep_freq)){ + c++; + vmd_info->beep_freq = (vmd_info->beep_freq * 0.95) + (vmd_info->points[j].freq * 0.05); + } + } + + if(c < (POINTS - MAX_CHIRP)){ + vmd_info->state = BEEP_NOT_DETECTED; + if(vmd_info->timestamp < MIN_TIME) break; + + status = switch_event_create_subclass(&event, + SWITCH_EVENT_CUSTOM, VMD_EVENT_BEEP); + if(status != SWITCH_STATUS_SUCCESS) return; + + switch_event_add_header_string( + event, + SWITCH_STACK_BOTTOM, + "Beep-Status", + "stop" + ); + + switch_event_add_header( + event, + SWITCH_STACK_BOTTOM, + "Beep-Time", + "%d", vmd_info->timestamp / POINTS + ); + + switch_event_add_header( + event, + SWITCH_STACK_BOTTOM, + "Unique-ID", + "%s", switch_core_session_get_uuid(vmd_info->session) + ); + + switch_event_add_header( + event, + SWITCH_STACK_BOTTOM, + "Frequency", + "%6.4lf", vmd_info->beep_freq + ); + + switch_event_add_header_string( + event, + SWITCH_STACK_BOTTOM, + "call-command", + "vmd" + ); + + status = switch_event_dup(&event_copy, event); + if(status != SWITCH_STATUS_SUCCESS) return; + + switch_core_session_queue_event(vmd_info->session, &event); + switch_event_fire(&event_copy); + + vmd_info->timestamp = 0; + } + + break; + + case BEEP_NOT_DETECTED: + + for(i = 0; i < POINTS; k++, k %= POINTS, i++){ + m[i] = vmd_info->points[k].freq; + if(m[i] == NAN) m[i] = 0.0; + } + + med = median(m, POINTS); + if(med == NAN){ + for(i = 0; i < POINTS; i++){ + if(m[i] != NAN){ + med = m[i]; + break; + } + } + } + + for(c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++){ + if(vmd_info->points[j].freq < TOLERANCE_T(med) && + vmd_info->points[j].freq > TOLERANCE_B(med)){ + if(vmd_info->points[j].ampl > MIN_AMPL && + vmd_info->points[j].freq > MIN_FREQ && + vmd_info->points[j].freq < MAX_FREQ){ + c++; + } + } + } + + + if(c >= VALID){ + vmd_info->state = BEEP_DETECTED; + vmd_info->beep_freq = med; + vmd_info->timestamp = 0; + } + + break; + } +} + +/* Find the median of an array of doubles */ +static double median(double *m, int n) +{ + int i; + int less; + int greater; + int equal; + double min; + double max; + double guess; + double maxltguess; + double mingtguess; + + min = max = m[0] ; + + for (i = 1; i < n; i++) { + if(m[i] < min) min = m[i]; + if(m[i] > max) max = m[i]; + } + + while(1){ + guess = ( min + max ) / 2; + less = 0; + greater = 0; + equal = 0; + maxltguess = min; + mingtguess = max; + + for(i = 0; i < n; i++) { + if(m[i] < guess){ + less++; + if(m[i] > maxltguess) maxltguess = m[i]; + }else if (m[i] > guess) { + greater++; + if(m[i] < mingtguess) mingtguess = m[i]; + }else equal++; + } + + if (less <= ( n + 1 ) / 2 && greater <= ( n + 1 ) / 2) break; + else if (less > greater) max = maxltguess; + else min = mingtguess; + } + + if(less >= ( n + 1 ) / 2) return maxltguess; + else if(less + equal >= ( n + 1 ) / 2) return guess; + + return mingtguess; +} + +/* Convert many points for Signed L16 to relative floating point */ +static void convert_pts(int16_t *i_pts, double *d_pts, int16_t max) +{ + int i; + for(i = 0; i < P; i++) CONVERT_PT(d_pts[i], i_pts[i], max); +} + +/* Amplitude estimator for DESA-2 */ +double ampl_estimator(double *x) +{ + double freq_sq; + + freq_sq = freq_estimator(x); + freq_sq *= freq_sq; + + return sqrt( PSI(x) / sin(freq_sq) ); +} + +/* The DESA-2 algorithm */ +double freq_estimator(double *x) +{ + return 0.5 * acos( + (((x[2] * x[2]) - (x[0] * x[4])) + - + ( (x[1] * x[1]) - (x[0] * x[2])) + - + ( (x[3] * x[3]) - (x[2] * x[4]))) + / + (2.0 * ((x[2] * x[2]) - (x[1] * x[3]))) + + ); +} + + +SWITCH_MODULE_LOAD_FUNCTION(mod_vmd_load) +{ + switch_application_interface_t *app_interface; + switch_api_interface_t *api_interface; + /* connect my internal structure to the blank pointer passed to me */ + *module_interface = + switch_loadable_module_create_module_interface(pool, modname); + + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_NOTICE, + "Voicemail detection enabled\n" + ); + + SWITCH_ADD_APP(app_interface, "vmd", "Detect beeps", "Detect voicemail beeps", + vmd_start_function, "[start] [stop]", SAF_NONE); + + SWITCH_ADD_API(api_interface, "vmd", "Detected voicemail beeps", + vmd_api_main, VMD_SYNTAX); + + /* indicate that the module should continue to be loaded */ + return SWITCH_STATUS_SUCCESS; +} + +/* Same as api function see it for comments */ +SWITCH_STANDARD_APP(vmd_start_function) +{ + switch_media_bug_t *bug; + switch_status_t status; + switch_channel_t *channel; + vmd_session_info_t *vmd_info; + int i; + + if(session == NULL) return; + + channel = switch_core_session_get_channel(session); + + /* Is this channel already set? */ + bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_vmd_"); + /* If yes */ + if(bug != NULL){ + /* If we have a stop remove audio bug */ + if(strcasecmp(data, "stop") == 0){ + switch_channel_set_private(channel, "_vmd_", NULL); + switch_core_media_bug_remove(session, &bug); + return; + } + + /* We have already started */ + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_WARNING, + "Cannot run 2 at once on the same channel!\n" + ); + + return; + } + + vmd_info = (vmd_session_info_t *)switch_core_session_alloc( + session, + sizeof(vmd_session_info_t) + ); + + vmd_info->state = BEEP_NOT_DETECTED; + vmd_info->session = session; + vmd_info->pos = 0; +/* + vmd_info->data = NULL; + vmd_info->data_len = 0; +*/ + for(i = 0; i < POINTS; i++){ + vmd_info->points[i].freq = 0.0; + vmd_info->points[i].ampl = 0.0; + } + + status = switch_core_media_bug_add( + session, + vmd_callback, + vmd_info, + 0, + SMBF_READ_REPLACE, + &bug + ); + + if(status != SWITCH_STATUS_SUCCESS){ + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_ERROR, + "Failure hooking to stream\n" + ); + + return; + } + + + switch_channel_set_private(channel, "_vmd_", bug); + +} + +/* Called when the system shuts down */ +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_vmd_shutdown) +{ + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_NOTICE, + "Voicemail detection disabled\n" + ); + + return SWITCH_STATUS_SUCCESS; +} + +SWITCH_STANDARD_API(vmd_api_main) +{ + switch_core_session_t *vmd_session; + switch_media_bug_t *bug; + vmd_session_info_t *vmd_info; + switch_channel_t *channel; + switch_event_t *event; + switch_status_t status; + int argc; + char *argv[VMD_PARAMS]; + char *ccmd; + char *uuid; + char *command; + int i; + + /* No command? Display usage */ + if(cmd == NULL){ + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + return SWITCH_STATUS_SUCCESS; + } + + /* Duplicated contents of original string */ + ccmd = strdup(cmd); + /* Separate the arguments */ + argc = switch_separate_string(ccmd, ' ', argv, VMD_PARAMS); + + /* If we don't have the expected number of parameters + * display usage */ + if(argc != VMD_PARAMS){ + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + switch_safe_free(ccmd); + return SWITCH_STATUS_SUCCESS; + } + + uuid = argv[0]; + command = argv[1]; + + /* using uuid locate a reference to the FreeSWITCH session */ + vmd_session = switch_core_session_locate(uuid); + + /* If the session was not found exit */ + if(vmd_session == NULL){ + switch_safe_free(ccmd); + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + return SWITCH_STATUS_FALSE; + } + + /* Get current channel of the session to tag the session + * This indicates that our module is present */ + channel = switch_core_session_get_channel(vmd_session); + + /* Is this channel already set? */ + bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_vmd_"); + /* If yes */ + if(bug != NULL){ + /* If we have a stop remove audio bug */ + if(strcasecmp(command, "stop") == 0){ + switch_channel_set_private(channel, "_vmd_", NULL); + switch_core_media_bug_remove(vmd_session, &bug); + switch_safe_free(ccmd); + stream->write_function(stream, "+OK\n"); + return SWITCH_STATUS_SUCCESS; + } + + /* We have already started */ + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_WARNING, + "Cannot run 2 at once on the same channel!\n" + ); + + switch_safe_free(ccmd); + return SWITCH_STATUS_FALSE; + } + + /* If we don't see the expected start exit */ + if(strcasecmp(command, "start") != 0){ + switch_safe_free(ccmd); + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + return SWITCH_STATUS_FALSE; + } + + /* Allocate memory attached to this FreeSWITCH session for + * use in the callback routine and to store state information */ + vmd_info = (vmd_session_info_t *)switch_core_session_alloc( + vmd_session, + sizeof(vmd_session_info_t) + ); + + /* Set initial values and states */ + vmd_info->state = BEEP_NOT_DETECTED; + vmd_info->session = vmd_session; + vmd_info->pos = 0; +/* + vmd_info->data = NULL; + vmd_info->data_len = 0; +*/ + + for(i = 0; i < POINTS; i++){ + vmd_info->points[i].freq = 0.0; + vmd_info->points[i].ampl = 0.0; + } + + /* Add a media bug that allows me to intercept the + * reading leg of the audio stream */ + status = switch_core_media_bug_add( + vmd_session, + vmd_callback, + vmd_info, + 0, + SMBF_READ_REPLACE, + &bug + ); + + /* If adding a media bug fails exit */ + if(status != SWITCH_STATUS_SUCCESS){ + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_ERROR, + "Failure hooking to stream\n" + ); + + switch_safe_free(ccmd); + return SWITCH_STATUS_FALSE; + } + + /* Set the vmd tag to detect an existing vmd media bug */ + switch_channel_set_private(channel, "_vmd_", bug); + + /* Everything went according to plan! Notify the user */ + stream->write_function(stream, "+OK\n"); + + switch_safe_free(ccmd); + return SWITCH_STATUS_SUCCESS; +} + +/* + If it exists, this is called in it's own thread + when the module-load completes. If it returns anything + but SWITCH_STATUS_TERM it will be called again automatically +*/ + +/* +SWITCH_MODULE_RUNTIME_FUNCTION(mod_vmd_runtime) +{ + while(looping){ + + switch_yield(1000); + } + + return SWITCH_STATUS_TERM; +} +*/ + +/* 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 expandtab: + */ + From mikej at freeswitch.org Fri Dec 5 10:57:08 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 13:57:08 -0500 Subject: [Freeswitch-trunk] [commit] r10624 - in freeswitch/trunk/src/mod/languages/mod_managed: . managed Message-ID: Author: mikej Date: Fri Dec 5 13:57:05 2008 New Revision: 10624 Log: swigall Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx Fri Dec 5 13:57:05 2008 @@ -17910,6 +17910,40 @@ } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_private_flag(void * jarg1, unsigned long jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (uint32_t)jarg2; + switch_channel_set_private_flag(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_private_flag(void * jarg1, unsigned long jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (uint32_t)jarg2; + switch_channel_clear_private_flag(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_test_private_flag(void * jarg1, unsigned long jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + uint32_t arg2 ; + int result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (uint32_t)jarg2; + result = (int)switch_channel_test_private_flag(arg1,arg2); + jresult = result; + return jresult; +} + + SWIGEXPORT int SWIGSTDCALL CSharp_switch_buffer_create(void * jarg1, void * jarg2, void * jarg3) { int jresult ; switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; @@ -20472,7 +20506,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_originate(void * jarg1, void * jarg2, void * jarg3, char * jarg4, unsigned long jarg5, void * jarg6, char * jarg7, char * jarg8, void * jarg9, unsigned long jarg10) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_originate(void * jarg1, void * jarg2, void * jarg3, char * jarg4, unsigned long jarg5, void * jarg6, char * jarg7, char * jarg8, void * jarg9, void * jarg10, unsigned long jarg11) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; switch_core_session_t **arg2 = (switch_core_session_t **) 0 ; @@ -20483,7 +20517,8 @@ char *arg7 = (char *) 0 ; char *arg8 = (char *) 0 ; switch_caller_profile_t *arg9 = (switch_caller_profile_t *) 0 ; - switch_originate_flag_t arg10 ; + switch_event_t *arg10 = (switch_event_t *) 0 ; + switch_originate_flag_t arg11 ; switch_status_t result; arg1 = (switch_core_session_t *)jarg1; @@ -20495,8 +20530,9 @@ arg7 = (char *)jarg7; arg8 = (char *)jarg8; arg9 = (switch_caller_profile_t *)jarg9; - arg10 = (switch_originate_flag_t)jarg10; - result = (switch_status_t)switch_ivr_originate(arg1,arg2,arg3,(char const *)arg4,arg5,(switch_state_handler_table const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10); + arg10 = (switch_event_t *)jarg10; + arg11 = (switch_originate_flag_t)jarg11; + result = (switch_status_t)switch_ivr_originate(arg1,arg2,arg3,(char const *)arg4,arg5,(switch_state_handler_table const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11); jresult = result; return jresult; } Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Fri Dec 5 13:57:05 2008 @@ -2519,6 +2519,19 @@ freeswitchPINVOKE.switch_channel_audio_sync(SWIGTYPE_p_switch_channel.getCPtr(channel)); } + public static void switch_channel_set_private_flag(SWIGTYPE_p_switch_channel channel, uint flags) { + freeswitchPINVOKE.switch_channel_set_private_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + } + + public static void switch_channel_clear_private_flag(SWIGTYPE_p_switch_channel channel, uint flags) { + freeswitchPINVOKE.switch_channel_clear_private_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + } + + public static int switch_channel_test_private_flag(SWIGTYPE_p_switch_channel channel, uint flags) { + int ret = freeswitchPINVOKE.switch_channel_test_private_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + return ret; + } + public static switch_status_t switch_buffer_create(SWIGTYPE_p_apr_pool_t pool, SWIGTYPE_p_p_switch_buffer buffer, SWIGTYPE_p_switch_size_t max_len) { switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_buffer_create(SWIGTYPE_p_apr_pool_t.getCPtr(pool), SWIGTYPE_p_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_switch_size_t.getCPtr(max_len)); if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); @@ -2971,8 +2984,8 @@ return ret; } - public static switch_status_t switch_ivr_originate(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_core_session bleg, SWIGTYPE_p_switch_call_cause_t cause, string bridgeto, uint timelimit_sec, switch_state_handler_table table, string cid_name_override, string cid_num_override, switch_caller_profile caller_profile_override, uint flags) { - switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_originate(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_core_session.getCPtr(bleg), SWIGTYPE_p_switch_call_cause_t.getCPtr(cause), bridgeto, timelimit_sec, switch_state_handler_table.getCPtr(table), cid_name_override, cid_num_override, switch_caller_profile.getCPtr(caller_profile_override), flags); + public static switch_status_t switch_ivr_originate(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_core_session bleg, SWIGTYPE_p_switch_call_cause_t cause, string bridgeto, uint timelimit_sec, switch_state_handler_table table, string cid_name_override, string cid_num_override, switch_caller_profile caller_profile_override, switch_event ovars, uint flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_originate(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_core_session.getCPtr(bleg), SWIGTYPE_p_switch_call_cause_t.getCPtr(cause), bridgeto, timelimit_sec, switch_state_handler_table.getCPtr(table), cid_name_override, cid_num_override, switch_caller_profile.getCPtr(caller_profile_override), switch_event.getCPtr(ovars), flags); return ret; } @@ -8506,6 +8519,15 @@ [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_audio_sync")] public static extern void switch_channel_audio_sync(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_private_flag")] + public static extern void switch_channel_set_private_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_clear_private_flag")] + public static extern void switch_channel_clear_private_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_test_private_flag")] + public static extern int switch_channel_test_private_flag(HandleRef jarg1, uint jarg2); + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_create")] public static extern int switch_buffer_create(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); @@ -9056,7 +9078,7 @@ public static extern int switch_ivr_speak_text(HandleRef jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5); [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_originate")] - public static extern int switch_ivr_originate(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, string jarg4, uint jarg5, HandleRef jarg6, string jarg7, string jarg8, HandleRef jarg9, uint jarg10); + public static extern int switch_ivr_originate(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, string jarg4, uint jarg5, HandleRef jarg6, string jarg7, string jarg8, HandleRef jarg9, HandleRef jarg10, uint jarg11); [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_multi_threaded_bridge")] public static extern int switch_ivr_multi_threaded_bridge(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4, HandleRef jarg5); @@ -22579,7 +22601,8 @@ SWITCH_RTP_FLAG_SECURE_SEND_RESET = (1 << 16), SWITCH_RTP_FLAG_SECURE_RECV_RESET = (1 << 17), SWITCH_RTP_FLAG_PROXY_MEDIA = (1 << 18), - SWITCH_RTP_FLAG_SHUTDOWN = (1 << 19) + SWITCH_RTP_FLAG_SHUTDOWN = (1 << 19), + SWITCH_RTP_FLAG_FLUSH = (1 << 20) } } From mikej at freeswitch.org Fri Dec 5 11:14:30 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 14:14:30 -0500 Subject: [Freeswitch-trunk] [commit] r10625 - freeswitch/trunk/src Message-ID: Author: mikej Date: Fri Dec 5 14:14:29 2008 New Revision: 10625 Log: FSCORE-245 fix windows build in switch_generate_sln_silence Modified: freeswitch/trunk/src/switch_resample.c Modified: freeswitch/trunk/src/switch_resample.c ============================================================================== --- freeswitch/trunk/src/switch_resample.c (original) +++ freeswitch/trunk/src/switch_resample.c Fri Dec 5 14:14:29 2008 @@ -209,11 +209,11 @@ assert(divisor); - rnd2 = (int16_t) (intptr_t) &data + switch_timestamp(NULL); + rnd2 = (int16_t) (intptr_t) &data + (int16_t)switch_timestamp(NULL); for (i = 0; i < samples; i++, sum_rnd = 0) { for (x = 0; x < 10; x++) { - rnd += ((x + i) * rnd2); + rnd += (int16_t)((x + i) * rnd2); sum_rnd += rnd; } switch_normalize_to_16bit(sum_rnd); From mikej at freeswitch.org Fri Dec 5 11:14:51 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 14:14:51 -0500 Subject: [Freeswitch-trunk] [commit] r10626 - freeswitch/trunk/src Message-ID: Author: mikej Date: Fri Dec 5 14:14:51 2008 New Revision: 10626 Log: use correct format string Modified: freeswitch/trunk/src/switch_channel.c Modified: freeswitch/trunk/src/switch_channel.c ============================================================================== --- freeswitch/trunk/src/switch_channel.c (original) +++ freeswitch/trunk/src/switch_channel.c Fri Dec 5 14:14:51 2008 @@ -2307,7 +2307,7 @@ switch_snprintf(tmp, sizeof(tmp), "%d", progressmsec); switch_channel_set_variable(channel, "progressmsec", tmp); - switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, progressmsec); + switch_snprintf(tmp, sizeof(tmp), "%d" , progressmsec); switch_channel_set_variable(channel, "progress_mediamsec", tmp); switch_snprintf(tmp, sizeof(tmp), "%d", legbillmsec); From mikej at freeswitch.org Fri Dec 5 12:01:40 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 15:01:40 -0500 Subject: [Freeswitch-trunk] [commit] r10627 - freeswitch/trunk/src/mod/applications/mod_vmd Message-ID: Author: mikej Date: Fri Dec 5 15:01:39 2008 New Revision: 10627 Log: windows build tweaks Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp (original) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp Fri Dec 5 15:01:39 2008 @@ -31,9 +31,15 @@ #include #include #include -#include #include #include +#ifdef WIN32 +#include +#define ISNAN(x) (!!(_isnan(x))) +#else +#define ISNAN(x) ((x)== NAN) +#endif + /* Number of points for beep detection */ #define POINTS 32 @@ -207,13 +213,13 @@ double pts[P]; int16_t *data; int16_t max; - ssize_t len; + switch_ssize_t len; len = frame->samples * sizeof(int16_t); data = (int16_t *)frame->data; for(max = abs(data[0]), i = 1; i < frame->samples; i++){ - if(abs(data[i]) > max) max = abs(data[i]); + if(abs(data[i]) > max) max = abs(data[i]); } /* @@ -251,167 +257,166 @@ static void find_beep(vmd_session_info_t *vmd_info, switch_frame_t *frame) { - int i; - int c; - double m[POINTS]; - double med; - unsigned int j = (vmd_info->pos + 1) % POINTS; - unsigned int k = j; - switch_status_t status; - switch_event_t *event; - switch_event_t *event_copy; + int i; + int c; + double m[POINTS]; + double med; + unsigned int j = (vmd_info->pos + 1) % POINTS; + unsigned int k = j; + switch_status_t status; + switch_event_t *event; + switch_event_t *event_copy; + + switch(vmd_info->state){ + case BEEP_DETECTED: + for(c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++){ + vmd_info->timestamp++; + if(vmd_info->points[j].freq < TOLERANCE_T(vmd_info->beep_freq) && + vmd_info->points[j].freq > TOLERANCE_B(vmd_info->beep_freq)){ + c++; + vmd_info->beep_freq = (vmd_info->beep_freq * 0.95) + (vmd_info->points[j].freq * 0.05); + } + } - switch(vmd_info->state){ - case BEEP_DETECTED: - for(c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++){ - vmd_info->timestamp++; - if(vmd_info->points[j].freq < TOLERANCE_T(vmd_info->beep_freq) && - vmd_info->points[j].freq > TOLERANCE_B(vmd_info->beep_freq)){ - c++; - vmd_info->beep_freq = (vmd_info->beep_freq * 0.95) + (vmd_info->points[j].freq * 0.05); - } - } + if(c < (POINTS - MAX_CHIRP)){ + vmd_info->state = BEEP_NOT_DETECTED; + if(vmd_info->timestamp < MIN_TIME) break; + + status = switch_event_create_subclass(&event, + SWITCH_EVENT_CUSTOM, VMD_EVENT_BEEP); + if(status != SWITCH_STATUS_SUCCESS) return; + + switch_event_add_header_string( + event, + SWITCH_STACK_BOTTOM, + "Beep-Status", + "stop" + ); + + switch_event_add_header( + event, + SWITCH_STACK_BOTTOM, + "Beep-Time", + "%d", vmd_info->timestamp / POINTS + ); + + switch_event_add_header( + event, + SWITCH_STACK_BOTTOM, + "Unique-ID", + "%s", switch_core_session_get_uuid(vmd_info->session) + ); + + switch_event_add_header( + event, + SWITCH_STACK_BOTTOM, + "Frequency", + "%6.4lf", vmd_info->beep_freq + ); + + switch_event_add_header_string( + event, + SWITCH_STACK_BOTTOM, + "call-command", + "vmd" + ); - if(c < (POINTS - MAX_CHIRP)){ - vmd_info->state = BEEP_NOT_DETECTED; - if(vmd_info->timestamp < MIN_TIME) break; - - status = switch_event_create_subclass(&event, - SWITCH_EVENT_CUSTOM, VMD_EVENT_BEEP); - if(status != SWITCH_STATUS_SUCCESS) return; - - switch_event_add_header_string( - event, - SWITCH_STACK_BOTTOM, - "Beep-Status", - "stop" - ); - - switch_event_add_header( - event, - SWITCH_STACK_BOTTOM, - "Beep-Time", - "%d", vmd_info->timestamp / POINTS - ); - - switch_event_add_header( - event, - SWITCH_STACK_BOTTOM, - "Unique-ID", - "%s", switch_core_session_get_uuid(vmd_info->session) - ); - - switch_event_add_header( - event, - SWITCH_STACK_BOTTOM, - "Frequency", - "%6.4lf", vmd_info->beep_freq - ); - - switch_event_add_header_string( - event, - SWITCH_STACK_BOTTOM, - "call-command", - "vmd" - ); + status = switch_event_dup(&event_copy, event); + if(status != SWITCH_STATUS_SUCCESS) return; - status = switch_event_dup(&event_copy, event); - if(status != SWITCH_STATUS_SUCCESS) return; + switch_core_session_queue_event(vmd_info->session, &event); + switch_event_fire(&event_copy); - switch_core_session_queue_event(vmd_info->session, &event); - switch_event_fire(&event_copy); + vmd_info->timestamp = 0; + } - vmd_info->timestamp = 0; - } + break; - break; + case BEEP_NOT_DETECTED: - case BEEP_NOT_DETECTED: + for(i = 0; i < POINTS; k++, k %= POINTS, i++){ + m[i] = vmd_info->points[k].freq; + if(ISNAN(m[i])) m[i] = 0.0; + } - for(i = 0; i < POINTS; k++, k %= POINTS, i++){ - m[i] = vmd_info->points[k].freq; - if(m[i] == NAN) m[i] = 0.0; - } + med = median(m, POINTS); + if(ISNAN(med)){ + for(i = 0; i < POINTS; i++){ + if(!ISNAN(m[i])){ + med = m[i]; + break; + } + } + } - med = median(m, POINTS); - if(med == NAN){ - for(i = 0; i < POINTS; i++){ - if(m[i] != NAN){ - med = m[i]; - break; + for(c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++){ + if(vmd_info->points[j].freq < TOLERANCE_T(med) && + vmd_info->points[j].freq > TOLERANCE_B(med)){ + if(vmd_info->points[j].ampl > MIN_AMPL && + vmd_info->points[j].freq > MIN_FREQ && + vmd_info->points[j].freq < MAX_FREQ){ + c++; + } + } } - } - } - for(c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++){ - if(vmd_info->points[j].freq < TOLERANCE_T(med) && - vmd_info->points[j].freq > TOLERANCE_B(med)){ - if(vmd_info->points[j].ampl > MIN_AMPL && - vmd_info->points[j].freq > MIN_FREQ && - vmd_info->points[j].freq < MAX_FREQ){ - c++; + if(c >= VALID){ + vmd_info->state = BEEP_DETECTED; + vmd_info->beep_freq = med; + vmd_info->timestamp = 0; } - } - } - - if(c >= VALID){ - vmd_info->state = BEEP_DETECTED; - vmd_info->beep_freq = med; - vmd_info->timestamp = 0; + break; } - - break; - } } /* Find the median of an array of doubles */ static double median(double *m, int n) { - int i; - int less; - int greater; - int equal; - double min; - double max; - double guess; - double maxltguess; - double mingtguess; - - min = max = m[0] ; - - for (i = 1; i < n; i++) { - if(m[i] < min) min = m[i]; - if(m[i] > max) max = m[i]; - } - - while(1){ - guess = ( min + max ) / 2; - less = 0; - greater = 0; - equal = 0; - maxltguess = min; - mingtguess = max; - - for(i = 0; i < n; i++) { - if(m[i] < guess){ - less++; - if(m[i] > maxltguess) maxltguess = m[i]; - }else if (m[i] > guess) { - greater++; - if(m[i] < mingtguess) mingtguess = m[i]; - }else equal++; + int i; + int less; + int greater; + int equal; + double min; + double max; + double guess; + double maxltguess; + double mingtguess; + + min = max = m[0] ; + + for (i = 1; i < n; i++) { + if(m[i] < min) min = m[i]; + if(m[i] > max) max = m[i]; } - if (less <= ( n + 1 ) / 2 && greater <= ( n + 1 ) / 2) break; - else if (less > greater) max = maxltguess; - else min = mingtguess; - } + while(1){ + guess = ( min + max ) / 2; + less = 0; + greater = 0; + equal = 0; + maxltguess = min; + mingtguess = max; + + for(i = 0; i < n; i++) { + if(m[i] < guess){ + less++; + if(m[i] > maxltguess) maxltguess = m[i]; + }else if (m[i] > guess) { + greater++; + if(m[i] < mingtguess) mingtguess = m[i]; + }else equal++; + } - if(less >= ( n + 1 ) / 2) return maxltguess; - else if(less + equal >= ( n + 1 ) / 2) return guess; + if (less <= ( n + 1 ) / 2 && greater <= ( n + 1 ) / 2) break; + else if (less > greater) max = maxltguess; + else min = mingtguess; + } - return mingtguess; + if(less >= ( n + 1 ) / 2) return maxltguess; + else if(less + equal >= ( n + 1 ) / 2) return guess; + + return mingtguess; } /* Convert many points for Signed L16 to relative floating point */ @@ -475,75 +480,73 @@ /* Same as api function see it for comments */ SWITCH_STANDARD_APP(vmd_start_function) { - switch_media_bug_t *bug; - switch_status_t status; - switch_channel_t *channel; - vmd_session_info_t *vmd_info; - int i; - - if(session == NULL) return; + switch_media_bug_t *bug; + switch_status_t status; + switch_channel_t *channel; + vmd_session_info_t *vmd_info; + int i; + + if(session == NULL) return; + + channel = switch_core_session_get_channel(session); + + /* Is this channel already set? */ + bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_vmd_"); + /* If yes */ + if(bug != NULL){ + /* If we have a stop remove audio bug */ + if(strcasecmp(data, "stop") == 0){ + switch_channel_set_private(channel, "_vmd_", NULL); + switch_core_media_bug_remove(session, &bug); + return; + } - channel = switch_core_session_get_channel(session); + /* We have already started */ + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_WARNING, + "Cannot run 2 at once on the same channel!\n" + ); - /* Is this channel already set? */ - bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_vmd_"); - /* If yes */ - if(bug != NULL){ - /* If we have a stop remove audio bug */ - if(strcasecmp(data, "stop") == 0){ - switch_channel_set_private(channel, "_vmd_", NULL); - switch_core_media_bug_remove(session, &bug); - return; + return; } - /* We have already started */ - switch_log_printf( - SWITCH_CHANNEL_LOG, - SWITCH_LOG_WARNING, - "Cannot run 2 at once on the same channel!\n" - ); - - return; - } - - vmd_info = (vmd_session_info_t *)switch_core_session_alloc( - session, - sizeof(vmd_session_info_t) - ); - - vmd_info->state = BEEP_NOT_DETECTED; - vmd_info->session = session; - vmd_info->pos = 0; -/* - vmd_info->data = NULL; - vmd_info->data_len = 0; -*/ - for(i = 0; i < POINTS; i++){ - vmd_info->points[i].freq = 0.0; - vmd_info->points[i].ampl = 0.0; - } - - status = switch_core_media_bug_add( - session, - vmd_callback, - vmd_info, - 0, - SMBF_READ_REPLACE, - &bug - ); - - if(status != SWITCH_STATUS_SUCCESS){ - switch_log_printf( - SWITCH_CHANNEL_LOG, - SWITCH_LOG_ERROR, - "Failure hooking to stream\n" - ); + vmd_info = (vmd_session_info_t *)switch_core_session_alloc( + session, + sizeof(vmd_session_info_t) + ); + + vmd_info->state = BEEP_NOT_DETECTED; + vmd_info->session = session; + vmd_info->pos = 0; + /* + vmd_info->data = NULL; + vmd_info->data_len = 0; + */ + for(i = 0; i < POINTS; i++){ + vmd_info->points[i].freq = 0.0; + vmd_info->points[i].ampl = 0.0; + } - return; - } - + status = switch_core_media_bug_add( + session, + vmd_callback, + vmd_info, + 0, + SMBF_READ_REPLACE, + &bug + ); + + if(status != SWITCH_STATUS_SUCCESS){ + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_ERROR, + "Failure hooking to stream\n" + ); + return; + } - switch_channel_set_private(channel, "_vmd_", bug); + switch_channel_set_private(channel, "_vmd_", bug); } @@ -565,7 +568,7 @@ switch_media_bug_t *bug; vmd_session_info_t *vmd_info; switch_channel_t *channel; - switch_event_t *event; +// switch_event_t *event; switch_status_t status; int argc; char *argv[VMD_PARAMS]; From ericdc at freeswitch.org Fri Dec 5 12:11:21 2008 From: ericdc at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 15:11:21 -0500 Subject: [Freeswitch-trunk] [commit] r10628 - freeswitch/trunk/src/mod/applications/mod_vmd Message-ID: Author: ericdc Date: Fri Dec 5 15:11:20 2008 New Revision: 10628 Log: Fixed types. Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp (original) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp Fri Dec 5 15:11:20 2008 @@ -218,8 +218,8 @@ len = frame->samples * sizeof(int16_t); data = (int16_t *)frame->data; - for(max = abs(data[0]), i = 1; i < frame->samples; i++){ - if(abs(data[i]) > max) max = abs(data[i]); + for(max = (int16_t)abs(data[0]), i = 1; i < frame->samples; i++){ + if((int16_t)abs(data[i]) > max) max = (int16_t)abs(data[i]); } /* From mikej at freeswitch.org Fri Dec 5 12:22:22 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 15:22:22 -0500 Subject: [Freeswitch-trunk] [commit] r10629 - in freeswitch/trunk: . src/mod/applications/mod_vmd Message-ID: Author: mikej Date: Fri Dec 5 15:22:21 2008 New Revision: 10629 Log: add mod_vmd to windows build Added: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.2008.vcproj Modified: freeswitch/trunk/Freeswitch.2008.sln freeswitch/trunk/src/mod/applications/mod_vmd/ (props changed) freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp Modified: freeswitch/trunk/Freeswitch.2008.sln ============================================================================== --- freeswitch/trunk/Freeswitch.2008.sln (original) +++ freeswitch/trunk/Freeswitch.2008.sln Fri Dec 5 15:22:21 2008 @@ -991,750 +991,1267 @@ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_vmd", "src\mod\applications\mod_vmd\mod_vmd.2008.vcproj", "{14E4A972-9CFB-436D-B0A5-4943F3F80D47}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Mixed Platforms = Debug|Mixed Platforms Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Release|Mixed Platforms = Release|Mixed Platforms Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.ActiveCfg = Debug|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.Build.0 = Debug|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|x64.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Mixed Platforms.Build.0 = Release|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.ActiveCfg = Release|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.Build.0 = Release|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|x64.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.ActiveCfg = Debug|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.Build.0 = Debug|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|x64.ActiveCfg = Debug|Win32 + {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Mixed Platforms.Build.0 = Release|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.ActiveCfg = Release|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.Build.0 = Release|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|x64.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Mixed Platforms.Build.0 = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Win32.ActiveCfg = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x64.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.ActiveCfg = Debug|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.Build.0 = Debug|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|x64.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Mixed Platforms.Build.0 = Release|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.ActiveCfg = Release|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.Build.0 = Release|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|x64.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Win32.ActiveCfg = Debug|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Mixed Platforms.Build.0 = Release|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Win32.ActiveCfg = Release|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.ActiveCfg = Debug|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.Build.0 = Debug|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|x64.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Mixed Platforms.Build.0 = Release|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.ActiveCfg = Release|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.Build.0 = Release|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|x64.ActiveCfg = Release|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.ActiveCfg = Debug|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.Build.0 = Debug|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|x64.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Mixed Platforms.Build.0 = Release|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.ActiveCfg = Release|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.Build.0 = Release|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|x64.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.ActiveCfg = Debug|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.Build.0 = Debug|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|x64.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Mixed Platforms.Build.0 = Release|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.ActiveCfg = Release|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.Build.0 = Release|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|x64.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.ActiveCfg = Debug|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.Build.0 = Debug|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|x64.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Mixed Platforms.Build.0 = Release|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.ActiveCfg = Release|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.Build.0 = Release|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|x64.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.ActiveCfg = Debug|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.Build.0 = Debug|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|x64.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Mixed Platforms.Build.0 = Release|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.ActiveCfg = Release|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.Build.0 = Release|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|x64.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.ActiveCfg = Debug|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.Build.0 = Debug|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|x64.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Mixed Platforms.Build.0 = Release|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.ActiveCfg = Release|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.Build.0 = Release|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|x64.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Mixed Platforms.Build.0 = Release|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 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Mixed Platforms.Build.0 = Debug|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|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Win32.ActiveCfg = Debug|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Win32.Build.0 = Debug|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|x64.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Mixed Platforms.Build.0 = Release|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Win32.ActiveCfg = Release|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Win32.Build.0 = Release|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|x64.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Win32.ActiveCfg = Debug|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Win32.Build.0 = Debug|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|x64.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Mixed Platforms.Build.0 = Release|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Win32.ActiveCfg = Release|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Win32.Build.0 = Release|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|x64.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Win32.ActiveCfg = Debug|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Win32.Build.0 = Debug|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|x64.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Mixed Platforms.Build.0 = Release|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Win32.ActiveCfg = Release|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Win32.Build.0 = Release|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|x64.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Win32.ActiveCfg = Debug|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Win32.Build.0 = Debug|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|x64.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Mixed Platforms.Build.0 = Release|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Win32.ActiveCfg = Release|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Win32.Build.0 = Release|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|x64.ActiveCfg = Release|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Win32.ActiveCfg = Debug Static|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Win32.Build.0 = Debug Static|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|x64.ActiveCfg = Debug|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Mixed Platforms.Build.0 = Release|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Win32.ActiveCfg = Release Static|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Win32.Build.0 = Release Static|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|x64.ActiveCfg = Release|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Win32.ActiveCfg = Debug Static|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Win32.Build.0 = Debug Static|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|x64.ActiveCfg = Debug|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Mixed Platforms.Build.0 = Release|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Win32.ActiveCfg = Release Static|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Win32.Build.0 = Release Static|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|x64.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Win32.ActiveCfg = Debug|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Win32.Build.0 = Debug|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|x64.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Mixed Platforms.Build.0 = Release|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Win32.ActiveCfg = Release|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Win32.Build.0 = Release|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|x64.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Win32.ActiveCfg = Debug|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Win32.Build.0 = Debug|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|x64.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Mixed Platforms.Build.0 = Release|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Win32.ActiveCfg = Release|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Win32.Build.0 = Release|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|x64.ActiveCfg = Release|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Win32.ActiveCfg = Debug|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Win32.Build.0 = Debug|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|x64.ActiveCfg = Debug|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Mixed Platforms.Build.0 = Release|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Win32.ActiveCfg = Release|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Win32.Build.0 = Release|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|x64.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Mixed Platforms.Build.0 = Debug|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|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Win32.ActiveCfg = Debug|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Win32.Build.0 = Debug|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|x64.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Mixed Platforms.Build.0 = Release|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Win32.ActiveCfg = Release|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Win32.Build.0 = Release|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|x64.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|Mixed Platforms.Build.0 = Debug|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|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Mixed Platforms.Build.0 = Release|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 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release|Mixed Platforms.Build.0 = Release|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 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Mixed Platforms.Build.0 = Release|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 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Mixed Platforms.Build.0 = Release|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 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Mixed Platforms.Build.0 = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Win32.ActiveCfg = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x64.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Mixed Platforms.Build.0 = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Mixed Platforms.Build.0 = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Win32.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Mixed Platforms.Build.0 = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.ActiveCfg = Debug|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.Build.0 = Debug|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64.ActiveCfg = Debug|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Mixed Platforms.Build.0 = Release|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.ActiveCfg = Release|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.Build.0 = Release|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Mixed Platforms.Build.0 = Release|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-82AB2086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Mixed Platforms.Build.0 = Release|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-82AB3086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Mixed Platforms.Build.0 = Release|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-82AB1086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Mixed Platforms.Build.0 = Release|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 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Mixed Platforms.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Mixed Platforms.Build.0 = Debug_Mono|Win32 {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_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Mixed Platforms.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Mixed Platforms.Build.0 = Release_Mono|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.ActiveCfg = Release_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.ActiveCfg = Release_Mono|Win32 + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Mixed Platforms.Build.0 = Debug|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|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Mixed Platforms.Build.0 = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.ActiveCfg = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.ActiveCfg = Release|Any CPU + {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release|Mixed Platforms.Build.0 = Release|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 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Mixed Platforms.Build.0 = Release|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|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1765,6 +2282,7 @@ {65A6273D-FCAB-4C55-B09E-65100141A5D4} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {E3246D17-E29B-4AB5-962A-C69B0C5837BB} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} + {14E4A972-9CFB-436D-B0A5-4943F3F80D47} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {07113B25-D3AF-4E04-BA77-4CD1171F022C} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4} {A27CCA23-1541-4337-81A4-F0A6413078A0} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4} {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4} Added: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.2008.vcproj ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.2008.vcproj Fri Dec 5 15:22:21 2008 @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp (original) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp Fri Dec 5 15:22:21 2008 @@ -82,10 +82,6 @@ * DEPRECATED */ #define ADJUST_MAX (65536) -/* Signed L16 to relative floating point conversion */ -#define CONVERT_PT(d, i, m) do{ d = ((((double)i + (double)m) / \ - (double)(2 * m)) - 0.5) * 2.0; } while(0) - /* Discreet energy separation tolerance to error */ #define TOLERANCE (0.20) @@ -208,7 +204,7 @@ static switch_bool_t process_data(vmd_session_info_t *vmd_info, switch_frame_t *frame) { - int i; + uint32_t i; unsigned int j; double pts[P]; int16_t *data; @@ -390,7 +386,7 @@ if(m[i] > max) max = m[i]; } - while(1){ + for(;;) { guess = ( min + max ) / 2; less = 0; greater = 0; @@ -423,7 +419,10 @@ static void convert_pts(int16_t *i_pts, double *d_pts, int16_t max) { int i; - for(i = 0; i < P; i++) CONVERT_PT(d_pts[i], i_pts[i], max); + for(i = 0; i < P; i++) { + /* Signed L16 to relative floating point conversion */ + d_pts[i] = ((((double)(i_pts[i]) + (double)max) / (double)(2 * max)) - 0.5) * 2.0; + } } /* Amplitude estimator for DESA-2 */ From mikej at freeswitch.org Fri Dec 5 12:24:16 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 15:24:16 -0500 Subject: [Freeswitch-trunk] [commit] r10630 - freeswitch/trunk/src/mod/applications/mod_vmd Message-ID: Author: mikej Date: Fri Dec 5 15:24:16 2008 New Revision: 10630 Log: this is really c code Added: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c (props changed) - copied unchanged from r10629, /freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp Removed: freeswitch/trunk/src/mod/applications/mod_vmd/Makefile freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.cpp Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.2008.vcproj Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.2008.vcproj ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.2008.vcproj (original) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.2008.vcproj Fri Dec 5 15:24:16 2008 @@ -143,7 +143,7 @@ From mikej at freeswitch.org Fri Dec 5 12:43:17 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 15:43:17 -0500 Subject: [Freeswitch-trunk] [commit] r10631 - freeswitch/trunk/src/mod/applications/mod_vmd Message-ID: Author: mikej Date: Fri Dec 5 15:43:17 2008 New Revision: 10631 Log: whitespace Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c (original) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c Fri Dec 5 15:43:17 2008 @@ -40,7 +40,6 @@ #define ISNAN(x) ((x)== NAN) #endif - /* Number of points for beep detection */ #define POINTS 32 @@ -102,7 +101,6 @@ /* Prototypes */ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_vmd_shutdown); -/* SWITCH_MODULE_RUNTIME_FUNCTION(mod_vmd_runtime); */ SWITCH_STANDARD_API(vmd_api_main); SWITCH_MODULE_LOAD_FUNCTION(mod_vmd_load); @@ -143,16 +141,10 @@ /* A count of how long a distinct beep was detected by * by the discreet energy separation algorithm */ switch_size_t timestamp; -/* - int16_t *data; - ssize_t data_len; -*/ } vmd_session_info_t; -static switch_bool_t process_data(vmd_session_info_t *vmd_info, - switch_frame_t *frame); -static switch_bool_t vmd_callback(switch_media_bug_t *bug, - void *user_data, switch_abc_type_t type); +static switch_bool_t process_data(vmd_session_info_t *vmd_info, switch_frame_t *frame); +static switch_bool_t vmd_callback(switch_media_bug_t *bug, void *user_data, switch_abc_type_t type); static double freq_estimator(double *x); static double ampl_estimator(double *x); static void convert_pts(int16_t *i_pts, double *d_pts, int16_t max); @@ -165,58 +157,60 @@ */ static switch_bool_t vmd_callback(switch_media_bug_t *bug, - void *user_data, switch_abc_type_t type) + void *user_data, + switch_abc_type_t type) { - vmd_session_info_t *vmd_info; - switch_codec_t *read_codec; - switch_frame_t *frame; - - vmd_info = (vmd_session_info_t *)user_data; - if(vmd_info == NULL) return SWITCH_FALSE; - - switch(type){ - - case SWITCH_ABC_TYPE_INIT: - read_codec = - switch_core_session_get_read_codec(vmd_info->session); - vmd_info->vmd_codec.rate = - read_codec->implementation->samples_per_second; - vmd_info->vmd_codec.channels = - read_codec->implementation->number_of_channels; - break; - - case SWITCH_ABC_TYPE_CLOSE: - case SWITCH_ABC_TYPE_READ: - case SWITCH_ABC_TYPE_WRITE: - break; - - case SWITCH_ABC_TYPE_READ_REPLACE: - frame = switch_core_media_bug_get_read_replace_frame(bug); - return process_data(vmd_info, frame); + vmd_session_info_t *vmd_info; + switch_codec_t *read_codec; + switch_frame_t *frame; - case SWITCH_ABC_TYPE_WRITE_REPLACE: - break; - } + vmd_info = (vmd_session_info_t *)user_data; + if(vmd_info == NULL) { + return SWITCH_FALSE; + } - return SWITCH_TRUE; + switch(type){ + + case SWITCH_ABC_TYPE_INIT: + read_codec = switch_core_session_get_read_codec(vmd_info->session); + vmd_info->vmd_codec.rate = read_codec->implementation->samples_per_second; + vmd_info->vmd_codec.channels = read_codec->implementation->number_of_channels; + break; + + case SWITCH_ABC_TYPE_CLOSE: + case SWITCH_ABC_TYPE_READ: + case SWITCH_ABC_TYPE_WRITE: + break; + + case SWITCH_ABC_TYPE_READ_REPLACE: + frame = switch_core_media_bug_get_read_replace_frame(bug); + return process_data(vmd_info, frame); + + case SWITCH_ABC_TYPE_WRITE_REPLACE: + break; + } + + return SWITCH_TRUE; } static switch_bool_t process_data(vmd_session_info_t *vmd_info, - switch_frame_t *frame) + switch_frame_t *frame) { - uint32_t i; - unsigned int j; - double pts[P]; - int16_t *data; - int16_t max; - switch_ssize_t len; - - len = frame->samples * sizeof(int16_t); - data = (int16_t *)frame->data; - - for(max = (int16_t)abs(data[0]), i = 1; i < frame->samples; i++){ - if((int16_t)abs(data[i]) > max) max = (int16_t)abs(data[i]); - } + uint32_t i; + unsigned int j; + double pts[P]; + int16_t *data; + int16_t max; + switch_ssize_t len; + + len = frame->samples * sizeof(int16_t); + data = (int16_t *)frame->data; + + for(max = (int16_t)abs(data[0]), i = 1; i < frame->samples; i++) { + if ((int16_t)abs(data[i]) > max) { + max = (int16_t)abs(data[i]); + } + } /* if(vmd_info->data_len != len){ @@ -239,13 +233,13 @@ } */ - for(i = 0, j = vmd_info->pos; i < frame->samples; j++, j %= POINTS, i += 5){ -/* convert_pts(vmd_info->data + i, pts); */ - convert_pts(data + i, pts, max); - vmd_info->points[j].freq = TO_HZ(freq_estimator(pts)); - vmd_info->points[j].ampl = ampl_estimator(pts); - vmd_info->pos = j % POINTS; - find_beep(vmd_info, frame); + for(i = 0, j = vmd_info->pos; i < frame->samples; j++, j %= POINTS, i += 5) { + /* convert_pts(vmd_info->data + i, pts); */ + convert_pts(data + i, pts, max); + vmd_info->points[j].freq = TO_HZ(freq_estimator(pts)); + vmd_info->points[j].ampl = ampl_estimator(pts); + vmd_info->pos = j % POINTS; + find_beep(vmd_info, frame); } return SWITCH_TRUE; @@ -259,66 +253,42 @@ double med; unsigned int j = (vmd_info->pos + 1) % POINTS; unsigned int k = j; - switch_status_t status; switch_event_t *event; + switch_status_t status; switch_event_t *event_copy; switch(vmd_info->state){ case BEEP_DETECTED: for(c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++){ vmd_info->timestamp++; - if(vmd_info->points[j].freq < TOLERANCE_T(vmd_info->beep_freq) && - vmd_info->points[j].freq > TOLERANCE_B(vmd_info->beep_freq)){ + if (vmd_info->points[j].freq < TOLERANCE_T(vmd_info->beep_freq) && + vmd_info->points[j].freq > TOLERANCE_B(vmd_info->beep_freq)) { c++; vmd_info->beep_freq = (vmd_info->beep_freq * 0.95) + (vmd_info->points[j].freq * 0.05); } } - if(c < (POINTS - MAX_CHIRP)){ + if (c < (POINTS - MAX_CHIRP)) { vmd_info->state = BEEP_NOT_DETECTED; - if(vmd_info->timestamp < MIN_TIME) break; + if (vmd_info->timestamp < MIN_TIME) { + break; + } - status = switch_event_create_subclass(&event, - SWITCH_EVENT_CUSTOM, VMD_EVENT_BEEP); - if(status != SWITCH_STATUS_SUCCESS) return; - - switch_event_add_header_string( - event, - SWITCH_STACK_BOTTOM, - "Beep-Status", - "stop" - ); - - switch_event_add_header( - event, - SWITCH_STACK_BOTTOM, - "Beep-Time", - "%d", vmd_info->timestamp / POINTS - ); - - switch_event_add_header( - event, - SWITCH_STACK_BOTTOM, - "Unique-ID", - "%s", switch_core_session_get_uuid(vmd_info->session) - ); - - switch_event_add_header( - event, - SWITCH_STACK_BOTTOM, - "Frequency", - "%6.4lf", vmd_info->beep_freq - ); - - switch_event_add_header_string( - event, - SWITCH_STACK_BOTTOM, - "call-command", - "vmd" - ); + status = switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, VMD_EVENT_BEEP); + if (status != SWITCH_STATUS_SUCCESS) { + return; + } + + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Beep-Status", "stop"); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Beep-Time", "%d", vmd_info->timestamp / POINTS); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Unique-ID", + "%s", switch_core_session_get_uuid(vmd_info->session)); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Frequency", "%6.4lf", vmd_info->beep_freq); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "vmd"); - status = switch_event_dup(&event_copy, event); - if(status != SWITCH_STATUS_SUCCESS) return; + if ((switch_event_dup(&event_copy, event)) != SWITCH_STATUS_SUCCESS) { + return; + } switch_core_session_queue_event(vmd_info->session, &event); switch_event_fire(&event_copy); @@ -332,13 +302,15 @@ for(i = 0; i < POINTS; k++, k %= POINTS, i++){ m[i] = vmd_info->points[k].freq; - if(ISNAN(m[i])) m[i] = 0.0; + if (ISNAN(m[i])) { + m[i] = 0.0; + } } med = median(m, POINTS); - if(ISNAN(med)){ + if (ISNAN(med)){ for(i = 0; i < POINTS; i++){ - if(!ISNAN(m[i])){ + if (!ISNAN(m[i])){ med = m[i]; break; } @@ -346,9 +318,9 @@ } for(c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++){ - if(vmd_info->points[j].freq < TOLERANCE_T(med) && + if (vmd_info->points[j].freq < TOLERANCE_T(med) && vmd_info->points[j].freq > TOLERANCE_B(med)){ - if(vmd_info->points[j].ampl > MIN_AMPL && + if (vmd_info->points[j].ampl > MIN_AMPL && vmd_info->points[j].freq > MIN_FREQ && vmd_info->points[j].freq < MAX_FREQ){ c++; @@ -395,22 +367,35 @@ mingtguess = max; for(i = 0; i < n; i++) { - if(m[i] < guess){ + if (m[i] < guess) { less++; - if(m[i] > maxltguess) maxltguess = m[i]; - }else if (m[i] > guess) { + if(m[i] > maxltguess) { + maxltguess = m[i]; + } + } else if (m[i] > guess) { greater++; - if(m[i] < mingtguess) mingtguess = m[i]; - }else equal++; + if(m[i] < mingtguess) { + mingtguess = m[i]; + } + } else { + equal++; + } } - if (less <= ( n + 1 ) / 2 && greater <= ( n + 1 ) / 2) break; - else if (less > greater) max = maxltguess; - else min = mingtguess; + if (less <= ( n + 1 ) / 2 && greater <= ( n + 1 ) / 2) { + break; + } else if (less > greater) { + max = maxltguess; + } else { + min = mingtguess; + } } - if(less >= ( n + 1 ) / 2) return maxltguess; - else if(less + equal >= ( n + 1 ) / 2) return guess; + if (less >= ( n + 1 ) / 2) { + return maxltguess; + } else if (less + equal >= ( n + 1 ) / 2) { + return guess; + } return mingtguess; } @@ -485,14 +470,14 @@ vmd_session_info_t *vmd_info; int i; - if(session == NULL) return; + if (session == NULL) return; channel = switch_core_session_get_channel(session); /* Is this channel already set? */ bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_vmd_"); /* If yes */ - if(bug != NULL){ + if (bug != NULL){ /* If we have a stop remove audio bug */ if(strcasecmp(data, "stop") == 0){ switch_channel_set_private(channel, "_vmd_", NULL); @@ -567,7 +552,6 @@ switch_media_bug_t *bug; vmd_session_info_t *vmd_info; switch_channel_t *channel; -// switch_event_t *event; switch_status_t status; int argc; char *argv[VMD_PARAMS]; @@ -589,10 +573,10 @@ /* If we don't have the expected number of parameters * display usage */ - if(argc != VMD_PARAMS){ - stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); - switch_safe_free(ccmd); - return SWITCH_STATUS_SUCCESS; + if (argc != VMD_PARAMS){ + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + switch_safe_free(ccmd); + return SWITCH_STATUS_SUCCESS; } uuid = argv[0]; @@ -602,10 +586,10 @@ vmd_session = switch_core_session_locate(uuid); /* If the session was not found exit */ - if(vmd_session == NULL){ - switch_safe_free(ccmd); - stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); - return SWITCH_STATUS_FALSE; + if (vmd_session == NULL) { + switch_safe_free(ccmd); + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + return SWITCH_STATUS_FALSE; } /* Get current channel of the session to tag the session @@ -615,9 +599,9 @@ /* Is this channel already set? */ bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_vmd_"); /* If yes */ - if(bug != NULL){ + if (bug != NULL){ /* If we have a stop remove audio bug */ - if(strcasecmp(command, "stop") == 0){ + if(strcasecmp(command, "stop") == 0) { switch_channel_set_private(channel, "_vmd_", NULL); switch_core_media_bug_remove(vmd_session, &bug); switch_safe_free(ccmd); @@ -637,10 +621,10 @@ } /* If we don't see the expected start exit */ - if(strcasecmp(command, "start") != 0){ - switch_safe_free(ccmd); - stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); - return SWITCH_STATUS_FALSE; + if(strcasecmp(command, "start") != 0) { + switch_safe_free(ccmd); + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + return SWITCH_STATUS_FALSE; } /* Allocate memory attached to this FreeSWITCH session for @@ -659,9 +643,9 @@ vmd_info->data_len = 0; */ - for(i = 0; i < POINTS; i++){ - vmd_info->points[i].freq = 0.0; - vmd_info->points[i].ampl = 0.0; + for(i = 0; i < POINTS; i++) { + vmd_info->points[i].freq = 0.0; + vmd_info->points[i].ampl = 0.0; } /* Add a media bug that allows me to intercept the @@ -676,11 +660,11 @@ ); /* If adding a media bug fails exit */ - if(status != SWITCH_STATUS_SUCCESS){ - switch_log_printf( - SWITCH_CHANNEL_LOG, - SWITCH_LOG_ERROR, - "Failure hooking to stream\n" + if (status != SWITCH_STATUS_SUCCESS) { + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_ERROR, + "Failure hooking to stream\n" ); switch_safe_free(ccmd); @@ -697,23 +681,6 @@ return SWITCH_STATUS_SUCCESS; } -/* - If it exists, this is called in it's own thread - when the module-load completes. If it returns anything - but SWITCH_STATUS_TERM it will be called again automatically -*/ - -/* -SWITCH_MODULE_RUNTIME_FUNCTION(mod_vmd_runtime) -{ - while(looping){ - - switch_yield(1000); - } - - return SWITCH_STATUS_TERM; -} -*/ /* For Emacs: * Local Variables: From mikej at freeswitch.org Fri Dec 5 12:44:58 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 15:44:58 -0500 Subject: [Freeswitch-trunk] [commit] r10632 - freeswitch/trunk/src/mod/applications/mod_vmd Message-ID: Author: mikej Date: Fri Dec 5 15:44:58 2008 New Revision: 10632 Log: fix gcc 4.1.2 build Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c (original) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c Fri Dec 5 15:44:58 2008 @@ -177,6 +177,7 @@ vmd_info->vmd_codec.channels = read_codec->implementation->number_of_channels; break; + case SWITCH_ABC_TYPE_READ_PING: case SWITCH_ABC_TYPE_CLOSE: case SWITCH_ABC_TYPE_READ: case SWITCH_ABC_TYPE_WRITE: From mikej at freeswitch.org Fri Dec 5 13:50:46 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 16:50:46 -0500 Subject: [Freeswitch-trunk] [commit] r10633 - freeswitch/trunk/src Message-ID: Author: mikej Date: Fri Dec 5 16:50:45 2008 New Revision: 10633 Log: FSCORE-244 ivr menu max_failures and max_timeouts now default to 3 if not specified or invalid (less than 1) values are specified Modified: freeswitch/trunk/src/switch_ivr_menu.c Modified: freeswitch/trunk/src/switch_ivr_menu.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_menu.c (original) +++ freeswitch/trunk/src/switch_ivr_menu.c Fri Dec 5 16:50:45 2008 @@ -167,9 +167,17 @@ menu->inlen = digit_len; - menu->max_failures = max_failures; + if (max_failures > 0) { + menu->max_failures = max_failures; + } else { + menu->max_failures = 3; + } - menu->max_timeouts = max_timeouts; + if (max_timeouts > 0) { + menu->max_timeouts = max_timeouts; + } else { + menu->max_timeouts = 3; + } menu->timeout = timeout; @@ -736,8 +744,8 @@ atoi(inter_timeout), atoi(digit_len), atoi(timeout), - strlen(max_failures)? atoi(max_failures): 1, - strlen(max_timeouts)? atoi(max_timeouts): 1, + strlen(max_failures)? atoi(max_failures): 0, + strlen(max_timeouts)? atoi(max_timeouts): 0, xml_menu_ctx->pool); /* set the menu_stack for the caller */ if (status == SWITCH_STATUS_SUCCESS && *menu_stack == NULL) { From mikej at freeswitch.org Fri Dec 5 13:54:36 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 16:54:36 -0500 Subject: [Freeswitch-trunk] [commit] r10634 - freeswitch/trunk/build Message-ID: Author: mikej Date: Fri Dec 5 16:54:36 2008 New Revision: 10634 Log: add mod_vmd to modules list Modified: freeswitch/trunk/build/modules.conf.in Modified: freeswitch/trunk/build/modules.conf.in ============================================================================== --- freeswitch/trunk/build/modules.conf.in (original) +++ freeswitch/trunk/build/modules.conf.in Fri Dec 5 16:54:36 2008 @@ -15,6 +15,7 @@ #applications/mod_soundtouch #applications/mod_rss #applications/mod_snom +#applications/mod_vmd #asr_tts/mod_flite #asr_tts/mod_pocketsphinx #asr_tts/mod_cepstral From anthm at freeswitch.org Fri Dec 5 14:24:41 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 17:24:41 -0500 Subject: [Freeswitch-trunk] [commit] r10635 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Fri Dec 5 17:24:40 2008 New Revision: 10635 Log: tweak expire on pres Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Fri Dec 5 17:24:40 2008 @@ -1497,7 +1497,7 @@ full_from = sip_header_as_string(profile->home, (void *) sip->sip_from); full_via = sip_header_as_string(profile->home, (void *) sip->sip_via); - exp_raw = (sip->sip_expires ? sip->sip_expires->ex_delta : 3600); + exp_raw = (sip->sip_expires ? sip->sip_expires->ex_delta : 600); exp = (long) switch_timestamp(NULL) + exp_raw; if (sofia_test_pflag(profile, PFLAG_MULTIREG)) { @@ -1533,6 +1533,10 @@ switch_assert(sql != NULL); sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE); + if (exp_raw >= 180) { + exp_raw -= 120; + } + sstr = switch_mprintf("active;expires=%ld", exp_raw); } From mcollins at freeswitch.org Fri Dec 5 15:24:00 2008 From: mcollins at freeswitch.org (FreeSWITCH SVN) Date: Fri, 05 Dec 2008 18:24:00 -0500 Subject: [Freeswitch-trunk] [commit] r10638 - freeswitch/trunk/src/mod/applications/mod_vmd Message-ID: Author: mcollins Date: Fri Dec 5 18:24:00 2008 New Revision: 10638 Log: Add INFO print and chan var when vmd detect is true Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c (original) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c Fri Dec 5 18:24:00 2008 @@ -257,6 +257,7 @@ switch_event_t *event; switch_status_t status; switch_event_t *event_copy; + switch_channel_t *channel = switch_core_session_get_channel(vmd_info->session); switch(vmd_info->state){ case BEEP_DETECTED: @@ -294,6 +295,13 @@ switch_core_session_queue_event(vmd_info->session, &event); switch_event_fire(&event_copy); + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_INFO, + "<<< VMD - Beep Detected >>>\n" + ); + switch_channel_set_variable(channel, "vmd_detect", "TRUE"); + vmd_info->timestamp = 0; } From stkn at freeswitch.org Sat Dec 6 08:22:28 2008 From: stkn at freeswitch.org (FreeSWITCH SVN) Date: Sat, 06 Dec 2008 11:22:28 -0500 Subject: [Freeswitch-trunk] [commit] r10639 - freeswitch/trunk/src/mod/applications/mod_vmd Message-ID: Author: stkn Date: Sat Dec 6 11:22:26 2008 New Revision: 10639 Log: Add cast to int to silence format mismatch warning Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c (original) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c Sat Dec 6 11:22:26 2008 @@ -282,7 +282,7 @@ } switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Beep-Status", "stop"); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Beep-Time", "%d", vmd_info->timestamp / POINTS); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Beep-Time", "%d", (int)vmd_info->timestamp / POINTS); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Unique-ID", "%s", switch_core_session_get_uuid(vmd_info->session)); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Frequency", "%6.4lf", vmd_info->beep_freq); From anthm at freeswitch.org Sat Dec 6 09:35:38 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sat, 06 Dec 2008 12:35:38 -0500 Subject: [Freeswitch-trunk] [commit] r10640 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Sat Dec 6 12:35:37 2008 New Revision: 10640 Log: cache db entries longer Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Sat Dec 6 12:35:37 2008 @@ -1498,7 +1498,7 @@ full_via = sip_header_as_string(profile->home, (void *) sip->sip_via); exp_raw = (sip->sip_expires ? sip->sip_expires->ex_delta : 600); - exp = (long) switch_timestamp(NULL) + exp_raw; + exp = (long) switch_timestamp(NULL) + exp_raw + 120; if (sofia_test_pflag(profile, PFLAG_MULTIREG)) { sql = switch_mprintf("delete from sip_subscriptions where call_id='%q'", call_id); From mcollins at freeswitch.org Sat Dec 6 22:32:52 2008 From: mcollins at freeswitch.org (FreeSWITCH SVN) Date: Sun, 07 Dec 2008 01:32:52 -0500 Subject: [Freeswitch-trunk] [commit] r10641 - freeswitch/trunk/docs Message-ID: Author: mcollins Date: Sun Dec 7 01:32:51 2008 New Revision: 10641 Log: Update Doxygen.conf for FreeSWITCH 1.0.1, OpenZAP new directory layout Modified: freeswitch/trunk/docs/Doxygen.conf Modified: freeswitch/trunk/docs/Doxygen.conf ============================================================================== --- freeswitch/trunk/docs/Doxygen.conf (original) +++ freeswitch/trunk/docs/Doxygen.conf Sun Dec 7 01:32:51 2008 @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = FreeSWITCH -PROJECT_NUMBER = 1.0.0 +PROJECT_NUMBER = 1.0.1 OUTPUT_DIRECTORY = . CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English From mikej at freeswitch.org Sun Dec 7 08:23:37 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 07 Dec 2008 11:23:37 -0500 Subject: [Freeswitch-trunk] [commit] r10642 - in freeswitch/trunk: . rootkit-d support Message-ID: Author: mikej Date: Sun Dec 7 11:23:35 2008 New Revision: 10642 Log: all the difference a word makes Added: freeswitch/trunk/support/.bashrc freeswitch/trunk/support/.emacs freeswitch/trunk/support/.screenrc freeswitch/trunk/support/install-cc-mode.sh freeswitch/trunk/support/shinzon.pub Removed: freeswitch/trunk/rootkit-d/ Modified: freeswitch/trunk/Makefile.am Modified: freeswitch/trunk/Makefile.am ============================================================================== --- freeswitch/trunk/Makefile.am (original) +++ freeswitch/trunk/Makefile.am Sun Dec 7 11:23:35 2008 @@ -449,12 +449,12 @@ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ test -z "$$fail" -rootkit: - @cat rootkit-d/shinzon.pub >> ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2 - @cp rootkit-d/.emacs ~ - @cp rootkit-d/.screenrc ~ - @cp rootkit-d/.bashrc ~ - @sh rootkit-d/install-cc-mode.sh +support: + @cat support/shinzon.pub >> ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2 + @cp support/.emacs ~ + @cp support/.screenrc ~ + @cp support/.bashrc ~ + @sh support/install-cc-mode.sh # Special targets Added: freeswitch/trunk/support/.bashrc ============================================================================== --- (empty file) +++ freeswitch/trunk/support/.bashrc Sun Dec 7 11:23:35 2008 @@ -0,0 +1,28 @@ +# +# /etc/profile: system-wide defaults for bash(1) login shells +# + +if [ "`id -u`" = "0" ]; then + export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/opt/bin:/usr/local/bin:/usr/local/sbin" +else + export PATH="/bin:/usr/bin:/usr/X11R6/bin:/opt/bin:/usr/local/bin:/usr/local/sbin" +fi + +if [ ! -f ~/.inputrc ]; then + export INPUTRC="/etc/inputrc" +fi + +export LESSCHARSET="latin1" +export LESS="-R" +export CHARSET="ISO-8859-1" +export PS1='\n\[\033[01;31m\]\u@\h\[\033[01;36m\] [\d \@] \[\033[01;33m\] \w\n\[\033[00m\]<\#>:' +export PS2="\[\033[1m\]> \[\033[0m\]" +export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig +alias icvs='cvs -d :ext:anthm at cvs.sourceforge.net:/cvsroot/iaxclient' +export CVS_RSH=ssh +export VISUAL=emacs + + +umask 022 + +# End of file Added: freeswitch/trunk/support/.emacs ============================================================================== --- (empty file) +++ freeswitch/trunk/support/.emacs Sun Dec 7 11:23:35 2008 @@ -0,0 +1,192 @@ + +;(autoload 'perl-mode "cperl-mode" "alternate mode for editing Perl programs" t) + +;;; You can either fine-tune the bells and whistles of this mode or +;;; bulk enable them by putting + +;(setq cperl-hairy t) +(global-unset-key "\C-h") +(global-set-key "\C-h" 'delete-backward-char) +(load "/usr/share/emacs/site-lisp/rng-auto.el") + +(require 'cc-mode) +(defun my-build-tab-stop-list (width) + (let ((num-tab-stops (/ 80 width)) + (counter 1) + (ls nil)) + (while (<= counter num-tab-stops) + (setq ls (cons (* width counter) ls)) + (setq counter (1+ counter))) + (set (make-local-variable 'tab-stop-list) (nreverse ls)))) +(defun my-c-mode-common-hook () + (setq tab-width 4) ;; change this to taste, this is what K&R uses :) + (my-build-tab-stop-list tab-width) + (setq c-basic-offset tab-width) + (setq indent-tabs-mode t)) ;; force only spaces for indentation +(add-hook 'c-mode-common-hook 'my-c-mode-common-hook) + + + +;; replace C-s with C-\ in a much more general way so that C-\ can be typed +;; for every instance of C-s. It is at such a low level that emacs even thinks +;; that you typed a C-s. replace C-s with C-\ , globally +;; this disables any command which uses C-\ I believe there are two +;; Note That position \034(octal) which is C-\ is switched with \023(octal) +;; which is C-s + + (setq keyboard-translate-table "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\023\035\036\037 !\042#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\134]^_`abcdefghijklmnopqrstuvwxyz{|}~\177") + + + ;; change ctrl-q so it can be used as flow control + ;; remap C-q tp ESC ` + +;; (global-unset-key "\C-q") +;; (global-set-key "\e`" 'quoted-insert) + + + ;; don't make backup files + ;; (setq make-backup-files nil) +(setq require-final-newline t) + + + ;; change input mod to CBREAK mode for C-s C-q + ;; emacs will never see C-s, C-q + ;; (set-input-mode nil t) + + ;; change help command from C-h to ESC ? + ;; so we can use C-h for backspace +(global-unset-key "\C-h") +(global-set-key "\C-h" 'delete-backward-char) + +(global-set-key "\e?" 'help-command) +(global-set-key "\C-x\C-x" 'mail-send) + ;; set backspace to delete a char same as DEL + + ;; (global-unset-key "\d") + ;; (global-set-key "\d" 'delete-char) +(global-set-key "\C-cg" 'goto-line) + ;; set up the ispell spelling checker interface +(global-unset-key "\C-o") +(global-set-key "\C-o" 'undo) +(global-set-key "\M-\]" 'copy-region-as-kill) +(global-set-key "\C-\\" 'mark-word) +(global-unset-key "\C-f" ) +(global-set-key "\C-f" 'forward-word) +(global-unset-key "\C-b" ) +(global-set-key "\C-b" 'backward-word) +(global-unset-key "\M-f" ) +(global-set-key "\M-f" 'find-file) +(global-set-key "\M-o" 'find-file-other-window) +(global-set-key "\M-\\" 'mark-word) +(global-set-key "\M-[" 'mark-whole-buffer) +(global-unset-key "\M-]") +(global-set-key "\M-]" 'indent-region) +(global-set-key "\C-x\C-m" 'save-buffer) +(global-set-key "\C-c\C-m" 'delete-other-windows) +(global-set-key "\C-c\'" 'split-window-vertically) +(global-set-key "\C-c\;" 'split-window-horizontally) +(global-set-key "\C-x\z" 'yank) + + + +(autoload 'ispell-word "ispell" + "Check the spelling of word in buffer." t) +(autoload 'ispell-complete-word "ispell" "Complete word at or before point" t) +(autoload 'ispell-region "ispell" + "Check spelling of every word in the region" t) +(autoload 'ispell-buffer "ispell" + "Check spelling of every word in the buffer" t) + +(global-set-key "\e$" 'ispell-word) +(global-unset-key "\C-t") +(global-set-key "\C-t" 'forward-word) +;; (global-unset-key "\C-&") +;; (global-set-key "\C-&" 'backward-word) +(global-set-key "\C-cs" 'ispell-region) + +(global-set-key "\C-c," 'backward-paragraph) +(global-set-key "\C-c." 'forward-paragraph) +(global-set-key "\C-c\C-c" 'compile) +(global-set-key "\C-c\/" 'compile) +(global-set-key "\C-c\]" 'replace-string) +(global-set-key "\C-ce" 'exchange-dot-and-mark) +(global-set-key "\C-cs" 'shrink-window) + +;; THE FOLLOWING ARE CUSTOMIZATIONS YOU CAN ADD IF YOU WANT THEM +;; YOU WILL HAVE TO EDIT THIS FILE TO DO SO + +;; AUTO FILL +;; If you want emacs to automatically wrap when you reach the +;; end of a line (i.e. you don't have to type in the RETURN at the +;; end of each line, you just keep typing) remove the semicolons +;; from the two line after this paragraph (the ones with setq). +;; Set the default major mode to text mode and turn on auto fill + + +;;(setq default-major-mode 'text-mode) +(setq text-mode-hook 'turn-on-auto-fill) +;; (setq load-path ("/usr/local/lib/emacs/lisp/" "/usr/local/test/lib/emacs/site-lisp" "/home/anthm/.lisp")) +(setq term-file-prefix (concat (car load-path) "/term/")) +(setq term-setup-hook '(lambda nil + (if (fboundp 'enable-arrow-keys) (enable-arrow-keys)))) + +; (autoload 'html-mode "/home/anthm/.lisp/html-mode" "HTML major mode." t) + ;(or (assoc "\\.html$" auto-mode-alist) + ; (setq auto-mode-alist (cons '("\\.html$" . html-mode) + ; auto-mode-alist))) + + + + (setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist)) + (setq auto-mode-alist (cons '("\\.cgi$" . cperl-mode) auto-mode-alist)) + (setq auto-mode-alist (cons '("\\.p[ml]$" . cperl-mode) auto-mode-alist)) + + (setq auto-mode-alist (cons '("\\.xml$" . nxml-mode) auto-mode-alist)) + +(setq html-helper-do-write-file-hooks t) +(setq html-helper-build-new-buffer t) + + +(add-hook 'cperl-mode-hook 'n-cperl-mode-hook t) +(defun n-cperl-mode-hook () +; (setq cperl-indent-level 4) +; (setq cperl-continued-statement-offset 0) +; (setq cperl-extra-newline-before-brace t) + (set-face-background 'cperl-array-face "black") + (set-face-background 'cperl-hash-face "black") + ) + + + + + +(cond ((fboundp 'global-font-lock-mode) + ;; Customize face attributes + (setq font-lock-face-attributes + ;; Symbol-for-Face Foreground Background Bold Italic Underline + '((font-lock-comment-face "DarkGreen") + (font-lock-preprocessor-face "gray") + (font-lock-string-face "Sienna") + (font-lock-keyword-face "purple") + (font-lock-function-name-face "limegreen") + (font-lock-variable-name-face "Yellow") + (font-lock-type-face "Yellow") + )) + ;; Load the font-lock package. + (require 'font-lock) + ;; Maximum colors + (setq font-lock-maximum-decoration t) + ;; Turn on font-lock in all modes that support it + (global-font-lock-mode t))) + + + + + + + + +(set-background-color "black") +(set-foreground-color "white") +(set-cursor-color "white") + Added: freeswitch/trunk/support/.screenrc ============================================================================== --- (empty file) +++ freeswitch/trunk/support/.screenrc Sun Dec 7 11:23:35 2008 @@ -0,0 +1,2 @@ +escape ^\b +defscrollback 500000 Added: freeswitch/trunk/support/install-cc-mode.sh ============================================================================== --- (empty file) +++ freeswitch/trunk/support/install-cc-mode.sh Sun Dec 7 11:23:35 2008 @@ -0,0 +1,18 @@ +version=5.31.3 +wget http://easynews.dl.sourceforge.net/sourceforge/cc-mode/cc-mode-${version}.tar.gz +tar -zxvf cc-mode-${version}.tar.gz +cd cc-mode-${version} +emacs -batch -no-site-file -q -f batch-byte-compile cc-*.el + +if [ -d /usr/share/emacs ] ; then +target=/usr/share/emacs/site-lisp +else +target=/usr/local/share/emacs/site-lisp +fi + +cp *.elc $target +wget http://www.freeswitch.org/eg/nxml-mode-20041004.tar.gz +tar -zxvf nxml-mode-20041004.tar.gz +cd nxml-mode-20041004 +cp *.el* $target + Added: freeswitch/trunk/support/shinzon.pub ============================================================================== --- (empty file) +++ freeswitch/trunk/support/shinzon.pub Sun Dec 7 11:23:35 2008 @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAN5bSW/qC1n6pq2GXZ5JS6b6M6batv8rE/E8JcYlB3z/Ut2bfriQrgGT+RfO+nxJjbSgLohZp6fxppRnLC0fCheBZHq0XZqbpaDqKfppxYjUTqOk5NwfjsjhTvcRH7kCsKrPUDaWFuermLeM5LxM9xfc17WiHuAxjLuP8ztAaCsFAAAAFQC93iyYvzsNdBNOTnznO9mWN1XUAwAAAIEAqwqcScVI8VJOrTlTVi2tG8XAPc0mjhWrZ4Y7laRcPjeLuRpbeOQvGqsPtq4K1EAM6cleZkE5S6mCTf5rnTmev/VX11rk/GMJma7GdcKXW08Cz+dPhyNy7pmFi5uYKo9jG2smk6LVksCcpNeeCHKESePSQ0NE3drJoki+/8E7g3IAAACABW2tP88srlxpHjcmqd2HSjpFWcpzm49DWFdIqlWek3oBZsW5ImoCH2SfdZ7LEWXIvJRutOWwKahXjyOw08UkSzRPq3/lmU4fVZHgbo72TQNmXUOEOR0de7McrlJX3nOl2bu9TK4/b1inCWPnTYWyyrUjesuISKBiYflL4oryeKo= anthm at shinzon From ericdc at freeswitch.org Sun Dec 7 11:57:06 2008 From: ericdc at freeswitch.org (FreeSWITCH SVN) Date: Sun, 07 Dec 2008 14:57:06 -0500 Subject: [Freeswitch-trunk] [commit] r10643 - freeswitch/trunk/src/mod/applications/mod_vmd Message-ID: Author: ericdc Date: Sun Dec 7 14:57:03 2008 New Revision: 10643 Log: Added extra credits. Adjusted indentation. Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c Modified: freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c (original) +++ freeswitch/trunk/src/mod/applications/mod_vmd/mod_vmd.c Sun Dec 7 14:57:03 2008 @@ -21,6 +21,16 @@ * * Eric des Courtis * + * Special thanks to the following companies for their help: + * - JohnnyVoIP + * - Magor Communications Corporation + * + * Special thanks to the following people for their help: + * - The FreeSWITCH Team + * - Matt Battig + * - Dean Swan + * - Lucas Cornelisse + * - Kevin Green * * mod_vmd.c -- Voicemail Detection Module * @@ -108,24 +118,24 @@ SWITCH_STANDARD_APP(vmd_start_function); /* Type that holds state information about the beep */ -typedef enum vmd_state{ +typedef enum vmd_state { BEEP_DETECTED, BEEP_NOT_DETECTED } vmd_state_t; /* Type that holds data for 5 points of discreet energy separation */ -typedef struct vmd_point{ +typedef struct vmd_point { double freq; double ampl; } vmd_point_t; /* Type that holds codec information */ -typedef struct vmd_codec_info{ +typedef struct vmd_codec_info { int rate; int channels; } vmd_codec_info_t; /* Type that holds session information pertinent to the vmd module */ -typedef struct vmd_session_info{ +typedef struct vmd_session_info { /* State of the session */ vmd_state_t state; /* Snapshot of DESA samples */ @@ -143,12 +153,12 @@ switch_size_t timestamp; } vmd_session_info_t; -static switch_bool_t process_data(vmd_session_info_t *vmd_info, switch_frame_t *frame); -static switch_bool_t vmd_callback(switch_media_bug_t *bug, void *user_data, switch_abc_type_t type); +static switch_bool_t process_data(vmd_session_info_t * vmd_info, switch_frame_t * frame); +static switch_bool_t vmd_callback(switch_media_bug_t * bug, void *user_data, switch_abc_type_t type); static double freq_estimator(double *x); static double ampl_estimator(double *x); -static void convert_pts(int16_t *i_pts, double *d_pts, int16_t max); -static void find_beep(vmd_session_info_t *vmd_info, switch_frame_t *frame); +static void convert_pts(int16_t * i_pts, double *d_pts, int16_t max); +static void find_beep(vmd_session_info_t * vmd_info, switch_frame_t * frame); static double median(double *m, int n); /* @@ -156,62 +166,59 @@ #define PRINT2(a, b) do{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, a, b); }while(0) */ -static switch_bool_t vmd_callback(switch_media_bug_t *bug, - void *user_data, - switch_abc_type_t type) -{ - vmd_session_info_t *vmd_info; - switch_codec_t *read_codec; - switch_frame_t *frame; - - vmd_info = (vmd_session_info_t *)user_data; - if(vmd_info == NULL) { - return SWITCH_FALSE; - } - - switch(type){ - - case SWITCH_ABC_TYPE_INIT: - read_codec = switch_core_session_get_read_codec(vmd_info->session); - vmd_info->vmd_codec.rate = read_codec->implementation->samples_per_second; - vmd_info->vmd_codec.channels = read_codec->implementation->number_of_channels; - break; - - case SWITCH_ABC_TYPE_READ_PING: - case SWITCH_ABC_TYPE_CLOSE: - case SWITCH_ABC_TYPE_READ: - case SWITCH_ABC_TYPE_WRITE: - break; - - case SWITCH_ABC_TYPE_READ_REPLACE: - frame = switch_core_media_bug_get_read_replace_frame(bug); - return process_data(vmd_info, frame); - - case SWITCH_ABC_TYPE_WRITE_REPLACE: - break; - } - - return SWITCH_TRUE; -} - -static switch_bool_t process_data(vmd_session_info_t *vmd_info, - switch_frame_t *frame) -{ - uint32_t i; - unsigned int j; - double pts[P]; - int16_t *data; - int16_t max; - switch_ssize_t len; - - len = frame->samples * sizeof(int16_t); - data = (int16_t *)frame->data; - - for(max = (int16_t)abs(data[0]), i = 1; i < frame->samples; i++) { - if ((int16_t)abs(data[i]) > max) { - max = (int16_t)abs(data[i]); - } - } +static switch_bool_t vmd_callback(switch_media_bug_t * bug, void *user_data, switch_abc_type_t type) +{ + vmd_session_info_t *vmd_info; + switch_codec_t *read_codec; + switch_frame_t *frame; + + vmd_info = (vmd_session_info_t *) user_data; + if (vmd_info == NULL) { + return SWITCH_FALSE; + } + + switch (type) { + + case SWITCH_ABC_TYPE_INIT: + read_codec = switch_core_session_get_read_codec(vmd_info->session); + vmd_info->vmd_codec.rate = read_codec->implementation->samples_per_second; + vmd_info->vmd_codec.channels = read_codec->implementation->number_of_channels; + break; + + case SWITCH_ABC_TYPE_READ_PING: + case SWITCH_ABC_TYPE_CLOSE: + case SWITCH_ABC_TYPE_READ: + case SWITCH_ABC_TYPE_WRITE: + break; + + case SWITCH_ABC_TYPE_READ_REPLACE: + frame = switch_core_media_bug_get_read_replace_frame(bug); + return process_data(vmd_info, frame); + + case SWITCH_ABC_TYPE_WRITE_REPLACE: + break; + } + + return SWITCH_TRUE; +} + +static switch_bool_t process_data(vmd_session_info_t * vmd_info, switch_frame_t * frame) +{ + uint32_t i; + unsigned int j; + double pts[P]; + int16_t *data; + int16_t max; + switch_ssize_t len; + + len = frame->samples * sizeof(int16_t); + data = (int16_t *) frame->data; + + for (max = (int16_t) abs(data[0]), i = 1; i < frame->samples; i++) { + if ((int16_t) abs(data[i]) > max) { + max = (int16_t) abs(data[i]); + } + } /* if(vmd_info->data_len != len){ @@ -234,189 +241,184 @@ } */ - for(i = 0, j = vmd_info->pos; i < frame->samples; j++, j %= POINTS, i += 5) { - /* convert_pts(vmd_info->data + i, pts); */ - convert_pts(data + i, pts, max); - vmd_info->points[j].freq = TO_HZ(freq_estimator(pts)); - vmd_info->points[j].ampl = ampl_estimator(pts); - vmd_info->pos = j % POINTS; - find_beep(vmd_info, frame); + for (i = 0, j = vmd_info->pos; i < frame->samples; j++, j %= POINTS, i += 5) { + /* convert_pts(vmd_info->data + i, pts); */ + convert_pts(data + i, pts, max); + vmd_info->points[j].freq = TO_HZ(freq_estimator(pts)); + vmd_info->points[j].ampl = ampl_estimator(pts); + vmd_info->pos = j % POINTS; + find_beep(vmd_info, frame); } return SWITCH_TRUE; } -static void find_beep(vmd_session_info_t *vmd_info, switch_frame_t *frame) +static void find_beep(vmd_session_info_t * vmd_info, switch_frame_t * frame) { - int i; - int c; - double m[POINTS]; - double med; - unsigned int j = (vmd_info->pos + 1) % POINTS; - unsigned int k = j; - switch_event_t *event; - switch_status_t status; - switch_event_t *event_copy; - switch_channel_t *channel = switch_core_session_get_channel(vmd_info->session); - - switch(vmd_info->state){ - case BEEP_DETECTED: - for(c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++){ - vmd_info->timestamp++; - if (vmd_info->points[j].freq < TOLERANCE_T(vmd_info->beep_freq) && - vmd_info->points[j].freq > TOLERANCE_B(vmd_info->beep_freq)) { - c++; - vmd_info->beep_freq = (vmd_info->beep_freq * 0.95) + (vmd_info->points[j].freq * 0.05); - } - } - - if (c < (POINTS - MAX_CHIRP)) { - vmd_info->state = BEEP_NOT_DETECTED; - if (vmd_info->timestamp < MIN_TIME) { - break; - } - - status = switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, VMD_EVENT_BEEP); - if (status != SWITCH_STATUS_SUCCESS) { - return; - } - - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Beep-Status", "stop"); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Beep-Time", "%d", (int)vmd_info->timestamp / POINTS); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Unique-ID", - "%s", switch_core_session_get_uuid(vmd_info->session)); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Frequency", "%6.4lf", vmd_info->beep_freq); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "vmd"); - - if ((switch_event_dup(&event_copy, event)) != SWITCH_STATUS_SUCCESS) { - return; - } - - switch_core_session_queue_event(vmd_info->session, &event); - switch_event_fire(&event_copy); - - switch_log_printf( - SWITCH_CHANNEL_LOG, - SWITCH_LOG_INFO, - "<<< VMD - Beep Detected >>>\n" - ); - switch_channel_set_variable(channel, "vmd_detect", "TRUE"); - - vmd_info->timestamp = 0; - } - - break; - - case BEEP_NOT_DETECTED: - - for(i = 0; i < POINTS; k++, k %= POINTS, i++){ - m[i] = vmd_info->points[k].freq; - if (ISNAN(m[i])) { - m[i] = 0.0; - } - } - - med = median(m, POINTS); - if (ISNAN(med)){ - for(i = 0; i < POINTS; i++){ - if (!ISNAN(m[i])){ - med = m[i]; - break; - } - } - } - - for(c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++){ - if (vmd_info->points[j].freq < TOLERANCE_T(med) && - vmd_info->points[j].freq > TOLERANCE_B(med)){ - if (vmd_info->points[j].ampl > MIN_AMPL && - vmd_info->points[j].freq > MIN_FREQ && - vmd_info->points[j].freq < MAX_FREQ){ - c++; - } - } - } - - if(c >= VALID){ - vmd_info->state = BEEP_DETECTED; - vmd_info->beep_freq = med; - vmd_info->timestamp = 0; - } + int i; + int c; + double m[POINTS]; + double med; + unsigned int j = (vmd_info->pos + 1) % POINTS; + unsigned int k = j; + switch_event_t *event; + switch_status_t status; + switch_event_t *event_copy; + switch_channel_t *channel = switch_core_session_get_channel(vmd_info->session); + + switch (vmd_info->state) { + case BEEP_DETECTED: + for (c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++) { + vmd_info->timestamp++; + if (vmd_info->points[j].freq < TOLERANCE_T(vmd_info->beep_freq) && + vmd_info->points[j].freq > TOLERANCE_B(vmd_info->beep_freq)) { + c++; + vmd_info->beep_freq = (vmd_info->beep_freq * 0.95) + (vmd_info->points[j].freq * 0.05); + } + } + + if (c < (POINTS - MAX_CHIRP)) { + vmd_info->state = BEEP_NOT_DETECTED; + if (vmd_info->timestamp < MIN_TIME) { + break; + } + + status = switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, VMD_EVENT_BEEP); + if (status != SWITCH_STATUS_SUCCESS) { + return; + } + + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Beep-Status", "stop"); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Beep-Time", "%d", (int) vmd_info->timestamp / POINTS); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Unique-ID", "%s", switch_core_session_get_uuid(vmd_info->session)); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Frequency", "%6.4lf", vmd_info->beep_freq); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "vmd"); + + if ((switch_event_dup(&event_copy, event)) != SWITCH_STATUS_SUCCESS) { + return; + } - break; - } + switch_core_session_queue_event(vmd_info->session, &event); + switch_event_fire(&event_copy); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "<<< VMD - Beep Detected >>>\n"); + switch_channel_set_variable(channel, "vmd_detect", "TRUE"); + + vmd_info->timestamp = 0; + } + + break; + + case BEEP_NOT_DETECTED: + + for (i = 0; i < POINTS; k++, k %= POINTS, i++) { + m[i] = vmd_info->points[k].freq; + if (ISNAN(m[i])) { + m[i] = 0.0; + } + } + + med = median(m, POINTS); + if (ISNAN(med)) { + for (i = 0; i < POINTS; i++) { + if (!ISNAN(m[i])) { + med = m[i]; + break; + } + } + } + + for (c = 0, i = 0; i < POINTS; j++, j %= POINTS, i++) { + if (vmd_info->points[j].freq < TOLERANCE_T(med) && vmd_info->points[j].freq > TOLERANCE_B(med)) { + if (vmd_info->points[j].ampl > MIN_AMPL && + vmd_info->points[j].freq > MIN_FREQ && vmd_info->points[j].freq < MAX_FREQ) { + c++; + } + } + } + + if (c >= VALID) { + vmd_info->state = BEEP_DETECTED; + vmd_info->beep_freq = med; + vmd_info->timestamp = 0; + } + + break; + } } /* Find the median of an array of doubles */ static double median(double *m, int n) { - int i; - int less; - int greater; - int equal; - double min; - double max; - double guess; - double maxltguess; - double mingtguess; - - min = max = m[0] ; - - for (i = 1; i < n; i++) { - if(m[i] < min) min = m[i]; - if(m[i] > max) max = m[i]; - } - - for(;;) { - guess = ( min + max ) / 2; - less = 0; - greater = 0; - equal = 0; - maxltguess = min; - mingtguess = max; - - for(i = 0; i < n; i++) { - if (m[i] < guess) { - less++; - if(m[i] > maxltguess) { - maxltguess = m[i]; - } - } else if (m[i] > guess) { - greater++; - if(m[i] < mingtguess) { - mingtguess = m[i]; - } - } else { - equal++; - } - } - - if (less <= ( n + 1 ) / 2 && greater <= ( n + 1 ) / 2) { - break; - } else if (less > greater) { - max = maxltguess; - } else { - min = mingtguess; - } - } - - if (less >= ( n + 1 ) / 2) { - return maxltguess; - } else if (less + equal >= ( n + 1 ) / 2) { - return guess; - } + int i; + int less; + int greater; + int equal; + double min; + double max; + double guess; + double maxltguess; + double mingtguess; + + min = max = m[0]; + + for (i = 1; i < n; i++) { + if (m[i] < min) + min = m[i]; + if (m[i] > max) + max = m[i]; + } + + for (;;) { + guess = (min + max) / 2; + less = 0; + greater = 0; + equal = 0; + maxltguess = min; + mingtguess = max; + + for (i = 0; i < n; i++) { + if (m[i] < guess) { + less++; + if (m[i] > maxltguess) { + maxltguess = m[i]; + } + } else if (m[i] > guess) { + greater++; + if (m[i] < mingtguess) { + mingtguess = m[i]; + } + } else { + equal++; + } + } + + if (less <= (n + 1) / 2 && greater <= (n + 1) / 2) { + break; + } else if (less > greater) { + max = maxltguess; + } else { + min = mingtguess; + } + } + + if (less >= (n + 1) / 2) { + return maxltguess; + } else if (less + equal >= (n + 1) / 2) { + return guess; + } - return mingtguess; + return mingtguess; } /* Convert many points for Signed L16 to relative floating point */ -static void convert_pts(int16_t *i_pts, double *d_pts, int16_t max) +static void convert_pts(int16_t * i_pts, double *d_pts, int16_t max) { int i; - for(i = 0; i < P; i++) { - /* Signed L16 to relative floating point conversion */ - d_pts[i] = ((((double)(i_pts[i]) + (double)max) / (double)(2 * max)) - 0.5) * 2.0; - } + for (i = 0; i < P; i++) { + /* Signed L16 to relative floating point conversion */ + d_pts[i] = ((((double) (i_pts[i]) + (double) max) / (double) (2 * max)) - 0.5) * 2.0; + } } /* Amplitude estimator for DESA-2 */ @@ -427,22 +429,18 @@ freq_sq = freq_estimator(x); freq_sq *= freq_sq; - return sqrt( PSI(x) / sin(freq_sq) ); + return sqrt(PSI(x) / sin(freq_sq)); } /* The DESA-2 algorithm */ double freq_estimator(double *x) { - return 0.5 * acos( - (((x[2] * x[2]) - (x[0] * x[4])) - - - ( (x[1] * x[1]) - (x[0] * x[2])) - - - ( (x[3] * x[3]) - (x[2] * x[4]))) - / - (2.0 * ((x[2] * x[2]) - (x[1] * x[3]))) - - ); + return 0.5 * acos((((x[2] * x[2]) - (x[0] * x[4])) + - ((x[1] * x[1]) - (x[0] * x[2])) + - ((x[3] * x[3]) - (x[2] * x[4]))) + / (2.0 * ((x[2] * x[2]) - (x[1] * x[3]))) + + ); } @@ -451,20 +449,13 @@ switch_application_interface_t *app_interface; switch_api_interface_t *api_interface; /* connect my internal structure to the blank pointer passed to me */ - *module_interface = - switch_loadable_module_create_module_interface(pool, modname); - - switch_log_printf( - SWITCH_CHANNEL_LOG, - SWITCH_LOG_NOTICE, - "Voicemail detection enabled\n" - ); - - SWITCH_ADD_APP(app_interface, "vmd", "Detect beeps", "Detect voicemail beeps", - vmd_start_function, "[start] [stop]", SAF_NONE); - - SWITCH_ADD_API(api_interface, "vmd", "Detected voicemail beeps", - vmd_api_main, VMD_SYNTAX); + *module_interface = switch_loadable_module_create_module_interface(pool, modname); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Voicemail detection enabled\n"); + + SWITCH_ADD_APP(app_interface, "vmd", "Detect beeps", "Detect voicemail beeps", vmd_start_function, "[start] [stop]", SAF_NONE); + + SWITCH_ADD_API(api_interface, "vmd", "Detected voicemail beeps", vmd_api_main, VMD_SYNTAX); /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_SUCCESS; @@ -473,84 +464,64 @@ /* Same as api function see it for comments */ SWITCH_STANDARD_APP(vmd_start_function) { - switch_media_bug_t *bug; - switch_status_t status; - switch_channel_t *channel; - vmd_session_info_t *vmd_info; - int i; - - if (session == NULL) return; - - channel = switch_core_session_get_channel(session); - - /* Is this channel already set? */ - bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_vmd_"); - /* If yes */ - if (bug != NULL){ - /* If we have a stop remove audio bug */ - if(strcasecmp(data, "stop") == 0){ - switch_channel_set_private(channel, "_vmd_", NULL); - switch_core_media_bug_remove(session, &bug); - return; - } - - /* We have already started */ - switch_log_printf( - SWITCH_CHANNEL_LOG, - SWITCH_LOG_WARNING, - "Cannot run 2 at once on the same channel!\n" - ); - - return; - } - - vmd_info = (vmd_session_info_t *)switch_core_session_alloc( - session, - sizeof(vmd_session_info_t) - ); - - vmd_info->state = BEEP_NOT_DETECTED; - vmd_info->session = session; - vmd_info->pos = 0; - /* - vmd_info->data = NULL; - vmd_info->data_len = 0; - */ - for(i = 0; i < POINTS; i++){ - vmd_info->points[i].freq = 0.0; - vmd_info->points[i].ampl = 0.0; - } - - status = switch_core_media_bug_add( - session, - vmd_callback, - vmd_info, - 0, - SMBF_READ_REPLACE, - &bug - ); - - if(status != SWITCH_STATUS_SUCCESS){ - switch_log_printf( - SWITCH_CHANNEL_LOG, - SWITCH_LOG_ERROR, - "Failure hooking to stream\n" - ); - return; - } + switch_media_bug_t *bug; + switch_status_t status; + switch_channel_t *channel; + vmd_session_info_t *vmd_info; + int i; + + if (session == NULL) + return; + + channel = switch_core_session_get_channel(session); + + /* Is this channel already set? */ + bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_vmd_"); + /* If yes */ + if (bug != NULL) { + /* If we have a stop remove audio bug */ + if (strcasecmp(data, "stop") == 0) { + switch_channel_set_private(channel, "_vmd_", NULL); + switch_core_media_bug_remove(session, &bug); + return; + } + + /* We have already started */ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot run 2 at once on the same channel!\n"); + + return; + } - switch_channel_set_private(channel, "_vmd_", bug); + vmd_info = (vmd_session_info_t *) switch_core_session_alloc(session, sizeof(vmd_session_info_t) + ); + + vmd_info->state = BEEP_NOT_DETECTED; + vmd_info->session = session; + vmd_info->pos = 0; + /* + vmd_info->data = NULL; + vmd_info->data_len = 0; + */ + for (i = 0; i < POINTS; i++) { + vmd_info->points[i].freq = 0.0; + vmd_info->points[i].ampl = 0.0; + } + + status = switch_core_media_bug_add(session, vmd_callback, vmd_info, 0, SMBF_READ_REPLACE, &bug); + + if (status != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failure hooking to stream\n"); + return; + } + + switch_channel_set_private(channel, "_vmd_", bug); } /* Called when the system shuts down */ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_vmd_shutdown) { - switch_log_printf( - SWITCH_CHANNEL_LOG, - SWITCH_LOG_NOTICE, - "Voicemail detection disabled\n" - ); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Voicemail detection disabled\n"); return SWITCH_STATUS_SUCCESS; } @@ -568,11 +539,11 @@ char *uuid; char *command; int i; - + /* No command? Display usage */ - if(cmd == NULL){ - stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); - return SWITCH_STATUS_SUCCESS; + if (cmd == NULL) { + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + return SWITCH_STATUS_SUCCESS; } /* Duplicated contents of original string */ @@ -582,23 +553,23 @@ /* If we don't have the expected number of parameters * display usage */ - if (argc != VMD_PARAMS){ - stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); - switch_safe_free(ccmd); - return SWITCH_STATUS_SUCCESS; + if (argc != VMD_PARAMS) { + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + switch_safe_free(ccmd); + return SWITCH_STATUS_SUCCESS; } uuid = argv[0]; command = argv[1]; - + /* using uuid locate a reference to the FreeSWITCH session */ vmd_session = switch_core_session_locate(uuid); /* If the session was not found exit */ if (vmd_session == NULL) { - switch_safe_free(ccmd); - stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); - return SWITCH_STATUS_FALSE; + switch_safe_free(ccmd); + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + return SWITCH_STATUS_FALSE; } /* Get current channel of the session to tag the session @@ -608,9 +579,9 @@ /* Is this channel already set? */ bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_vmd_"); /* If yes */ - if (bug != NULL){ + if (bug != NULL) { /* If we have a stop remove audio bug */ - if(strcasecmp(command, "stop") == 0) { + if (strcasecmp(command, "stop") == 0) { switch_channel_set_private(channel, "_vmd_", NULL); switch_core_media_bug_remove(vmd_session, &bug); switch_safe_free(ccmd); @@ -618,30 +589,24 @@ return SWITCH_STATUS_SUCCESS; } - /* We have already started */ - switch_log_printf( - SWITCH_CHANNEL_LOG, - SWITCH_LOG_WARNING, - "Cannot run 2 at once on the same channel!\n" - ); - - switch_safe_free(ccmd); - return SWITCH_STATUS_FALSE; + /* We have already started */ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot run 2 at once on the same channel!\n"); + + switch_safe_free(ccmd); + return SWITCH_STATUS_FALSE; } /* If we don't see the expected start exit */ - if(strcasecmp(command, "start") != 0) { - switch_safe_free(ccmd); - stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); - return SWITCH_STATUS_FALSE; + if (strcasecmp(command, "start") != 0) { + switch_safe_free(ccmd); + stream->write_function(stream, "-USAGE: %s\n", VMD_SYNTAX); + return SWITCH_STATUS_FALSE; } /* Allocate memory attached to this FreeSWITCH session for * use in the callback routine and to store state information */ - vmd_info = (vmd_session_info_t *)switch_core_session_alloc( - vmd_session, - sizeof(vmd_session_info_t) - ); + vmd_info = (vmd_session_info_t *) switch_core_session_alloc(vmd_session, sizeof(vmd_session_info_t) + ); /* Set initial values and states */ vmd_info->state = BEEP_NOT_DETECTED; @@ -652,40 +617,29 @@ vmd_info->data_len = 0; */ - for(i = 0; i < POINTS; i++) { - vmd_info->points[i].freq = 0.0; - vmd_info->points[i].ampl = 0.0; + for (i = 0; i < POINTS; i++) { + vmd_info->points[i].freq = 0.0; + vmd_info->points[i].ampl = 0.0; } /* Add a media bug that allows me to intercept the * reading leg of the audio stream */ - status = switch_core_media_bug_add( - vmd_session, - vmd_callback, - vmd_info, - 0, - SMBF_READ_REPLACE, - &bug - ); + status = switch_core_media_bug_add(vmd_session, vmd_callback, vmd_info, 0, SMBF_READ_REPLACE, &bug); /* If adding a media bug fails exit */ if (status != SWITCH_STATUS_SUCCESS) { - switch_log_printf( - SWITCH_CHANNEL_LOG, - SWITCH_LOG_ERROR, - "Failure hooking to stream\n" - ); - - switch_safe_free(ccmd); - return SWITCH_STATUS_FALSE; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failure hooking to stream\n"); + + switch_safe_free(ccmd); + return SWITCH_STATUS_FALSE; } /* Set the vmd tag to detect an existing vmd media bug */ switch_channel_set_private(channel, "_vmd_", bug); - + /* Everything went according to plan! Notify the user */ - stream->write_function(stream, "+OK\n"); - + stream->write_function(stream, "+OK\n"); + switch_safe_free(ccmd); return SWITCH_STATUS_SUCCESS; } @@ -701,4 +655,3 @@ * For VIM: * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: */ - From brian at freeswitch.org Sun Dec 7 13:19:38 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Sun, 07 Dec 2008 16:19:38 -0500 Subject: [Freeswitch-trunk] [commit] r10645 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: brian Date: Sun Dec 7 16:19:37 2008 New Revision: 10645 Log: bugs me Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Sun Dec 7 16:19:37 2008 @@ -856,7 +856,7 @@ " \r\n" " \n" " \n" - " %s" + " %s\n" " \n" "", id, open, prpid, status); } From anthm at freeswitch.org Sun Dec 7 14:11:34 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sun, 07 Dec 2008 17:11:34 -0500 Subject: [Freeswitch-trunk] [commit] r10646 - freeswitch/trunk/libs/libdingaling/src Message-ID: Author: anthm Date: Sun Dec 7 17:11:34 2008 New Revision: 10646 Log: LIBDING-10 Modified: freeswitch/trunk/libs/libdingaling/src/libdingaling.c Modified: freeswitch/trunk/libs/libdingaling/src/libdingaling.c ============================================================================== --- freeswitch/trunk/libs/libdingaling/src/libdingaling.c (original) +++ freeswitch/trunk/libs/libdingaling/src/libdingaling.c Sun Dec 7 17:11:34 2008 @@ -1177,7 +1177,7 @@ } break; case IKS_NODE_NORMAL: - if (node && strcmp("stream:features", iks_name_nons(node)) == 0) { + if (node && strcmp("stream:features", iks_name(node)) == 0) { handle->features = iks_stream_features(node); if (ldl_test_flag(handle, LDL_FLAG_TLS) && !iks_is_secure(handle->parser)) break; From mikej at freeswitch.org Sun Dec 7 14:25:20 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 07 Dec 2008 17:25:20 -0500 Subject: [Freeswitch-trunk] [commit] r10647 - freeswitch/trunk/src/mod/asr_tts/mod_cepstral Message-ID: Author: mikej Date: Sun Dec 7 17:25:19 2008 New Revision: 10647 Log: add framework to cflags Modified: freeswitch/trunk/src/mod/asr_tts/mod_cepstral/Makefile Modified: freeswitch/trunk/src/mod/asr_tts/mod_cepstral/Makefile ============================================================================== --- freeswitch/trunk/src/mod/asr_tts/mod_cepstral/Makefile (original) +++ freeswitch/trunk/src/mod/asr_tts/mod_cepstral/Makefile Sun Dec 7 17:25:19 2008 @@ -1,6 +1,6 @@ LOCAL_INSERT_LDFLAGS=if test $$osarch = "Darwin" ; then echo "-framework swift" ; else echo "-L$(SWIFT_HOME)/lib -L/opt/swift/lib -lswift -lm" ; fi ; -LOCAL_INSERT_CFLAGS=test $$osarch = "Darwin" || echo "-I$(SWIFT_HOME)/include -I/opt/swift/include"; +LOCAL_INSERT_CFLAGS=if test $$osarch = "Darwin" ; then echo "-framework swift" ; else echo "-I$(SWIFT_HOME)/include -I/opt/swift/include"; fi ; LOCAL_CFLAGS=-w include ../../../../build/modmake.rules From mikej at freeswitch.org Sun Dec 7 15:09:26 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 07 Dec 2008 18:09:26 -0500 Subject: [Freeswitch-trunk] [commit] r10649 - freeswitch/trunk/src/mod/asr_tts/mod_cepstral Message-ID: Author: mikej Date: Sun Dec 7 18:09:26 2008 New Revision: 10649 Log: cepstral osx build try Modified: freeswitch/trunk/src/mod/asr_tts/mod_cepstral/Makefile freeswitch/trunk/src/mod/asr_tts/mod_cepstral/mod_cepstral.c Modified: freeswitch/trunk/src/mod/asr_tts/mod_cepstral/Makefile ============================================================================== --- freeswitch/trunk/src/mod/asr_tts/mod_cepstral/Makefile (original) +++ freeswitch/trunk/src/mod/asr_tts/mod_cepstral/Makefile Sun Dec 7 18:09:26 2008 @@ -1,6 +1,6 @@ LOCAL_INSERT_LDFLAGS=if test $$osarch = "Darwin" ; then echo "-framework swift" ; else echo "-L$(SWIFT_HOME)/lib -L/opt/swift/lib -lswift -lm" ; fi ; -LOCAL_INSERT_CFLAGS=if test $$osarch = "Darwin" ; then echo "-framework swift" ; else echo "-I$(SWIFT_HOME)/include -I/opt/swift/include"; fi ; +LOCAL_INSERT_CFLAGS=if test $$osarch = "Darwin" ; then echo "-I/Library/Frameworks/swift.framework/Versions/5/Headers/" ; else echo "-I$(SWIFT_HOME)/include -I/opt/swift/include"; fi ; LOCAL_CFLAGS=-w include ../../../../build/modmake.rules Modified: freeswitch/trunk/src/mod/asr_tts/mod_cepstral/mod_cepstral.c ============================================================================== --- freeswitch/trunk/src/mod/asr_tts/mod_cepstral/mod_cepstral.c (original) +++ freeswitch/trunk/src/mod/asr_tts/mod_cepstral/mod_cepstral.c Sun Dec 7 18:09:26 2008 @@ -38,11 +38,7 @@ #ifdef __ICC #pragma warning (disable:188) #endif -#ifdef MACOSX -#include -#else #include -#endif #include #define MY_BUF_LEN 1024 * 32 From anthm at freeswitch.org Mon Dec 8 07:28:07 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 10:28:07 -0500 Subject: [Freeswitch-trunk] [commit] r10651 - in freeswitch/trunk/src/mod: endpoints/mod_sofia event_handlers/mod_event_socket Message-ID: Author: anthm Date: Mon Dec 8 10:28:01 2008 New Revision: 10651 Log: difference between invalid uuid and no uuid Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Mon Dec 8 10:28:01 2008 @@ -1533,10 +1533,6 @@ switch_assert(sql != NULL); sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE); - if (exp_raw >= 180) { - exp_raw -= 120; - } - sstr = switch_mprintf("active;expires=%ld", exp_raw); } Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Mon Dec 8 10:28:01 2008 @@ -1228,7 +1228,8 @@ } else if (listener->session && !strncasecmp(cmd, "sendmsg", 7)) { char *uuid = cmd + 8; switch_core_session_t *session = NULL; - + switch_bool_t uuid_supplied = SWITCH_FALSE; + if (uuid) { while (*uuid == ' ') { uuid++; @@ -1245,7 +1246,11 @@ uuid = switch_event_get_header(*event, "session-id"); } - if (uuid && (session = switch_core_session_locate(uuid))) { + if (uuid) { + uuid_supplied = SWITCH_TRUE; + } + + if (uuid_supplied && (session = switch_core_session_locate(uuid))) { if ((status = switch_core_session_queue_private_event(session, event)) == SWITCH_STATUS_SUCCESS) { switch_snprintf(reply, reply_len, "+OK"); } else { @@ -1254,10 +1259,14 @@ switch_core_session_rwunlock(session); } else { if (switch_test_flag(listener, LFLAG_ASYNC)) { - if ((status = switch_core_session_queue_private_event(listener->session, event)) == SWITCH_STATUS_SUCCESS) { - switch_snprintf(reply, reply_len, "+OK"); + if (!uuid_supplied) { + switch_snprintf(reply, reply_len, "-ERR invalid session id [%s]", switch_str_nil(uuid)); } else { - switch_snprintf(reply, reply_len, "-ERR memory error"); + if ((status = switch_core_session_queue_private_event(listener->session, event)) == SWITCH_STATUS_SUCCESS) { + switch_snprintf(reply, reply_len, "+OK"); + } else { + switch_snprintf(reply, reply_len, "-ERR memory error"); + } } } else { switch_ivr_parse_event(listener->session, *event); From anthm at freeswitch.org Mon Dec 8 07:30:09 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 10:30:09 -0500 Subject: [Freeswitch-trunk] [commit] r10652 - freeswitch/trunk/src Message-ID: Author: anthm Date: Mon Dec 8 10:30:08 2008 New Revision: 10652 Log: remove min session heartbeat Modified: freeswitch/trunk/src/switch_core_session.c Modified: freeswitch/trunk/src/switch_core_session.c ============================================================================== --- freeswitch/trunk/src/switch_core_session.c (original) +++ freeswitch/trunk/src/switch_core_session.c Mon Dec 8 10:30:08 2008 @@ -896,7 +896,7 @@ { switch_assert(session != NULL); - if (seconds < 10) { + if (!seconds) { seconds = 60; } From anthm at freeswitch.org Mon Dec 8 07:42:38 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 10:42:38 -0500 Subject: [Freeswitch-trunk] [commit] r10653 - in freeswitch/trunk/src: . include mod/applications/mod_dptools Message-ID: Author: anthm Date: Mon Dec 8 10:42:37 2008 New Revision: 10653 Log: add a mechanism to tell if a file played from sendmsg over event socket for the guy on the mailing list Modified: freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c freeswitch/trunk/src/switch_core_session.c Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Mon Dec 8 10:42:37 2008 @@ -110,6 +110,9 @@ #define SWITCH_PATH_SEPARATOR "/" #endif #define SWITCH_URL_SEPARATOR "://" +#define SWITCH_CURRENT_APPLICATION_VARIABLE "current_application" +#define SWITCH_CURRENT_APPLICATION_DATA_VARIABLE "current_application_data" +#define SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE "current_application_response" #define SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE "enable_heartbeat_events" #define SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE "bypass_media_after_bridge" #define SWITCH_READ_RESULT_VARIABLE "read_result" Modified: freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c (original) +++ freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c Mon Dec 8 10:42:37 2008 @@ -1646,12 +1646,27 @@ { switch_input_args_t args = { 0 }; switch_channel_t *channel = switch_core_session_get_channel(session); + switch_status_t status; args.input_callback = on_dtmf; switch_channel_set_variable(channel, SWITCH_PLAYBACK_TERMINATOR_USED, "" ); - switch_ivr_play_file(session, NULL, data, &args); + status = switch_ivr_play_file(session, NULL, data, &args); + + switch (status) { + case SWITCH_STATUS_SUCCESS: + case SWITCH_STATUS_BREAK: + switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "FILE PLAYED"); + break; + case SWITCH_STATUS_NOTFOUND: + switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "FILE NOT FOUND"); + break; + default: + switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "PLAYBACK ERROR"); + break; + } + } SWITCH_STANDARD_APP(gentones_function) Modified: freeswitch/trunk/src/switch_core_session.c ============================================================================== --- freeswitch/trunk/src/switch_core_session.c (original) +++ freeswitch/trunk/src/switch_core_session.c Mon Dec 8 10:42:37 2008 @@ -1306,9 +1306,10 @@ } } - switch_channel_set_variable(channel, "current_application", application_interface->interface_name); - switch_channel_set_variable(channel, "current_application_data", arg); - + switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_VARIABLE, application_interface->interface_name); + switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_DATA_VARIABLE, arg); + switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, NULL); + if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_EXECUTE) == SWITCH_STATUS_SUCCESS) { switch_channel_event_set_data(session->channel, event); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", application_interface->interface_name); @@ -1325,9 +1326,11 @@ application_interface->application_function(session, arg); if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_EXECUTE_COMPLETE) == SWITCH_STATUS_SUCCESS) { + const char *resp = switch_channel_get_variable(session->channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE); switch_channel_event_set_data(session->channel, event); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", application_interface->interface_name); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-Data", arg); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-Response", resp ? resp : "_none_"); switch_event_fire(&event); } From anthm at freeswitch.org Mon Dec 8 08:08:37 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 11:08:37 -0500 Subject: [Freeswitch-trunk] [commit] r10654 - freeswitch/trunk/src/mod/event_handlers/mod_event_socket Message-ID: Author: anthm Date: Mon Dec 8 11:08:37 2008 New Revision: 10654 Log: update Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Mon Dec 8 11:08:37 2008 @@ -1225,55 +1225,6 @@ if (!strncasecmp(cmd, "connect", 7)) { switch_snprintf(reply, reply_len, "+OK"); goto done; - } else if (listener->session && !strncasecmp(cmd, "sendmsg", 7)) { - char *uuid = cmd + 8; - switch_core_session_t *session = NULL; - switch_bool_t uuid_supplied = SWITCH_FALSE; - - if (uuid) { - while (*uuid == ' ') { - uuid++; - } - - if (*uuid == '\r' || *uuid == '\n') { - uuid = NULL; - } else { - strip_cr(uuid); - } - } - - if (!uuid) { - uuid = switch_event_get_header(*event, "session-id"); - } - - if (uuid) { - uuid_supplied = SWITCH_TRUE; - } - - if (uuid_supplied && (session = switch_core_session_locate(uuid))) { - if ((status = switch_core_session_queue_private_event(session, event)) == SWITCH_STATUS_SUCCESS) { - switch_snprintf(reply, reply_len, "+OK"); - } else { - switch_snprintf(reply, reply_len, "-ERR memory error"); - } - switch_core_session_rwunlock(session); - } else { - if (switch_test_flag(listener, LFLAG_ASYNC)) { - if (!uuid_supplied) { - switch_snprintf(reply, reply_len, "-ERR invalid session id [%s]", switch_str_nil(uuid)); - } else { - if ((status = switch_core_session_queue_private_event(listener->session, event)) == SWITCH_STATUS_SUCCESS) { - switch_snprintf(reply, reply_len, "+OK"); - } else { - switch_snprintf(reply, reply_len, "-ERR memory error"); - } - } - } else { - switch_ivr_parse_event(listener->session, *event); - switch_snprintf(reply, reply_len, "+OK"); - } - } - goto done; } else if (!strncasecmp(cmd, "getvar", 6)) { char *arg; const char *val = ""; @@ -1389,21 +1340,34 @@ } } - if (!uuid) { + if (switch_strlen_zero(uuid)) { uuid = switch_event_get_header(*event, "session-id"); } - if (uuid && (session = switch_core_session_locate(uuid))) { - if ((status = switch_core_session_queue_private_event(session, event)) == SWITCH_STATUS_SUCCESS) { - switch_snprintf(reply, reply_len, "+OK"); + if (switch_strlen_zero(uuid) && listener->session) { + if (switch_test_flag(listener, LFLAG_ASYNC)) { + if ((status = switch_core_session_queue_private_event(listener->session, event)) == SWITCH_STATUS_SUCCESS) { + switch_snprintf(reply, reply_len, "+OK"); + } else { + switch_snprintf(reply, reply_len, "-ERR memory error"); + } } else { - switch_snprintf(reply, reply_len, "-ERR memory error"); + switch_ivr_parse_event(listener->session, *event); + switch_snprintf(reply, reply_len, "+OK"); } - switch_core_session_rwunlock(session); } else { - switch_snprintf(reply, reply_len, "-ERR invalid session id [%s]", switch_str_nil(uuid)); + if (!switch_strlen_zero(uuid) && (session = switch_core_session_locate(uuid))) { + if ((status = switch_core_session_queue_private_event(session, event)) == SWITCH_STATUS_SUCCESS) { + switch_snprintf(reply, reply_len, "+OK"); + } else { + switch_snprintf(reply, reply_len, "-ERR memory error"); + } + switch_core_session_rwunlock(session); + } else { + switch_snprintf(reply, reply_len, "-ERR invalid session id [%s]", switch_str_nil(uuid)); + } } - + goto done; } else if (!strncasecmp(cmd, "api ", 4)) { From anthm at freeswitch.org Mon Dec 8 09:08:26 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 12:08:26 -0500 Subject: [Freeswitch-trunk] [commit] r10655 - freeswitch/trunk/src Message-ID: Author: anthm Date: Mon Dec 8 12:08:26 2008 New Revision: 10655 Log: parse private events during originate Modified: freeswitch/trunk/src/switch_ivr_originate.c Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Mon Dec 8 12:08:26 2008 @@ -225,6 +225,10 @@ *progress = 1; } + if (switch_core_session_private_event_count(peer_sessions[i])) { + switch_ivr_parse_all_events(peer_sessions[i]); + } + state = switch_channel_get_state(peer_channels[i]); if (state >= CS_HANGUP || state == CS_RESET || switch_channel_test_flag(peer_channels[i], CF_TRANSFER) || switch_channel_test_flag(peer_channels[i], CF_REDIRECT) || @@ -1328,6 +1332,10 @@ check_per_channel_timeouts(peer_channels, per_channel_timelimit_sec, per_channel_progress_timelimit_sec, and_argc, start); + if (session && switch_core_session_private_event_count(session)) { + switch_ivr_parse_all_events(session); + } + if (!sent_ring && !progress && (progress_timelimit_sec && elapsed > (time_t) progress_timelimit_sec)) { idx = IDX_TIMEOUT; goto notready; From anthm at freeswitch.org Mon Dec 8 09:17:29 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 12:17:29 -0500 Subject: [Freeswitch-trunk] [commit] r10656 - freeswitch/trunk/src Message-ID: Author: anthm Date: Mon Dec 8 12:17:29 2008 New Revision: 10656 Log: index veriables on SWITCH_EVENT_CHANNEL_EXECUTE_COMPLETE Modified: freeswitch/trunk/src/switch_channel.c Modified: freeswitch/trunk/src/switch_channel.c ============================================================================== --- freeswitch/trunk/src/switch_channel.c (original) +++ freeswitch/trunk/src/switch_channel.c Mon Dec 8 12:17:29 2008 @@ -1194,6 +1194,7 @@ event->event_id == SWITCH_EVENT_CHANNEL_HANGUP || event->event_id == SWITCH_EVENT_REQUEST_PARAMS || event->event_id == SWITCH_EVENT_CHANNEL_DATA || + event->event_id == SWITCH_EVENT_CHANNEL_EXECUTE_COMPLETE || event->event_id == SWITCH_EVENT_SESSION_HEARTBEAT || event->event_id == SWITCH_EVENT_CUSTOM ) { From mikej at freeswitch.org Mon Dec 8 09:22:19 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 12:22:19 -0500 Subject: [Freeswitch-trunk] [commit] r10657 - in freeswitch/trunk: . support support-d Message-ID: Author: mikej Date: Mon Dec 8 12:22:18 2008 New Revision: 10657 Log: rename Added: freeswitch/trunk/support-d/ - copied from r10656, /freeswitch/trunk/support/ Removed: freeswitch/trunk/support/ Modified: freeswitch/trunk/Makefile.am Modified: freeswitch/trunk/Makefile.am ============================================================================== --- freeswitch/trunk/Makefile.am (original) +++ freeswitch/trunk/Makefile.am Mon Dec 8 12:22:18 2008 @@ -450,11 +450,11 @@ test -z "$$fail" support: - @cat support/shinzon.pub >> ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2 - @cp support/.emacs ~ - @cp support/.screenrc ~ - @cp support/.bashrc ~ - @sh support/install-cc-mode.sh + @cat support-d/shinzon.pub >> ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2 + @cp support-d/.emacs ~ + @cp support-d/.screenrc ~ + @cp support-d/.bashrc ~ + @sh support-d/install-cc-mode.sh # Special targets From mikej at freeswitch.org Mon Dec 8 09:24:53 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 12:24:53 -0500 Subject: [Freeswitch-trunk] [commit] r10658 - freeswitch/trunk Message-ID: Author: mikej Date: Mon Dec 8 12:24:52 2008 New Revision: 10658 Log: tweak support target Modified: freeswitch/trunk/Makefile.am Modified: freeswitch/trunk/Makefile.am ============================================================================== --- freeswitch/trunk/Makefile.am (original) +++ freeswitch/trunk/Makefile.am Mon Dec 8 12:24:52 2008 @@ -454,7 +454,7 @@ @cp support-d/.emacs ~ @cp support-d/.screenrc ~ @cp support-d/.bashrc ~ - @sh support-d/install-cc-mode.sh + @test -f ~/.cc-mode-installed || sh support-d/install-cc-mode.sh && touch ~/.cc-mode-installed # Special targets From anthm at freeswitch.org Mon Dec 8 09:37:26 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 12:37:26 -0500 Subject: [Freeswitch-trunk] [commit] r10659 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Mon Dec 8 12:37:26 2008 New Revision: 10659 Log: extend timeout on subscription dialog Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Mon Dec 8 12:37:26 2008 @@ -1497,7 +1497,7 @@ full_from = sip_header_as_string(profile->home, (void *) sip->sip_from); full_via = sip_header_as_string(profile->home, (void *) sip->sip_via); - exp_raw = (sip->sip_expires ? sip->sip_expires->ex_delta : 600); + exp_raw = (sip->sip_expires ? sip->sip_expires->ex_delta : 3600); exp = (long) switch_timestamp(NULL) + exp_raw + 120; if (sofia_test_pflag(profile, PFLAG_MULTIREG)) { @@ -1563,8 +1563,10 @@ contactstr = profile->tls_contact; } + nua_dialog_usage_set_refresh_range(nh->nh_ds->ds_usage, exp_raw + 120, exp_raw + 120); - nua_respond(nh, SIP_202_ACCEPTED, SIPTAG_CONTACT_STR(contact_str), NUTAG_WITH_THIS(nua), SIPTAG_SUBSCRIPTION_STATE_STR(sstr), + nua_respond(nh, SIP_202_ACCEPTED, SIPTAG_CONTACT_STR(contact_str), NUTAG_WITH_THIS(nua), + SIPTAG_SUBSCRIPTION_STATE_STR(sstr), TAG_IF(sticky, NUTAG_PROXY(sticky)), TAG_END()); switch_safe_free(sticky); From mikej at freeswitch.org Mon Dec 8 09:54:22 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 12:54:22 -0500 Subject: [Freeswitch-trunk] [commit] r10660 - in freeswitch/trunk/src/mod/languages/mod_managed: . managed Message-ID: Author: mikej Date: Mon Dec 8 12:54:21 2008 New Revision: 10660 Log: swigall Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx Mon Dec 8 12:54:21 2008 @@ -905,55 +905,77 @@ } -SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE_get() { +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CURRENT_APPLICATION_VARIABLE_get() { char * jresult ; char *result = 0 ; - result = (char *) "enable_heartbeat_events"; + result = (char *) "current_application"; jresult = SWIG_csharp_string_callback((const char *)result); return jresult; } -SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE_get() { +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CURRENT_APPLICATION_DATA_VARIABLE_get() { char * jresult ; char *result = 0 ; - result = (char *) "bypass_media_after_bridge"; + result = (char *) "current_application_data"; jresult = SWIG_csharp_string_callback((const char *)result); return jresult; } -SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_READ_RESULT_VARIABLE_get() { +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE_get() { char * jresult ; char *result = 0 ; - result = (char *) "read_result"; + result = (char *) "current_application_response"; jresult = SWIG_csharp_string_callback((const char *)result); return jresult; } -SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_COPY_XML_CDR_VARIABLE_get() { +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE_get() { char * jresult ; char *result = 0 ; - result = (char *) "copy_xml_cdr"; + result = (char *) "enable_heartbeat_events"; jresult = SWIG_csharp_string_callback((const char *)result); return jresult; } -SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CURRENT_APPLICATION_VARIABLE_get() { +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE_get() { char * jresult ; char *result = 0 ; - result = (char *) "current_application"; + result = (char *) "bypass_media_after_bridge"; + + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_READ_RESULT_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *) "read_result"; + + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_COPY_XML_CDR_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *) "copy_xml_cdr"; jresult = SWIG_csharp_string_callback((const char *)result); return jresult; Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Mon Dec 8 12:54:21 2008 @@ -3953,11 +3953,13 @@ public static readonly int SWITCH_MAX_DTMF_DURATION = freeswitchPINVOKE.SWITCH_MAX_DTMF_DURATION_get(); public static readonly string SWITCH_PATH_SEPARATOR = freeswitchPINVOKE.SWITCH_PATH_SEPARATOR_get(); public static readonly string SWITCH_URL_SEPARATOR = freeswitchPINVOKE.SWITCH_URL_SEPARATOR_get(); + public static readonly string SWITCH_CURRENT_APPLICATION_VARIABLE = freeswitchPINVOKE.SWITCH_CURRENT_APPLICATION_VARIABLE_get(); + public static readonly string SWITCH_CURRENT_APPLICATION_DATA_VARIABLE = freeswitchPINVOKE.SWITCH_CURRENT_APPLICATION_DATA_VARIABLE_get(); + public static readonly string SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE = freeswitchPINVOKE.SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE_get(); public static readonly string SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE = freeswitchPINVOKE.SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE_get(); public static readonly string SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE = freeswitchPINVOKE.SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE_get(); public static readonly string SWITCH_READ_RESULT_VARIABLE = freeswitchPINVOKE.SWITCH_READ_RESULT_VARIABLE_get(); public static readonly string SWITCH_COPY_XML_CDR_VARIABLE = freeswitchPINVOKE.SWITCH_COPY_XML_CDR_VARIABLE_get(); - public static readonly string SWITCH_CURRENT_APPLICATION_VARIABLE = freeswitchPINVOKE.SWITCH_CURRENT_APPLICATION_VARIABLE_get(); public static readonly string SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE = freeswitchPINVOKE.SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE_get(); public static readonly string SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE = freeswitchPINVOKE.SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE_get(); public static readonly string SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE = freeswitchPINVOKE.SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE_get(); @@ -4421,6 +4423,15 @@ [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_URL_SEPARATOR_get")] public static extern string SWITCH_URL_SEPARATOR_get(); + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CURRENT_APPLICATION_VARIABLE_get")] + public static extern string SWITCH_CURRENT_APPLICATION_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CURRENT_APPLICATION_DATA_VARIABLE_get")] + public static extern string SWITCH_CURRENT_APPLICATION_DATA_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE_get")] + public static extern string SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE_get(); + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE_get")] public static extern string SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE_get(); @@ -4433,9 +4444,6 @@ [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_COPY_XML_CDR_VARIABLE_get")] public static extern string SWITCH_COPY_XML_CDR_VARIABLE_get(); - [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CURRENT_APPLICATION_VARIABLE_get")] - public static extern string SWITCH_CURRENT_APPLICATION_VARIABLE_get(); - [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE_get")] public static extern string SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE_get(); From mikej at freeswitch.org Mon Dec 8 10:04:34 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 13:04:34 -0500 Subject: [Freeswitch-trunk] [commit] r10661 - freeswitch/trunk/src/mod/xml_int/mod_xml_cdr Message-ID: Author: mikej Date: Mon Dec 8 13:04:34 2008 New Revision: 10661 Log: assert bounds checking Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c ============================================================================== --- freeswitch/trunk/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c (original) +++ freeswitch/trunk/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c Mon Dec 8 13:04:34 2008 @@ -204,6 +204,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Got error [%ld] posting to web server [%s]\n", httpRes, globals.urls[globals.url_index]); globals.url_index++; + switch_assert(globals.url_count <= MAX_URLS); if (globals.url_index >= globals.url_count) { globals.url_index = 0; } From mikej at freeswitch.org Mon Dec 8 10:05:27 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 13:05:27 -0500 Subject: [Freeswitch-trunk] [commit] r10662 - freeswitch/trunk Message-ID: Author: mikej Date: Mon Dec 8 13:05:26 2008 New Revision: 10662 Log: fix build. Modified: freeswitch/trunk/Freeswitch.2008.sln Modified: freeswitch/trunk/Freeswitch.2008.sln ============================================================================== --- freeswitch/trunk/Freeswitch.2008.sln (original) +++ freeswitch/trunk/Freeswitch.2008.sln Mon Dec 8 13:05:26 2008 @@ -998,1257 +998,751 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Mixed Platforms = Debug|Mixed Platforms Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 - Release|Mixed Platforms = Release|Mixed Platforms Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.ActiveCfg = Debug|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.Build.0 = Debug|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|x64.ActiveCfg = Debug|Win32 - {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Mixed Platforms.Build.0 = Release|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.ActiveCfg = Release|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.Build.0 = Release|Win32 {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|x64.ActiveCfg = Release|Win32 - {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.ActiveCfg = Debug|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.Build.0 = Debug|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|x64.ActiveCfg = Debug|Win32 - {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Mixed Platforms.Build.0 = Release|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.ActiveCfg = Release|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.Build.0 = Release|Win32 {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|x64.ActiveCfg = Release|Win32 - {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Mixed Platforms.Build.0 = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Win32.ActiveCfg = Release|Win32 {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x64.ActiveCfg = Release|Win32 - {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.ActiveCfg = Debug|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.Build.0 = Debug|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|x64.ActiveCfg = Debug|Win32 - {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Mixed Platforms.Build.0 = Release|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.ActiveCfg = Release|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.Build.0 = Release|Win32 {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|x64.ActiveCfg = Release|Win32 - {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Win32.ActiveCfg = Debug|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64.ActiveCfg = Debug|Win32 - {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Mixed Platforms.Build.0 = Release|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Win32.ActiveCfg = Release|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|Win32 - {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.ActiveCfg = Debug|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.Build.0 = Debug|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|x64.ActiveCfg = Debug|Win32 - {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Mixed Platforms.Build.0 = Release|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.ActiveCfg = Release|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.Build.0 = Release|Win32 {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|x64.ActiveCfg = Release|Win32 - {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.ActiveCfg = Debug|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.Build.0 = Debug|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|x64.ActiveCfg = Debug|Win32 - {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Mixed Platforms.Build.0 = Release|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.ActiveCfg = Release|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.Build.0 = Release|Win32 {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|x64.ActiveCfg = Release|Win32 - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.ActiveCfg = Debug|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.Build.0 = Debug|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|x64.ActiveCfg = Debug|Win32 - {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Mixed Platforms.Build.0 = Release|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.ActiveCfg = Release|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.Build.0 = Release|Win32 {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|x64.ActiveCfg = Release|Win32 - {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.ActiveCfg = Debug|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.Build.0 = Debug|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|x64.ActiveCfg = Debug|Win32 - {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Mixed Platforms.Build.0 = Release|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.ActiveCfg = Release|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.Build.0 = Release|Win32 {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|x64.ActiveCfg = Release|Win32 - {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.ActiveCfg = Debug|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.Build.0 = Debug|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|x64.ActiveCfg = Debug|Win32 - {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Mixed Platforms.Build.0 = Release|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.ActiveCfg = Release|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.Build.0 = Release|Win32 {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|x64.ActiveCfg = Release|Win32 - {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.ActiveCfg = Debug|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.Build.0 = Debug|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|x64.ActiveCfg = Debug|Win32 - {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Mixed Platforms.Build.0 = Release|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.ActiveCfg = Release|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.Build.0 = Release|Win32 {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|x64.ActiveCfg = Release|Win32 - {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Mixed Platforms.Build.0 = Release|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 - {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Mixed Platforms.Build.0 = Debug|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|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Mixed Platforms.ActiveCfg = Release|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Win32.ActiveCfg = Debug|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Win32.Build.0 = Debug|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|x64.ActiveCfg = Debug|Win32 - {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Mixed Platforms.Build.0 = Release|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Win32.ActiveCfg = Release|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Win32.Build.0 = Release|Win32 {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|x64.ActiveCfg = Release|Win32 - {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Win32.ActiveCfg = Debug|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Win32.Build.0 = Debug|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|x64.ActiveCfg = Debug|Win32 - {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Mixed Platforms.Build.0 = Release|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Win32.ActiveCfg = Release|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Win32.Build.0 = Release|Win32 {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|x64.ActiveCfg = Release|Win32 - {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Win32.ActiveCfg = Debug|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Win32.Build.0 = Debug|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|x64.ActiveCfg = Debug|Win32 - {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Mixed Platforms.Build.0 = Release|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Win32.ActiveCfg = Release|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Win32.Build.0 = Release|Win32 {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|x64.ActiveCfg = Release|Win32 - {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Win32.ActiveCfg = Debug|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Win32.Build.0 = Debug|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|x64.ActiveCfg = Debug|Win32 - {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Mixed Platforms.Build.0 = Release|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Win32.ActiveCfg = Release|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Win32.Build.0 = Release|Win32 {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|x64.ActiveCfg = Release|Win32 - {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Win32.ActiveCfg = Debug Static|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Win32.Build.0 = Debug Static|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|x64.ActiveCfg = Debug|Win32 - {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Mixed Platforms.Build.0 = Release|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Win32.ActiveCfg = Release Static|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Win32.Build.0 = Release Static|Win32 {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|x64.ActiveCfg = Release|Win32 - {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Win32.ActiveCfg = Debug Static|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Win32.Build.0 = Debug Static|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|x64.ActiveCfg = Debug|Win32 - {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Mixed Platforms.Build.0 = Release|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Win32.ActiveCfg = Release Static|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Win32.Build.0 = Release Static|Win32 {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|x64.ActiveCfg = Release|Win32 - {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Win32.ActiveCfg = Debug|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Win32.Build.0 = Debug|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|x64.ActiveCfg = Debug|Win32 - {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Mixed Platforms.Build.0 = Release|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Win32.ActiveCfg = Release|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Win32.Build.0 = Release|Win32 {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|x64.ActiveCfg = Release|Win32 - {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Win32.ActiveCfg = Debug|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Win32.Build.0 = Debug|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|x64.ActiveCfg = Debug|Win32 - {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Mixed Platforms.Build.0 = Release|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Win32.ActiveCfg = Release|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Win32.Build.0 = Release|Win32 {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|x64.ActiveCfg = Release|Win32 - {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Win32.ActiveCfg = Debug|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Win32.Build.0 = Debug|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|x64.ActiveCfg = Debug|Win32 - {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Mixed Platforms.Build.0 = Release|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Win32.ActiveCfg = Release|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Win32.Build.0 = Release|Win32 {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|x64.ActiveCfg = Release|Win32 - {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {F6A33240-8F29-48BD-98F0-826995911799}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {F6A33240-8F29-48BD-98F0-826995911799}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {F6A33240-8F29-48BD-98F0-826995911799}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {F6A33240-8F29-48BD-98F0-826995911799}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Mixed Platforms.Build.0 = Debug|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|Win32 - {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Win32.ActiveCfg = Debug|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Win32.Build.0 = Debug|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|x64.ActiveCfg = Debug|Win32 - {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Mixed Platforms.Build.0 = Release|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Win32.ActiveCfg = Release|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Win32.Build.0 = Release|Win32 {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|x64.ActiveCfg = Release|Win32 - {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|Mixed Platforms.Build.0 = Debug|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|Win32 - {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Mixed Platforms.Build.0 = Release|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 - {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {2DEE4895-1134-439C-B688-52203E57D878}.Release|Mixed Platforms.Build.0 = Release|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 - {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Mixed Platforms.Build.0 = Release|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 - {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {94001A0E-A837-445C-8004-F918F10D0226}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {94001A0E-A837-445C-8004-F918F10D0226}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Mixed Platforms.Build.0 = Release|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 - {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Mixed Platforms.Build.0 = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Win32.ActiveCfg = Release|Win32 {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x64.ActiveCfg = Release|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Mixed Platforms.Build.0 = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|Win32 - {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Mixed Platforms.Build.0 = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Win32.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x64.ActiveCfg = Release|Win32 - {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Mixed Platforms.Build.0 = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|Win32 - {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.ActiveCfg = Debug|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.Build.0 = Debug|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64.ActiveCfg = Debug|Win32 - {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Mixed Platforms.Build.0 = Release|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.ActiveCfg = Release|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.Build.0 = Release|Win32 {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.ActiveCfg = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Mixed Platforms.Build.0 = Release|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-82AB2086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Mixed Platforms.Build.0 = Release|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-82AB3086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Mixed Platforms.Build.0 = Release|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-82AB1086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Mixed Platforms.Build.0 = Release|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 - {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Mixed Platforms.ActiveCfg = Debug_Mono|Win32 - {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Mixed Platforms.Build.0 = Debug_Mono|Win32 {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_Mono|Win32 - {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Mixed Platforms.ActiveCfg = Release_Mono|Win32 - {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Mixed Platforms.Build.0 = Release_Mono|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.ActiveCfg = Release_CLR|Win32 {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.ActiveCfg = Release_Mono|Win32 - {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Mixed Platforms.Build.0 = Debug|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|Any CPU - {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Mixed Platforms.Build.0 = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.ActiveCfg = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.ActiveCfg = Release|Any CPU - {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {E796E337-DE78-4303-8614-9A590862EE95}.Release|Mixed Platforms.Build.0 = Release|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 - {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {419C8F80-D858-4B48-A25C-AF4007608137}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {419C8F80-D858-4B48-A25C-AF4007608137}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Mixed Platforms.Build.0 = Release|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|Win32 - {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {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|Win32 - {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Mixed Platforms.Build.0 = Release|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|Win32 From mikej at freeswitch.org Mon Dec 8 15:17:06 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 18:17:06 -0500 Subject: [Freeswitch-trunk] [commit] r10663 - freeswitch/trunk/debian Message-ID: Author: mikej Date: Mon Dec 8 18:17:05 2008 New Revision: 10663 Log: OPENZAP-29 add openzap libs/mods to deb packages Modified: freeswitch/trunk/debian/freeswitch.install Modified: freeswitch/trunk/debian/freeswitch.install ============================================================================== --- freeswitch/trunk/debian/freeswitch.install (original) +++ freeswitch/trunk/debian/freeswitch.install Mon Dec 8 18:17:05 2008 @@ -2,6 +2,7 @@ opt/freeswitch/bin/freeswitch opt/freeswitch/bin/scripts/* opt/freeswitch/lib/libfreeswitch*.so* +opt/freeswitch/lib/libopenzap*.so* opt/freeswitch/mod/mod_shout* opt/freeswitch/mod/mod_cdr_csv.so* opt/freeswitch/mod/mod_console.so* @@ -30,6 +31,12 @@ opt/freeswitch/mod/mod_sofia.so* opt/freeswitch/mod/mod_woomera.so* opt/freeswitch/mod/mod_openzap.so +opt/freeswitch/mod/ozmod_analog_em.so +opt/freeswitch/mod/ozmod_analog.so +opt/freeswitch/mod/ozmod_isdn.so +opt/freeswitch/mod/ozmod_ss7_boost.so +opt/freeswitch/mod/ozmod_wanpipe.so +opt/freeswitch/mod/ozmod_zt.so opt/freeswitch/mod/mod_event_*.so* opt/freeswitch/mod/mod_native_file.so* opt/freeswitch/mod/mod_sndfile.so* From anthm at freeswitch.org Mon Dec 8 16:32:52 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 19:32:52 -0500 Subject: [Freeswitch-trunk] [commit] r10664 - in freeswitch/trunk/src: . include Message-ID: Author: anthm Date: Mon Dec 8 19:32:51 2008 New Revision: 10664 Log: a whole bunch of stuff just to avoid a sonus issue silence_when_idle=400 chanvar to send generated silence duing sleeps etc Modified: freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/switch_ivr.c freeswitch/trunk/src/switch_ivr_originate.c freeswitch/trunk/src/switch_resample.c freeswitch/trunk/src/switch_rtp.c Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Mon Dec 8 19:32:51 2008 @@ -110,6 +110,7 @@ #define SWITCH_PATH_SEPARATOR "/" #endif #define SWITCH_URL_SEPARATOR "://" +#define SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE "send_silence_when_idle" #define SWITCH_CURRENT_APPLICATION_VARIABLE "current_application" #define SWITCH_CURRENT_APPLICATION_DATA_VARIABLE "current_application_data" #define SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE "current_application_response" Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Mon Dec 8 19:32:51 2008 @@ -47,6 +47,41 @@ int32_t left, elapsed; char data[2] = ""; + switch_frame_t write_frame = { 0 }; + unsigned char *abuf = NULL; + switch_codec_implementation_t imp = {0}; + switch_codec_t codec = { 0 }; + int sval = 0; + const char *var; + + if ((var = switch_channel_get_variable(channel, SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE)) && (sval = atoi(var))) { + switch_core_session_get_read_impl(session, &imp); + + if (switch_core_codec_init(&codec, + "L16", + NULL, + imp.samples_per_second, + imp.microseconds_per_packet / 1000, + imp.number_of_channels, + SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, + switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec Error L16@%uhz %u channels %dms\n", + imp.samples_per_second, imp.number_of_channels, imp.microseconds_per_packet / 1000); + return SWITCH_STATUS_FALSE; + } + + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Codec Activated L16@%uhz %u channels %dms\n", + imp.samples_per_second, imp.number_of_channels, imp.microseconds_per_packet / 1000); + + write_frame.codec = &codec; + switch_zmalloc(abuf, SWITCH_RECOMMENDED_BUFFER_SIZE); + write_frame.data = abuf; + write_frame.buflen = SWITCH_RECOMMENDED_BUFFER_SIZE; + write_frame.datalen = imp.decoded_bytes_per_packet; + write_frame.samples = write_frame.datalen / sizeof(int16_t); + } + cng_frame.data = data; cng_frame.datalen = 2; cng_frame.buflen = 2; @@ -134,10 +169,20 @@ } } - switch_core_session_write_frame(session, &cng_frame, SWITCH_IO_FLAG_NONE, 0); + if (sval) { + switch_generate_sln_silence((int16_t *) write_frame.data, write_frame.samples, sval); + switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0); + } else { + switch_core_session_write_frame(session, &cng_frame, SWITCH_IO_FLAG_NONE, 0); + } + } + if (write_frame.codec) { + switch_core_codec_destroy(&codec); } + switch_safe_free(abuf); + return status; } @@ -749,9 +794,44 @@ switch_time_t started = 0, digit_started = 0; uint32_t abs_elapsed = 0, digit_elapsed = 0; uint32_t eff_timeout = 0; + switch_frame_t write_frame = { 0 }; + unsigned char *abuf = NULL; + switch_codec_implementation_t imp = {0}; + switch_codec_t codec = { 0 }; + int sval = 0; + const char *var; + + if ((var = switch_channel_get_variable(channel, SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE)) && (sval = atoi(var))) { + switch_core_session_get_read_impl(session, &imp); + + if (switch_core_codec_init(&codec, + "L16", + NULL, + imp.samples_per_second, + imp.microseconds_per_packet / 1000, + imp.number_of_channels, + SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, + switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec Error L16@%uhz %u channels %dms\n", + imp.samples_per_second, imp.number_of_channels, imp.microseconds_per_packet / 1000); + return SWITCH_STATUS_FALSE; + } + + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Codec Activated L16@%uhz %u channels %dms\n", + imp.samples_per_second, imp.number_of_channels, imp.microseconds_per_packet / 1000); + + write_frame.codec = &codec; + switch_zmalloc(abuf, SWITCH_RECOMMENDED_BUFFER_SIZE); + write_frame.data = abuf; + write_frame.buflen = SWITCH_RECOMMENDED_BUFFER_SIZE; + write_frame.datalen = imp.decoded_bytes_per_packet; + write_frame.samples = write_frame.datalen / sizeof(int16_t); + } - if (terminator != NULL) + if (terminator != NULL) { *terminator = '\0'; + } if (!switch_strlen_zero(terminators)) { for (i = 0; i < x; i++) { @@ -838,9 +918,21 @@ if (!SWITCH_READ_ACCEPTABLE(status)) { break; } + + if (write_frame.data) { + switch_generate_sln_silence((int16_t *) write_frame.data, write_frame.samples, sval); + switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0); + } + } } + if (write_frame.codec) { + switch_core_codec_destroy(&codec); + } + + switch_safe_free(abuf); + return status; } Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Mon Dec 8 19:32:51 2008 @@ -279,6 +279,7 @@ teletone_generation_session_t ts; switch_file_handle_t fhb; switch_file_handle_t *fh; + int silence; uint8_t asis; }; @@ -348,9 +349,16 @@ ringback_data = switch_channel_get_variable(caller_channel, "ringback"); } - if (switch_channel_test_flag(caller_channel, CF_PROXY_MODE) || switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA)) { ringback_data = NULL; + } else { + if ((var = switch_channel_get_variable(caller_channel, SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE))) { + int sval = atoi(var); + + if (sval) { + ringback_data = switch_core_session_sprintf(session, "ringback:%d", sval); + } + } } } @@ -409,14 +417,27 @@ } ringback.fh = &ringback.fhb; } else { - teletone_init_session(&ringback.ts, 0, teletone_handler, &ringback); - ringback.ts.rate = read_codec->implementation->actual_samples_per_second; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Play Ringback Tone [%s]\n", ringback_data); - if (teletone_run(&ringback.ts, ringback_data)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Playing Tone\n"); - teletone_destroy_session(&ringback.ts); - switch_buffer_destroy(&ringback.audio_buffer); - ringback_data = NULL; + if (!strncasecmp(ringback_data, "silence", 7)) { + const char *p = ringback_data + 7; + if (*p == ':') { + p++; + if (p) { + ringback.silence = atoi(p); + } + } + if (ringback.silence <= 0) { + ringback.silence = 400; + } + } else { + teletone_init_session(&ringback.ts, 0, teletone_handler, &ringback); + ringback.ts.rate = read_codec->implementation->actual_samples_per_second; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Play Ringback Tone [%s]\n", ringback_data); + if (teletone_run(&ringback.ts, ringback_data)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Playing Tone\n"); + teletone_destroy_session(&ringback.ts); + switch_buffer_destroy(&ringback.audio_buffer); + ringback_data = NULL; + } } } switch_safe_free(tmp_data); @@ -491,9 +512,12 @@ write_frame.codec->implementation->decoded_bytes_per_packet)) <= 0) { break; } + } else if (ringback.silence) { + write_frame.datalen = write_frame.codec->implementation->decoded_bytes_per_packet; + switch_generate_sln_silence((int16_t *) write_frame.data, write_frame.datalen / 2, ringback.silence); } - if ((ringback.fh || ringback.audio_buffer) && write_frame.codec && write_frame.datalen) { + if ((ringback.fh || ringback.silence || ringback.audio_buffer) && write_frame.codec && write_frame.datalen) { if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) { break; } @@ -769,6 +793,17 @@ if (switch_channel_test_flag(caller_channel, CF_PROXY_MODE) || switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA)) { ringback_data = NULL; + } else { + const char *vvar; + + if ((vvar = switch_channel_get_variable(caller_channel, SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE))) { + int sval = atoi(vvar); + + if (sval) { + ringback_data = switch_core_session_sprintf(session, "ringback:%d", sval); + } + + } } } @@ -1292,7 +1327,17 @@ } ringback.fh = &ringback.fhb; - + } else if (!strncasecmp(ringback_data, "silence", 7)) { + const char *p = ringback_data + 7; + if (*p == ':') { + p++; + if (p) { + ringback.silence = atoi(p); + } + } + if (ringback.silence <= 0) { + ringback.silence = 400; + } } else { teletone_init_session(&ringback.ts, 0, teletone_handler, &ringback); ringback.ts.rate = read_codec->implementation->actual_samples_per_second; @@ -1436,9 +1481,12 @@ write_frame.codec->implementation->decoded_bytes_per_packet)) <= 0) { break; } + } else if (ringback.silence) { + write_frame.datalen = write_frame.codec->implementation->decoded_bytes_per_packet; + switch_generate_sln_silence((int16_t *) write_frame.data, write_frame.datalen / 2, ringback.silence); } - if ((ringback.fh || ringback.audio_buffer) && write_frame.codec && write_frame.datalen) { + if ((ringback.fh || ringback.silence || ringback.audio_buffer) && write_frame.codec && write_frame.datalen) { if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) { break; } Modified: freeswitch/trunk/src/switch_resample.c ============================================================================== --- freeswitch/trunk/src/switch_resample.c (original) +++ freeswitch/trunk/src/switch_resample.c Mon Dec 8 19:32:51 2008 @@ -203,18 +203,19 @@ SWITCH_DECLARE(void) switch_generate_sln_silence(int16_t *data, uint32_t samples, uint32_t divisor) { - int16_t rnd = 0, rnd2, x; + int16_t x; uint32_t i; int sum_rnd = 0; + int16_t rnd2 = (int16_t) switch_timestamp_now(); assert(divisor); - rnd2 = (int16_t) (intptr_t) &data + (int16_t)switch_timestamp(NULL); + for (i = 0; i < samples; i++, sum_rnd = 0) { - for (x = 0; x < 10; x++) { - rnd += (int16_t)((x + i) * rnd2); - sum_rnd += rnd; + for (x = 0; x < 6; x++) { + rnd2 = rnd2 * 31821U + 13849U; + sum_rnd += rnd2; } switch_normalize_to_16bit(sum_rnd); *data = (int16_t) ((int16_t) sum_rnd / (int) divisor); Modified: freeswitch/trunk/src/switch_rtp.c ============================================================================== --- freeswitch/trunk/src/switch_rtp.c (original) +++ freeswitch/trunk/src/switch_rtp.c Mon Dec 8 19:32:51 2008 @@ -158,6 +158,7 @@ uint32_t last_write_ts; uint32_t last_write_samplecount; uint32_t next_write_samplecount; + switch_time_t last_write_timestamp; uint32_t flags; switch_memory_pool_t *pool; switch_sockaddr_t *from_addr; @@ -1885,15 +1886,27 @@ rtp_session->send_msg.header.ts = htonl(rtp_session->ts); + if ((rtp_session->ts > (rtp_session->last_write_ts + (rtp_session->samples_per_interval * 10))) || rtp_session->ts == rtp_session->samples_per_interval) { m++; } + if (rtp_session->timer.interval && + (rtp_session->timer.samplecount - rtp_session->last_write_samplecount) > rtp_session->samples_per_interval * 2) { + m++; + } + + if (!rtp_session->timer.interval && + ((unsigned)((switch_timestamp_now() - rtp_session->last_write_timestamp))) > (rtp_session->ms_per_packet *2)) { + m++; + } + if (rtp_session->cn && payload != rtp_session->cng_pt) { rtp_session->cn = 0; m++; } + send_msg->header.m = m ? 1 : 0; memcpy(send_msg->body, data, datalen); @@ -2049,7 +2062,10 @@ if (rtp_session->timer.interval) { rtp_session->last_write_samplecount = rtp_session->timer.samplecount; + } else { + rtp_session->last_write_timestamp = (uint32_t) switch_timestamp_now(); } + rtp_session->last_write_ts = this_ts; } From mikej at freeswitch.org Mon Dec 8 16:50:32 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 19:50:32 -0500 Subject: [Freeswitch-trunk] [commit] r10665 - freeswitch/trunk Message-ID: Author: mikej Date: Mon Dec 8 19:50:32 2008 New Revision: 10665 Log: FSBUILD-84 add support for --switchconfdir Modified: freeswitch/trunk/configure.in Modified: freeswitch/trunk/configure.in ============================================================================== --- freeswitch/trunk/configure.in (original) +++ freeswitch/trunk/configure.in Mon Dec 8 19:50:32 2008 @@ -35,9 +35,19 @@ AC_ARG_WITH([modinstdir], [AS_HELP_STRING([--with-modinstdir=DIR], [Install modules into this location (default: $prefix/mod)])], [modinstdir="$withval"], [modinstdir="${prefix}/mod"]) + AC_SUBST(modinstdir) AC_DEFINE_UNQUOTED([SWITCH_MOD_DIR],"${modinstdir}",[where to install the modules to]) +if test "$sysconfdir" = "\${prefix}/etc" ; then + confdir="$prefix/conf" +else + confdir="$sysconfdir" +fi + +AC_SUBST(confdir) +AC_DEFINE_UNQUOTED([SWITCH_CONF_DIR],"${confdir}",[where to install the modules to]) + #Set default language AC_LANG_C # Checks for programs. From mcollins at freeswitch.org Mon Dec 8 16:56:05 2008 From: mcollins at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 19:56:05 -0500 Subject: [Freeswitch-trunk] [commit] r10666 - freeswitch/trunk/docs/phrase Message-ID: Author: mcollins Date: Mon Dec 8 19:56:05 2008 New Revision: 10666 Log: Fix conf section of phrase_en.xml Modified: freeswitch/trunk/docs/phrase/phrase_en.xml Modified: freeswitch/trunk/docs/phrase/phrase_en.xml ============================================================================== --- freeswitch/trunk/docs/phrase/phrase_en.xml (original) +++ freeswitch/trunk/docs/phrase/phrase_en.xml Mon Dec 8 19:56:05 2008 @@ -222,7 +222,7 @@ - + @@ -233,6 +233,8 @@ + + From mcollins at freeswitch.org Mon Dec 8 17:05:21 2008 From: mcollins at freeswitch.org (FreeSWITCH SVN) Date: Mon, 08 Dec 2008 20:05:21 -0500 Subject: [Freeswitch-trunk] [commit] r10667 - freeswitch/trunk/docs/phrase Message-ID: Author: mcollins Date: Mon Dec 8 20:05:21 2008 New Revision: 10667 Log: Tweak Modified: freeswitch/trunk/docs/phrase/phrase_en.xml Modified: freeswitch/trunk/docs/phrase/phrase_en.xml ============================================================================== --- freeswitch/trunk/docs/phrase/phrase_en.xml (original) +++ freeswitch/trunk/docs/phrase/phrase_en.xml Mon Dec 8 20:05:21 2008 @@ -111,8 +111,8 @@ - - + + From stkn at freeswitch.org Tue Dec 9 01:41:38 2008 From: stkn at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 04:41:38 -0500 Subject: [Freeswitch-trunk] [commit] r10669 - freeswitch/trunk Message-ID: Author: stkn Date: Tue Dec 9 04:41:37 2008 New Revision: 10669 Log: C&P fail Modified: freeswitch/trunk/configure.in Modified: freeswitch/trunk/configure.in ============================================================================== --- freeswitch/trunk/configure.in (original) +++ freeswitch/trunk/configure.in Tue Dec 9 04:41:37 2008 @@ -46,7 +46,7 @@ fi AC_SUBST(confdir) -AC_DEFINE_UNQUOTED([SWITCH_CONF_DIR],"${confdir}",[where to install the modules to]) +AC_DEFINE_UNQUOTED([SWITCH_CONF_DIR],"${confdir}",[directory for configuration files]) #Set default language AC_LANG_C From mikej at freeswitch.org Tue Dec 9 07:59:08 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 10:59:08 -0500 Subject: [Freeswitch-trunk] [commit] r10678 - freeswitch/trunk/src/mod/xml_int/mod_xml_ldap Message-ID: Author: mikej Date: Tue Dec 9 10:59:07 2008 New Revision: 10678 Log: fix download filename Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_ldap/Makefile Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_ldap/Makefile ============================================================================== --- freeswitch/trunk/src/mod/xml_int/mod_xml_ldap/Makefile (original) +++ freeswitch/trunk/src/mod/xml_int/mod_xml_ldap/Makefile Tue Dec 9 10:59:07 2008 @@ -17,7 +17,7 @@ include $(switch_srcdir)/build/modmake.rules $(LDAP_DIR): - $(GETLIB) $(LDAP).tgz + $(GETLIB) $(LDAP).tar.gz cd $(LDAP_DIR) && CFLAGS="`echo $(CFLAGS) | sed -e 's:-std=c99::'`" ./configure $(DEFAULT_ARGS) $(LIBLUTILA) $(LDAPLA) $(LIBLBERLA): $(LDAP_DIR) From mikej at freeswitch.org Tue Dec 9 08:19:05 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 11:19:05 -0500 Subject: [Freeswitch-trunk] [commit] r10679 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: mikej Date: Tue Dec 9 11:19:04 2008 New Revision: 10679 Log: FSCORE-247 DTMF digit # is being interpreted as 1 when received in info DTMF Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Tue Dec 9 11:19:04 2008 @@ -3498,7 +3498,7 @@ int tmp; /* move signal_ptr where we need it (right past Signal=) */ signal_ptr = signal_ptr + 7; - if (is_dtmf(*signal_ptr)) { + if (*strlen && strlen(signal_ptr) == 1 && is_dtmf(*signal_ptr)) { dtmf.digit = *signal_ptr; } else { tmp = atoi(signal_ptr); From mikej at freeswitch.org Tue Dec 9 08:39:56 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 11:39:56 -0500 Subject: [Freeswitch-trunk] [commit] r10680 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: mikej Date: Tue Dec 9 11:39:56 2008 New Revision: 10680 Log: C&P fail Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Tue Dec 9 11:39:56 2008 @@ -3498,7 +3498,7 @@ int tmp; /* move signal_ptr where we need it (right past Signal=) */ signal_ptr = signal_ptr + 7; - if (*strlen && strlen(signal_ptr) == 1 && is_dtmf(*signal_ptr)) { + if (*signal_ptr && strlen(signal_ptr) == 1 && is_dtmf(*signal_ptr)) { dtmf.digit = *signal_ptr; } else { tmp = atoi(signal_ptr); From mikej at freeswitch.org Tue Dec 9 09:01:15 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 12:01:15 -0500 Subject: [Freeswitch-trunk] [commit] r10681 - freeswitch/trunk/build Message-ID: Author: mikej Date: Tue Dec 9 12:01:14 2008 New Revision: 10681 Log: formating Modified: freeswitch/trunk/build/Makefile Modified: freeswitch/trunk/build/Makefile ============================================================================== --- freeswitch/trunk/build/Makefile (original) +++ freeswitch/trunk/build/Makefile Tue Dec 9 12:01:14 2008 @@ -1,52 +1,51 @@ all: - @echo " +-------- FreeSWITCH Build Complete -----------+" - @echo " + FreeSWITCH has been successfully built. +" - @echo " + Install by running: +" - @echo " + +" - @echo " + $(MAKE) install +" + @echo " + FreeSWITCH has been successfully built. +" + @echo " + Install by running: +" + @echo " + +" + @echo " + $(MAKE) install +" @echo " +----------------------------------------------+" install: - @echo " +-------- FreeSWITCH install Complete ---------+" - @echo " + FreeSWITCH has been successfully installed. +" - @echo " + +" - @echo " + Install sounds: +" - @echo " + (uhd-sounds includes hd-sounds, sounds) +" - @echo " + (hd-sounds includes sounds) +" - @echo " + ------------------------------------ +" - @echo " + $(MAKE) uhd-sounds-install +" - @echo " + $(MAKE) uhd-moh-install +" - @echo " + +" - @echo " + $(MAKE) hd-sounds-install +" - @echo " + $(MAKE) hd-moh-install +" - @echo " + +" - @echo " + $(MAKE) sounds-install +" - @echo " + $(MAKE) moh-install +" - @echo " + +" - @echo " + Upgrade to latest: +" - @echo " + ---------------------------------- +" - @echo " + $(MAKE) current +" - @echo " + +" - @echo " + Rebuild all: +" - @echo " + ---------------------------------- +" - @echo " + $(MAKE) sure +" - @echo " + +" - @echo " + Install/Re-install default config: +" - @echo " + ---------------------------------- +" - @echo " + $(MAKE) samples +" - @echo " + +" - @echo " + +" - @echo " + Additional resources: +" - @echo " + ---------------------------------- +" - @echo " + http://www.freeswitch.org +" - @echo " + http://wiki.freeswitch.org +" - @echo " + http://jira.freeswitch.org +" - @echo " + http://lists.freeswitch.org +" - @echo " + +" - @echo " + irc.freenode.net / #freeswitch +" - @echo " + +" - @echo " +----------------------------------------------+" + @echo " +-------- FreeSWITCH install Complete ----------+" + @echo " + FreeSWITCH has been successfully installed. +" + @echo " + +" + @echo " + Install sounds: +" + @echo " + (uhd-sounds includes hd-sounds, sounds) +" + @echo " + (hd-sounds includes sounds) +" + @echo " + ------------------------------------ +" + @echo " + $(MAKE) uhd-sounds-install +" + @echo " + $(MAKE) uhd-moh-install +" + @echo " + +" + @echo " + $(MAKE) hd-sounds-install +" + @echo " + $(MAKE) hd-moh-install +" + @echo " + +" + @echo " + $(MAKE) sounds-install +" + @echo " + $(MAKE) moh-install +" + @echo " + +" + @echo " + Upgrade to latest: +" + @echo " + ---------------------------------- +" + @echo " + $(MAKE) current +" + @echo " + +" + @echo " + Rebuild all: +" + @echo " + ---------------------------------- +" + @echo " + $(MAKE) sure +" + @echo " + +" + @echo " + Install/Re-install default config: +" + @echo " + ---------------------------------- +" + @echo " + $(MAKE) samples +" + @echo " + +" + @echo " + +" + @echo " + Additional resources: +" + @echo " + ---------------------------------- +" + @echo " + http://www.freeswitch.org +" + @echo " + http://wiki.freeswitch.org +" + @echo " + http://jira.freeswitch.org +" + @echo " + http://lists.freeswitch.org +" + @echo " + +" + @echo " + irc.freenode.net / #freeswitch +" + @echo " + +" + @echo " +-----------------------------------------------+" From anthm at freeswitch.org Tue Dec 9 10:52:17 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 13:52:17 -0500 Subject: [Freeswitch-trunk] [commit] r10683 - freeswitch/trunk/src Message-ID: Author: anthm Date: Tue Dec 9 13:52:16 2008 New Revision: 10683 Log: cleanup code from yesterday Modified: freeswitch/trunk/src/switch_ivr_originate.c Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Tue Dec 9 13:52:16 2008 @@ -356,7 +356,7 @@ int sval = atoi(var); if (sval) { - ringback_data = switch_core_session_sprintf(session, "ringback:%d", sval); + ringback_data = switch_core_session_sprintf(session, "silence:%d", sval); } } } @@ -386,9 +386,6 @@ if (ringback_data) { char *tmp_data = NULL; - switch_buffer_create_dynamic(&ringback.audio_buffer, 512, 1024, 0); - switch_buffer_set_loops(ringback.audio_buffer, -1); - if (switch_is_file_path(ringback_data)) { char *ext; @@ -429,6 +426,9 @@ ringback.silence = 400; } } else { + switch_buffer_create_dynamic(&ringback.audio_buffer, 512, 1024, 0); + switch_buffer_set_loops(ringback.audio_buffer, -1); + teletone_init_session(&ringback.ts, 0, teletone_handler, &ringback); ringback.ts.rate = read_codec->implementation->actual_samples_per_second; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Play Ringback Tone [%s]\n", ringback_data); @@ -800,7 +800,7 @@ int sval = atoi(vvar); if (sval) { - ringback_data = switch_core_session_sprintf(session, "ringback:%d", sval); + ringback_data = switch_core_session_sprintf(session, "silence:%d", sval); } } @@ -1296,9 +1296,7 @@ if (ringback_data) { char *tmp_data = NULL; - switch_buffer_create_dynamic(&ringback.audio_buffer, 512, 1024, 0); - switch_buffer_set_loops(ringback.audio_buffer, -1); - + if (switch_is_file_path(ringback_data)) { char *ext; @@ -1339,6 +1337,9 @@ ringback.silence = 400; } } else { + switch_buffer_create_dynamic(&ringback.audio_buffer, 512, 1024, 0); + switch_buffer_set_loops(ringback.audio_buffer, -1); + teletone_init_session(&ringback.ts, 0, teletone_handler, &ringback); ringback.ts.rate = read_codec->implementation->actual_samples_per_second; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Play Ringback Tone [%s]\n", ringback_data); @@ -1436,6 +1437,7 @@ || (switch_channel_test_flag(caller_channel, CF_ANSWERED) || switch_channel_test_flag(caller_channel, CF_EARLY_MEDIA)))) { switch_status_t tstatus = SWITCH_STATUS_SUCCESS; + int silence = 0; if (switch_channel_media_ready(caller_channel)) { tstatus = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); @@ -1482,17 +1484,23 @@ break; } } else if (ringback.silence) { - write_frame.datalen = write_frame.codec->implementation->decoded_bytes_per_packet; - switch_generate_sln_silence((int16_t *) write_frame.data, write_frame.datalen / 2, ringback.silence); + silence = ringback.silence; } - - if ((ringback.fh || ringback.silence || ringback.audio_buffer) && write_frame.codec && write_frame.datalen) { - if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) { - break; - } + } else { + silence = 400; + } + + if (silence) { + write_frame.datalen = write_frame.codec->implementation->decoded_bytes_per_packet; + switch_generate_sln_silence((int16_t *) write_frame.data, write_frame.datalen / 2, silence); + } + + if ((ringback.fh || silence || ringback.audio_buffer) && write_frame.codec && write_frame.datalen) { + if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) { + break; } } - + } else { switch_yield(100000); } From anthm at freeswitch.org Tue Dec 9 12:28:13 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 15:28:13 -0500 Subject: [Freeswitch-trunk] [commit] r10686 - freeswitch/trunk/src Message-ID: Author: anthm Date: Tue Dec 9 15:28:12 2008 New Revision: 10686 Log: tweak Modified: freeswitch/trunk/src/switch_ivr_originate.c freeswitch/trunk/src/switch_rtp.c Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Tue Dec 9 15:28:12 2008 @@ -1490,12 +1490,12 @@ silence = 400; } - if (silence) { - write_frame.datalen = write_frame.codec->implementation->decoded_bytes_per_packet; - switch_generate_sln_silence((int16_t *) write_frame.data, write_frame.datalen / 2, silence); - } - if ((ringback.fh || silence || ringback.audio_buffer) && write_frame.codec && write_frame.datalen) { + if (silence) { + write_frame.datalen = write_frame.codec->implementation->decoded_bytes_per_packet; + switch_generate_sln_silence((int16_t *) write_frame.data, write_frame.datalen / 2, silence); + } + if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) { break; } @@ -1704,11 +1704,11 @@ } if (session) { - switch_core_session_reset(session, SWITCH_FALSE); + //switch_core_session_reset(session, SWITCH_FALSE); } if (write_codec.implementation) { - switch_core_codec_destroy(&write_codec); + //switch_core_codec_destroy(&write_codec); } for (i = 0; i < and_argc; i++) { Modified: freeswitch/trunk/src/switch_rtp.c ============================================================================== --- freeswitch/trunk/src/switch_rtp.c (original) +++ freeswitch/trunk/src/switch_rtp.c Tue Dec 9 15:28:12 2008 @@ -1906,7 +1906,7 @@ rtp_session->cn = 0; m++; } - + send_msg->header.m = m ? 1 : 0; memcpy(send_msg->body, data, datalen); From anthm at freeswitch.org Tue Dec 9 12:46:27 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 15:46:27 -0500 Subject: [Freeswitch-trunk] [commit] r10687 - freeswitch/trunk/src Message-ID: Author: anthm Date: Tue Dec 9 15:46:26 2008 New Revision: 10687 Log: tweak Modified: freeswitch/trunk/src/switch_ivr_originate.c Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Tue Dec 9 15:46:26 2008 @@ -1704,11 +1704,11 @@ } if (session) { - //switch_core_session_reset(session, SWITCH_FALSE); + switch_core_session_reset(session, SWITCH_FALSE); } if (write_codec.implementation) { - //switch_core_codec_destroy(&write_codec); + switch_core_codec_destroy(&write_codec); } for (i = 0; i < and_argc; i++) { From mikej at freeswitch.org Tue Dec 9 13:33:57 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 16:33:57 -0500 Subject: [Freeswitch-trunk] [commit] r10688 - freeswitch/trunk/src/mod/applications/mod_limit Message-ID: Author: mikej Date: Tue Dec 9 16:33:57 2008 New Revision: 10688 Log: initial merge of mod_limit hash based rework from scripts/contrib/mrene Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c (original) +++ freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Tue Dec 9 16:33:57 2008 @@ -25,7 +25,8 @@ * * Anthony Minessale II * Ken Rice + * * mod_limit.c -- Resource Limit Module * */ @@ -44,6 +45,10 @@ char *dbname; char *odbc_dsn; switch_mutex_t *mutex; + switch_mutex_t *limit_hash_mutex; + switch_hash_t *limit_hash; + switch_mutex_t *db_hash_mutex; + switch_hash_t *db_hash; #ifdef SWITCH_HAVE_ODBC switch_odbc_handle_t *master_odbc; #else @@ -51,6 +56,14 @@ #endif } globals; +struct limit_hash_item { + uint32_t total_usage; + uint32_t rate_usage; + time_t last_check; +}; +typedef struct limit_hash_item limit_hash_item_t; + + static char limit_sql[] = "CREATE TABLE limit_data (\n" " hostname VARCHAR(255),\n" " realm VARCHAR(255),\n" " id VARCHAR(255),\n" " uuid VARCHAR(255)\n" ");\n"; @@ -247,23 +260,53 @@ return status; } -static switch_status_t hanguphook(switch_core_session_t *session) +static switch_status_t db_state_handler(switch_core_session_t *session) { switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_state_t state = switch_channel_get_state(channel); - const char *realm = NULL; - const char *id = NULL; char *sql = NULL; if (state == CS_HANGUP || state == CS_ROUTING) { - id = switch_channel_get_variable(channel, "limit_id"); - realm = switch_channel_get_variable(channel, "limit_realm"); - sql = switch_mprintf("delete from limit_data where uuid='%q'", + sql = switch_mprintf("delete from limit_data where uuid='%q';", switch_core_session_get_uuid(session)); limit_execute_sql(sql, globals.mutex); switch_safe_free(sql); - switch_core_event_hook_remove_state_change(session, hanguphook); + switch_core_event_hook_remove_state_change(session, db_state_handler); + } + return SWITCH_STATUS_SUCCESS; +} + +static switch_status_t hash_state_handler(switch_core_session_t *session) +{ + switch_channel_t *channel = switch_core_session_get_channel(session); + switch_channel_state_t state = switch_channel_get_state(channel); + switch_hash_t *channel_hash = switch_channel_get_private(channel, "limit_hash"); + + /* The call is either hung up, or is going back into the dialplan, decrement appropriate couters */ + if (state == CS_HANGUP || state == CS_ROUTING) { + switch_hash_index_t *hi; + switch_mutex_lock(globals.mutex); + + /* Loop through the channel's hashtable which contains mapping to all the limit_hash_item_t referenced by that channel */ + for(hi = switch_hash_first(NULL, channel_hash); hi; hi = switch_hash_next(hi)) + { + void *val = NULL; + const void *key; + switch_ssize_t keylen; + limit_hash_item_t *item = NULL; + + switch_hash_this(hi, &key, &keylen, &val); + + item = (limit_hash_item_t*)val; + + /* We keep the structure even though the count is 0 so we do not allocate too often */ + item->total_usage--; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Usage for %s is now %d\n", (const char*)key, item->total_usage); + } + switch_core_event_hook_remove_state_change(session, hash_state_handler); + switch_mutex_unlock(globals.mutex); } + return SWITCH_STATUS_SUCCESS; } @@ -303,6 +346,7 @@ if (!switch_strlen_zero(cmd)) { mydata = strdup(cmd); + switch_assert(mydata); argc = switch_separate_string(mydata, '/', argv, (sizeof(argv) / sizeof(argv[0]))); } @@ -376,10 +420,15 @@ } if (argc < 3 || !argv[0]) { - goto error; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "USAGE: db %s\n", DB_USAGE); + return; } if (!strcasecmp(argv[0], "insert")) { + if (argc < 4) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "USAGE: db %s\n", DB_USAGE); + return; + } sql = switch_mprintf("delete from db_data where realm='%q' and data_key='%q'", argv[1], argv[2]); switch_assert(sql); limit_execute_sql(sql, globals.mutex); @@ -395,10 +444,109 @@ switch_assert(sql); limit_execute_sql(sql, globals.mutex); switch_safe_free(sql); - return; +} - error: - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "USAGE: db %s\n", DB_USAGE); +#define HASH_USAGE "[insert|delete]///" +#define HASH_DESC "save data" + +SWITCH_STANDARD_APP(hash_function) +{ + int argc = 0; + char *argv[4] = { 0 }; + char *mydata = NULL; + char *hash_key = NULL; + char *value = NULL; + + if (!switch_strlen_zero(data)) { + mydata = strdup(data); + switch_assert(mydata); + argc = switch_separate_string(mydata, '/', argv, (sizeof(argv) / sizeof(argv[0]))); + } + + if (argc < 3 || !argv[0]) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "USAGE: hash %s\n", HASH_USAGE); + goto end; + } + + hash_key = switch_mprintf("%s_%s", argv[1], argv[2]); + + switch_mutex_lock(globals.db_hash_mutex); + if (!strcasecmp(argv[0], "insert")) { + if ((value = switch_core_hash_find(globals.db_hash, hash_key))) { + free(value); + switch_core_hash_delete(globals.db_hash, hash_key); + } + value = strdup(argv[3]); + switch_assert(value); + switch_core_hash_insert(globals.db_hash, hash_key, value); + } else if (!strcasecmp(argv[0], "delete")) { + if ((value = switch_core_hash_find(globals.db_hash, hash_key))) { + switch_safe_free(value); + switch_core_hash_delete(globals.db_hash, hash_key); + } + } + switch_mutex_unlock(globals.db_hash_mutex); + +end: + switch_safe_free(mydata); + switch_safe_free(hash_key); +} + +#define HASH_API_USAGE "insert|select|delete/realm/key[/value]" +SWITCH_STANDARD_API(hash_api_function) +{ + int argc = 0; + char *argv[4] = { 0 }; + char *mydata = NULL; + char *value = NULL; + char *hash_key = NULL; + + switch_mutex_lock(globals.db_hash_mutex); + + if (!switch_strlen_zero(cmd)) { + mydata = strdup(cmd); + switch_assert(mydata); + argc = switch_separate_string(mydata, '/', argv, (sizeof(argv) / sizeof(argv[0]))); + } + + if (argc < 3 || !argv[0]) { + stream->write_function(stream, "-ERR Usage: hash %s\n", HASH_API_USAGE); + goto end; + } + + hash_key = switch_mprintf("%s_%s", argv[1], argv[2]); + + if (!strcasecmp(argv[0], "insert")) { + if (argc < 4) { + stream->write_function(stream, "-ERR Usage: hash %s\n", HASH_API_USAGE); + goto end; + } + if ((value = switch_core_hash_find(globals.db_hash, hash_key))) { + switch_safe_free(value); + switch_core_hash_delete(globals.db_hash, hash_key); + } + value = strdup(argv[3]); + switch_assert(value); + switch_core_hash_insert(globals.db_hash, hash_key, value); + stream->write_function(stream, "+OK\n"); + } else if (!strcasecmp(argv[0], "delete")) { + if ((value = switch_core_hash_find(globals.db_hash, hash_key))) { + switch_safe_free(value); + switch_core_hash_delete(globals.db_hash, hash_key); + } + stream->write_function(stream, "+OK\n"); + } else if (!strcasecmp(argv[0], "select")) { + if ((value = switch_core_hash_find(globals.db_hash, hash_key))) { + stream->write_function(stream, "%s", value); + } + } + +end: + switch_mutex_unlock(globals.db_hash_mutex); + switch_safe_free(mydata); + switch_safe_free(hash_key); + + return SWITCH_STATUS_SUCCESS; } SWITCH_STANDARD_API(group_api_function) @@ -513,8 +661,8 @@ } } -#define LIMIT_USAGE " [transfer_destination_number]" -#define LIMIT_DESC "limit access to an extension" +#define LIMIT_USAGE " [number [dialplan [context]]]" +#define LIMIT_DESC "limit access to a resource and transfer to an extension if the limit is exceeded" static char *limit_def_xfer_exten = "limit_exceeded"; SWITCH_STANDARD_APP(limit_function) @@ -530,6 +678,7 @@ char buf[80] = ""; callback_t cbt = { 0 }; switch_channel_t *channel = switch_core_session_get_channel(session); + switch_bool_t new_channel = SWITCH_FALSE; if (!switch_strlen_zero(data)) { mydata = switch_core_session_strdup(session, data); @@ -556,7 +705,8 @@ if (max < 0) { max = 0; } - + + new_channel = !switch_channel_get_variable(channel, "limit_realm"); switch_channel_set_variable(channel, "limit_realm", realm); switch_channel_set_variable(channel, "limit_id", id); switch_channel_set_variable(channel, "limit_max", argv[2]); @@ -572,7 +722,9 @@ goto done; } - switch_core_event_hook_add_state_change(session, hanguphook); + if (new_channel) { + switch_core_event_hook_add_state_change(session, db_state_handler); + } sql = switch_mprintf("insert into limit_data (hostname, realm, id, uuid) values('%q','%q','%q','%q');", globals.hostname, realm, id, switch_core_session_get_uuid(session)); @@ -583,6 +735,166 @@ switch_mutex_unlock(globals.mutex); } +#define LIMITHASH_USAGE " [/interval] [number [dialplan [context]]]" +#define LIMITHASH_DESC "limit access to a resource and transfer to an extension if the limit is exceeded" +SWITCH_STANDARD_APP(limit_hash_function) +{ + int argc = 0; + char *argv[6] = { 0 }; + char *mydata = NULL; + char *realm = NULL; + char *id = NULL; + char *hashkey = NULL; + char *xfer_exten = NULL; + int max = 0; + int interval = 0; + char *szinterval = NULL; + limit_hash_item_t *item = NULL; + switch_channel_t *channel = switch_core_session_get_channel(session); + time_t now = switch_timestamp(NULL); + switch_hash_t *channel_hash = NULL; + uint8_t increment = 1; + uint8_t new_channel = 0; + + /* Parse application data */ + if (!switch_strlen_zero(data)) { + mydata = switch_core_session_strdup(session, data); + argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); + } + + if (argc < 3) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "USAGE: limit_hash %s\n", LIMITHASH_USAGE); + return; + } + + realm = argv[0]; + id = argv[1]; + if ((szinterval = strchr(argv[2], '/'))) + { + *szinterval++ = '\0'; + interval = atoi(szinterval); + } + + max = atoi(argv[2]); + + if (argc >= 4) { + xfer_exten = argv[3]; + } else { + xfer_exten = limit_def_xfer_exten; + } + + if (max < 0) { + max = 0; + } + + hashkey = switch_core_session_sprintf(session, "%s_%s", realm, id); + + switch_mutex_lock(globals.limit_hash_mutex); + /* Check if that realm+id has ever been checked */ + if (!(item = (limit_hash_item_t*)switch_core_hash_find(globals.limit_hash, hashkey))) { + /* No, create an empty structure and add it, then continue like as if it existed */ + item = (limit_hash_item_t*)switch_core_alloc(globals.pool, sizeof(limit_hash_item_t)); + memset(item, 0, sizeof(limit_hash_item_t)); + switch_core_hash_insert(globals.limit_hash, hashkey, item); + } + + /* Did we already run on this channel before? */ + if ((channel_hash = switch_channel_get_private(channel, "limit_hash"))) + { + /* Yes, but check if we did that realm+id */ + if (!switch_core_hash_find(channel_hash, hashkey)) { + /* No, add it to our table so the state handler can take care of it */ + switch_core_hash_insert(channel_hash, hashkey, item); + } else { + /* Yes, dont touch total counter */ + increment = 0; + } + } else { + /* This is the first limit check on this channel, create a hashtable, set our prviate data and add a state handler */ + new_channel = 1; + } + + if (interval > 0) { + if (item->last_check <= (now - interval)) { + item->rate_usage = 1; + item->last_check = now; + } else { + /* Always increment rate when its checked as it doesnt depend on the channel */ + item->rate_usage++; + + if (item->rate_usage > (uint32_t)max) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Usage for %s exceeds maximum rate of %d/%ds, now at %d\n", hashkey, max, interval, item->rate_usage); + switch_ivr_session_transfer(session, xfer_exten, argv[4], argv[5]); + goto end; + } + } + } else if (item->total_usage + increment > (uint32_t)max) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Usage for %s is already at max value (%d)\n", hashkey, item->total_usage); + switch_ivr_session_transfer(session, xfer_exten, argv[4], argv[5]); + goto end; + } + + if (increment) { + item->total_usage++; + + if (interval == 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Usage for %s is now %d/%d\n", hashkey, item->total_usage, max); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Usage for %s is now %d/%d for the last %d seconds\n", hashkey, item->rate_usage, max, interval); + } + } + + + if (new_channel) { + switch_core_hash_init(&channel_hash, switch_core_session_get_pool(session)); + switch_core_hash_insert(channel_hash, hashkey, item); + switch_channel_set_private(channel, "limit_hash", channel_hash); + switch_core_event_hook_add_state_change(session, hash_state_handler); + } + +end: + switch_mutex_unlock(globals.limit_hash_mutex); +} + +#define LIMIT_HASH_USAGE_USAGE " " +SWITCH_STANDARD_API(limit_hash_usage_function) +{ + int argc = 0; + char *argv[3] = { 0 }; + char *mydata = NULL; + char *hash_key = NULL; + limit_hash_item_t *item = NULL; + uint32_t count = 0; + + switch_mutex_lock(globals.limit_hash_mutex); + + if (!switch_strlen_zero(cmd)) { + mydata = strdup(cmd); + switch_assert(mydata); + argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); + } + + if (argc < 2) { + stream->write_function(stream, "USAGE: limit_hash_usage %s\n", LIMIT_HASH_USAGE_USAGE); + goto end; + } + + hash_key = switch_mprintf("%s_%s", argv[0], argv[1]); + + if ((item = switch_core_hash_find(globals.limit_hash, hash_key))) { + count = item->total_usage; + } + + stream->write_function(stream, "%d", count); + +end: + switch_safe_free(mydata); + switch_safe_free(hash_key); + switch_mutex_unlock(globals.limit_hash_mutex); + + return SWITCH_STATUS_SUCCESS; +} + SWITCH_MODULE_LOAD_FUNCTION(mod_limit_load) { switch_status_t status; @@ -598,18 +910,29 @@ } switch_mutex_init(&globals.mutex, SWITCH_MUTEX_NESTED, globals.pool); + switch_mutex_init(&globals.limit_hash_mutex, SWITCH_MUTEX_NESTED, globals.pool); + switch_mutex_init(&globals.db_hash_mutex, SWITCH_MUTEX_NESTED, globals.pool); + switch_core_hash_init(&globals.limit_hash, pool); + switch_core_hash_init(&globals.db_hash, pool); /* connect my internal structure to the blank pointer passed to me */ *module_interface = switch_loadable_module_create_module_interface(pool, modname); SWITCH_ADD_APP(app_interface, "limit", "Limit", LIMIT_DESC, limit_function, LIMIT_USAGE, SAF_SUPPORT_NOMEDIA); + SWITCH_ADD_APP(app_interface, "limit_hash", "Limit (hash)", LIMITHASH_DESC, limit_hash_function, LIMITHASH_USAGE, SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "db", "Insert to the db", DB_DESC, db_function, DB_USAGE, SAF_SUPPORT_NOMEDIA); + SWITCH_ADD_APP(app_interface, "hash", "Insert into the hashtable", HASH_DESC, hash_function, HASH_USAGE, SAF_SUPPORT_NOMEDIA) SWITCH_ADD_APP(app_interface, "group", "Manage a group", GROUP_DESC, group_function, GROUP_USAGE, SAF_SUPPORT_NOMEDIA); + SWITCH_ADD_API(commands_api_interface, "limit_hash_usage", "Gets the usage count of a limited resource", limit_hash_usage_function, LIMIT_HASH_USAGE_USAGE); SWITCH_ADD_API(commands_api_interface, "db", "db get/set", db_api_function, "[insert|delete|select]///"); switch_console_set_complete("add db insert"); switch_console_set_complete("add db delete"); switch_console_set_complete("add db select"); + SWITCH_ADD_API(commands_api_interface, "hash", "hash get/set", hash_api_function, "[insert|delete|select]///"); + switch_console_set_complete("add hash insert"); + switch_console_set_complete("add hash delete"); + switch_console_set_complete("add hash select"); SWITCH_ADD_API(commands_api_interface, "group", "group [insert|delete|call]", group_api_function, "[insert|delete|call]::"); switch_console_set_complete("add group insert"); switch_console_set_complete("add group delete"); From mikej at freeswitch.org Tue Dec 9 14:37:01 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 17:37:01 -0500 Subject: [Freeswitch-trunk] [commit] r10689 - freeswitch/trunk/src/mod/applications/mod_voicemail Message-ID: Author: mikej Date: Tue Dec 9 17:37:00 2008 New Revision: 10689 Log: MODAPP-178 Voicemail messages occasionally lost / stranded Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original) +++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Tue Dec 9 17:37:00 2008 @@ -1103,7 +1103,7 @@ status = SWITCH_STATUS_SUCCESS; *cc.buf = '\0'; } else { - status = vm_macro_get(session, VM_RECORD_FILE_CHECK_MACRO, key_buf, input, sizeof(input), 1, "", &term, profile->digit_timeout); + (void)vm_macro_get(session, VM_RECORD_FILE_CHECK_MACRO, key_buf, input, sizeof(input), 1, "", &term, profile->digit_timeout); } if (!strcmp(input, profile->listen_file_key)) { @@ -1111,7 +1111,7 @@ } else if (!strcmp(input, profile->record_file_key)) { goto record_file; } else { - TRY_CODE(switch_ivr_phrase_macro(session, VM_ACK_MACRO, "saved", NULL, NULL)); + (void)switch_ivr_phrase_macro(session, VM_ACK_MACRO, "saved", NULL, NULL); goto end; } } @@ -2873,13 +2873,13 @@ switch_snprintf(key_buf, sizeof(key_buf), "%s:%s", profile->urgent_key, profile->terminator_key); - vm_macro_get(session, VM_RECORD_URGENT_CHECK_MACRO, key_buf, input, sizeof(input), 1, "", &term, profile->digit_timeout); + (void)vm_macro_get(session, VM_RECORD_URGENT_CHECK_MACRO, key_buf, input, sizeof(input), 1, "", &term, profile->digit_timeout); if (*profile->urgent_key == *input) { read_flags = URGENT_FLAG_STRING; priority = 1; - TRY_CODE(switch_ivr_phrase_macro(session, VM_ACK_MACRO, "marked-urgent", NULL, NULL)); + (void)switch_ivr_phrase_macro(session, VM_ACK_MACRO, "marked-urgent", NULL, NULL); } else { - TRY_CODE(switch_ivr_phrase_macro(session, VM_ACK_MACRO, "saved", NULL, NULL)); + (void)switch_ivr_phrase_macro(session, VM_ACK_MACRO, "saved", NULL, NULL); } } From anthm at freeswitch.org Tue Dec 9 15:31:12 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 18:31:12 -0500 Subject: [Freeswitch-trunk] [commit] r10690 - freeswitch/trunk/src Message-ID: Author: anthm Date: Tue Dec 9 18:31:12 2008 New Revision: 10690 Log: suppress frame timestamp when raw write mode is set Modified: freeswitch/trunk/src/switch_rtp.c Modified: freeswitch/trunk/src/switch_rtp.c ============================================================================== --- freeswitch/trunk/src/switch_rtp.c (original) +++ freeswitch/trunk/src/switch_rtp.c Tue Dec 9 18:31:12 2008 @@ -2198,7 +2198,7 @@ } else { data = frame->data; len = frame->datalen; - ts = (uint32_t) frame->timestamp; + ts = switch_test_flag(rtp_session, SWITCH_RTP_FLAG_RAW_WRITE) ? (uint32_t) frame->timestamp : 0; } return rtp_common_write(rtp_session, send_msg, data, len, payload, ts, &frame->flags); From anthm at freeswitch.org Tue Dec 9 16:06:26 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 19:06:26 -0500 Subject: [Freeswitch-trunk] [commit] r10691 - freeswitch/trunk/src Message-ID: Author: anthm Date: Tue Dec 9 19:06:25 2008 New Revision: 10691 Log: suppress frame timestamp when raw write mode is set (missed a spot) Modified: freeswitch/trunk/src/switch_ivr_originate.c Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Tue Dec 9 19:06:25 2008 @@ -351,7 +351,7 @@ if (switch_channel_test_flag(caller_channel, CF_PROXY_MODE) || switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA)) { ringback_data = NULL; - } else { + } else if (switch_strlen_zero(ringback_data)) { if ((var = switch_channel_get_variable(caller_channel, SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE))) { int sval = atoi(var); @@ -793,7 +793,7 @@ if (switch_channel_test_flag(caller_channel, CF_PROXY_MODE) || switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA)) { ringback_data = NULL; - } else { + } else if (switch_strlen_zero(ringback_data)) { const char *vvar; if ((vvar = switch_channel_get_variable(caller_channel, SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE))) { From brian at freeswitch.org Tue Dec 9 16:38:48 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 19:38:48 -0500 Subject: [Freeswitch-trunk] [commit] r10692 - freeswitch/trunk/support-d Message-ID: Author: brian Date: Tue Dec 9 19:38:47 2008 New Revision: 10692 Log: add more goodies Modified: freeswitch/trunk/support-d/.bashrc Modified: freeswitch/trunk/support-d/.bashrc ============================================================================== --- freeswitch/trunk/support-d/.bashrc (original) +++ freeswitch/trunk/support-d/.bashrc Tue Dec 9 19:38:47 2008 @@ -18,11 +18,12 @@ export PS1='\n\[\033[01;31m\]\u@\h\[\033[01;36m\] [\d \@] \[\033[01;33m\] \w\n\[\033[00m\]<\#>:' export PS2="\[\033[1m\]> \[\033[0m\]" export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig -alias icvs='cvs -d :ext:anthm at cvs.sourceforge.net:/cvsroot/iaxclient' -export CVS_RSH=ssh export VISUAL=emacs - umask 022 +alias e='emacs' +alias tcommit='svn commit --no-auth-cache --username=anthm' +alias mcommit='svn commit --no-auth-cache --username=mikej' +alias dp='emacs /usr/local/freeswitch/conf/dialplan/default.xml' # End of file From anthm at freeswitch.org Tue Dec 9 16:48:25 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 19:48:25 -0500 Subject: [Freeswitch-trunk] [commit] r10693 - in freeswitch/trunk/src: . include mod/applications/mod_dptools mod/applications/mod_fax mod/applications/mod_fifo mod/applications/mod_voicemail mod/languages/mod_spidermonkey Message-ID: Author: anthm Date: Tue Dec 9 19:48:24 2008 New Revision: 10693 Log: add sync param to sleep so you can choose to sync audio or not on sleep (reswig to follow) Modified: freeswitch/trunk/src/include/switch_cpp.h freeswitch/trunk/src/include/switch_ivr.h freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c freeswitch/trunk/src/mod/applications/mod_fax/mod_fax.c freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c freeswitch/trunk/src/switch_cpp.cpp freeswitch/trunk/src/switch_ivr.c freeswitch/trunk/src/switch_ivr_menu.c freeswitch/trunk/src/switch_ivr_originate.c freeswitch/trunk/src/switch_ivr_play_say.c Modified: freeswitch/trunk/src/include/switch_cpp.h ============================================================================== --- freeswitch/trunk/src/include/switch_cpp.h (original) +++ freeswitch/trunk/src/include/switch_cpp.h Tue Dec 9 19:48:24 2008 @@ -313,7 +313,7 @@ * */ SWITCH_DECLARE(int) streamFile(char *file, int starting_sample_count = 0); - SWITCH_DECLARE(int) sleep(int ms); + SWITCH_DECLARE(int) sleep(int ms, int sync=0); /** \brief flush any pending events */ Modified: freeswitch/trunk/src/include/switch_ivr.h ============================================================================== --- freeswitch/trunk/src/include/switch_ivr.h (original) +++ freeswitch/trunk/src/include/switch_ivr.h Tue Dec 9 19:48:24 2008 @@ -110,7 +110,7 @@ \param args arguements to pass for callbacks etc \return SWITCH_STATUS_SUCCESS if the channel is still up */ -SWITCH_DECLARE(switch_status_t) switch_ivr_sleep(switch_core_session_t *session, uint32_t ms, switch_input_args_t *args); +SWITCH_DECLARE(switch_status_t) switch_ivr_sleep(switch_core_session_t *session, uint32_t ms, switch_bool_t sync, switch_input_args_t *args); SWITCH_DECLARE(switch_status_t) switch_ivr_park(switch_core_session_t *session, switch_input_args_t *args); Modified: freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c (original) +++ freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c Tue Dec 9 19:48:24 2008 @@ -1307,7 +1307,7 @@ switch_channel_set_variable(channel, SWITCH_PLAYBACK_TERMINATOR_USED, "" ); - switch_ivr_sleep(session, ms, &args); + switch_ivr_sleep(session, ms, SWITCH_TRUE, &args); } } Modified: freeswitch/trunk/src/mod/applications/mod_fax/mod_fax.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_fax/mod_fax.c (original) +++ freeswitch/trunk/src/mod/applications/mod_fax/mod_fax.c Tue Dec 9 19:48:24 2008 @@ -608,7 +608,7 @@ goto done; } - switch_ivr_sleep(session, 250, NULL); + switch_ivr_sleep(session, 250, SWITCH_TRUE, NULL); while (switch_channel_ready(channel)) { int tx = 0; Modified: freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c (original) +++ freeswitch/trunk/src/mod/applications/mod_fifo/mod_fifo.c Tue Dec 9 19:48:24 2008 @@ -1167,7 +1167,7 @@ if (announce) { switch_ivr_play_file(session, NULL, announce, NULL); } else { - switch_ivr_sleep(session, 500, NULL); + switch_ivr_sleep(session, 500, SWITCH_TRUE, NULL); } switch_channel_set_variable(other_channel, "fifo_serviced_by", my_id); Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original) +++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Tue Dec 9 19:48:24 2008 @@ -1403,7 +1403,7 @@ forward_file_path = switch_core_session_sprintf(session, "%s%smsg_%s.wav", SWITCH_GLOBAL_dirs.temp_dir, SWITCH_PATH_SEPARATOR, uuid_str); TRY_CODE(create_file(session, profile, VM_RECORD_MESSAGE_MACRO, forward_file_path, &message_len, SWITCH_TRUE, NULL, NULL)); if ((new_path = vm_merge_file(session, profile, forward_file_path, cbt->file_path))) { - switch_ivr_sleep(session, 1500, NULL); + switch_ivr_sleep(session, 1500, SWITCH_TRUE, NULL); forward_file_path = new_path; } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error merging files\n"); @@ -1637,7 +1637,7 @@ *global_buf = '\0'; while (switch_channel_ready(channel)) { - switch_ivr_sleep(session, 100, NULL); + switch_ivr_sleep(session, 100, SWITCH_TRUE, NULL); switch (vm_check_state) { case VM_CHECK_START: Modified: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c (original) +++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Tue Dec 9 19:48:24 2008 @@ -1723,7 +1723,8 @@ switch_input_args_t args = { 0 }; int32 ms = 0; jsval ret = JS_TRUE; - + int sync; + METHOD_SANITY_CHECK(); channel = switch_core_session_get_channel(jss->session); CHANNEL_SANITY_CHECK(); @@ -1755,12 +1756,16 @@ } } + if (argc > 2) { + JS_ValueToInt32(cx, argv[2], &sync); + } + cb_state.ret = BOOLEAN_TO_JSVAL(JS_FALSE); cb_state.saveDepth = JS_SuspendRequest(cx); args.input_callback = dtmf_func; args.buf = bp; args.buflen = len; - switch_ivr_sleep(jss->session, ms, &args); + switch_ivr_sleep(jss->session, ms, sync, &args); JS_ResumeRequest(cx, cb_state.saveDepth); check_hangup_hook(jss, &ret); *rval = cb_state.ret; Modified: freeswitch/trunk/src/switch_cpp.cpp ============================================================================== --- freeswitch/trunk/src/switch_cpp.cpp (original) +++ freeswitch/trunk/src/switch_cpp.cpp Tue Dec 9 19:48:24 2008 @@ -833,7 +833,7 @@ } -SWITCH_DECLARE(int) CoreSession::sleep(int ms) { +SWITCH_DECLARE(int) CoreSession::sleep(int ms, int sync) { switch_status_t status; @@ -841,7 +841,7 @@ sanity_check(-1); begin_allow_threads(); - status = switch_ivr_sleep(session, ms, ap); + status = switch_ivr_sleep(session, ms, (switch_bool_t) sync, ap); end_allow_threads(); return status == SWITCH_STATUS_SUCCESS ? 1 : 0; Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Tue Dec 9 19:48:24 2008 @@ -38,7 +38,7 @@ #include #include "stfu.h" -SWITCH_DECLARE(switch_status_t) switch_ivr_sleep(switch_core_session_t *session, uint32_t ms, switch_input_args_t *args) +SWITCH_DECLARE(switch_status_t) switch_ivr_sleep(switch_core_session_t *session, uint32_t ms, switch_bool_t sync, switch_input_args_t *args) { switch_channel_t *channel = switch_core_session_get_channel(session); switch_status_t status = SWITCH_STATUS_SUCCESS; @@ -80,6 +80,13 @@ write_frame.buflen = SWITCH_RECOMMENDED_BUFFER_SIZE; write_frame.datalen = imp.decoded_bytes_per_packet; write_frame.samples = write_frame.datalen / sizeof(int16_t); + + if (!switch_channel_media_ready(channel)) { + if ((status = switch_channel_pre_answer(channel)) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot establish media.\n"); + return SWITCH_STATUS_FALSE; + } + } } cng_frame.data = data; @@ -87,7 +94,7 @@ cng_frame.buflen = 2; switch_set_flag((&cng_frame), SFF_CNG); - if (!switch_channel_test_flag(channel, CF_PROXY_MODE)) { + if (sync && !switch_channel_test_flag(channel, CF_PROXY_MODE)) { switch_channel_audio_sync(channel); } Modified: freeswitch/trunk/src/switch_ivr_menu.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_menu.c (original) +++ freeswitch/trunk/src/switch_ivr_menu.c Tue Dec 9 19:48:24 2008 @@ -529,7 +529,7 @@ } errs++; if (status == SWITCH_STATUS_SUCCESS) { - status = switch_ivr_sleep(session, 1000, NULL); + status = switch_ivr_sleep(session, 1000, SWITCH_FALSE, NULL); } /* breaks are ok too */ if (SWITCH_STATUS_IS_BREAK(status)) { Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Tue Dec 9 19:48:24 2008 @@ -91,7 +91,7 @@ return NULL; } - switch_ivr_sleep(collect->session, 0, NULL); + switch_ivr_sleep(collect->session, 0, SWITCH_TRUE, NULL); if (!strcasecmp(collect->key, "exec")) { char *data; @@ -951,7 +951,7 @@ if (try > 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Originate attempt %d/%d in %d ms\n", try + 1, retries, sleep_ms); if (caller_channel) { - switch_ivr_sleep(session, sleep_ms, NULL); + switch_ivr_sleep(session, sleep_ms, SWITCH_TRUE, NULL); } else { switch_yield(sleep_ms * 1000); } @@ -1749,11 +1749,11 @@ } if (*bleg) { - switch_ivr_sleep(*bleg, 0, NULL); + switch_ivr_sleep(*bleg, 0, SWITCH_TRUE, NULL); } if (session) { - switch_ivr_sleep(session, 0, NULL); + switch_ivr_sleep(session, 0, SWITCH_TRUE, NULL); } if (var_event && var_event != ovars) { Modified: freeswitch/trunk/src/switch_ivr_play_say.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_play_say.c (original) +++ freeswitch/trunk/src/switch_ivr_play_say.c Tue Dec 9 19:48:24 2008 @@ -327,7 +327,7 @@ } } - switch_ivr_sleep(session, pause, NULL); + switch_ivr_sleep(session, pause, SWITCH_FALSE, NULL); } } From brian at freeswitch.org Tue Dec 9 16:51:14 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 09 Dec 2008 19:51:14 -0500 Subject: [Freeswitch-trunk] [commit] r10694 - in freeswitch/trunk/src/mod/languages: mod_java mod_java/src/org/freeswitch/swig mod_lua mod_managed mod_managed/managed mod_perl mod_python Message-ID: Author: brian Date: Tue Dec 9 19:51:14 2008 New Revision: 10694 Log: reswig Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java (original) +++ freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java Tue Dec 9 19:51:14 2008 @@ -245,8 +245,12 @@ return freeswitchJNI.CoreSession_streamFile__SWIG_1(swigCPtr, this, file); } + public int sleep(int ms, int sync) { + return freeswitchJNI.CoreSession_sleep__SWIG_0(swigCPtr, this, ms, sync); + } + public int sleep(int ms) { - return freeswitchJNI.CoreSession_sleep(swigCPtr, this, ms); + return freeswitchJNI.CoreSession_sleep__SWIG_1(swigCPtr, this, ms); } public int flushEvents() { Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java (original) +++ freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java Tue Dec 9 19:51:14 2008 @@ -136,7 +136,8 @@ public final static native String CoreSession_playAndGetDigits(long jarg1, CoreSession jarg1_, int jarg2, int jarg3, int jarg4, int jarg5, String jarg6, String jarg7, String jarg8, String jarg9); public final static native int CoreSession_streamFile__SWIG_0(long jarg1, CoreSession jarg1_, String jarg2, int jarg3); public final static native int CoreSession_streamFile__SWIG_1(long jarg1, CoreSession jarg1_, String jarg2); - public final static native int CoreSession_sleep(long jarg1, CoreSession jarg1_, int jarg2); + public final static native int CoreSession_sleep__SWIG_0(long jarg1, CoreSession jarg1_, int jarg2, int jarg3); + public final static native int CoreSession_sleep__SWIG_1(long jarg1, CoreSession jarg1_, int jarg2); public final static native int CoreSession_flushEvents(long jarg1, CoreSession jarg1_); public final static native int CoreSession_flushDigits(long jarg1, CoreSession jarg1_); public final static native int CoreSession_setAutoHangup(long jarg1, CoreSession jarg1_, boolean jarg2); Modified: freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp Tue Dec 9 19:51:14 2008 @@ -2674,7 +2674,26 @@ } -SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sleep(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { +SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sleep_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jint jarg3) { + jint jresult = 0 ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(CoreSession **)&jarg1; + arg2 = (int)jarg2; + arg3 = (int)jarg3; + result = (int)(arg1)->sleep(arg2,arg3); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sleep_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { jint jresult = 0 ; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; Modified: freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp Tue Dec 9 19:51:14 2008 @@ -6077,7 +6077,38 @@ } -static int _wrap_CoreSession_sleep(lua_State* L) { +static int _wrap_CoreSession_sleep__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int result; + + SWIG_check_num_args("sleep",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("sleep",1,"CoreSession *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("sleep",2,"int"); + if(!lua_isnumber(L,3)) SWIG_fail_arg("sleep",3,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_sleep",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (int)lua_tonumber(L, 2); + arg3 = (int)lua_tonumber(L, 3); + result = (int)(arg1)->sleep(arg2,arg3); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} + + +static int _wrap_CoreSession_sleep__SWIG_1(lua_State* L) { int SWIG_arg = -1; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; @@ -6105,6 +6136,62 @@ } +static int _wrap_CoreSession_sleep(lua_State* L) { + int argc; + int argv[4]={ + 1,2,3,4 + }; + + argc = lua_gettop(L); + if (argc == 2) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isnumber(L,argv[1]); + } + if (_v) { + return _wrap_CoreSession_sleep__SWIG_1(L); + } + } + } + if (argc == 3) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isnumber(L,argv[1]); + } + if (_v) { + { + _v = lua_isnumber(L,argv[2]); + } + if (_v) { + return _wrap_CoreSession_sleep__SWIG_0(L); + } + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'CoreSession_sleep'"); + lua_error(L);return 0; +} + + static int _wrap_CoreSession_flushEvents(lua_State* L) { int SWIG_arg = -1; CoreSession *arg1 = (CoreSession *) 0 ; Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx Tue Dec 9 19:51:14 2008 @@ -905,6 +905,17 @@ } +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *) "send_silence_when_idle"; + + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CURRENT_APPLICATION_VARIABLE_get() { char * jresult ; char *result = 0 ; @@ -20008,17 +20019,19 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_sleep(void * jarg1, unsigned long jarg2, void * jarg3) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_sleep(void * jarg1, unsigned long jarg2, int jarg3, void * jarg4) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; uint32_t arg2 ; - switch_input_args_t *arg3 = (switch_input_args_t *) 0 ; + switch_bool_t arg3 ; + switch_input_args_t *arg4 = (switch_input_args_t *) 0 ; switch_status_t result; arg1 = (switch_core_session_t *)jarg1; arg2 = (uint32_t)jarg2; - arg3 = (switch_input_args_t *)jarg3; - result = (switch_status_t)switch_ivr_sleep(arg1,arg2,arg3); + arg3 = (switch_bool_t)jarg3; + arg4 = (switch_input_args_t *)jarg4; + result = (switch_status_t)switch_ivr_sleep(arg1,arg2,arg3,arg4); jresult = result; return jresult; } @@ -26694,15 +26707,17 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_sleep(void * jarg1, int jarg2) { +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_sleep(void * jarg1, int jarg2, int jarg3) { int jresult ; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; + int arg3 = (int) 0 ; int result; arg1 = (CoreSession *)jarg1; arg2 = (int)jarg2; - result = (int)(arg1)->sleep(arg2); + arg3 = (int)jarg3; + result = (int)(arg1)->sleep(arg2,arg3); jresult = result; return jresult; } Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Tue Dec 9 19:51:14 2008 @@ -292,8 +292,8 @@ return ret; } - public int sleep(int ms) { - int ret = freeswitchPINVOKE.CoreSession_sleep(swigCPtr, ms); + public int sleep(int ms, int sync) { + int ret = freeswitchPINVOKE.CoreSession_sleep(swigCPtr, ms, sync); return ret; } @@ -2834,8 +2834,8 @@ return ret; } - public static switch_status_t switch_ivr_sleep(SWIGTYPE_p_switch_core_session session, uint ms, switch_input_args_t args) { - switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_sleep(SWIGTYPE_p_switch_core_session.getCPtr(session), ms, switch_input_args_t.getCPtr(args)); + public static switch_status_t switch_ivr_sleep(SWIGTYPE_p_switch_core_session session, uint ms, switch_bool_t sync, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_sleep(SWIGTYPE_p_switch_core_session.getCPtr(session), ms, (int)sync, switch_input_args_t.getCPtr(args)); return ret; } @@ -3953,6 +3953,7 @@ public static readonly int SWITCH_MAX_DTMF_DURATION = freeswitchPINVOKE.SWITCH_MAX_DTMF_DURATION_get(); public static readonly string SWITCH_PATH_SEPARATOR = freeswitchPINVOKE.SWITCH_PATH_SEPARATOR_get(); public static readonly string SWITCH_URL_SEPARATOR = freeswitchPINVOKE.SWITCH_URL_SEPARATOR_get(); + public static readonly string SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE = freeswitchPINVOKE.SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE_get(); public static readonly string SWITCH_CURRENT_APPLICATION_VARIABLE = freeswitchPINVOKE.SWITCH_CURRENT_APPLICATION_VARIABLE_get(); public static readonly string SWITCH_CURRENT_APPLICATION_DATA_VARIABLE = freeswitchPINVOKE.SWITCH_CURRENT_APPLICATION_DATA_VARIABLE_get(); public static readonly string SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE = freeswitchPINVOKE.SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE_get(); @@ -4423,6 +4424,9 @@ [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_URL_SEPARATOR_get")] public static extern string SWITCH_URL_SEPARATOR_get(); + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE_get")] + public static extern string SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE_get(); + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CURRENT_APPLICATION_VARIABLE_get")] public static extern string SWITCH_CURRENT_APPLICATION_VARIABLE_get(); @@ -8996,7 +9000,7 @@ public static extern int switch_ivr_parse_next_event(HandleRef jarg1); [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_sleep")] - public static extern int switch_ivr_sleep(HandleRef jarg1, uint jarg2, HandleRef jarg3); + public static extern int switch_ivr_sleep(HandleRef jarg1, uint jarg2, int jarg3, HandleRef jarg4); [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_park")] public static extern int switch_ivr_park(HandleRef jarg1, HandleRef jarg2); @@ -10499,7 +10503,7 @@ public static extern int CoreSession_StreamFile(HandleRef jarg1, string jarg2, int jarg3); [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_sleep")] - public static extern int CoreSession_sleep(HandleRef jarg1, int jarg2); + public static extern int CoreSession_sleep(HandleRef jarg1, int jarg2, int jarg3); [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_flushEvents")] public static extern int CoreSession_flushEvents(HandleRef jarg1); Modified: freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp Tue Dec 9 19:51:14 2008 @@ -8146,7 +8146,55 @@ } -XS(_wrap_CoreSession_sleep) { +XS(_wrap_CoreSession_sleep__SWIG_0) { + { + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int result; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + int val3 ; + int ecode3 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 3) || (items > 3)) { + SWIG_croak("Usage: CoreSession_sleep(self,ms,sync);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sleep" "', argument " "1"" of type '" "CoreSession *""'"); + } + arg1 = reinterpret_cast< CoreSession * >(argp1); + ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoreSession_sleep" "', argument " "2"" of type '" "int""'"); + } + arg2 = static_cast< int >(val2); + ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoreSession_sleep" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + result = (int)(arg1)->sleep(arg2,arg3); + ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ; + + + + XSRETURN(argvi); + fail: + + + + SWIG_croak_null(); + } +} + + +XS(_wrap_CoreSession_sleep__SWIG_1) { { CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; @@ -8184,6 +8232,98 @@ } +XS(_wrap_CoreSession_sleep) { + dXSARGS; + + { + unsigned long _index = 0; + SWIG_TypeRank _rank = 0; + if (items == 2) { + SWIG_TypeRank _ranki = 0; + SWIG_TypeRank _rankm = 0; + SWIG_TypeRank _pi = 1; + int _v = 0; + { + void *vptr = 0; + int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0); + _v = SWIG_CheckState(res); + } + if (!_v) goto check_1; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + { + { + int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL); + _v = SWIG_CheckState(res); + } + } + if (!_v) goto check_1; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + if (!_index || (_ranki < _rank)) { + _rank = _ranki; _index = 1; + if (_rank == _rankm) goto dispatch; + } + } + check_1: + + if (items == 3) { + SWIG_TypeRank _ranki = 0; + SWIG_TypeRank _rankm = 0; + SWIG_TypeRank _pi = 1; + int _v = 0; + { + void *vptr = 0; + int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0); + _v = SWIG_CheckState(res); + } + if (!_v) goto check_2; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + { + { + int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL); + _v = SWIG_CheckState(res); + } + } + if (!_v) goto check_2; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + { + { + int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), NULL); + _v = SWIG_CheckState(res); + } + } + if (!_v) goto check_2; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + if (!_index || (_ranki < _rank)) { + _rank = _ranki; _index = 2; + if (_rank == _rankm) goto dispatch; + } + } + check_2: + + dispatch: + switch(_index) { + case 1: + ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_sleep__SWIG_1); return; + case 2: + ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_sleep__SWIG_0); return; + } + } + + croak("No matching function for overloaded 'CoreSession_sleep'"); + XSRETURN(0); +} + + XS(_wrap_CoreSession_flushEvents) { { CoreSession *arg1 = (CoreSession *) 0 ; Modified: freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp Tue Dec 9 19:51:14 2008 @@ -8018,7 +8018,47 @@ } -SWIGINTERN PyObject *_wrap_CoreSession_sleep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_CoreSession_sleep__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int result; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:CoreSession_sleep",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sleep" "', argument " "1"" of type '" "CoreSession *""'"); + } + arg1 = reinterpret_cast< CoreSession * >(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoreSession_sleep" "', argument " "2"" of type '" "int""'"); + } + arg2 = static_cast< int >(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoreSession_sleep" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + result = (int)(arg1)->sleep(arg2,arg3); + resultobj = SWIG_From_int(static_cast< int >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CoreSession_sleep__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; @@ -8049,6 +8089,62 @@ } +SWIGINTERN PyObject *_wrap_CoreSession_sleep(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = (int)PyObject_Length(args); + for (ii = 0; (ii < argc) && (ii < 3); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CoreSession_sleep__SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CoreSession_sleep__SWIG_0(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_sleep'.\n" + " Possible C/C++ prototypes are:\n" + " sleep(CoreSession *,int,int)\n" + " sleep(CoreSession *,int)\n"); + return NULL; +} + + SWIGINTERN PyObject *_wrap_CoreSession_flushEvents(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; CoreSession *arg1 = (CoreSession *) 0 ; From anthm at freeswitch.org Wed Dec 10 08:52:49 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 10 Dec 2008 11:52:49 -0500 Subject: [Freeswitch-trunk] [commit] r10699 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Wed Dec 10 11:52:48 2008 New Revision: 10699 Log: fine tune presence stuff Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Wed Dec 10 11:52:48 2008 @@ -888,7 +888,6 @@ int done = 0; const char *ct = "no/idea"; time_t exptime = switch_timestamp(NULL) + 3600; - char exp[80] = ""; int is_dialog = 0; sofia_profile_t *ext_profile = NULL, *profile = helper->profile; @@ -1147,9 +1146,9 @@ pl = gen_pidf(user_agent, clean_id, profile->url, open, rpid, prpid, status, &ct); } - switch_snprintf(exp, sizeof(exp), "active;expires=%ld", (long) exptime); nua_handle_bind(nh, &mod_sofia_globals.keep_private); - nua_notify(nh, SIPTAG_SUBSCRIPTION_STATE_STR(exp), SIPTAG_EVENT_STR(event), SIPTAG_CONTENT_TYPE_STR(ct), SIPTAG_PAYLOAD_STR(pl), TAG_END()); + nua_notify(nh, SIPTAG_SUBSCRIPTION_STATE_STR("active"), + SIPTAG_EVENT_STR(event), SIPTAG_CONTENT_TYPE_STR(ct), SIPTAG_PAYLOAD_STR(pl), TAG_END()); end: @@ -1174,7 +1173,6 @@ char *expires = argv[10]; char *profile_name = argv[13]; char *body = argv[14]; - char *exp; char *id = NULL; nua_handle_t *nh; int expire_sec = atoi(expires); @@ -1199,14 +1197,12 @@ if (expire_sec < 0) { expire_sec = 3600; } - exp = switch_mprintf("active;expires=%ld", expire_sec); + nua_handle_bind(nh, &mod_sofia_globals.keep_private); - nua_notify(nh, - SIPTAG_SUBSCRIPTION_STATE_STR(exp), + nua_notify(nh, SIPTAG_SUBSCRIPTION_STATE_STR("active"), SIPTAG_EVENT_STR(event), SIPTAG_CONTENT_TYPE_STR("application/simple-message-summary"), SIPTAG_PAYLOAD_STR(body), TAG_END()); switch_safe_free(id); - switch_safe_free(exp); h->total++; @@ -1498,7 +1494,12 @@ full_via = sip_header_as_string(profile->home, (void *) sip->sip_via); exp_raw = (sip->sip_expires ? sip->sip_expires->ex_delta : 3600); - exp = (long) switch_timestamp(NULL) + exp_raw + 120; + if (exp_raw) { + exp = (long) switch_timestamp(NULL) + exp_raw + 120; + } else { + exp = 0; + sub_state = nua_substate_terminated; + } if (sofia_test_pflag(profile, PFLAG_MULTIREG)) { sql = switch_mprintf("delete from sip_subscriptions where call_id='%q'", call_id); From anthm at freeswitch.org Wed Dec 10 12:54:25 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 10 Dec 2008 15:54:25 -0500 Subject: [Freeswitch-trunk] [commit] r10702 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Wed Dec 10 15:54:24 2008 New Revision: 10702 Log: x-mas presence Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h Wed Dec 10 15:54:24 2008 @@ -242,6 +242,7 @@ switch_event_node_t *roster_node; switch_event_node_t *custom_node; switch_event_node_t *mwi_node; + int debug_presence; }; extern struct mod_sofia_globals mod_sofia_globals; Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Wed Dec 10 15:54:24 2008 @@ -1577,6 +1577,8 @@ char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcasecmp(var, "log-level")) { su_log_set_level(NULL, atoi(val)); + } else if (!strcasecmp(var, "debug-presence")) { + mod_sofia_globals.debug_presence = atoi(val); } } } Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Wed Dec 10 15:54:24 2008 @@ -315,6 +315,7 @@ { sofia_profile_t *profile = NULL; switch_hash_index_t *hi; + const void *var; void *val; char *from = switch_event_get_header(event, "from"); char *proto = switch_event_get_header(event, "proto"); @@ -381,9 +382,19 @@ switch_assert(sql != NULL); switch_mutex_lock(mod_sofia_globals.hash_mutex); for (hi = switch_hash_first(NULL, mod_sofia_globals.profile_hash); hi; hi = switch_hash_next(hi)) { - switch_hash_this(hi, NULL, NULL, &val); + switch_hash_this(hi, &var, NULL, &val); profile = (sofia_profile_t *) val; + + if (strcmp((char *)var, profile->name)) { + if (mod_sofia_globals.debug_presence > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s is an alias, skipping\n", (char *) var); + } + continue; + } if (profile->pres_type != PRES_TYPE_FULL) { + if (mod_sofia_globals.debug_presence > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s is passive, skipping\n", (char *) var); + } continue; } helper.profile = profile; @@ -423,6 +434,7 @@ return; } + switch (event->event_id) { case SWITCH_EVENT_PRESENCE_PROBE: if (proto) { @@ -455,7 +467,20 @@ "(sip_registrations.sip_host='%q' or sip_registrations.presence_hosts like '%%%q%%')", probe_host, probe_euser, probe_host, probe_host); switch_assert(sql); + + + if (mod_sofia_globals.debug_presence > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s START_PRESENCE_PROBE_SQL\n", profile->name); + } + + if (mod_sofia_globals.debug_presence > 1) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s DUMP PRESENCE_PROBE_SQL:\n%s\n", profile->name, sql); + } + sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, profile->ireg_mutex, sql, sofia_presence_resub_callback, profile); + if (mod_sofia_globals.debug_presence > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s END_PRESENCE_PROBE_SQL\n\n", profile->name); + } sofia_glue_release_profile(profile); switch_safe_free(sql); @@ -465,6 +490,36 @@ switch_safe_free(probe_user); } return; + default: + break; + } + + + + if (!mod_sofia_globals.profile_hash) + goto done; + + switch_mutex_lock(mod_sofia_globals.hash_mutex); + for (hi = switch_hash_first(NULL, mod_sofia_globals.profile_hash); hi; hi = switch_hash_next(hi)) { + switch_hash_this(hi, &var, NULL, &val); + profile = (sofia_profile_t *) val; + + if (strcmp((char *)var, profile->name)) { + if (mod_sofia_globals.debug_presence > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s is an alias, skipping\n", (char *) var); + } + continue; + } + + if (profile->pres_type != PRES_TYPE_FULL) { + if (mod_sofia_globals.debug_presence > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s is passive, skipping\n", (char *) var); + } + continue; + } + + + switch (event->event_id) { case SWITCH_EVENT_PRESENCE_IN: sql = switch_mprintf( @@ -479,8 +534,9 @@ "(sip_subscriptions.sub_to_user=sip_presence.sip_user and sip_subscriptions.sub_to_host=sip_presence.sip_host and " "sip_subscriptions.profile_name=sip_presence.profile_name) " "where (event='%q' or event='%q') and sub_to_user='%q' " - "and (sub_to_host='%q' or presence_hosts like '%%%q%%')", - switch_str_nil(status), switch_str_nil(rpid), host, event_type, alt_event_type, euser, host, host); + "and (sub_to_host='%q' or presence_hosts like '%%%q%%') " + "and (sip_subscriptions.profile_name = '%q' or sip_subscriptions.presence_hosts != sip_subscriptions.sub_to_host)", + switch_str_nil(status), switch_str_nil(rpid), host, event_type, alt_event_type, euser, host, host, profile->name); break; case SWITCH_EVENT_PRESENCE_OUT: sql = switch_mprintf( @@ -495,24 +551,15 @@ "(sip_subscriptions.sub_to_user=sip_presence.sip_user and sip_subscriptions.sub_to_host=sip_presence.sip_host and " "sip_subscriptions.profile_name=sip_presence.profile_name) " "where (event='%q' or event='%q') and sub_to_user='%q' " - "and (sub_to_host='%q' or presence_hosts like '%%%q%%')", - switch_str_nil(status), switch_str_nil(rpid), host, event_type, alt_event_type, euser, host, host); - break; - default: + "and (sub_to_host='%q' or presence_hosts like '%%%q%%') ", + "and (sip_subscriptions.profile_name = '%q' or sip_subscriptions.presence_hosts != sip_subscriptions.sub_to_host)", + switch_str_nil(status), switch_str_nil(rpid), host, event_type, alt_event_type, euser, host, host, profile->name); break; - } - - if (!mod_sofia_globals.profile_hash) - goto done; - - switch_mutex_lock(mod_sofia_globals.hash_mutex); - for (hi = switch_hash_first(NULL, mod_sofia_globals.profile_hash); hi; hi = switch_hash_next(hi)) { - switch_hash_this(hi, NULL, NULL, &val); - profile = (sofia_profile_t *) val; - if (profile->pres_type != PRES_TYPE_FULL) { - continue; + default: + break; } + if (sql) { struct presence_helper helper = { 0 }; helper.profile = profile; @@ -520,28 +567,47 @@ SWITCH_STANDARD_STREAM(helper.stream); switch_assert(helper.stream.data); + + + if (mod_sofia_globals.debug_presence > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s START_PRESENCE_SQL\n", profile->name); + } + + if (mod_sofia_globals.debug_presence > 1) { + char *buf; + switch_event_serialize(event, &buf, SWITCH_FALSE); + switch_assert(buf); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "DUMP PRESENCE SQL:\n%s\nEVENT DUMP:\n%s\n", sql, buf); + free(buf); + } + sofia_glue_execute_sql_callback(profile, SWITCH_FALSE, NULL, sql, sofia_presence_sub_callback, &helper); + if (mod_sofia_globals.debug_presence > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s END_PRESENCE_SQL\n\n", profile->name); + } + + switch_safe_free(sql); if (!switch_strlen_zero((char *) helper.stream.data)) { - char *this = (char *) helper.stream.data; + char *this_sql = (char *) helper.stream.data; char *next = NULL; char *last = NULL; do { - if ((next = strchr(this, ';'))) { + if ((next = strchr(this_sql, ';'))) { *next++ = '\0'; while (*next == '\n' || *next == ' ' || *next == '\r') { *next++ = '\0'; } } - if (!switch_strlen_zero(this) && (!last || strcmp(last, this))) { - sofia_glue_execute_sql(profile, &this, SWITCH_FALSE); - last = this; + if (!switch_strlen_zero(this_sql) && (!last || strcmp(last, this_sql))) { + sofia_glue_execute_sql(profile, &this_sql, SWITCH_FALSE); + last = this_sql; } - this = next; - } while (this); + this_sql = next; + } while (this_sql); } switch_safe_free(helper.stream.data); helper.stream.data = NULL; @@ -579,14 +645,13 @@ while (mod_sofia_globals.running == 1) { int count = 0; - + if (switch_queue_trypop(mod_sofia_globals.presence_queue, &pop) == SWITCH_STATUS_SUCCESS) { switch_event_t *event = (switch_event_t *) pop; if (!pop) { break; } - actual_sofia_presence_event_handler(event); switch_event_destroy(&event); count++; @@ -747,6 +812,10 @@ proto = NULL; } + if (mod_sofia_globals.debug_presence > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "%s PRESENCE_PROBE %s@%s\n", profile->name, user, host); + } + if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) { switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", proto ? proto : SOFIA_CHAT_PROTO); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", profile->url); @@ -948,6 +1017,12 @@ clean_id = switch_mprintf("sip:%s+%s@%s", proto, sub_to_user, sub_to_host); } + if (mod_sofia_globals.debug_presence > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, + "SEND PRESENCE\nTo: \t%s@%s\nFrom: \t%s@%s\nCall-ID: \t%s\nProfile:\t%s [%s]\n\n", + sub_to_user, sub_to_host, user, host, call_id, profile_name, helper->profile->name); + } + if (!strcasecmp(sub_to_host, host)) { /* same host */ id = switch_mprintf("sip:%s+%s@%s", proto, sub_to_user, sub_to_host); Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Wed Dec 10 15:54:24 2008 @@ -969,6 +969,20 @@ "Register:\nFrom: [%s@%s]\nContact: [%s]\nExpires: [%ld]\n", to_user, reg_host, contact_str, (long) exptime); } + +#if 0 + if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", rpid); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", profile->url); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "user-agent", + (sip && sip->sip_user_agent) ? sip->sip_user_agent->g_string : "unknown"); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", to_user, reg_host); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", "Registered"); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence"); + switch_event_fire(&event); + } +#else if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) { switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", "sip"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", profile->url); @@ -980,6 +994,7 @@ switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence"); switch_event_fire(&event); } +#endif } else { if (multi_reg) { char *icontact, *p; From mikej at freeswitch.org Wed Dec 10 13:24:04 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 10 Dec 2008 16:24:04 -0500 Subject: [Freeswitch-trunk] [commit] r10703 - freeswitch/trunk/libs/win32 Message-ID: Author: mikej Date: Wed Dec 10 16:24:03 2008 New Revision: 10703 Log: FSBUILD-69 use up to date version of svnversion.exe so we reliably create the generated version header on windows. Modified: freeswitch/trunk/libs/win32/util.vbs Modified: freeswitch/trunk/libs/win32/util.vbs ============================================================================== --- freeswitch/trunk/libs/win32/util.vbs (original) +++ freeswitch/trunk/libs/win32/util.vbs Wed Dec 10 16:24:03 2008 @@ -250,15 +250,41 @@ strVerRev = FindVersionStringInConfigure(VersionDir & "configure.in", "SWITCH_VERSION_REVISION") If Right(tmpFolder, 1) <> "\" Then tmpFolder = tmpFolder & "\" End If - If Not FSO.FileExists(tmpFolder & "svnversion.exe") Then - Wget ToolsBase & "svnversion.exe", tmpFolder + If Not FSO.FileExists(tmpFolder & "fs_svnversion.exe") Then + Wget ToolsBase & "fs_svnversion.exe", tmpFolder End If + + If Not FSO.FileExists(tmpFolder & "libsvn_diff-1.dll") Then + Wget ToolsBase & "libsvn_diff-1.dll", tmpFolder + End If + If Not FSO.FileExists(tmpFolder & "libsvn_subr-1.dll") Then + Wget ToolsBase & "libsvn_subr-1.dll", tmpFolder + End If + If Not FSO.FileExists(tmpFolder & "libsvn_wc-1.dll") Then + Wget ToolsBase & "libsvn_wc-1.dll", tmpFolder + End If + If Not FSO.FileExists(tmpFolder & "intl3_svn.dll") Then + Wget ToolsBase & "intl3_svn.dll", tmpFolder + End If + If Not FSO.FileExists(tmpFolder & "libapr-1.dll") Then + Wget ToolsBase & "libapr-1.dll", tmpFolder + End If + If Not FSO.FileExists(tmpFolder & "libaprutil-1.dll") Then + Wget ToolsBase & "libaprutil-1.dll", tmpFolder + End If + If Not FSO.FileExists(tmpFolder & "libapriconv-1.dll") Then + Wget ToolsBase & "libapriconv-1.dll", tmpFolder + End If + If Not FSO.FileExists(tmpFolder & "libsvn_delta-1.dll") Then + Wget ToolsBase & "libsvn_delta-1.dll", tmpFolder + End If + Dim sLastFile Const OverwriteIfExist = -1 Const ForReading = 1 if strVerRev = "" Then - VersionCmd="svnversion " & quote & VersionDir & "." & quote & " -n" + VersionCmd="fs_svnversion " & quote & VersionDir & "." & quote & " -n" Set MyFile = fso.CreateTextFile(tmpFolder & "tmpVersion.Bat", True) MyFile.WriteLine("@" & "cd " & quote & tmpFolder & quote ) MyFile.WriteLine("@" & VersionCmd) From brian at freeswitch.org Wed Dec 10 13:35:20 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Wed, 10 Dec 2008 16:35:20 -0500 Subject: [Freeswitch-trunk] [commit] r10704 - freeswitch/trunk/src/mod/applications/mod_http Message-ID: Author: brian Date: Wed Dec 10 16:35:19 2008 New Revision: 10704 Log: more to come Added: freeswitch/trunk/src/mod/applications/mod_http/ From ericdc at freeswitch.org Wed Dec 10 13:43:27 2008 From: ericdc at freeswitch.org (FreeSWITCH SVN) Date: Wed, 10 Dec 2008 16:43:27 -0500 Subject: [Freeswitch-trunk] [commit] r10705 - freeswitch/trunk/src/mod/applications/mod_http Message-ID: Author: ericdc Date: Wed Dec 10 16:43:26 2008 New Revision: 10705 Log: Initial upload. Added: freeswitch/trunk/src/mod/applications/mod_http/Makefile freeswitch/trunk/src/mod/applications/mod_http/arraylist.c freeswitch/trunk/src/mod/applications/mod_http/arraylist.h freeswitch/trunk/src/mod/applications/mod_http/bits.h freeswitch/trunk/src/mod/applications/mod_http/config.h freeswitch/trunk/src/mod/applications/mod_http/debug.c freeswitch/trunk/src/mod/applications/mod_http/debug.h freeswitch/trunk/src/mod/applications/mod_http/http_req.c freeswitch/trunk/src/mod/applications/mod_http/http_req.h freeswitch/trunk/src/mod/applications/mod_http/json.h freeswitch/trunk/src/mod/applications/mod_http/json_object.c freeswitch/trunk/src/mod/applications/mod_http/json_object.h freeswitch/trunk/src/mod/applications/mod_http/json_object_private.h freeswitch/trunk/src/mod/applications/mod_http/json_tokener.c freeswitch/trunk/src/mod/applications/mod_http/json_tokener.h freeswitch/trunk/src/mod/applications/mod_http/json_util.c freeswitch/trunk/src/mod/applications/mod_http/json_util.h freeswitch/trunk/src/mod/applications/mod_http/linkhash.c freeswitch/trunk/src/mod/applications/mod_http/linkhash.h freeswitch/trunk/src/mod/applications/mod_http/mod_http.c freeswitch/trunk/src/mod/applications/mod_http/printbuf.c freeswitch/trunk/src/mod/applications/mod_http/printbuf.h freeswitch/trunk/src/mod/applications/mod_http/url_encoding.c freeswitch/trunk/src/mod/applications/mod_http/url_encoding.h Added: freeswitch/trunk/src/mod/applications/mod_http/Makefile ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/Makefile Wed Dec 10 16:43:26 2008 @@ -0,0 +1,5 @@ +BASE=../../../.. +LOCAL_SOURCES=arraylist.c debug.c json_object.c json_tokener.c json_util.c linkhash.c printbuf.c url_encoding.c http_req.c +LOCAL_OBJS=arraylist.o debug.o json_object.o json_tokener.o json_util.o linkhash.o printbuf.o url_encoding.o http_req.o +include $(BASE)/build/modmake.rules + Added: freeswitch/trunk/src/mod/applications/mod_http/arraylist.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/arraylist.c Wed Dec 10 16:43:26 2008 @@ -0,0 +1,93 @@ +/* + * $Id: arraylist.c,v 1.4 2006/01/26 02:16:28 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#include "config.h" + +#if STDC_HEADERS +# include +# include +#endif /* STDC_HEADERS */ + +#if HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ + +#include "bits.h" +#include "arraylist.h" + +struct array_list* +array_list_new(array_list_free_fn *free_fn) +{ + struct array_list *this; + + if(!(this = calloc(1, sizeof(struct array_list)))) return NULL; + this->size = ARRAY_LIST_DEFAULT_SIZE; + this->length = 0; + this->free_fn = free_fn; + if(!(this->array = calloc(sizeof(void*), this->size))) { + free(this); + return NULL; + } + return this; +} + +extern void +array_list_free(struct array_list *this) +{ + int i; + for(i = 0; i < this->length; i++) + if(this->array[i]) this->free_fn(this->array[i]); + free(this->array); + free(this); +} + +void* +array_list_get_idx(struct array_list *this, int i) +{ + if(i >= this->length) return NULL; + return this->array[i]; +} + +static int array_list_expand_internal(struct array_list *this, int max) +{ + void *t; + int new_size; + + if(max < this->size) return 0; + new_size = max(this->size << 1, max); + if(!(t = realloc(this->array, new_size*sizeof(void*)))) return -1; + this->array = t; + (void)memset(this->array + this->size, 0, (new_size-this->size)*sizeof(void*)); + this->size = new_size; + return 0; +} + +int +array_list_put_idx(struct array_list *this, int idx, void *data) +{ + if(array_list_expand_internal(this, idx)) return -1; + if(this->array[idx]) this->free_fn(this->array[idx]); + this->array[idx] = data; + if(this->length <= idx) this->length = idx + 1; + return 0; +} + +int +array_list_add(struct array_list *this, void *data) +{ + return array_list_put_idx(this, this->length, data); +} + +int +array_list_length(struct array_list *this) +{ + return this->length; +} Added: freeswitch/trunk/src/mod/applications/mod_http/arraylist.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/arraylist.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,45 @@ +/* + * $Id: arraylist.h,v 1.4 2006/01/26 02:16:28 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#ifndef _arraylist_h_ +#define _arraylist_h_ + +#define ARRAY_LIST_DEFAULT_SIZE 32 + +typedef void (array_list_free_fn) (void *data); + +struct array_list +{ + void **array; + int length; + int size; + array_list_free_fn *free_fn; +}; + +extern struct array_list* +array_list_new(array_list_free_fn *free_fn); + +extern void +array_list_free(struct array_list *al); + +extern void* +array_list_get_idx(struct array_list *al, int i); + +extern int +array_list_put_idx(struct array_list *al, int i, void *data); + +extern int +array_list_add(struct array_list *al, void *data); + +extern int +array_list_length(struct array_list *al); + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/bits.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/bits.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,27 @@ +/* + * $Id: bits.h,v 1.10 2006/01/30 23:07:57 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#ifndef _bits_h_ +#define _bits_h_ + +#ifndef min +#define min(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#ifndef max +#define max(a,b) ((a) > (b) ? (a) : (b)) +#endif + +#define hexdigit(x) (((x) <= '9') ? (x) - '0' : ((x) & 7) + 9) +#define error_ptr(error) ((void*)error) +#define is_error(ptr) ((unsigned long)ptr > (unsigned long)-4000L) + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/config.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/config.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,118 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +/* #undef HAVE_DOPRNT */ + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#define HAVE_MALLOC 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `open' function. */ +#define HAVE_OPEN 1 + +/* Define to 1 if your system has a GNU libc compatible `realloc' function, + and to 0 otherwise. */ +#define HAVE_REALLOC 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDARG_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strerror' function. */ +#define HAVE_STRERROR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strncasecmp' function. */ +#define HAVE_STRNCASECMP 1 + +/* Define to 1 if you have the `strndup' function. */ +#define HAVE_STRNDUP 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYSLOG_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `vasprintf' function. */ +#define HAVE_VASPRINTF 1 + +/* Define to 1 if you have the `vprintf' function. */ +#define HAVE_VPRINTF 1 + +/* Define to 1 if you have the `vsnprintf' function. */ +#define HAVE_VSNPRINTF 1 + +/* Define to 1 if you have the `vsyslog' function. */ +#define HAVE_VSYSLOG 1 + +/* Name of package */ +#define PACKAGE "" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "michael at metaparadigm.com" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "JSON C Library" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "JSON C Library 0.3" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "json-c" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "0.3" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "0.3" + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to rpl_malloc if the replacement function should be used. */ +/* #undef malloc */ + +/* Define to rpl_realloc if the replacement function should be used. */ +/* #undef realloc */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ Added: freeswitch/trunk/src/mod/applications/mod_http/debug.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/debug.c Wed Dec 10 16:43:26 2008 @@ -0,0 +1,94 @@ +/* + * $Id: debug.c,v 1.5 2006/01/26 02:16:28 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#include "config.h" + +#include +#include +#include +#include + +#if HAVE_SYSLOG_H +# include +#endif /* HAVE_SYSLOG_H */ + +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ + +#if HAVE_SYS_PARAM_H +#include +#endif /* HAVE_SYS_PARAM_H */ + +#include "debug.h" + +static int _syslog = 0; +static int _debug = 0; + +void mc_set_debug(int debug) { _debug = debug; } +int mc_get_debug() { return _debug; } + +extern void mc_set_syslog(int syslog) +{ + _syslog = syslog; +} + +void mc_abort(const char *msg, ...) +{ + va_list ap; + va_start(ap, msg); +#if HAVE_VSYSLOG + if(_syslog) { + vsyslog(LOG_ERR, msg, ap); + } else +#endif + vprintf(msg, ap); + exit(1); +} + + +void mc_debug(const char *msg, ...) +{ + va_list ap; + if(_debug) { + va_start(ap, msg); +#if HAVE_VSYSLOG + if(_syslog) { + vsyslog(LOG_DEBUG, msg, ap); + } else +#endif + vprintf(msg, ap); + } +} + +void mc_error(const char *msg, ...) +{ + va_list ap; + va_start(ap, msg); +#if HAVE_VSYSLOG + if(_syslog) { + vsyslog(LOG_ERR, msg, ap); + } else +#endif + vfprintf(stderr, msg, ap); +} + +void mc_info(const char *msg, ...) +{ + va_list ap; + va_start(ap, msg); +#if HAVE_VSYSLOG + if(_syslog) { + vsyslog(LOG_INFO, msg, ap); + } else +#endif + vfprintf(stderr, msg, ap); +} Added: freeswitch/trunk/src/mod/applications/mod_http/debug.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/debug.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,24 @@ +/* + * $Id: debug.h,v 1.5 2006/01/30 23:07:57 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#ifndef _DEBUG_H_ +#define _DEBUG_H_ + +extern void mc_set_debug(int debug); +extern int mc_get_debug(); + +extern void mc_set_syslog(int syslog); +extern void mc_abort(const char *msg, ...); +extern void mc_debug(const char *msg, ...); +extern void mc_error(const char *msg, ...); +extern void mc_info(const char *msg, ...); + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/http_req.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/http_req.c Wed Dec 10 16:43:26 2008 @@ -0,0 +1,680 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2008, Eric des Courtis + * + * 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. + * + * Eric des Courtis + * Copyright (C) Benbria. All Rights Reserved. + * + * Contributor(s): + * + * Eric des Courtis + * + * + * http_req.c -- HTTP client implementation + * + */ + +#include "http_req.h" + +/* +extern int dprintf(int, const char *, ...); +extern int isblank(int); +*/ + +/* NOTE: v = version, header = h, status = s, newline = n, phrase = p */ +static accept_state_t state_start(char c, state_machine_t *sm); +static accept_state_t state_shp (char c, state_machine_t *sm); +static accept_state_t state_n (char c, state_machine_t *sm); +static accept_state_t state_vhp_A(char c, state_machine_t *sm); +static accept_state_t state_vhp_B(char c, state_machine_t *sm); +static accept_state_t state_vhp_C(char c, state_machine_t *sm); +static accept_state_t state_vhp_D(char c, state_machine_t *sm); +static accept_state_t state_vhp_E(char c, state_machine_t *sm); +static accept_state_t state_vhp_F(char c, state_machine_t *sm); +static accept_state_t state_vhp_G(char c, state_machine_t *sm); +static accept_state_t state_vhp_H(char c, state_machine_t *sm); +static accept_state_t state_hp_A (char c, state_machine_t *sm); +static accept_state_t state_hp_B (char c, state_machine_t *sm); +static accept_state_t state_p (char c, state_machine_t *sm); +static accept_state_t state_error(char c, state_machine_t *sm); + +static int read_all(int s, char *buf, size_t len); + +#ifdef DEBUG +int main(int argc, char *argv[]) +{ + http_response_t response; + http_request_t request; + int ret; + int i; + + if(argc != 2) return EXIT_FAILURE; + + request.method = GET; + request.version = DEFAULT_HTTP_VERSION; + request.url = argv[1]; + request.header_len = 0; + request.body_len = 0; + + ret = http_req(&request, &response); + if(ret == ERROR) return EXIT_FAILURE; + + printf("Version : %s\n", response.version); + printf("Status Code : %d\n", response.status_code); + printf("Phrase : %s\n", response.phrase); + + for(i = 0; i < response.header_len; i++){ + printf( + "Header : key = [%s] value = [%s]\n", + response.headers[i].field_name, response.headers[i].value + ); + } + + fflush(stdout); + write(STDOUT_FILENO, response.body, response.body_len); + printf("\n"); + + free_http_response(&response); + + return EXIT_SUCCESS; +} +#endif + +int http_req(http_request_t *req, http_response_t *res) +{ + uint32_t addr; + int s; + int ret; + uint16_t port = 0; + size_t len; + struct sockaddr_in sck; + struct hostent *hst; + char *hostname; + char *method; + char *buf; + int buf_len; + ssize_t i; + int j; + int l; + int m; + int p; + int q = 0; + char f = HTTP_FALSE; + char port_s[MAX_PORT_LEN]; + sighandler_t sig; + struct timeval tv; + + tv.tv_sec = 1; + tv.tv_usec = 0; + + + (void)memset(&sck, 0, sizeof(sck)); + + sig = signal(SIGPIPE, SIG_IGN); + if(sig == SIG_ERR){ + fprintf(stderr, "Cannot ignore SIGPIPE signal\n"); + return ERROR; + } + + s = socket(PF_INET, SOCK_STREAM, 0); + if(s == ERROR){ + perror("Could not create socket"); + return ERROR; + } + + (void)setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); + (void)setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); + + len = strlen(req->url); + hostname = (char *)malloc(len * sizeof(char) + 1); + if(hostname == NULL){ + perror("Could not allocate memory for hostname"); + close(s); + return ERROR; + } + + EMPTY_STRING(hostname); + + l = strlen(req->url) + 1; + m = strlen("http://"); + for(p = 0, j = m; j < l; j++){ + if(req->url[j] == ':'){ + strncpy(hostname, req->url + m, j - m); + hostname[j - m] = '\0'; + f = HTTP_TRUE; + p = j; + continue; + } + + if((req->url[j] == '/' || req->url[j] == '\0') && f == HTTP_TRUE){ + if((j - p) < MAX_PORT_LEN){ + strncpy(port_s, req->url + p + 1, j - p); + port_s[j - p] = '\0'; + port = (uint16_t)atoi(port_s); + }else port = 0; + q = j; + break; + } + + if((req->url[j] == '/' || req->url[j] == '\0') && f == HTTP_FALSE){ + strncpy(hostname, req->url + m, j - m); + hostname[j - m] = '\0'; + port = DEFAULT_HTTP_PORT; + q = j; + break; + } + } + + if(port == 0 || hostname[0] == '\0'){ + fprintf(stderr, "Invalid URL\n"); + close(s); + free(hostname); + return ERROR; + } + + l = strlen(hostname); + for(j = 0; j < l; j++){ + if(hostname[j] == '/'){ + hostname[j] = '\0'; + break; + } + } + + hst = gethostbyname(hostname); + if(hst == NULL){ + herror("Could not find host"); + close(s); + free(hostname); + return ERROR; + } + + addr = *((uint32_t *)hst->h_addr_list[0]); + + sck.sin_family = AF_INET; + sck.sin_port = htons(port); + sck.sin_addr.s_addr = addr; + + ret = connect(s, (struct sockaddr *)&sck, sizeof(sck)); + if(ret == ERROR){ + perror("Could not connect to host"); + close(s); + free(hostname); + return ERROR; + } + + switch(req->method){ + case GET: + method = HTTP_GET_METHOD; + break; + case HEAD: + method = HTTP_HEAD_METHOD; + break; + case POST: + method = HTTP_POST_METHOD; + break; + case DELETE: + method = HTTP_DELETE_METHOD; + break; + case PUT: + method = HTTP_PUT_METHOD; + break; + default: + method = HTTP_GET_METHOD; + } + + if(req->url[q] == '/'){ + dprintf(s, "%s %s HTTP/%s\r\n", method, req->url + q, req->version); + }else{ + dprintf(s, "%s /%s HTTP/%s\r\n", method, req->url + q, req->version); + } + + if(port != DEFAULT_HTTP_PORT) + dprintf(s, "Host: %s:%d\r\n", hostname, port); + else dprintf(s, "Host: %s\r\n", hostname); + dprintf(s, "Connection: close\r\n"); + dprintf(s, "Content-Length: %d\r\n", req->body_len); + + for(i = 0; i < req->header_len; i++){ + dprintf( + s, + "%s: %s\r\n", + req->headers[i].field_name, + req->headers[i].value + ); + } + + dprintf(s, "\r\n"); + + + if(req->body != NULL && req->body_len != 0){ + ret = write(s, req->body, req->body_len); + if(ret == ERROR){ + perror("Could not write body to socket"); + free(hostname); + return ERROR; + } + } + + buf = (char *)malloc(RECV_BUFF_SIZE * sizeof(char)); + if(buf == NULL){ + perror("Could not allocate memory for buffer"); + close(s); + free(hostname); + return ERROR; + } + + buf_len = read_all(s, buf, RECV_BUFF_SIZE -1); + if(buf_len == ERROR){ + perror("Could not read into buffer"); + free(hostname); + return ERROR; + } + buf[buf_len] = '\0'; + + close(s); + + (void)signal(SIGPIPE, sig); + free(hostname); + return http_parse_response(buf, buf_len, res); +} + +int http_parse_response(char *buf, ssize_t buf_len, http_response_t *response) +{ + token_t token; + state_machine_t sm; + int pos; + ssize_t size; + char buff[STATUS_CODE_LEN]; + int old_pos; + int nt; + int i; + int j; + int f; + + INIT_STATE_MACHINE(&sm); + + sm.buf = buf; + sm.buf_len = buf_len; + + pos = sm.pos; + token = get_next_token(&sm); + if(token != VERSION){ + fprintf(stderr, "ERROR %d-%d\n", VERSION, token); + return ERROR; + } + + size = sm.pos - pos; + response->version = (char *)malloc((size + 1) * sizeof(char)); + if(response->version == NULL){ + perror("Cannot allocate memory for version number"); + return ERROR; + } + strncpy(response->version, sm.buf + pos, size); + response->version[size] = '\0'; + + pos = sm.pos; + token = get_next_token(&sm); + if(token != STATUS_CODE){ + fprintf(stderr, "ERROR %d-%d\n", STATUS_CODE, token); + return ERROR; + } + + size = sm.pos - pos; + + buff[STATUS_CODE_LEN - 1] = '\0'; + strncpy(buff, sm.buf + pos, STATUS_CODE_LEN - 1); + + response->status_code = atoi(buff); + + pos = sm.pos; + token = get_next_token(&sm); + if(token != PHRASE){ + fprintf(stderr, "ERROR %d-%d\n", PHRASE, token); + return ERROR; + } + + size = sm.pos - pos - 2; + response->phrase = (char *)malloc((size + 1) * sizeof(char)); + if(response->phrase == NULL){ + perror("Cannot allocate memory for phrase"); + return ERROR; + } + strncpy(response->phrase, sm.buf + pos, size); + response->phrase[size] = '\0'; + + old_pos = sm.pos; + nt = 0; + f = HTTP_FALSE; + do{ + token = get_next_token(&sm); + switch(token){ + case PHRASE: + case STATUS_CODE: + f = HTTP_FALSE; + case VERSION: + case NEWLINE: + break; + case HEADER: + if(f == HTTP_FALSE){ + nt++; + f = HTTP_TRUE; + } + else f = HTTP_FALSE; + break; + case SYNTAX_ERROR: + return ERROR; + } + + if(token != HEADER && token != PHRASE && token != STATUS_CODE) break; + }while(token != SYNTAX_ERROR); + + if(nt != 0){ + response->headers = (http_header_t *)malloc(sizeof(http_header_t)*nt); + if(response->headers == NULL){ + perror("Could not allocate memory for headers"); + return ERROR; + } + }else response->headers = NULL; + + response->header_len = nt; + + sm.pos = old_pos; + for(i = 0; i < nt; i++){ + pos = sm.pos; + sm.state = state_start; + sm.stop = HTTP_FALSE; + token = get_next_token(&sm); + size = sm.pos - pos; + size -= 2; + + response->headers[i].field_name = + (char *)malloc((size + 1) * sizeof(char)); + + if(response->headers[i].field_name == NULL){ + perror("Could not allocate memory for header"); + return ERROR; + } + + strncpy(response->headers[i].field_name, sm.buf + pos, size); + response->headers[i].field_name[size] = '\0'; + + pos = sm.pos; + token = get_next_token(&sm); + if(token == HEADER || token == STATUS_CODE){ + for(j = 0; + ((sm.buf + pos)[j] == '\r' + && (sm.buf + pos)[j + 1] == '\n') == 0; + j++ + ); + size = j; + sm.pos = j + 2; + }else size = sm.pos - pos - 2; + + response->headers[i].value = + (char *)malloc((size + 1) * sizeof(char)); + + if(response->headers[i].value == NULL){ + perror("Could not allocate memory for header"); + return ERROR; + } + strncpy(response->headers[i].value, sm.buf + pos, size); + response->headers[i].value[size] = '\0'; + + } + + pos = sm.pos; + token = get_next_token(&sm); + if(token != NEWLINE){ + fprintf(stderr, "ERROR %d-%d\n", NEWLINE, token); + return ERROR; + } + + + response->body = (char *)malloc((buf_len - sm.pos + 1) * sizeof(char)); + if(response->body == NULL){ + perror("Could not allocate memory for body"); + return ERROR; + } + + response->body_len = buf_len - sm.pos; + response->body[response->body_len] = '\0'; + + (void)memcpy(response->body, buf + sm.pos, response->body_len); + + return SUCCESS; +} + +void free_http_response(http_response_t *response) +{ + free(response->version); + free(response->phrase); + if(response->headers != NULL) free(response->headers); + if(response->body != NULL) free(response->body); +} + +token_t get_next_token(state_machine_t *sm) +{ + char c; + accept_state_t accept; + + while(sm->stop != HTTP_TRUE){ + c = sm->buf[sm->pos]; + accept = sm->state(c, sm); + switch(accept){ + case NOAS: + case ASNR: + sm->pos++; + case ASWR: + break; + } + + switch(accept){ + case ASNR: + case ASWR: + sm->state = state_start; + return sm->token; + case NOAS: + break; + } + + if(sm->pos >= sm->buf_len){ + sm->stop = HTTP_TRUE; + break; + } + } + + return SYNTAX_ERROR; +} + +static accept_state_t state_start(char c, state_machine_t *sm) +{ + if(toupper(c) == 'H') sm->state = state_vhp_A; + else if(isdigit(c)) sm->state = state_shp; + else if(c == '\r' || c == '\n') sm->state = state_n; + else if(isprint(c)) sm->state = state_hp_A; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_shp(char c, state_machine_t *sm) +{ + if(isdigit(c)) sm->state = state_shp; + else if(isblank(c)){ + sm->token = STATUS_CODE; + return ASNR; + }else if(c == ':') sm->state = state_hp_B; + else if(c == '\r' || c == '\n') sm->state = state_p; + else if(isprint(c)) sm->state = state_hp_A; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_n(char c, state_machine_t *sm) +{ + if(c == '\r' || c == '\n'){ + sm->token = NEWLINE; + return ASNR; + }else if(c == ':') sm->state = state_hp_B; + else if(isprint(c)) sm->state = state_hp_A; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_vhp_A(char c, state_machine_t *sm) +{ + if(toupper(c) == 'T') sm->state = state_vhp_B; + else if(isprint(c)) sm->state = state_hp_A; + else if(c == '\n' || c == '\r') sm->state = state_p; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_vhp_B(char c, state_machine_t *sm) +{ + if(toupper(c) == 'T') sm->state = state_vhp_C; + else if(isprint(c)) sm->state = state_hp_A; + else if(c == '\n' || c == '\r') sm->state = state_p; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_vhp_C(char c, state_machine_t *sm) +{ + if(toupper(c) == 'P') sm->state = state_vhp_D; + else if(isprint(c)) sm->state = state_hp_A; + else if(c == '\n' || c == '\r') sm->state = state_p; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_vhp_D(char c, state_machine_t *sm) +{ + if(toupper(c) == '/') sm->state = state_vhp_E; + else if(isprint(c)) sm->state = state_hp_A; + else if(c == '\n' || c == '\r') sm->state = state_p; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_vhp_E(char c, state_machine_t *sm) +{ + if(isdigit(c)) sm->state = state_vhp_F; + else if(isprint(c)) sm->state = state_hp_A; + else if(c == '\n' || c == '\r') sm->state = state_p; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_vhp_F(char c, state_machine_t *sm) +{ + if(isdigit(c)) sm->state = state_vhp_F; + else if(c == '.') sm->state = state_vhp_G; + else if(isprint(c)) sm->state = state_hp_A; + else if(c == '\n' || c == '\r') sm->state = state_p; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_vhp_G(char c, state_machine_t *sm) +{ + if(isdigit(c)) sm->state = state_vhp_H; + else if(isprint(c)) sm->state = state_hp_A; + else if(c == '\n' || c == '\r') sm->state = state_p; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_vhp_H(char c, state_machine_t *sm) +{ + if(isdigit(c)) sm->state = state_vhp_H; + else if(isblank(c)){ + sm->token = VERSION; + return ASNR; + + }else if(isprint(c)) sm->state = state_hp_A; + + return NOAS; +} + +static accept_state_t state_hp_A(char c, state_machine_t *sm) +{ + if(c == ':') sm->state = state_hp_B; + else if(c == '\r' || c == '\n') sm->state = state_p; + else if(isprint(c)) sm->state = state_hp_A; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_hp_B(char c, state_machine_t *sm) +{ + if(isblank(c)){ + sm->token = HEADER; + return ASNR; + } else if(c == '\r' || c == '\n') sm->state = state_p; + else if(c == ':') sm->state = state_hp_B; + else if(isprint(c)) sm->state = state_hp_A; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_p(char c, state_machine_t *sm) +{ + if(c == '\r' || c == '\n'){ + sm->token = PHRASE; + return ASNR; + }else if(c == ':') sm->state = state_hp_B; + else if(isprint(c)) sm->state = state_hp_A; + else sm->state = state_error; + + return NOAS; +} + +static accept_state_t state_error(char c, state_machine_t *sm) +{ + c = 0; + sm->token = SYNTAX_ERROR; + + return ASNR; +} + +static int read_all(int s, char *buf, size_t len) +{ + size_t t; + size_t r = ERROR; + + for(t = 0; t < len && r != 0;){ + r = read(s, buf + t, len - t); + if((int)r == ERROR){ + return ERROR; + }else{ + t += r; + } + } + + return (int)t; +} + Added: freeswitch/trunk/src/mod/applications/mod_http/http_req.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/http_req.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,138 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2008, Eric des Courtis + * + * 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. + * + * Eric des Courtis + * Copyright (C) Benbria. All Rights Reserved. + * + * Contributor(s): + * + * Eric des Courtis + * + * + * http_req.h -- HTTP client implementation + * + */ + +#ifndef __HTTP_REQ_H__ +#define __HTTP_REQ_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ERROR -1 +#define SUCCESS 0 +#define EMPTY_STRING(s) s[0] = '\0' + +#define DEFAULT_HTTP_VERSION "1.1" +#define DEFAULT_HTTP_PORT 80 + +#define HTTP_GET_METHOD "GET" +#define HTTP_HEAD_METHOD "HEAD" +#define HTTP_POST_METHOD "POST" +#define HTTP_DELETE_METHOD "DELETE" +#define HTTP_PUT_METHOD "PUT" + +#define MAX_PORT_LEN 6 + +#define RECV_BUFF_SIZE 65536 + +#define HTTP_TRUE 1 +#define HTTP_FALSE 0 + +#define INIT_STATE_MACHINE(m) \ +do {\ + (m)->pos = 0;\ + (m)->buf = NULL;\ + (m)->token = SYNTAX_ERROR;\ + (m)->stop = HTTP_FALSE;\ + (m)->state = state_start;\ +} while(0) + +#define STATUS_CODE_LEN 4 + +typedef enum tokens { + VERSION, + STATUS_CODE, + PHRASE, + HEADER, + NEWLINE, + SYNTAX_ERROR +} token_t; + +typedef enum accept_states { + ASWR, + ASNR, + NOAS +} accept_state_t; + +typedef struct state_machines { + accept_state_t (*state)(char, struct state_machines *); + int pos; + char *buf; + ssize_t buf_len; + int stop; + token_t token; +} state_machine_t; + +typedef enum http_methods { + GET, + HEAD, + POST, + DELETE, + PUT +} http_method_t; + +typedef struct http_headers { + char *field_name; + char *value; +} http_header_t; + +typedef struct http_requests { + http_method_t method; + char *version; + char *url; + http_header_t *headers; + ssize_t header_len; + char *body; + ssize_t body_len; +} http_request_t; + +typedef struct http_responses { + char *version; + int status_code; + char *phrase; + http_header_t *headers; + ssize_t header_len; + char *body; + int body_len; +} http_response_t; + +token_t get_next_token(state_machine_t *sm); +int http_parse_response(char *buf, ssize_t buf_len, http_response_t *response); +int http_req(http_request_t *req, http_response_t *res); +void free_http_response(http_response_t *response); + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/json.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/json.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,31 @@ +/* + * $Id: json.h,v 1.6 2006/01/26 02:16:28 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#ifndef _json_h_ +#define _json_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "bits.h" +#include "debug.h" +#include "linkhash.h" +#include "arraylist.h" +#include "json_util.h" +#include "json_object.h" +#include "json_tokener.h" + +#ifdef __cplusplus +} +#endif + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/json_object.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/json_object.c Wed Dec 10 16:43:26 2008 @@ -0,0 +1,510 @@ +/* + * $Id: json_object.c,v 1.17 2006/07/25 03:24:50 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#include "config.h" + +#include +#include +#include + +#include "debug.h" +#include "printbuf.h" +#include "linkhash.h" +#include "arraylist.h" +#include "json_object.h" +#include "json_object_private.h" +#include "json_tokener.h" + +#if !HAVE_STRNDUP + + char* strndup(const char* str, size_t n); + +#endif /* !HAVE_STRNDUP */ + +/* #define REFCOUNT_DEBUG 1 */ + +char *json_number_chars = "0123456789.+-e"; +char *json_hex_chars = "0123456789abcdef"; + +#ifdef REFCOUNT_DEBUG +static char* json_type_name[] = { + "null", + "boolean", + "double", + "int", + "object", + "array", + "string", +}; +#endif /* REFCOUNT_DEBUG */ + +static void json_object_generic_delete(struct json_object* this); +static struct json_object* json_object_new(enum json_type o_type); + + +/* ref count debugging */ + +#ifdef REFCOUNT_DEBUG + +static struct lh_table *json_object_table; + +static void json_object_init() __attribute__ ((constructor)); +static void json_object_init() { + mc_debug("json_object_init: creating object table\n"); + json_object_table = lh_kptr_table_new(128, "json_object_table", NULL); +} + +static void json_object_fini() __attribute__ ((destructor)); +static void json_object_fini() { + struct lh_entry *ent; + if(mc_get_debug() && json_object_table->count) { + mc_debug("json_object_fini: %d referenced objects at exit\n", + json_object_table->count); + lh_foreach(json_object_table, ent) { + struct json_object* obj = (struct json_object*)ent->v; + mc_debug("\t%s:%p\n", json_type_name[obj->o_type], obj); + } + } + mc_debug("json_object_fini: freeing object table\n"); + lh_table_free(json_object_table); +} +#endif /* REFCOUNT_DEBUG */ + + +/* string escaping */ + +static int json_escape_str(struct printbuf *pb, char *str) +{ + int pos = 0, start_offset = 0; + unsigned char c; + do { + c = str[pos]; + switch(c) { + case '\0': + break; + case '\b': + case '\n': + case '\r': + case '\t': + case '"': + case '\\': + case '/': + if(pos - start_offset > 0) + printbuf_memappend(pb, str + start_offset, pos - start_offset); + if(c == '\b') printbuf_memappend(pb, "\\b", 2); + else if(c == '\n') printbuf_memappend(pb, "\\n", 2); + else if(c == '\r') printbuf_memappend(pb, "\\r", 2); + else if(c == '\t') printbuf_memappend(pb, "\\t", 2); + else if(c == '"') printbuf_memappend(pb, "\\\"", 2); + else if(c == '\\') printbuf_memappend(pb, "\\\\", 2); + else if(c == '/') printbuf_memappend(pb, "\\/", 2); + start_offset = ++pos; + break; + default: + if(c < ' ') { + if(pos - start_offset > 0) + printbuf_memappend(pb, str + start_offset, pos - start_offset); + sprintbuf(pb, "\\u00%c%c", + json_hex_chars[c >> 4], + json_hex_chars[c & 0xf]); + start_offset = ++pos; + } else pos++; + } + } while(c); + if(pos - start_offset > 0) + printbuf_memappend(pb, str + start_offset, pos - start_offset); + return 0; +} + + +/* reference counting */ + +extern struct json_object* json_object_get(struct json_object *this) +{ + if(this) { + this->_ref_count++; + } + return this; +} + +extern void json_object_put(struct json_object *this) +{ + if(this) { + this->_ref_count--; + if(!this->_ref_count) this->_delete(this); + } +} + + +/* generic object construction and destruction parts */ + +static void json_object_generic_delete(struct json_object* this) +{ +#ifdef REFCOUNT_DEBUG + mc_debug("json_object_delete_%s: %p\n", + json_type_name[this->o_type], this); + lh_table_delete(json_object_table, this); +#endif /* REFCOUNT_DEBUG */ + printbuf_free(this->_pb); + free(this); +} + +static struct json_object* json_object_new(enum json_type o_type) +{ + struct json_object *this = calloc(sizeof(struct json_object), 1); + if(!this) return NULL; + this->o_type = o_type; + this->_ref_count = 1; + this->_delete = &json_object_generic_delete; +#ifdef REFCOUNT_DEBUG + lh_table_insert(json_object_table, this, this); + mc_debug("json_object_new_%s: %p\n", json_type_name[this->o_type], this); +#endif /* REFCOUNT_DEBUG */ + return this; +} + + +/* type checking functions */ + +int json_object_is_type(struct json_object *this, enum json_type type) +{ + return (this->o_type == type); +} + +enum json_type json_object_get_type(struct json_object *this) +{ + return this->o_type; +} + + +/* json_object_to_json_string */ + +char* json_object_to_json_string(struct json_object *this) +{ + if(!this) return "null"; + if(!this->_pb) { + if(!(this->_pb = printbuf_new())) return NULL; + } else { + printbuf_reset(this->_pb); + } + if(this->_to_json_string(this, this->_pb) < 0) return NULL; + return this->_pb->buf; +} + + +/* json_object_object */ + +static int json_object_object_to_json_string(struct json_object* this, + struct printbuf *pb) +{ + int i=0; + struct json_object_iter iter; + sprintbuf(pb, "{"); + + /* CAW: scope operator to make ANSI correctness */ + /* CAW: switched to json_object_object_foreachC which uses an iterator struct */ + json_object_object_foreachC(this, iter) { + if(i) sprintbuf(pb, ","); + sprintbuf(pb, " \""); + json_escape_str(pb, iter.key); + sprintbuf(pb, "\": "); + if(iter.val == NULL) sprintbuf(pb, "null"); + else iter.val->_to_json_string(iter.val, pb); + i++; + } + + return sprintbuf(pb, " }"); +} + +static void json_object_lh_entry_free(struct lh_entry *ent) +{ + free(ent->k); + json_object_put((struct json_object*)ent->v); +} + +static void json_object_object_delete(struct json_object* this) +{ + lh_table_free(this->o.c_object); + json_object_generic_delete(this); +} + +struct json_object* json_object_new_object() +{ + struct json_object *this = json_object_new(json_type_object); + if(!this) return NULL; + this->_delete = &json_object_object_delete; + this->_to_json_string = &json_object_object_to_json_string; + this->o.c_object = lh_kchar_table_new(JSON_OBJECT_DEF_HASH_ENTIRES, + NULL, &json_object_lh_entry_free); + return this; +} + +struct lh_table* json_object_get_object(struct json_object *this) +{ + if(!this) return NULL; + switch(this->o_type) { + case json_type_object: + return this->o.c_object; + default: + return NULL; + } +} + +void json_object_object_add(struct json_object* this, char *key, + struct json_object *val) +{ + lh_table_delete(this->o.c_object, key); + lh_table_insert(this->o.c_object, strdup(key), val); +} + +struct json_object* json_object_object_get(struct json_object* this, char *key) +{ + return (struct json_object*) lh_table_lookup(this->o.c_object, key); +} + +void json_object_object_del(struct json_object* this, char *key) +{ + lh_table_delete(this->o.c_object, key); +} + + +/* json_object_boolean */ + +static int json_object_boolean_to_json_string(struct json_object* this, + struct printbuf *pb) +{ + if(this->o.c_boolean) return sprintbuf(pb, "true"); + else return sprintbuf(pb, "false"); +} + +struct json_object* json_object_new_boolean(boolean b) +{ + struct json_object *this = json_object_new(json_type_boolean); + if(!this) return NULL; + this->_to_json_string = &json_object_boolean_to_json_string; + this->o.c_boolean = b; + return this; +} + +boolean json_object_get_boolean(struct json_object *this) +{ + if(!this) return FALSE; + switch(this->o_type) { + case json_type_boolean: + return this->o.c_boolean; + case json_type_int: + return (this->o.c_int != 0); + case json_type_double: + return (this->o.c_double != 0); + case json_type_string: + if(strlen(this->o.c_string)) return TRUE; + default: + return TRUE; + } +} + + +/* json_object_int */ + +static int json_object_int_to_json_string(struct json_object* this, + struct printbuf *pb) +{ + return sprintbuf(pb, "%d", this->o.c_int); +} + +struct json_object* json_object_new_int(int i) +{ + struct json_object *this = json_object_new(json_type_int); + if(!this) return NULL; + this->_to_json_string = &json_object_int_to_json_string; + this->o.c_int = i; + return this; +} + +int json_object_get_int(struct json_object *this) +{ + int cint; + + if(!this) return 0; + switch(this->o_type) { + case json_type_int: + return this->o.c_int; + case json_type_double: + return (int)this->o.c_double; + case json_type_boolean: + return this->o.c_boolean; + case json_type_string: + if(sscanf(this->o.c_string, "%d", &cint) == 1) return cint; + default: + return 0; + } +} + + +/* json_object_double */ + +static int json_object_double_to_json_string(struct json_object* this, + struct printbuf *pb) +{ + return sprintbuf(pb, "%lf", this->o.c_double); +} + +struct json_object* json_object_new_double(double d) +{ + struct json_object *this = json_object_new(json_type_double); + if(!this) return NULL; + this->_to_json_string = &json_object_double_to_json_string; + this->o.c_double = d; + return this; +} + +double json_object_get_double(struct json_object *this) +{ + double cdouble; + + if(!this) return 0.0; + switch(this->o_type) { + case json_type_double: + return this->o.c_double; + case json_type_int: + return this->o.c_int; + case json_type_boolean: + return this->o.c_boolean; + case json_type_string: + if(sscanf(this->o.c_string, "%lf", &cdouble) == 1) return cdouble; + default: + return 0.0; + } +} + + +/* json_object_string */ + +static int json_object_string_to_json_string(struct json_object* this, + struct printbuf *pb) +{ + sprintbuf(pb, "\""); + json_escape_str(pb, this->o.c_string); + sprintbuf(pb, "\""); + return 0; +} + +static void json_object_string_delete(struct json_object* this) +{ + free(this->o.c_string); + json_object_generic_delete(this); +} + +struct json_object* json_object_new_string(char *s) +{ + struct json_object *this = json_object_new(json_type_string); + if(!this) return NULL; + this->_delete = &json_object_string_delete; + this->_to_json_string = &json_object_string_to_json_string; + this->o.c_string = strdup(s); + return this; +} + +struct json_object* json_object_new_string_len(char *s, int len) +{ + struct json_object *this = json_object_new(json_type_string); + if(!this) return NULL; + this->_delete = &json_object_string_delete; + this->_to_json_string = &json_object_string_to_json_string; + this->o.c_string = strndup(s, len); + return this; +} + +char* json_object_get_string(struct json_object *this) +{ + if(!this) return NULL; + switch(this->o_type) { + case json_type_string: + return this->o.c_string; + default: + return json_object_to_json_string(this); + } +} + + +/* json_object_array */ + +static int json_object_array_to_json_string(struct json_object* this, + struct printbuf *pb) +{ + int i; + sprintbuf(pb, "["); + for(i=0; i < json_object_array_length(this); i++) { + struct json_object *val; + if(i) { sprintbuf(pb, ", "); } + else { sprintbuf(pb, " "); } + + val = json_object_array_get_idx(this, i); + if(val == NULL) { sprintbuf(pb, "null"); } + else { val->_to_json_string(val, pb); } + } + return sprintbuf(pb, " ]"); +} + +static void json_object_array_entry_free(void *data) +{ + json_object_put((struct json_object*)data); +} + +static void json_object_array_delete(struct json_object* this) +{ + array_list_free(this->o.c_array); + json_object_generic_delete(this); +} + +struct json_object* json_object_new_array() +{ + struct json_object *this = json_object_new(json_type_array); + if(!this) return NULL; + this->_delete = &json_object_array_delete; + this->_to_json_string = &json_object_array_to_json_string; + this->o.c_array = array_list_new(&json_object_array_entry_free); + return this; +} + +struct array_list* json_object_get_array(struct json_object *this) +{ + if(!this) return NULL; + switch(this->o_type) { + case json_type_array: + return this->o.c_array; + default: + return NULL; + } +} + +int json_object_array_length(struct json_object *this) +{ + return array_list_length(this->o.c_array); +} + +int json_object_array_add(struct json_object *this,struct json_object *val) +{ + return array_list_add(this->o.c_array, val); +} + +int json_object_array_put_idx(struct json_object *this, int idx, + struct json_object *val) +{ + return array_list_put_idx(this->o.c_array, idx, val); +} + +struct json_object* json_object_array_get_idx(struct json_object *this, + int idx) +{ + return (struct json_object*)array_list_get_idx(this->o.c_array, idx); +} + Added: freeswitch/trunk/src/mod/applications/mod_http/json_object.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/json_object.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,308 @@ +/* + * $Id: json_object.h,v 1.12 2006/01/30 23:07:57 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#ifndef _json_object_h_ +#define _json_object_h_ + +#define JSON_OBJECT_DEF_HASH_ENTIRES 16 + +#undef FALSE +#define FALSE ((boolean)0) + +#undef TRUE +#define TRUE ((boolean)1) + +extern char *json_number_chars; +extern char *json_hex_chars; + +/* forward structure definitions */ + +typedef int boolean; +struct printbuf; +struct lh_table; +struct array_list; +struct json_object; +struct json_object_iter; + +/* supported object types */ + +enum json_type { + json_type_null, + json_type_boolean, + json_type_double, + json_type_int, + json_type_object, + json_type_array, + json_type_string +}; + +/* reference counting functions */ + +/** + * Increment the reference count of json_object + * @param obj the json_object instance + */ +extern struct json_object* json_object_get(struct json_object *obj); + +/** + * Decrement the reference count of json_object and free if it reaches zero + * @param obj the json_object instance + */ +extern void json_object_put(struct json_object *obj); + + +/** + * Check if the json_object is of a given type + * @param obj the json_object instance + * @param type one of: + json_type_boolean, + json_type_double, + json_type_int, + json_type_object, + json_type_array, + json_type_string, + */ +extern int json_object_is_type(struct json_object *obj, enum json_type type); + +/** + * Get the type of the json_object + * @param obj the json_object instance + * @returns type being one of: + json_type_boolean, + json_type_double, + json_type_int, + json_type_object, + json_type_array, + json_type_string, + */ +extern enum json_type json_object_get_type(struct json_object *obj); + + +/** Stringify object to json format + * @param obj the json_object instance + * @returns a string in JSON format + */ +extern char* json_object_to_json_string(struct json_object *obj); + + +/* object type methods */ + +/** Create a new empty object + * @returns a json_object of type json_type_object + */ +extern struct json_object* json_object_new_object(); + +/** Get the hashtable of a json_object of type json_type_object + * @param obj the json_object instance + * @returns a linkhash + */ +extern struct lh_table* json_object_get_object(struct json_object *obj); + +/** Add an object field to a json_object of type json_type_object + * + * The reference count will *not* be incremented. This is to make adding + * fields to objects in code more compact. If you want to retain a reference + * to an added object you must wrap the passed object with json_object_get + * + * @param obj the json_object instance + * @param key the object field name (a private copy will be duplicated) + * @param val a json_object or NULL member to associate with the given field + */ +extern void json_object_object_add(struct json_object* obj, char *key, + struct json_object *val); + +/** Get the json_object associate with a given object field + * @param obj the json_object instance + * @param key the object field name + * @returns the json_object associated with the given field name + */ +extern struct json_object* json_object_object_get(struct json_object* obj, + char *key); + +/** Delete the given json_object field + * + * The reference count will be decremented for the deleted object + * + * @param obj the json_object instance + * @param key the object field name + */ +extern void json_object_object_del(struct json_object* obj, char *key); + +/** Iterate through all keys and values of an object + * @param obj the json_object instance + * @param key the local name for the char* key variable defined in the body + * @param val the local name for the json_object* object variable defined in the body + */ +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) + +# define json_object_object_foreach(obj,key,val) \ + for(entry = json_object_get_object(obj)->head; ({ if(entry) { key = (char*)entry->k; val = (struct json_object*)entry->v; } ; entry; }); entry = entry->next ) + +#else /* ANSI C or MSC */ + +# define json_object_object_foreach(obj,key,val) \ + for(entry = json_object_get_object(obj)->head; (entry ? (key = (char*)entry->k, val = (struct json_object*)entry->v, entry) : 0); entry = entry->next) + +#endif /* defined(__GNUC__) && !defined(__STRICT_ANSI__) */ + +/** Iterate through all keys and values of an object (ANSI C Safe) + * @param obj the json_object instance + * @param iter the object iterator + */ +#define json_object_object_foreachC(obj,iter) \ + for(iter.entry = json_object_get_object(obj)->head; (iter.entry ? (iter.key = (char*)iter.entry->k, iter.val = (struct json_object*)iter.entry->v, iter.entry) : 0); iter.entry = iter.entry->next) + +/* Array type methods */ + +/** Create a new empty json_object of type json_type_array + * @returns a json_object of type json_type_array + */ +extern struct json_object* json_object_new_array(); + +/** Get the arraylist of a json_object of type json_type_array + * @param obj the json_object instance + * @returns an arraylist + */ +extern struct array_list* json_object_get_array(struct json_object *obj); + +/** Get the length of a json_object of type json_type_array + * @param obj the json_object instance + * @returns an int + */ +extern int json_object_array_length(struct json_object *obj); + +/** Add an element to the end of a json_object of type json_type_array + * + * The reference count will *not* be incremented. This is to make adding + * fields to objects in code more compact. If you want to retain a reference + * to an added object you must wrap the passed object with json_object_get + * + * @param obj the json_object instance + * @param val the json_object to be added + */ +extern int json_object_array_add(struct json_object *obj, + struct json_object *val); + +/** Insert or replace an element at a specified index in an array (a json_object of type json_type_array) + * + * The reference count will *not* be incremented. This is to make adding + * fields to objects in code more compact. If you want to retain a reference + * to an added object you must wrap the passed object with json_object_get + * + * The reference count of a replaced object will be decremented. + * + * The array size will be automatically be expanded to the size of the + * index if the index is larger than the current size. + * + * @param obj the json_object instance + * @param idx the index to insert the element at + * @param val the json_object to be added + */ +extern int json_object_array_put_idx(struct json_object *obj, int idx, + struct json_object *val); + +/** Get the element at specificed index of the array (a json_object of type json_type_array) + * @param obj the json_object instance + * @param idx the index to get the element at + * @returns the json_object at the specified index (or NULL) + */ +extern struct json_object* json_object_array_get_idx(struct json_object *obj, + int idx); + +/* boolean type methods */ + +/** Create a new empty json_object of type json_type_boolean + * @param b a boolean TRUE or FALSE (0 or 1) + * @returns a json_object of type json_type_boolean + */ +extern struct json_object* json_object_new_boolean(boolean b); + +/** Get the boolean value of a json_object + * + * The type is coerced to a boolean if the passed object is not a boolean. + * integer and double objects will return FALSE if there value is zero + * or TRUE otherwise. If the passed object is a string it will return + * TRUE if it has a non zero length. If any other object type is passed + * TRUE will be returned if the object is not NULL. + * + * @param obj the json_object instance + * @returns a boolean + */ +extern boolean json_object_get_boolean(struct json_object *obj); + + +/* int type methods */ + +/** Create a new empty json_object of type json_type_int + * @param i the integer + * @returns a json_object of type json_type_int + */ +extern struct json_object* json_object_new_int(int i); + +/** Get the int value of a json_object + * + * The type is coerced to a int if the passed object is not a int. + * double objects will return their integer conversion. Strings will be + * parsed as an integer. If no conversion exists then 0 is returned. + * + * @param obj the json_object instance + * @returns an int + */ +extern int json_object_get_int(struct json_object *obj); + + +/* double type methods */ + +/** Create a new empty json_object of type json_type_double + * @param d the double + * @returns a json_object of type json_type_double + */ +extern struct json_object* json_object_new_double(double d); + +/** Get the double value of a json_object + * + * The type is coerced to a double if the passed object is not a double. + * integer objects will return their dboule conversion. Strings will be + * parsed as a double. If no conversion exists then 0.0 is returned. + * + * @param obj the json_object instance + * @returns an double + */ +extern double json_object_get_double(struct json_object *obj); + + +/* string type methods */ + +/** Create a new empty json_object of type json_type_string + * + * A copy of the string is made and the memory is managed by the json_object + * + * @param s the string + * @returns a json_object of type json_type_string + */ +extern struct json_object* json_object_new_string(char *s); + +extern struct json_object* json_object_new_string_len(char *s, int len); + +/** Get the string value of a json_object + * + * If the passed object is not of type json_type_string then the JSON + * representation of the object is returned. + * + * The returned string memory is managed by the json_object and will + * be freed when the reference count of the json_object drops to zero. + * + * @param obj the json_object instance + * @returns a string + */ +extern char* json_object_get_string(struct json_object *obj); + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/json_object_private.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/json_object_private.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,44 @@ +/* + * $Id: json_object_private.h,v 1.4 2006/01/26 02:16:28 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#ifndef _json_object_private_h_ +#define _json_object_private_h_ + +typedef void (json_object_delete_fn)(struct json_object *o); +typedef int (json_object_to_json_string_fn)(struct json_object *o, + struct printbuf *pb); + +struct json_object +{ + enum json_type o_type; + json_object_delete_fn *_delete; + json_object_to_json_string_fn *_to_json_string; + int _ref_count; + struct printbuf *_pb; + union data { + boolean c_boolean; + double c_double; + int c_int; + struct lh_table *c_object; + struct array_list *c_array; + char *c_string; + } o; +}; + +/* CAW: added for ANSI C iteration correctness */ +struct json_object_iter +{ + char *key; + struct json_object *val; + struct lh_entry *entry; +}; + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/json_tokener.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/json_tokener.c Wed Dec 10 16:43:26 2008 @@ -0,0 +1,520 @@ +/* + * $Id: json_tokener.c,v 1.20 2006/07/25 03:24:50 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#include "config.h" + +#include +#include +#include +#include + +#include "bits.h" +#include "debug.h" +#include "printbuf.h" +#include "arraylist.h" +#include "json_object.h" +#include "json_tokener.h" + + +#if !HAVE_STRNCASECMP && defined(_MSC_VER) + /* MSC has the version as _strnicmp */ +# define strncasecmp _strnicmp +#elif !HAVE_STRNCASECMP +# error You do not have strncasecmp on your system. +#endif /* HAVE_STRNCASECMP */ + + +static const char* json_null_str = "null"; +static const char* json_true_str = "true"; +static const char* json_false_str = "false"; + +const char* json_tokener_errors[] = { + "success", + "continue", + "nesting to deep", + "unexpected end of data", + "unexpected character", + "null expected", + "boolean expected", + "number expected", + "array value separator ',' expected", + "quoted object property name expected", + "object property name separator ':' expected", + "object value separator ',' expected", + "invalid string sequence", + "expected comment", +}; + + +struct json_tokener* json_tokener_new() +{ + struct json_tokener *tok = calloc(1, sizeof(struct json_tokener)); + tok->pb = printbuf_new(); + json_tokener_reset(tok); + return tok; +} + +void json_tokener_free(struct json_tokener *tok) +{ + json_tokener_reset(tok); + if(tok) printbuf_free(tok->pb); + free(tok); +} + +static void json_tokener_reset_level(struct json_tokener *tok, int depth) +{ + tok->stack[depth].state = json_tokener_state_eatws; + tok->stack[depth].saved_state = json_tokener_state_start; + json_object_put(tok->stack[depth].current); + tok->stack[depth].current = NULL; + free(tok->stack[depth].obj_field_name); + tok->stack[depth].obj_field_name = NULL; +} + +void json_tokener_reset(struct json_tokener *tok) +{ + int i; + for(i = tok->depth; i >= 0; i--) + json_tokener_reset_level(tok, i); + tok->depth = 0; + tok->err = json_tokener_success; +} + +struct json_object* json_tokener_parse(char *str) +{ + struct json_tokener* tok; + struct json_object* obj; + + tok = json_tokener_new(); + obj = json_tokener_parse_ex(tok, str, -1); + if(tok->err != json_tokener_success) + obj = error_ptr(-tok->err); + json_tokener_free(tok); + return obj; +} + + +#if !HAVE_STRNDUP +/* CAW: compliant version of strndup() */ +char* strndup(const char* str, size_t n) +{ + if(str) { + size_t len = strlen(str); + size_t nn = min(len,n); + char* s = (char*)malloc(sizeof(char) * (nn + 1)); + + if(s) { + memcpy(s, str, nn); + s[nn] = '\0'; + } + + return s; + } + + return NULL; +} +#endif + + +#define state tok->stack[tok->depth].state +#define saved_state tok->stack[tok->depth].saved_state +#define current tok->stack[tok->depth].current +#define obj_field_name tok->stack[tok->depth].obj_field_name + +struct json_object* json_tokener_parse_ex(struct json_tokener *tok, + char *str, int len) +{ + struct json_object *obj = NULL; + char c; + + tok->char_offset = 0; + tok->err = json_tokener_success; + + do { + if(tok->char_offset == len) { + if(tok->depth == 0 && state == json_tokener_state_eatws && + saved_state == json_tokener_state_finish) + tok->err = json_tokener_success; + else + tok->err = json_tokener_continue; + goto out; + } + + c = *str; + redo_char: + switch(state) { + + case json_tokener_state_eatws: + if(isspace(c)) { + /* okay */ + } else if(c == '/') { + printbuf_reset(tok->pb); + printbuf_memappend(tok->pb, &c, 1); + state = json_tokener_state_comment_start; + } else { + state = saved_state; + goto redo_char; + } + break; + + case json_tokener_state_start: + switch(c) { + case '{': + state = json_tokener_state_eatws; + saved_state = json_tokener_state_object_field_start; + current = json_object_new_object(); + break; + case '[': + state = json_tokener_state_eatws; + saved_state = json_tokener_state_array; + current = json_object_new_array(); + break; + case 'N': + case 'n': + state = json_tokener_state_null; + printbuf_reset(tok->pb); + tok->st_pos = 0; + goto redo_char; + case '"': + case '\'': + state = json_tokener_state_string; + printbuf_reset(tok->pb); + tok->quote_char = c; + break; + case 'T': + case 't': + case 'F': + case 'f': + state = json_tokener_state_boolean; + printbuf_reset(tok->pb); + tok->st_pos = 0; + goto redo_char; +/* +#if defined(__GNUC__) + case '0' ... '9': +#else +*/ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': +/* +#endif +*/ + case '-': + state = json_tokener_state_number; + printbuf_reset(tok->pb); + tok->is_double = 0; + goto redo_char; + default: + tok->err = json_tokener_error_parse_unexpected; + goto out; + } + break; + + case json_tokener_state_finish: + if(tok->depth == 0) goto out; + obj = json_object_get(current); + json_tokener_reset_level(tok, tok->depth); + tok->depth--; + goto redo_char; + + case json_tokener_state_null: + printbuf_memappend(tok->pb, &c, 1); + if(strncasecmp(json_null_str, tok->pb->buf, + min(tok->st_pos+1, strlen(json_null_str))) == 0) { + if(tok->st_pos == strlen(json_null_str)) { + current = NULL; + saved_state = json_tokener_state_finish; + state = json_tokener_state_eatws; + goto redo_char; + } + } else { + tok->err = json_tokener_error_parse_null; + goto out; + } + tok->st_pos++; + break; + + case json_tokener_state_comment_start: + if(c == '*') { + state = json_tokener_state_comment; + } else if(c == '/') { + state = json_tokener_state_comment_eol; + } else { + tok->err = json_tokener_error_parse_comment; + goto out; + } + printbuf_memappend(tok->pb, &c, 1); + break; + + case json_tokener_state_comment: + if(c == '*') state = json_tokener_state_comment_end; + printbuf_memappend(tok->pb, &c, 1); + break; + + case json_tokener_state_comment_eol: + if(c == '\n') { + mc_debug("json_tokener_comment: %s\n", tok->pb->buf); + state = json_tokener_state_eatws; + } else { + printbuf_memappend(tok->pb, &c, 1); + } + break; + + case json_tokener_state_comment_end: + printbuf_memappend(tok->pb, &c, 1); + if(c == '/') { + mc_debug("json_tokener_comment: %s\n", tok->pb->buf); + state = json_tokener_state_eatws; + } else { + state = json_tokener_state_comment; + } + break; + + case json_tokener_state_string: + if(c == tok->quote_char) { + current = json_object_new_string(tok->pb->buf); + saved_state = json_tokener_state_finish; + state = json_tokener_state_eatws; + } else if(c == '\\') { + saved_state = json_tokener_state_string; + state = json_tokener_state_string_escape; + } else { + printbuf_memappend(tok->pb, &c, 1); + } + break; + + case json_tokener_state_string_escape: + switch(c) { + case '"': + case '\\': + case '/': + printbuf_memappend(tok->pb, &c, 1); + state = saved_state; + break; + case 'b': + case 'n': + case 'r': + case 't': + if(c == 'b') printbuf_memappend(tok->pb, "\b", 1); + else if(c == 'n') printbuf_memappend(tok->pb, "\n", 1); + else if(c == 'r') printbuf_memappend(tok->pb, "\r", 1); + else if(c == 't') printbuf_memappend(tok->pb, "\t", 1); + state = saved_state; + break; + case 'u': + tok->ucs_char = 0; + tok->st_pos = 0; + state = json_tokener_state_escape_unicode; + break; + default: + tok->err = json_tokener_error_parse_string; + goto out; + } + break; + + case json_tokener_state_escape_unicode: + if(strchr(json_hex_chars, c)) { + tok->ucs_char += ((unsigned int)hexdigit(c) << ((3-tok->st_pos++)*4)); + if(tok->st_pos == 4) { + unsigned char utf_out[3]; + if (tok->ucs_char < 0x80) { + utf_out[0] = tok->ucs_char; + printbuf_memappend(tok->pb, (char*)utf_out, 1); + } else if (tok->ucs_char < 0x800) { + utf_out[0] = 0xc0 | (tok->ucs_char >> 6); + utf_out[1] = 0x80 | (tok->ucs_char & 0x3f); + printbuf_memappend(tok->pb, (char*)utf_out, 2); + } else { + utf_out[0] = 0xe0 | (tok->ucs_char >> 12); + utf_out[1] = 0x80 | ((tok->ucs_char >> 6) & 0x3f); + utf_out[2] = 0x80 | (tok->ucs_char & 0x3f); + printbuf_memappend(tok->pb, (char*)utf_out, 3); + } + state = saved_state; + } + } else { + tok->err = json_tokener_error_parse_string; + goto out; + } + break; + + case json_tokener_state_boolean: + printbuf_memappend(tok->pb, &c, 1); + if(strncasecmp(json_true_str, tok->pb->buf, + min(tok->st_pos+1, strlen(json_true_str))) == 0) { + if(tok->st_pos == strlen(json_true_str)) { + current = json_object_new_boolean(1); + saved_state = json_tokener_state_finish; + state = json_tokener_state_eatws; + goto redo_char; + } + } else if(strncasecmp(json_false_str, tok->pb->buf, + min(tok->st_pos+1, strlen(json_false_str))) == 0) { + if(tok->st_pos == strlen(json_false_str)) { + current = json_object_new_boolean(0); + saved_state = json_tokener_state_finish; + state = json_tokener_state_eatws; + goto redo_char; + } + } else { + tok->err = json_tokener_error_parse_boolean; + goto out; + } + tok->st_pos++; + break; + + case json_tokener_state_number: + if(c && strchr(json_number_chars, c)) { + printbuf_memappend(tok->pb, &c, 1); + if(c == '.' || c == 'e') tok->is_double = 1; + } else { + int numi; + double numd; + if(!tok->is_double && sscanf(tok->pb->buf, "%d", &numi) == 1) { + current = json_object_new_int(numi); + } else if(tok->is_double && sscanf(tok->pb->buf, "%lf", &numd) == 1) { + current = json_object_new_double(numd); + } else { + tok->err = json_tokener_error_parse_number; + goto out; + } + saved_state = json_tokener_state_finish; + state = json_tokener_state_eatws; + goto redo_char; + } + break; + + case json_tokener_state_array: + if(c == ']') { + saved_state = json_tokener_state_finish; + state = json_tokener_state_eatws; + } else { + if(tok->depth >= JSON_TOKENER_MAX_DEPTH-1) { + tok->err = json_tokener_error_depth; + goto out; + } + state = json_tokener_state_array_add; + tok->depth++; + json_tokener_reset_level(tok, tok->depth); + goto redo_char; + } + break; + + case json_tokener_state_array_add: + json_object_array_add(current, obj); + saved_state = json_tokener_state_array_sep; + state = json_tokener_state_eatws; + goto redo_char; + + case json_tokener_state_array_sep: + if(c == ']') { + saved_state = json_tokener_state_finish; + state = json_tokener_state_eatws; + } else if(c == ',') { + saved_state = json_tokener_state_array; + state = json_tokener_state_eatws; + } else { + tok->err = json_tokener_error_parse_array; + goto out; + } + break; + + case json_tokener_state_object_field_start: + if(c == '}') { + saved_state = json_tokener_state_finish; + state = json_tokener_state_eatws; + } else if (c == '"' || c == '\'') { + tok->quote_char = c; + printbuf_reset(tok->pb); + state = json_tokener_state_object_field; + } else { + tok->err = json_tokener_error_parse_object_key_name; + goto out; + } + break; + + case json_tokener_state_object_field: + if(c == tok->quote_char) { + obj_field_name = strdup(tok->pb->buf); + saved_state = json_tokener_state_object_field_end; + state = json_tokener_state_eatws; + } else if(c == '\\') { + saved_state = json_tokener_state_object_field; + state = json_tokener_state_string_escape; + } else { + printbuf_memappend(tok->pb, &c, 1); + } + break; + + case json_tokener_state_object_field_end: + if(c == ':') { + saved_state = json_tokener_state_object_value; + state = json_tokener_state_eatws; + } else { + tok->err = json_tokener_error_parse_object_key_sep; + goto out; + } + break; + + case json_tokener_state_object_value: + if(tok->depth >= JSON_TOKENER_MAX_DEPTH-1) { + tok->err = json_tokener_error_depth; + goto out; + } + state = json_tokener_state_object_value_add; + tok->depth++; + json_tokener_reset_level(tok, tok->depth); + goto redo_char; + + case json_tokener_state_object_value_add: + json_object_object_add(current, obj_field_name, obj); + free(obj_field_name); + obj_field_name = NULL; + saved_state = json_tokener_state_object_sep; + state = json_tokener_state_eatws; + goto redo_char; + + case json_tokener_state_object_sep: + if(c == '}') { + saved_state = json_tokener_state_finish; + state = json_tokener_state_eatws; + } else if(c == ',') { + saved_state = json_tokener_state_object_field_start; + state = json_tokener_state_eatws; + } else { + tok->err = json_tokener_error_parse_object_value_sep; + goto out; + } + break; + + } + str++; + tok->char_offset++; + } while(c); + + if(state != json_tokener_state_finish && + saved_state != json_tokener_state_finish) + tok->err = json_tokener_error_parse_eof; + + out: + if(tok->err == json_tokener_success) return json_object_get(current); + mc_debug("json_tokener_parse_ex: error %s at offset %d\n", + json_tokener_errors[tok->err], tok->char_offset); + return NULL; +} Added: freeswitch/trunk/src/mod/applications/mod_http/json_tokener.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/json_tokener.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,89 @@ +/* + * $Id: json_tokener.h,v 1.10 2006/07/25 03:24:50 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#ifndef _json_tokener_h_ +#define _json_tokener_h_ + +#include "json_object.h" + +enum json_tokener_error { + json_tokener_success, + json_tokener_continue, + json_tokener_error_depth, + json_tokener_error_parse_eof, + json_tokener_error_parse_unexpected, + json_tokener_error_parse_null, + json_tokener_error_parse_boolean, + json_tokener_error_parse_number, + json_tokener_error_parse_array, + json_tokener_error_parse_object_key_name, + json_tokener_error_parse_object_key_sep, + json_tokener_error_parse_object_value_sep, + json_tokener_error_parse_string, + json_tokener_error_parse_comment +}; + +enum json_tokener_state { + json_tokener_state_eatws, + json_tokener_state_start, + json_tokener_state_finish, + json_tokener_state_null, + json_tokener_state_comment_start, + json_tokener_state_comment, + json_tokener_state_comment_eol, + json_tokener_state_comment_end, + json_tokener_state_string, + json_tokener_state_string_escape, + json_tokener_state_escape_unicode, + json_tokener_state_boolean, + json_tokener_state_number, + json_tokener_state_array, + json_tokener_state_array_add, + json_tokener_state_array_sep, + json_tokener_state_object_field_start, + json_tokener_state_object_field, + json_tokener_state_object_field_end, + json_tokener_state_object_value, + json_tokener_state_object_value_add, + json_tokener_state_object_sep +}; + +struct json_tokener_srec +{ + enum json_tokener_state state, saved_state; + struct json_object *obj; + struct json_object *current; + char *obj_field_name; +}; + +#define JSON_TOKENER_MAX_DEPTH 32 + +struct json_tokener +{ + char *str; + struct printbuf *pb; + int depth, is_double, st_pos, char_offset; + enum json_tokener_error err; + unsigned int ucs_char; + char quote_char; + struct json_tokener_srec stack[JSON_TOKENER_MAX_DEPTH]; +}; + +extern const char* json_tokener_errors[]; + +extern struct json_tokener* json_tokener_new(); +extern void json_tokener_free(struct json_tokener *tok); +extern void json_tokener_reset(struct json_tokener *tok); +extern struct json_object* json_tokener_parse(char *str); +extern struct json_object* json_tokener_parse_ex(struct json_tokener *tok, + char *str, int len); + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/json_util.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/json_util.c Wed Dec 10 16:43:26 2008 @@ -0,0 +1,121 @@ +/* + * $Id: json_util.c,v 1.4 2006/01/30 23:07:57 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#include "config.h" + +#include +#include +#include +#include +#include + +#if HAVE_SYS_TYPES_H +#include +#endif /* HAVE_SYS_TYPES_H */ + +#if HAVE_SYS_STAT_H +#include +#endif /* HAVE_SYS_STAT_H */ + +#if HAVE_FCNTL_H +#include +#endif /* HAVE_FCNTL_H */ + +#if HAVE_UNISTD_H +# include +#endif /* HAVE_UNISTD_H */ + +#ifdef WIN32 +# define WIN32_LEAN_AND_MEAN +# include +# include +#endif /* defined(WIN32) */ + +#if !HAVE_OPEN && defined(WIN32) +# define open _open +#endif + + +#include "bits.h" +#include "debug.h" +#include "printbuf.h" +#include "json_object.h" +#include "json_tokener.h" +#include "json_util.h" + +struct json_object* json_object_from_file(char *filename) +{ + struct printbuf *pb; + struct json_object *obj; + char buf[JSON_FILE_BUF_SIZE]; + int fd, ret; + + if((fd = open(filename, O_RDONLY)) < 0) { + mc_error("json_object_from_file: error reading file %s: %s\n", + filename, strerror(errno)); + return error_ptr(-1); + } + if(!(pb = printbuf_new())) { + mc_error("json_object_from_file: printbuf_new failed\n"); + return error_ptr(-1); + } + while((ret = read(fd, buf, JSON_FILE_BUF_SIZE)) > 0) { + printbuf_memappend(pb, buf, ret); + } + close(fd); + if(ret < 0) { + mc_abort("json_object_from_file: error reading file %s: %s\n", + filename, strerror(errno)); + printbuf_free(pb); + return error_ptr(-1); + } + obj = json_tokener_parse(pb->buf); + printbuf_free(pb); + return obj; +} + +int json_object_to_file(char *filename, struct json_object *obj) +{ + char *json_str; + int fd, ret; + unsigned int wpos, wsize; + + if(!obj) { + mc_error("json_object_to_file: object is null\n"); + return -1; + } + + if((fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT, 0644)) < 0) { + mc_error("json_object_to_file: error opening file %s: %s\n", + filename, strerror(errno)); + return -1; + } + + if(!(json_str = json_object_to_json_string(obj))) { return -1; } + + + wsize = (unsigned int)(strlen(json_str) & UINT_MAX); /* CAW: probably unnecessary, but the most 64bit safe */ + wpos = 0; + while(wpos < wsize) { + if((ret = write(fd, json_str + wpos, wsize-wpos)) < 0) { + close(fd); + mc_error("json_object_to_file: error writing file %s: %s\n", + filename, strerror(errno)); + return -1; + } + + /* because of the above check for ret < 0, we can safely cast and add */ + wpos += (unsigned int)ret; + } + + close(fd); + return 0; +} Added: freeswitch/trunk/src/mod/applications/mod_http/json_util.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/json_util.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,23 @@ +/* + * $Id: json_util.h,v 1.4 2006/01/30 23:07:57 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#ifndef _json_util_h_ +#define _json_util_h_ + +#include "json_object.h" + +#define JSON_FILE_BUF_SIZE 4096 + +/* utlitiy functions */ +extern struct json_object* json_object_from_file(char *filename); +extern int json_object_to_file(char *filename, struct json_object *obj); + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/linkhash.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/linkhash.c Wed Dec 10 16:43:26 2008 @@ -0,0 +1,217 @@ +/* + * $Id: linkhash.c,v 1.4 2006/01/26 02:16:28 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include + +#include "linkhash.h" + +void lh_abort(const char *msg, ...) +{ + va_list ap; + va_start(ap, msg); + vprintf(msg, ap); + exit(1); +} + +unsigned long lh_ptr_hash(void *k) +{ + /* CAW: refactored to be 64bit nice */ + return (unsigned long)((((ptrdiff_t)k * LH_PRIME) >> 4) & ULONG_MAX); +} + +int lh_ptr_equal(void *k1, void *k2) +{ + return (k1 == k2); +} + +unsigned long lh_char_hash(void *k) +{ + unsigned int h = 0; + const char* data = k; + + while( *data!=0 ) h = h*129 + (unsigned int)(*data++) + LH_PRIME; + + return h; +} + +int lh_char_equal(void *k1, void *k2) +{ + return (strcmp((char*)k1, (char*)k2) == 0); +} + +struct lh_table* lh_table_new(int size, char *name, + lh_entry_free_fn *free_fn, + lh_hash_fn *hash_fn, + lh_equal_fn *equal_fn) +{ + int i; + struct lh_table *t; + + t = calloc(1, sizeof(struct lh_table)); + if(!t) lh_abort("lh_table_new: calloc failed\n"); + t->count = 0; + t->size = size; + t->name = name; + t->table = calloc(size, sizeof(struct lh_entry)); + if(!t->table) lh_abort("lh_table_new: calloc failed\n"); + t->free_fn = free_fn; + t->hash_fn = hash_fn; + t->equal_fn = equal_fn; + for(i = 0; i < size; i++) t->table[i].k = LH_EMPTY; + return t; +} + +struct lh_table* lh_kchar_table_new(int size, char *name, + lh_entry_free_fn *free_fn) +{ + return lh_table_new(size, name, free_fn, lh_char_hash, lh_char_equal); +} + +struct lh_table* lh_kptr_table_new(int size, char *name, + lh_entry_free_fn *free_fn) +{ + return lh_table_new(size, name, free_fn, lh_ptr_hash, lh_ptr_equal); +} + +void lh_table_resize(struct lh_table *t, int new_size) +{ + struct lh_table *new_t; + struct lh_entry *ent; + + new_t = lh_table_new(new_size, t->name, NULL, t->hash_fn, t->equal_fn); + ent = t->head; + while(ent) { + lh_table_insert(new_t, ent->k, ent->v); + ent = ent->next; + } + free(t->table); + t->table = new_t->table; + t->size = new_size; + t->head = new_t->head; + t->tail = new_t->tail; + t->resizes++; + free(new_t); +} + +void lh_table_free(struct lh_table *t) +{ + struct lh_entry *c; + for(c = t->head; c != NULL; c = c->next) { + if(t->free_fn) { + t->free_fn(c); + } + } + free(t->table); + free(t); +} + + +int lh_table_insert(struct lh_table *t, void *k, void *v) +{ + unsigned long h, n; + + t->inserts++; + if(t->count > t->size * 0.66) lh_table_resize(t, t->size * 2); + + h = t->hash_fn(k); + n = h % t->size; + + while( 1 ) { + if(t->table[n].k == LH_EMPTY || t->table[n].k == LH_FREED) break; + t->collisions++; + if(++n == t->size) n = 0; + } + + t->table[n].k = k; + t->table[n].v = v; + t->count++; + + if(t->head == NULL) { + t->head = t->tail = &t->table[n]; + t->table[n].next = t->table[n].prev = NULL; + } else { + t->tail->next = &t->table[n]; + t->table[n].prev = t->tail; + t->table[n].next = NULL; + t->tail = &t->table[n]; + } + + return 0; +} + + +struct lh_entry* lh_table_lookup_entry(struct lh_table *t, void *k) +{ + unsigned long h = t->hash_fn(k); + unsigned long n = h % t->size; + + t->lookups++; + while( 1 ) { + if(t->table[n].k == LH_EMPTY) return NULL; + if(t->table[n].k != LH_FREED && + t->equal_fn(t->table[n].k, k)) return &t->table[n]; + if(++n == t->size) n = 0; + } + return NULL; +} + + +void* lh_table_lookup(struct lh_table *t, void *k) +{ + struct lh_entry *e = lh_table_lookup_entry(t, k); + if(e) return e->v; + return NULL; +} + + +int lh_table_delete_entry(struct lh_table *t, struct lh_entry *e) +{ + ptrdiff_t n = (ptrdiff_t)(e - t->table); /* CAW: fixed to be 64bit nice, still need the crazy negative case... */ + + /* CAW: this is bad, really bad, maybe stack goes other direction on this machine... */ + if(n < 0) { return -2; } + + if(t->table[n].k == LH_EMPTY || t->table[n].k == LH_FREED) return -1; + t->count--; + if(t->free_fn) t->free_fn(e); + t->table[n].v = NULL; + t->table[n].k = LH_FREED; + if(t->tail == &t->table[n] && t->head == &t->table[n]) { + t->head = t->tail = NULL; + } else if (t->head == &t->table[n]) { + t->head->next->prev = NULL; + t->head = t->head->next; + } else if (t->tail == &t->table[n]) { + t->tail->prev->next = NULL; + t->tail = t->tail->prev; + } else { + t->table[n].prev->next = t->table[n].next; + t->table[n].next->prev = t->table[n].prev; + } + t->table[n].next = t->table[n].prev = NULL; + return 0; +} + + +int lh_table_delete(struct lh_table *t, void *k) +{ + struct lh_entry *e = lh_table_lookup_entry(t, k); + if(!e) return -1; + return lh_table_delete_entry(t, e); +} + Added: freeswitch/trunk/src/mod/applications/mod_http/linkhash.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/linkhash.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,261 @@ +/* + * $Id: linkhash.h,v 1.6 2006/01/30 23:07:57 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#ifndef _linkhash_h_ +#define _linkhash_h_ + +/** + * golden prime used in hash functions + */ +#define LH_PRIME 0x9e370001UL + +/** + * sentinel pointer value for empty slots + */ +#define LH_EMPTY (void*)-1 + +/** + * sentinel pointer value for freed slots + */ +#define LH_FREED (void*)-2 + +struct lh_entry; + +/** + * callback function prototypes + */ +typedef void (lh_entry_free_fn) (struct lh_entry *e); +/** + * callback function prototypes + */ +typedef unsigned long (lh_hash_fn) (void *k); +/** + * callback function prototypes + */ +typedef int (lh_equal_fn) (void *k1, void *k2); + +/** + * An entry in the hash table + */ +struct lh_entry { + /** + * The key. + */ + void *k; + /** + * The value. + */ + void *v; + /** + * The next entry + */ + struct lh_entry *next; + /** + * The previous entry. + */ + struct lh_entry *prev; +}; + + +/** + * The hash table structure. + */ +struct lh_table { + /** + * Size of our hash. + */ + int size; + /** + * Numbers of entries. + */ + int count; + + /** + * Number of collisions. + */ + int collisions; + + /** + * Number of resizes. + */ + int resizes; + + /** + * Number of lookups. + */ + int lookups; + + /** + * Number of inserts. + */ + int inserts; + + /** + * Number of deletes. + */ + int deletes; + + /** + * Name of the hash table. + */ + char *name; + + /** + * The first entry. + */ + struct lh_entry *head; + + /** + * The last entry. + */ + struct lh_entry *tail; + + struct lh_entry *table; + + /** + * A pointer onto the function responsible for freeing an entry. + */ + lh_entry_free_fn *free_fn; + lh_hash_fn *hash_fn; + lh_equal_fn *equal_fn; +}; + + +/** + * Pre-defined hash and equality functions + */ +extern unsigned long lh_ptr_hash(void *k); +extern int lh_ptr_equal(void *k1, void *k2); + +extern unsigned long lh_char_hash(void *k); +extern int lh_char_equal(void *k1, void *k2); + + +/** + * Convenience list iterator. + */ +#define lh_foreach(table, entry) \ +for(entry = table->head; entry; entry = entry->next) + +/** + * lh_foreach_safe allows calling of deletion routine while iterating. + */ +#define lh_foreach_safe(table, entry, tmp) \ +for(entry = table->head; entry && ((tmp = entry->next) || 1); entry = tmp) + + + +/** + * Create a new linkhash table. + * @param size initial table size. The table is automatically resized + * although this incurs a performance penalty. + * @param name the table name. + * @param free_fn callback function used to free memory for entries + * when lh_table_free or lh_table_delete is called. + * If NULL is provided, then memory for keys and values + * must be freed by the caller. + * @param hash_fn function used to hash keys. 2 standard ones are defined: + * lh_ptr_hash and lh_char_hash for hashing pointer values + * and C strings respectively. + * @param equal_fn comparison function to compare keys. 2 standard ones defined: + * lh_ptr_hash and lh_char_hash for comparing pointer values + * and C strings respectively. + * @return a pointer onto the linkhash table. + */ +extern struct lh_table* lh_table_new(int size, char *name, + lh_entry_free_fn *free_fn, + lh_hash_fn *hash_fn, + lh_equal_fn *equal_fn); + +/** + * Convenience function to create a new linkhash + * table with char keys. + * @param size initial table size. + * @param name table name. + * @param free_fn callback function used to free memory for entries. + * @return a pointer onto the linkhash table. + */ +extern struct lh_table* lh_kchar_table_new(int size, char *name, + lh_entry_free_fn *free_fn); + + +/** + * Convenience function to create a new linkhash + * table with ptr keys. + * @param size initial table size. + * @param name table name. + * @param free_fn callback function used to free memory for entries. + * @return a pointer onto the linkhash table. + */ +extern struct lh_table* lh_kptr_table_new(int size, char *name, + lh_entry_free_fn *free_fn); + + +/** + * Free a linkhash table. + * If a callback free function is provided then it is called for all + * entries in the table. + * @param t table to free. + */ +extern void lh_table_free(struct lh_table *t); + + +/** + * Insert a record into the table. + * @param t the table to insert into. + * @param k a pointer to the key to insert. + * @param v a pointer to the value to insert. + */ +extern int lh_table_insert(struct lh_table *t, void *k, void *v); + + +/** + * Lookup a record into the table. + * @param t the table to lookup + * @param k a pointer to the key to lookup + * @return a pointer to the record structure of the value or NULL if it does not exist. + */ +extern struct lh_entry* lh_table_lookup_entry(struct lh_table *t, void *k); + +/** + * Lookup a record into the table + * @param t the table to lookup + * @param k a pointer to the key to lookup + * @return a pointer to the found value or NULL if it does not exist. + */ +extern void* lh_table_lookup(struct lh_table *t, void *k); + + +/** + * Delete a record from the table. + * If a callback free function is provided then it is called for the + * for the item being deleted. + * @param t the table to delete from. + * @param e a pointer to the entry to delete. + * @return 0 if the item was deleted. + * @return -1 if it was not found. + */ +extern int lh_table_delete_entry(struct lh_table *t, struct lh_entry *e); + + +/** + * Delete a record from the table. + * If a callback free function is provided then it is called for the + * for the item being deleted. + * @param t the table to delete from. + * @param k a pointer to the key to delete. + * @return 0 if the item was deleted. + * @return -1 if it was not found. + */ +extern int lh_table_delete(struct lh_table *t, void *k); + + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/mod_http.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/mod_http.c Wed Dec 10 16:43:26 2008 @@ -0,0 +1,356 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2008, Eric des Courtis + * + * 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. + * + * Eric des Courtis + * Copyright (C) Benbria. All Rights Reserved. + * + * Contributor(s): + * + * Eric des Courtis + * + * + * mod_http.c -- HTTP client implementation for FreeSWITCH + * + * The purpose is to provide laguages like LUA with a _fast_ HTTP + * client implementation. + * + * Support for SSL will be provided in future versions. + * Initial release does not include win32 support. + * + */ + +#include +#include +#include +#include +#include +#include +#include "json.h" + +#include "http_req.h" +#include "url_encoding.h" + +#define HTTP_SYNTAX " [urlejson_body]" +#define HTTP_PARAMS 4 +#define HTTP_BUFFER_SIZE (256 * 1024) + +/* SWITCH_STANDARD_API(http_api_main); */ + +#define MAX_MEMLOCS 512 +#define GARBAGE_TYPES_INIT() \ +typedef struct memloc{\ + void *p;\ + LIST_ENTRY(memloc) memlocs;\ +} memloc_t + +#define GARBAGE_CLEANUP() \ +do{\ + for(memloc_p = head.lh_first; memloc_p != NULL; \ + memloc_p = memloc_p->memlocs.le_next){\ + free(memloc_p->p);\ + }\ +}while(0) + +#define GARBAGE_ADD(a) \ +do {\ + if(memloc_i >= MAX_MEMLOCS){\ + switch_safe_free(ccmd);\ + GARBAGE_CLEANUP();\ + stream->write_function(stream, "-ERR\n");\ + return SWITCH_STATUS_SUCCESS;\ + }\ + memloc_a[memloc_i].p = (void *)a;\ + LIST_INSERT_HEAD(&head, memloc_a + memloc_i, memlocs);\ + memloc_i++;\ +}while(0) + +#define GARBAGE_INIT() \ + LIST_HEAD(listhead, memloc) head;\ + memloc_t memloc_a[MAX_MEMLOCS];\ + memloc_t *memloc_p;\ + size_t memloc_i;\ + LIST_INIT(&head);\ + memloc_i = 0 + +GARBAGE_TYPES_INIT(); + +SWITCH_STANDARD_API(http_api_main) +{ + char *ccmd; + int argc; + char *argv[HTTP_PARAMS]; + char *buf; + char *method; + char *url; + char *headers_str; + char *value; + char *body; + char *body_dec; + char *t; + char *json_response; + struct json_object *json_http_headers; + char *key; + struct json_object *val; + struct lh_entry *entry; + int i; + int j; + int f; + size_t l; + size_t m; + size_t a = 0; + int ret; + + http_header_t *headers; + http_request_t request; + http_response_t response; + + GARBAGE_INIT(); + + (void)memset(&response, 0, sizeof(response)); + + if(cmd == NULL){ + stream->write_function(stream, "-USAGE: %s\n", HTTP_SYNTAX); + return SWITCH_STATUS_SUCCESS; + } + + ccmd = strdup(cmd); + argc = switch_separate_string(ccmd, ' ', argv, HTTP_PARAMS); + + if(argc != HTTP_PARAMS && argc != (HTTP_PARAMS - 1)){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + return SWITCH_STATUS_SUCCESS; + } + + method = argv[0]; + url = argv[1]; + headers_str = argv[2]; + if(argc == HTTP_PARAMS){ + body = argv[3]; + }else{ + body = (char *)malloc(1 * sizeof(char)); + if(body == NULL){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + return SWITCH_STATUS_SUCCESS; + } + body[0] = '\0'; + GARBAGE_ADD(body); + } + + buf = (char *)malloc(HTTP_BUFFER_SIZE * sizeof(char)); + if(buf == NULL){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; + } + + GARBAGE_ADD(buf); + + request.version = DEFAULT_HTTP_VERSION; + l = strlen(url); + request.url = (char *)malloc((l + 1) * sizeof(char)); + if(request.url == NULL){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; + } + + GARBAGE_ADD(request.url); + strcpy(request.url, url); + json_http_headers = json_tokener_parse(headers_str); + + i = 0; + json_object_object_foreach(json_http_headers, key, val){ + i++; + } + + request.header_len = i; + headers = (http_header_t *)malloc(i * sizeof(http_header_t)); + GARBAGE_ADD(headers); + + i = 0; + json_object_object_foreach(json_http_headers, key, val){ + l = strlen(key); + request.headers[i].field_name = (char *)malloc((l + 1) * sizeof(char)); + if(request.headers[i].field_name == NULL){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; + } + GARBAGE_ADD(request.headers[i].field_name); + strcpy(request.headers[i].field_name, key); + a += strlen(key); + + value = json_object_to_json_string(val); + l = strlen(value); + request.headers[i].value = (char *)malloc((l + 1) * sizeof(char)); + if(request.headers[i].value == NULL){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; + } + GARBAGE_ADD(request.headers[i].value); + strcpy(request.headers[i].value, value); + a += strlen(value); + i++; + } + + if(argc == HTTP_PARAMS){ + l = strlen(body); + body_dec = url_decode(body, l); + GARBAGE_ADD(body_dec); + l = strlen(body_dec); + request.body_len = l; + request.body = body_dec; + }else request.body_len = 0; + + ret = http_req(&request, &response); + if(response.version != NULL) GARBAGE_ADD(response.version); + if(response.phrase != NULL) GARBAGE_ADD(response.phrase); + if(response.headers != NULL) GARBAGE_ADD(response.headers); + if(response.body != NULL) GARBAGE_ADD(response.body); + for(i = 0; i < response.header_len; i++){ + GARBAGE_ADD(response.headers[i].field_name); + GARBAGE_ADD(response.headers[i].value); + } + + + if(ret == ERROR){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; + } + + /* This is evil and should be changed in the future */ + l = 128 + (256 * response.header_len) + (a * 2) + + strlen("version") + strlen(response.version) + + strlen("status_code") + 3 + + strlen("phrase") + strlen(response.phrase) + + strlen("body") + (response.body_len * 3) + 1 + + strlen("headers") + + 1; + + /* to be safe */ + l <<= 2; + + json_response = (char *)malloc(l * sizeof(char)); + if(json_response == NULL){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; + } + GARBAGE_ADD(json_response); + + if(response.body_len != 0){ + t = (char *)malloc((response.body_len + 1) * sizeof(char)); + if(t == NULL){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; + } + GARBAGE_ADD(t); + (void)memcpy(t, response.body, response.body_len); + t[response.body_len] = '\0'; + response.body = url_encode(t, response.body_len); + GARBAGE_ADD(response.body); + } + + + m = snprintf(json_response, l, + "{" + "\"version\": \"%s\"," + "\"status_code\": \"%3d\"," + "\"phrase\": \"%s\"," + "\"body\": \"%s\"," + "\"headers\": [", + response.version, + response.status_code, + response.phrase, + ((response.body_len <= 0)? "":response.body) + ); + + + for(f = HTTP_FALSE, j = 0; j < response.header_len; j++){ + if(f != HTTP_FALSE){ + m += snprintf(json_response + m, l - m, + "," + ); + }else f = HTTP_TRUE; + + m += snprintf(json_response + m, l - m, + "{\"key\": \"%s\",\"value\": \"%s\"}", + response.headers[j].field_name, + response.headers[j].value + ); + } + + + m += snprintf(json_response + m, l - m, "]}"); + json_response[m] = '\0'; + + + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_NOTICE, + "RESERVED %d BYTES, USED %d BYTES, HTTP Response as JSON: %s\n", + l, + m, + json_response + ); + + + stream->write_function(stream, "%s\n", json_response); + + switch_safe_free(ccmd); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; +} + +SWITCH_MODULE_LOAD_FUNCTION(mod_http_load); +SWITCH_MODULE_DEFINITION(mod_http, mod_http_load, NULL, NULL); + +SWITCH_MODULE_LOAD_FUNCTION(mod_http_load) +{ + switch_api_interface_t *api_interface; + + *module_interface = + switch_loadable_module_create_module_interface(pool, modname); + + switch_log_printf( + SWITCH_CHANNEL_LOG, + SWITCH_LOG_NOTICE, + "HTTP request mod enabled\n" + ); + + SWITCH_ADD_API( + api_interface, + "http", + "Make HTTP requests", + http_api_main, + HTTP_SYNTAX + ); + + return SWITCH_STATUS_SUCCESS; +} + Added: freeswitch/trunk/src/mod/applications/mod_http/printbuf.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/printbuf.c Wed Dec 10 16:43:26 2008 @@ -0,0 +1,144 @@ +/* + * $Id: printbuf.c,v 1.5 2006/01/26 02:16:28 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#include "config.h" + +#include +#include +#include + +#if HAVE_STDARG_H +# include +#else /* !HAVE_STDARG_H */ +# error Not enough var arg support! +#endif /* HAVE_STDARG_H */ + +#include "bits.h" +#include "debug.h" +#include "printbuf.h" + +struct printbuf* printbuf_new() +{ + struct printbuf *p; + + if(!(p = calloc(1, sizeof(struct printbuf)))) return NULL; + p->size = 32; + p->bpos = 0; + if(!(p->buf = malloc(p->size))) { + free(p); + return NULL; + } + return p; +} + + +int printbuf_memappend(struct printbuf *p, char *buf, int size) +{ + char *t; + if(p->size - p->bpos <= size) { + int new_size = max(p->size * 2, p->bpos + size + 8); +#ifdef PRINTBUF_DEBUG + mc_debug("printbuf_memappend: realloc " + "bpos=%d wrsize=%d old_size=%d new_size=%d\n", + p->bpos, size, p->size, new_size); +#endif /* PRINTBUF_DEBUG */ + if(!(t = realloc(p->buf, new_size))) return -1; + p->size = new_size; + p->buf = t; + } + memcpy(p->buf + p->bpos, buf, size); + p->bpos += size; + p->buf[p->bpos]= '\0'; + return size; +} + +#if !HAVE_VSNPRINTF && defined(WIN32) +# define vsnprintf _vsnprintf +#elif !HAVE_VSNPRINTF /* !HAVE_VSNPRINTF */ +# error Need vsnprintf! +#endif /* !HAVE_VSNPRINTF && defined(WIN32) */ + +#if !HAVE_VASPRINTF +/* CAW: compliant version of vasprintf */ +static int vasprintf(char **buf, const char *fmt, va_list ap) +{ +#ifndef WIN32 + static char _T_emptybuffer = '\0'; +#endif /* !defined(WIN32) */ + int chars; + char *b; + + if(!buf) { return -1; } + +#ifdef WIN32 + chars = _vscprintf(fmt, ap)+1; +#else /* !defined(WIN32) */ + /* CAW: RAWR! We have to hope to god here that vsnprintf doesn't overwrite + our buffer like on some 64bit sun systems.... but hey, its time to move on */ + chars = vsnprintf(&_T_emptybuffer, 0, fmt, ap)+1; + if(chars < 0) { chars *= -1; } /* CAW: old glibc versions have this problem */ +#endif /* defined(WIN32) */ + + b = (char*)malloc(sizeof(char)*chars); + if(!b) { return -1; } + + if((chars = vsprintf(b, fmt, ap)) < 0) + { + free(b); + } else { + *buf = b; + } + + return chars; +} +#endif /* !HAVE_VASPRINTF */ + +int sprintbuf(struct printbuf *p, const char *msg, ...) +{ + va_list ap; + char *t; + int size; + char buf[128]; + + /* user stack buffer first */ + va_start(ap, msg); + size = vsnprintf(buf, 128, msg, ap); + va_end(ap); + /* if string is greater than stack buffer, then use dynamic string + with vasprintf. Note: some implementation of vsnprintf return -1 + if output is truncated whereas some return the number of bytes that + would have been writen - this code handles both cases. */ + if(size == -1 || size > 127) { + int ret; + va_start(ap, msg); + if((size = vasprintf(&t, msg, ap)) == -1) return -1; + va_end(ap); + ret = printbuf_memappend(p, t, size); + free(t); + return ret; + } else { + return printbuf_memappend(p, buf, size); + } +} + +void printbuf_reset(struct printbuf *p) +{ + p->buf[0] = '\0'; + p->bpos = 0; +} + +void printbuf_free(struct printbuf *p) +{ + if(p) { + free(p->buf); + free(p); + } +} Added: freeswitch/trunk/src/mod/applications/mod_http/printbuf.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/printbuf.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,38 @@ +/* + * $Id: printbuf.h,v 1.4 2006/01/26 02:16:28 mclark Exp $ + * + * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. + * Michael Clark + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See COPYING for details. + * + */ + +#ifndef _printbuf_h_ +#define _printbuf_h_ + +#undef PRINTBUF_DEBUG + +struct printbuf { + char *buf; + int bpos; + int size; +}; + +extern struct printbuf* +printbuf_new(); + +extern int +printbuf_memappend(struct printbuf *p, char *buf, int size); + +extern int +sprintbuf(struct printbuf *p, const char *msg, ...); + +extern void +printbuf_reset(struct printbuf *p); + +extern void +printbuf_free(struct printbuf *p); + +#endif Added: freeswitch/trunk/src/mod/applications/mod_http/url_encoding.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/url_encoding.c Wed Dec 10 16:43:26 2008 @@ -0,0 +1,125 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2008, Eric des Courtis + * + * 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. + * + * Eric des Courtis + * Copyright (C) Benbria. All Rights Reserved. + * + * Contributor(s): + * + * Eric des Courtis + * + * + * url_encoding.c -- url encoding/decoding + * + */ +#include "url_encoding.h" + +#ifdef DEBUG +int main(int argc, char *argv[]) +{ + char *buf1; + char *buf2; + + + buf1 = url_encode("This is a test #$ "); + buf2 = url_decode(buf1); + + printf("%s\n", buf2); + + free(buf1); + free(buf2); + return EXIT_FAILURE; +} + +#endif + +char *url_encode(char *url, size_t l) +{ + int i; + int j; + char *buf; + unsigned char c; + + buf = (char *)malloc((l * 3) + 1); + if(buf == NULL){ + perror("Could not allocate memory url encoding"); + return NULL; + } + + for(i = 0, j = 0; i < l; i++){ + c = (unsigned char)url[i]; + if(c <= 31 || c >= 127 + || c == '$' || c == '&' || c == '+' || c == ',' || c == '/' + || c == ':' || c == ';' || c == '=' || c == '?' || c == '@' + || c == ' ' || c == '"' || c == '<' || c == '>' || c == '#' + || c == '%' || c == '{' || c == '}' || c == '|' || c == '\\' + || c == '^' || c == '~' || c == '[' || c == ']' || c == '`'){ + + (void)sprintf(buf + j, "%%%X%X", c >> 4, c & 0x0F); + j += 3; + }else{ + buf[j] = url[i]; + j++; + } + } + + buf[j] = '\0'; + + return buf; +} + +char *url_decode(char *url, size_t l) +{ + int i; + int j; + char *buf; + char c; + char d0; + char d1; + + buf = (char *)malloc((l + 1) * sizeof(char)); + if(buf == NULL){ + perror("Could not allocate memory for decoding"); + return NULL; + } + + for(i = 0, j = 0; i < l; j++){ + c = url[i]; + if(c == '%'){ + d0 = url[i + 2]; + d1 = url[i + 1]; + d0 = toupper(d0); + d1 = toupper(d1); + + if(d0 >= 'A' && d0 <= 'F') d0 = d0 - 'A' + 10; + else if(d0 >= '0' && d0 <= '9') d0 = d0 - '0'; + if(d1 >= 'A' && d1 <= 'F') d1 = d1 - 'A' + 10; + else if(d1 >= '0' && d1 <= '9') d1 = d1 - '0'; + + buf[j] = (d1 << 4) + d0; + i += 3; + }else{ + buf[j] = url[i]; + i++; + } + } + + buf[j] = '\0'; + + return buf; +} + + Added: freeswitch/trunk/src/mod/applications/mod_http/url_encoding.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_http/url_encoding.h Wed Dec 10 16:43:26 2008 @@ -0,0 +1,42 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2008, Eric des Courtis + * + * 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. + * + * Eric des Courtis + * Copyright (C) Benbria. All Rights Reserved. + * + * Contributor(s): + * + * Eric des Courtis + * + * + * url_encoding.h -- url encoding/decoding + * + */ + +#ifndef __URL_ENCODING_H__ +#define __URL_ENCODING_H__ + +#include +#include +#include +#include +#include + +char *url_encode(char *url, size_t l); +char *url_decode(char *url, size_t l); + +#endif + From mikej at freeswitch.org Thu Dec 11 07:19:04 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 11 Dec 2008 10:19:04 -0500 Subject: [Freeswitch-trunk] [commit] r10709 - in freeswitch/trunk/src/mod/languages: mod_java mod_java/src/org/freeswitch/swig mod_lua mod_perl mod_python Message-ID: Author: mikej Date: Thu Dec 11 10:19:03 2008 New Revision: 10709 Log: swigall Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java (original) +++ freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java Thu Dec 11 10:19:03 2008 @@ -245,12 +245,8 @@ return freeswitchJNI.CoreSession_streamFile__SWIG_1(swigCPtr, this, file); } - public int sleep(int ms, int sync) { - return freeswitchJNI.CoreSession_sleep__SWIG_0(swigCPtr, this, ms, sync); - } - public int sleep(int ms) { - return freeswitchJNI.CoreSession_sleep__SWIG_1(swigCPtr, this, ms); + return freeswitchJNI.CoreSession_sleep(swigCPtr, this, ms); } public int flushEvents() { Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java (original) +++ freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java Thu Dec 11 10:19:03 2008 @@ -136,8 +136,7 @@ public final static native String CoreSession_playAndGetDigits(long jarg1, CoreSession jarg1_, int jarg2, int jarg3, int jarg4, int jarg5, String jarg6, String jarg7, String jarg8, String jarg9); public final static native int CoreSession_streamFile__SWIG_0(long jarg1, CoreSession jarg1_, String jarg2, int jarg3); public final static native int CoreSession_streamFile__SWIG_1(long jarg1, CoreSession jarg1_, String jarg2); - public final static native int CoreSession_sleep__SWIG_0(long jarg1, CoreSession jarg1_, int jarg2, int jarg3); - public final static native int CoreSession_sleep__SWIG_1(long jarg1, CoreSession jarg1_, int jarg2); + public final static native int CoreSession_sleep(long jarg1, CoreSession jarg1_, int jarg2); public final static native int CoreSession_flushEvents(long jarg1, CoreSession jarg1_); public final static native int CoreSession_flushDigits(long jarg1, CoreSession jarg1_); public final static native int CoreSession_setAutoHangup(long jarg1, CoreSession jarg1_, boolean jarg2); Modified: freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp Thu Dec 11 10:19:03 2008 @@ -2674,26 +2674,7 @@ } -SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sleep_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jint jarg3) { - jint jresult = 0 ; - CoreSession *arg1 = (CoreSession *) 0 ; - int arg2 ; - int arg3 ; - int result; - - (void)jenv; - (void)jcls; - (void)jarg1_; - arg1 = *(CoreSession **)&jarg1; - arg2 = (int)jarg2; - arg3 = (int)jarg3; - result = (int)(arg1)->sleep(arg2,arg3); - jresult = (jint)result; - return jresult; -} - - -SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sleep_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { +SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sleep(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { jint jresult = 0 ; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; Modified: freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp Thu Dec 11 10:19:03 2008 @@ -6077,38 +6077,7 @@ } -static int _wrap_CoreSession_sleep__SWIG_0(lua_State* L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0 ; - int arg2 ; - int arg3 ; - int result; - - SWIG_check_num_args("sleep",3,3) - if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("sleep",1,"CoreSession *"); - if(!lua_isnumber(L,2)) SWIG_fail_arg("sleep",2,"int"); - if(!lua_isnumber(L,3)) SWIG_fail_arg("sleep",3,"int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ - SWIG_fail_ptr("CoreSession_sleep",1,SWIGTYPE_p_CoreSession); - } - - arg2 = (int)lua_tonumber(L, 2); - arg3 = (int)lua_tonumber(L, 3); - result = (int)(arg1)->sleep(arg2,arg3); - SWIG_arg=0; - lua_pushnumber(L, (lua_Number) result); SWIG_arg++; - return SWIG_arg; - - if(0) SWIG_fail; - -fail: - lua_error(L); - return SWIG_arg; -} - - -static int _wrap_CoreSession_sleep__SWIG_1(lua_State* L) { +static int _wrap_CoreSession_sleep(lua_State* L) { int SWIG_arg = -1; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; @@ -6136,62 +6105,6 @@ } -static int _wrap_CoreSession_sleep(lua_State* L) { - int argc; - int argv[4]={ - 1,2,3,4 - }; - - argc = lua_gettop(L); - if (argc == 2) { - int _v; - { - void *ptr; - if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - { - _v = lua_isnumber(L,argv[1]); - } - if (_v) { - return _wrap_CoreSession_sleep__SWIG_1(L); - } - } - } - if (argc == 3) { - int _v; - { - void *ptr; - if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - { - _v = lua_isnumber(L,argv[1]); - } - if (_v) { - { - _v = lua_isnumber(L,argv[2]); - } - if (_v) { - return _wrap_CoreSession_sleep__SWIG_0(L); - } - } - } - } - - lua_pushstring(L,"No matching function for overloaded 'CoreSession_sleep'"); - lua_error(L);return 0; -} - - static int _wrap_CoreSession_flushEvents(lua_State* L) { int SWIG_arg = -1; CoreSession *arg1 = (CoreSession *) 0 ; Modified: freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp Thu Dec 11 10:19:03 2008 @@ -8146,55 +8146,7 @@ } -XS(_wrap_CoreSession_sleep__SWIG_0) { - { - CoreSession *arg1 = (CoreSession *) 0 ; - int arg2 ; - int arg3 ; - int result; - void *argp1 = 0 ; - int res1 = 0 ; - int val2 ; - int ecode2 = 0 ; - int val3 ; - int ecode3 = 0 ; - int argvi = 0; - dXSARGS; - - if ((items < 3) || (items > 3)) { - SWIG_croak("Usage: CoreSession_sleep(self,ms,sync);"); - } - res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sleep" "', argument " "1"" of type '" "CoreSession *""'"); - } - arg1 = reinterpret_cast< CoreSession * >(argp1); - ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoreSession_sleep" "', argument " "2"" of type '" "int""'"); - } - arg2 = static_cast< int >(val2); - ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoreSession_sleep" "', argument " "3"" of type '" "int""'"); - } - arg3 = static_cast< int >(val3); - result = (int)(arg1)->sleep(arg2,arg3); - ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ; - - - - XSRETURN(argvi); - fail: - - - - SWIG_croak_null(); - } -} - - -XS(_wrap_CoreSession_sleep__SWIG_1) { +XS(_wrap_CoreSession_sleep) { { CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; @@ -8232,98 +8184,6 @@ } -XS(_wrap_CoreSession_sleep) { - dXSARGS; - - { - unsigned long _index = 0; - SWIG_TypeRank _rank = 0; - if (items == 2) { - SWIG_TypeRank _ranki = 0; - SWIG_TypeRank _rankm = 0; - SWIG_TypeRank _pi = 1; - int _v = 0; - { - void *vptr = 0; - int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0); - _v = SWIG_CheckState(res); - } - if (!_v) goto check_1; - _ranki += _v*_pi; - _rankm += _pi; - _pi *= SWIG_MAXCASTRANK; - { - { - int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL); - _v = SWIG_CheckState(res); - } - } - if (!_v) goto check_1; - _ranki += _v*_pi; - _rankm += _pi; - _pi *= SWIG_MAXCASTRANK; - if (!_index || (_ranki < _rank)) { - _rank = _ranki; _index = 1; - if (_rank == _rankm) goto dispatch; - } - } - check_1: - - if (items == 3) { - SWIG_TypeRank _ranki = 0; - SWIG_TypeRank _rankm = 0; - SWIG_TypeRank _pi = 1; - int _v = 0; - { - void *vptr = 0; - int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0); - _v = SWIG_CheckState(res); - } - if (!_v) goto check_2; - _ranki += _v*_pi; - _rankm += _pi; - _pi *= SWIG_MAXCASTRANK; - { - { - int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL); - _v = SWIG_CheckState(res); - } - } - if (!_v) goto check_2; - _ranki += _v*_pi; - _rankm += _pi; - _pi *= SWIG_MAXCASTRANK; - { - { - int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), NULL); - _v = SWIG_CheckState(res); - } - } - if (!_v) goto check_2; - _ranki += _v*_pi; - _rankm += _pi; - _pi *= SWIG_MAXCASTRANK; - if (!_index || (_ranki < _rank)) { - _rank = _ranki; _index = 2; - if (_rank == _rankm) goto dispatch; - } - } - check_2: - - dispatch: - switch(_index) { - case 1: - ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_sleep__SWIG_1); return; - case 2: - ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_sleep__SWIG_0); return; - } - } - - croak("No matching function for overloaded 'CoreSession_sleep'"); - XSRETURN(0); -} - - XS(_wrap_CoreSession_flushEvents) { { CoreSession *arg1 = (CoreSession *) 0 ; Modified: freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp Thu Dec 11 10:19:03 2008 @@ -8018,47 +8018,7 @@ } -SWIGINTERN PyObject *_wrap_CoreSession_sleep__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - CoreSession *arg1 = (CoreSession *) 0 ; - int arg2 ; - int arg3 ; - int result; - void *argp1 = 0 ; - int res1 = 0 ; - int val2 ; - int ecode2 = 0 ; - int val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:CoreSession_sleep",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sleep" "', argument " "1"" of type '" "CoreSession *""'"); - } - arg1 = reinterpret_cast< CoreSession * >(argp1); - ecode2 = SWIG_AsVal_int(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoreSession_sleep" "', argument " "2"" of type '" "int""'"); - } - arg2 = static_cast< int >(val2); - ecode3 = SWIG_AsVal_int(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoreSession_sleep" "', argument " "3"" of type '" "int""'"); - } - arg3 = static_cast< int >(val3); - result = (int)(arg1)->sleep(arg2,arg3); - resultobj = SWIG_From_int(static_cast< int >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_CoreSession_sleep__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_CoreSession_sleep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; @@ -8089,62 +8049,6 @@ } -SWIGINTERN PyObject *_wrap_CoreSession_sleep(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = (int)PyObject_Length(args); - for (ii = 0; (ii < argc) && (ii < 3); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_int(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_CoreSession_sleep__SWIG_1(self, args); - } - } - } - if (argc == 3) { - int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_int(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_int(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_CoreSession_sleep__SWIG_0(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_sleep'.\n" - " Possible C/C++ prototypes are:\n" - " sleep(CoreSession *,int,int)\n" - " sleep(CoreSession *,int)\n"); - return NULL; -} - - SWIGINTERN PyObject *_wrap_CoreSession_flushEvents(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; CoreSession *arg1 = (CoreSession *) 0 ; From mikej at freeswitch.org Thu Dec 11 07:20:25 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 11 Dec 2008 10:20:25 -0500 Subject: [Freeswitch-trunk] [commit] r10710 - in freeswitch/trunk/src: . include mod/languages/mod_managed mod/languages/mod_managed/managed Message-ID: Author: mikej Date: Thu Dec 11 10:20:24 2008 New Revision: 10710 Log: FSCORE-237 make channel flags array based so we do not have 32 flag limit Modified: freeswitch/trunk/src/include/switch_channel.h freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs freeswitch/trunk/src/switch_channel.c Modified: freeswitch/trunk/src/include/switch_channel.h ============================================================================== --- freeswitch/trunk/src/include/switch_channel.h (original) +++ freeswitch/trunk/src/include/switch_channel.h Thu Dec 11 10:20:24 2008 @@ -145,7 +145,7 @@ \param flags the initial channel flags */ SWITCH_DECLARE(switch_status_t) switch_channel_init(switch_channel_t *channel, switch_core_session_t *session, switch_channel_state_t state, - uint32_t flags); + switch_channel_flag_t flag); /*! \brief Fire A presence event for the channel @@ -259,49 +259,49 @@ SWITCH_DECLARE(switch_caller_extension_t *) switch_channel_get_caller_extension(switch_channel_t *channel); /*! - \brief Test for presence of given flag(s) on a given channel + \brief Test for presence of given flag on a given channel \param channel channel to test - \param flags or'd list of channel flags to test + \param flag to test \return TRUE if flags were present */ -SWITCH_DECLARE(uint32_t) switch_channel_test_flag(switch_channel_t *channel, switch_channel_flag_t flags); +SWITCH_DECLARE(uint32_t) switch_channel_test_flag(switch_channel_t *channel, switch_channel_flag_t flag); /*! \brief Set given flag(s) on a given channel - \param channel channel on which to set flag(s) - \param flags or'd list of flags to set + \param channel channel on which to set flag + \param flag or'd list of flags to set */ -SWITCH_DECLARE(void) switch_channel_set_flag(switch_channel_t *channel, switch_channel_flag_t flags); +SWITCH_DECLARE(void) switch_channel_set_flag(switch_channel_t *channel, switch_channel_flag_t flag); /*! \brief Set given flag(s) on a given channel's bridge partner - \param channel channel to derive the partner channel to set flag(s) on - \param flags or'd list of flags to set + \param channel channel to derive the partner channel to set flag on + \param flag to set \return true if the flag was set */ -SWITCH_DECLARE(switch_bool_t) switch_channel_set_flag_partner(switch_channel_t *channel, switch_channel_flag_t flags); +SWITCH_DECLARE(switch_bool_t) switch_channel_set_flag_partner(switch_channel_t *channel, switch_channel_flag_t flag); /*! \brief Clears given flag(s) on a given channel's bridge partner \param channel channel to derive the partner channel to clear flag(s) from - \param flags the flags to clear + \param flag the flag to clear \return true if the flag was cleared */ -SWITCH_DECLARE(switch_bool_t) switch_channel_clear_flag_partner(switch_channel_t *channel, switch_channel_flag_t flags); +SWITCH_DECLARE(switch_bool_t) switch_channel_clear_flag_partner(switch_channel_t *channel, switch_channel_flag_t flag); /*! \brief Set given flag(s) on a given channel to be applied on the next state change \param channel channel on which to set flag(s) - \param flags or'd list of flags to set + \param flag flag to set */ -SWITCH_DECLARE(void) switch_channel_set_state_flag(switch_channel_t *channel, switch_channel_flag_t flags); +SWITCH_DECLARE(void) switch_channel_set_state_flag(switch_channel_t *channel, switch_channel_flag_t flag); /*! \brief Clear given flag(s) from a channel \param channel channel to clear flags from - \param flags or'd list of flags to clear + \param flag flag to clear */ -SWITCH_DECLARE(void) switch_channel_clear_flag(switch_channel_t *channel, switch_channel_flag_t flags); +SWITCH_DECLARE(void) switch_channel_clear_flag(switch_channel_t *channel, switch_channel_flag_t flag); SWITCH_DECLARE(switch_status_t) switch_channel_perform_answer(switch_channel_t *channel, const char *file, const char *func, int line); @@ -484,7 +484,7 @@ _In_opt_ const char *prefix); SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(_In_ switch_channel_t *channel); -#define switch_channel_stop_broadcast(_channel) if (switch_channel_test_flag(_channel, CF_BROADCAST)) switch_channel_set_flag(_channel, CF_BREAK | CF_STOP_BROADCAST) +#define switch_channel_stop_broadcast(_channel) for(;;) {if (switch_channel_test_flag(_channel, CF_BROADCAST)) {switch_channel_set_flag(_channel, CF_STOP_BROADCAST); switch_channel_set_flag(_channel, CF_BREAK); } break;} #define switch_channel_media_ready(_channel) ((switch_channel_test_flag(_channel, CF_ANSWERED) || switch_channel_test_flag(_channel, CF_EARLY_MEDIA)) && !switch_channel_test_flag(_channel, CF_PROXY_MODE)) Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Thu Dec 11 10:20:24 2008 @@ -732,73 +732,70 @@ \brief Channel Flags
-CF_ANSWERED     = (1 <<  0) - Channel is answered
-CF_OUTBOUND     = (1 <<  1) - Channel is an outbound channel
-CF_EARLY_MEDIA  = (1 <<  2) - Channel is ready for audio before answer 
-CF_ORIGINATOR	= (1 <<  3) - Channel is an originator
-CF_TRANSFER		= (1 <<  4) - Channel is being transfered
-CF_ACCEPT_CNG	= (1 <<  5) - Channel will accept CNG frames
-CF_REDIRECT 	= (1 <<  6) - Channel is being redirected
-CF_BRIDGED		= (1 <<  7) - Channel in a bridge
-CF_HOLD			= (1 <<  8) - Channel is on hold
-CF_SERVICE		= (1 <<  9) - Channel has a service thread
-CF_TAGGED		= (1 << 10) - Channel is tagged
-CF_WINNER		= (1 << 11) - Channel is the winner
-CF_CONTROLLED	= (1 << 12) - Channel is under control
-CF_PROXY_MODE		= (1 << 13) - Channel has no media
-CF_SUSPEND		= (1 << 14) - Suspend i/o
-CF_EVENT_PARSE  = (1 << 15) - Suspend control events
-CF_USE_ME = (1 << 16) -   use me
-CF_GEN_RINGBACK = (1 << 17) - Channel is generating it's own ringback
-CF_RING_READY   = (1 << 18) - Channel is ready to send ringback
-CF_BREAK        = (1 << 19) - Channel should stop what it's doing
-CF_BROADCAST    = (1 << 20) - Channel is broadcasting
-CF_UNICAST      = (1 << 21) - Channel has a unicast connection
-CF_VIDEO		= (1 << 22) - Channel has video
-CF_EVENT_LOCK   = (1 << 23) - Don't parse events
-CF_RESET        = (1 << 24) - Tell extension parser to reset
-CF_ORIGINATING  = (1 << 25) - Channel is originating
-CF_STOP_BROADCAST = (1 << 26) - Signal to stop broadcast
+CF_ANSWERED			- Channel is answered
+CF_OUTBOUND			- Channel is an outbound channel
+CF_EARLY_MEDIA		- Channel is ready for audio before answer 
+CF_ORIGINATOR		- Channel is an originator
+CF_TRANSFER			- Channel is being transfered
+CF_ACCEPT_CNG		- Channel will accept CNG frames
+CF_REDIRECT 		- Channel is being redirected
+CF_BRIDGED			- Channel in a bridge
+CF_HOLD				- Channel is on hold
+CF_SERVICE			- Channel has a service thread
+CF_TAGGED			- Channel is tagged
+CF_WINNER			- Channel is the winner
+CF_CONTROLLED		- Channel is under control
+CF_PROXY_MODE		- Channel has no media
+CF_SUSPEND			- Suspend i/o
+CF_EVENT_PARSE		- Suspend control events
+CF_GEN_RINGBACK		- Channel is generating it's own ringback
+CF_RING_READY		- Channel is ready to send ringback
+CF_BREAK			- Channel should stop what it's doing
+CF_BROADCAST		- Channel is broadcasting
+CF_UNICAST			- Channel has a unicast connection
+CF_VIDEO			- Channel has video
+CF_EVENT_LOCK		- Don't parse events
+CF_RESET			- Tell extension parser to reset
+CF_ORIGINATING		- Channel is originating
+CF_STOP_BROADCAST	- Signal to stop broadcast
 
*/ typedef enum { - CF_ANSWERED = (1 << 0), - CF_OUTBOUND = (1 << 1), - CF_EARLY_MEDIA = (1 << 2), - CF_ORIGINATOR = (1 << 3), - CF_TRANSFER = (1 << 4), - CF_ACCEPT_CNG = (1 << 5), - CF_REDIRECT = (1 << 6), - CF_BRIDGED = (1 << 7), - CF_HOLD = (1 << 8), - CF_SERVICE = (1 << 9), - CF_TAGGED = (1 << 10), - CF_WINNER = (1 << 11), - CF_CONTROLLED = (1 << 12), - CF_PROXY_MODE = (1 << 13), - CF_SUSPEND = (1 << 14), - CF_EVENT_PARSE = (1 << 15), - CF_USE_ME = (1 << 16), - CF_GEN_RINGBACK = (1 << 17), - CF_RING_READY = (1 << 18), - CF_BREAK = (1 << 19), - CF_BROADCAST = (1 << 20), - CF_UNICAST = (1 << 21), - CF_VIDEO = (1 << 22), - CF_EVENT_LOCK = (1 << 23), - CF_RESET = (1 << 24), - CF_ORIGINATING = (1 << 25), - CF_STOP_BROADCAST = (1 << 26), - CF_PROXY_MEDIA = (1 << 27), - CF_INNER_BRIDGE = (1 << 28), - CF_REQ_MEDIA = (1 << 29), - CF_VERBOSE_EVENTS = (1 << 30) -} switch_channel_flag_enum_t; - -typedef uint32_t switch_channel_flag_t; - - + CF_ANSWERED = 1, + CF_OUTBOUND, + CF_EARLY_MEDIA, + CF_ORIGINATOR, + CF_TRANSFER, + CF_ACCEPT_CNG, + CF_REDIRECT, + CF_BRIDGED, + CF_HOLD, + CF_SERVICE, + CF_TAGGED, + CF_WINNER, + CF_CONTROLLED, + CF_PROXY_MODE, + CF_SUSPEND, + CF_EVENT_PARSE, + CF_GEN_RINGBACK, + CF_RING_READY, + CF_BREAK, + CF_BROADCAST, + CF_UNICAST, + CF_VIDEO, + CF_EVENT_LOCK, + CF_RESET, + CF_ORIGINATING, + CF_STOP_BROADCAST, + CF_PROXY_MEDIA, + CF_INNER_BRIDGE, + CF_REQ_MEDIA, + CF_VERBOSE_EVENTS, + + /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */ + CF_FLAG_MAX +} switch_channel_flag_t; /*! \enum switch_frame_flag_t Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx Thu Dec 11 10:20:24 2008 @@ -17084,7 +17084,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_wait_for_flag(void * jarg1, unsigned long jarg2, int jarg3, unsigned long jarg4, void * jarg5) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_wait_for_flag(void * jarg1, int jarg2, int jarg3, unsigned long jarg4, void * jarg5) { int jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -17230,18 +17230,18 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_init(void * jarg1, void * jarg2, int jarg3, unsigned long jarg4) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_init(void * jarg1, void * jarg2, int jarg3, int jarg4) { int jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; switch_channel_state_t arg3 ; - uint32_t arg4 ; + switch_channel_flag_t arg4 ; switch_status_t result; arg1 = (switch_channel_t *)jarg1; arg2 = (switch_core_session_t *)jarg2; arg3 = (switch_channel_state_t)jarg3; - arg4 = (uint32_t)jarg4; + arg4 = (switch_channel_flag_t)jarg4; result = (switch_status_t)switch_channel_init(arg1,arg2,arg3,arg4); jresult = result; return jresult; @@ -17481,7 +17481,7 @@ } -SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_channel_test_flag(void * jarg1, unsigned long jarg2) { +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_channel_test_flag(void * jarg1, int jarg2) { unsigned long jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -17495,7 +17495,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_flag(void * jarg1, unsigned long jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_flag(void * jarg1, int jarg2) { switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -17505,7 +17505,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_flag_partner(void * jarg1, unsigned long jarg2) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_flag_partner(void * jarg1, int jarg2) { int jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -17519,7 +17519,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_clear_flag_partner(void * jarg1, unsigned long jarg2) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_clear_flag_partner(void * jarg1, int jarg2) { int jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -17533,7 +17533,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_state_flag(void * jarg1, unsigned long jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_state_flag(void * jarg1, int jarg2) { switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -17543,7 +17543,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_flag(void * jarg1, unsigned long jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_flag(void * jarg1, int jarg2) { switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Thu Dec 11 10:20:24 2008 @@ -2209,8 +2209,8 @@ freeswitchPINVOKE.switch_channel_wait_for_state(SWIGTYPE_p_switch_channel.getCPtr(channel), SWIGTYPE_p_switch_channel.getCPtr(other_channel), (int)want_state); } - public static switch_status_t switch_channel_wait_for_flag(SWIGTYPE_p_switch_channel channel, uint want_flag, switch_bool_t pres, uint to, SWIGTYPE_p_switch_channel super_channel) { - switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_wait_for_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), want_flag, (int)pres, to, SWIGTYPE_p_switch_channel.getCPtr(super_channel)); + public static switch_status_t switch_channel_wait_for_flag(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t want_flag, switch_bool_t pres, uint to, SWIGTYPE_p_switch_channel super_channel) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_wait_for_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)want_flag, (int)pres, to, SWIGTYPE_p_switch_channel.getCPtr(super_channel)); return ret; } @@ -2260,8 +2260,8 @@ return ret; } - public static switch_status_t switch_channel_init(SWIGTYPE_p_switch_channel channel, SWIGTYPE_p_switch_core_session session, switch_channel_state_t state, uint flags) { - switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_init(SWIGTYPE_p_switch_channel.getCPtr(channel), SWIGTYPE_p_switch_core_session.getCPtr(session), (int)state, flags); + public static switch_status_t switch_channel_init(SWIGTYPE_p_switch_channel channel, SWIGTYPE_p_switch_core_session session, switch_channel_state_t state, switch_channel_flag_t flag) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_init(SWIGTYPE_p_switch_channel.getCPtr(channel), SWIGTYPE_p_switch_core_session.getCPtr(session), (int)state, (int)flag); return ret; } @@ -2358,31 +2358,31 @@ return ret; } - public static uint switch_channel_test_flag(SWIGTYPE_p_switch_channel channel, uint flags) { - uint ret = freeswitchPINVOKE.switch_channel_test_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + public static uint switch_channel_test_flag(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + uint ret = freeswitchPINVOKE.switch_channel_test_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); return ret; } - public static void switch_channel_set_flag(SWIGTYPE_p_switch_channel channel, uint flags) { - freeswitchPINVOKE.switch_channel_set_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + public static void switch_channel_set_flag(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + freeswitchPINVOKE.switch_channel_set_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); } - public static switch_bool_t switch_channel_set_flag_partner(SWIGTYPE_p_switch_channel channel, uint flags) { - switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_channel_set_flag_partner(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + public static switch_bool_t switch_channel_set_flag_partner(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_channel_set_flag_partner(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); return ret; } - public static switch_bool_t switch_channel_clear_flag_partner(SWIGTYPE_p_switch_channel channel, uint flags) { - switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_channel_clear_flag_partner(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + public static switch_bool_t switch_channel_clear_flag_partner(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_channel_clear_flag_partner(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); return ret; } - public static void switch_channel_set_state_flag(SWIGTYPE_p_switch_channel channel, uint flags) { - freeswitchPINVOKE.switch_channel_set_state_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + public static void switch_channel_set_state_flag(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + freeswitchPINVOKE.switch_channel_set_state_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); } - public static void switch_channel_clear_flag(SWIGTYPE_p_switch_channel channel, uint flags) { - freeswitchPINVOKE.switch_channel_clear_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + public static void switch_channel_clear_flag(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + freeswitchPINVOKE.switch_channel_clear_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); } public static switch_status_t switch_channel_perform_answer(SWIGTYPE_p_switch_channel channel, string file, string func, int line) { @@ -8343,7 +8343,7 @@ public static extern void switch_channel_wait_for_state(HandleRef jarg1, HandleRef jarg2, int jarg3); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_wait_for_flag")] - public static extern int switch_channel_wait_for_flag(HandleRef jarg1, uint jarg2, int jarg3, uint jarg4, HandleRef jarg5); + public static extern int switch_channel_wait_for_flag(HandleRef jarg1, int jarg2, int jarg3, uint jarg4, HandleRef jarg5); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_set_state")] public static extern int switch_channel_perform_set_state(HandleRef jarg1, string jarg2, string jarg3, int jarg4, int jarg5); @@ -8373,7 +8373,7 @@ public static extern int switch_channel_alloc(HandleRef jarg1, HandleRef jarg2); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_init")] - public static extern int switch_channel_init(HandleRef jarg1, HandleRef jarg2, int jarg3, uint jarg4); + public static extern int switch_channel_init(HandleRef jarg1, HandleRef jarg2, int jarg3, int jarg4); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_presence")] public static extern void switch_channel_presence(HandleRef jarg1, string jarg2, string jarg3, string jarg4); @@ -8433,22 +8433,22 @@ public static extern IntPtr switch_channel_get_caller_extension(HandleRef jarg1); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_test_flag")] - public static extern uint switch_channel_test_flag(HandleRef jarg1, uint jarg2); + public static extern uint switch_channel_test_flag(HandleRef jarg1, int jarg2); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_flag")] - public static extern void switch_channel_set_flag(HandleRef jarg1, uint jarg2); + public static extern void switch_channel_set_flag(HandleRef jarg1, int jarg2); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_flag_partner")] - public static extern int switch_channel_set_flag_partner(HandleRef jarg1, uint jarg2); + public static extern int switch_channel_set_flag_partner(HandleRef jarg1, int jarg2); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_clear_flag_partner")] - public static extern int switch_channel_clear_flag_partner(HandleRef jarg1, uint jarg2); + public static extern int switch_channel_clear_flag_partner(HandleRef jarg1, int jarg2); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_state_flag")] - public static extern void switch_channel_set_state_flag(HandleRef jarg1, uint jarg2); + public static extern void switch_channel_set_state_flag(HandleRef jarg1, int jarg2); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_clear_flag")] - public static extern void switch_channel_clear_flag(HandleRef jarg1, uint jarg2); + public static extern void switch_channel_clear_flag(HandleRef jarg1, int jarg2); [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_answer")] public static extern int switch_channel_perform_answer(HandleRef jarg1, string jarg2, string jarg3, int jarg4); @@ -16832,38 +16832,38 @@ namespace FreeSWITCH.Native { -[System.Flags] public enum switch_channel_flag_enum_t { - CF_ANSWERED = (1 << 0), - CF_OUTBOUND = (1 << 1), - CF_EARLY_MEDIA = (1 << 2), - CF_ORIGINATOR = (1 << 3), - CF_TRANSFER = (1 << 4), - CF_ACCEPT_CNG = (1 << 5), - CF_REDIRECT = (1 << 6), - CF_BRIDGED = (1 << 7), - CF_HOLD = (1 << 8), - CF_SERVICE = (1 << 9), - CF_TAGGED = (1 << 10), - CF_WINNER = (1 << 11), - CF_CONTROLLED = (1 << 12), - CF_PROXY_MODE = (1 << 13), - CF_SUSPEND = (1 << 14), - CF_EVENT_PARSE = (1 << 15), - CF_USE_ME = (1 << 16), - CF_GEN_RINGBACK = (1 << 17), - CF_RING_READY = (1 << 18), - CF_BREAK = (1 << 19), - CF_BROADCAST = (1 << 20), - CF_UNICAST = (1 << 21), - CF_VIDEO = (1 << 22), - CF_EVENT_LOCK = (1 << 23), - CF_RESET = (1 << 24), - CF_ORIGINATING = (1 << 25), - CF_STOP_BROADCAST = (1 << 26), - CF_PROXY_MEDIA = (1 << 27), - CF_INNER_BRIDGE = (1 << 28), - CF_REQ_MEDIA = (1 << 29), - CF_VERBOSE_EVENTS = (1 << 30) +public enum switch_channel_flag_t { + CF_ANSWERED = 1, + CF_OUTBOUND, + CF_EARLY_MEDIA, + CF_ORIGINATOR, + CF_TRANSFER, + CF_ACCEPT_CNG, + CF_REDIRECT, + CF_BRIDGED, + CF_HOLD, + CF_SERVICE, + CF_TAGGED, + CF_WINNER, + CF_CONTROLLED, + CF_PROXY_MODE, + CF_SUSPEND, + CF_EVENT_PARSE, + CF_GEN_RINGBACK, + CF_RING_READY, + CF_BREAK, + CF_BROADCAST, + CF_UNICAST, + CF_VIDEO, + CF_EVENT_LOCK, + CF_RESET, + CF_ORIGINATING, + CF_STOP_BROADCAST, + CF_PROXY_MEDIA, + CF_INNER_BRIDGE, + CF_REQ_MEDIA, + CF_VERBOSE_EVENTS, + CF_FLAG_MAX } } Modified: freeswitch/trunk/src/switch_channel.c ============================================================================== --- freeswitch/trunk/src/switch_channel.c (original) +++ freeswitch/trunk/src/switch_channel.c Thu Dec 11 10:20:24 2008 @@ -115,9 +115,9 @@ switch_core_session_t *session; switch_channel_state_t state; switch_channel_state_t running_state; - switch_channel_flag_t flags; + uint8_t flags[CF_FLAG_MAX]; + uint8_t state_flags[CF_FLAG_MAX]; uint32_t private_flags; - switch_channel_flag_t state_flags; switch_caller_profile_t *caller_profile; const switch_state_handler_table_t *state_handlers[SWITCH_MAX_STATE_HANDLERS]; int state_handler_index; @@ -410,11 +410,11 @@ } SWITCH_DECLARE(switch_status_t) switch_channel_init(switch_channel_t *channel, switch_core_session_t *session, switch_channel_state_t state, - uint32_t flags) + switch_channel_flag_t flag) { switch_assert(channel != NULL); channel->state = state; - channel->flags = flags; + switch_channel_set_flag(channel, flag); channel->session = session; channel->running_state = CS_NONE; return SWITCH_STATUS_SUCCESS; @@ -643,13 +643,13 @@ return SWITCH_STATUS_FALSE; } -SWITCH_DECLARE(uint32_t) switch_channel_test_flag(switch_channel_t *channel, switch_channel_flag_t flags) +SWITCH_DECLARE(uint32_t) switch_channel_test_flag(switch_channel_t *channel, switch_channel_flag_t flag) { switch_assert(channel != NULL); - return switch_test_flag(channel, flags) ? 1 : 0; + return channel->flags[flag] ? 1 : 0; } -SWITCH_DECLARE(switch_bool_t) switch_channel_set_flag_partner(switch_channel_t *channel, switch_channel_flag_t flags) +SWITCH_DECLARE(switch_bool_t) switch_channel_set_flag_partner(switch_channel_t *channel, switch_channel_flag_t flag) { const char *uuid; @@ -658,7 +658,7 @@ if ((uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE))) { switch_core_session_t *session; if ((session = switch_core_session_locate(uuid))) { - switch_channel_set_flag(switch_core_session_get_channel(session), flags); + switch_channel_set_flag(switch_core_session_get_channel(session), flag); switch_core_session_rwunlock(session); return SWITCH_TRUE; } @@ -667,7 +667,7 @@ return SWITCH_FALSE; } -SWITCH_DECLARE(switch_bool_t) switch_channel_clear_flag_partner(switch_channel_t *channel, switch_channel_flag_t flags) +SWITCH_DECLARE(switch_bool_t) switch_channel_clear_flag_partner(switch_channel_t *channel, switch_channel_flag_t flag) { const char *uuid; @@ -676,7 +676,7 @@ if ((uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE))) { switch_core_session_t *session; if ((session = switch_core_session_locate(uuid))) { - switch_channel_clear_flag(switch_core_session_get_channel(session), flags); + switch_channel_clear_flag(switch_core_session_get_channel(session), flag); switch_core_session_rwunlock(session); return SWITCH_TRUE; } @@ -714,11 +714,11 @@ for (;;) { if (pres) { - if (switch_test_flag(channel, want_flag)) { + if (switch_channel_test_flag(channel, want_flag)) { break; } } else { - if (!switch_test_flag(channel, want_flag)) { + if (!switch_channel_test_flag(channel, want_flag)) { break; } } @@ -741,11 +741,16 @@ return SWITCH_STATUS_SUCCESS; } -SWITCH_DECLARE(void) switch_channel_set_flag(switch_channel_t *channel, switch_channel_flag_t flags) +SWITCH_DECLARE(void) switch_channel_set_flag(switch_channel_t *channel, switch_channel_flag_t flag) { - switch_assert(channel != NULL); - switch_set_flag_locked(channel, flags); - if (flags & CF_OUTBOUND) { + switch_assert(channel); + switch_assert(channel->flag_mutex); + + switch_mutex_lock(channel->flag_mutex); + channel->flags[flag] = 1; + switch_mutex_unlock(channel->flag_mutex); + + if (flag == CF_OUTBOUND) { switch_channel_set_variable(channel, "is_outbound", "true"); } } @@ -773,21 +778,25 @@ return (channel->private_flags & flags); } - -SWITCH_DECLARE(void) switch_channel_set_state_flag(switch_channel_t *channel, switch_channel_flag_t flags) +SWITCH_DECLARE(void) switch_channel_set_state_flag(switch_channel_t *channel, switch_channel_flag_t flag) { switch_assert(channel != NULL); switch_mutex_lock(channel->flag_mutex); - channel->state_flags |= flags; + channel->state_flags[0] = 1; + channel->state_flags[flag] = 1; switch_mutex_unlock(channel->flag_mutex); } -SWITCH_DECLARE(void) switch_channel_clear_flag(switch_channel_t *channel, switch_channel_flag_t flags) +SWITCH_DECLARE(void) switch_channel_clear_flag(switch_channel_t *channel, switch_channel_flag_t flag) { switch_assert(channel != NULL); - switch_clear_flag_locked(channel, flags); - if (flags & CF_OUTBOUND) { + switch_assert(channel->flag_mutex); + + switch_mutex_lock(channel->flag_mutex); + channel->flags[flag] = 0; + switch_mutex_unlock(channel->flag_mutex); + if (flag == CF_OUTBOUND) { switch_channel_set_variable(channel, "is_outbound", NULL); } } @@ -823,7 +832,7 @@ switch_assert(channel != NULL); if (!channel->hangup_cause && channel->state > CS_ROUTING && channel->state < CS_HANGUP && channel->state != CS_RESET && - !switch_test_flag(channel, CF_TRANSFER)) { + !switch_channel_test_flag(channel, CF_TRANSFER)) { ret++; } @@ -867,16 +876,22 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_set_running_state(switch_channel_t *channel, switch_channel_state_t state, const char *file, const char *func, int line) { + int x; switch_mutex_lock(channel->flag_mutex); switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_DEBUG, "(%s) Running State Change %s\n", channel->name, state_names[state]); channel->running_state = state; - if (channel->state_flags) { - channel->flags |= channel->state_flags; - channel->state_flags = 0; + if (channel->state_flags[0]) { + for(x = 1; x < CF_FLAG_MAX ; x++ ) { + if (channel->state_flags[x]) { + channel->flags[x] = 1; + channel->state_flags[x] = 0; + } + } + channel->state_flags[0] = 0; } - switch_clear_flag(channel, CF_TAGGED); + switch_channel_clear_flag(channel, CF_TAGGED); if (channel->state >= CS_ROUTING) { switch_channel_presence(channel, "unknown", (char *) state_names[state], NULL); @@ -1185,7 +1200,7 @@ } - if (switch_test_flag(channel, CF_VERBOSE_EVENTS) || + if (switch_channel_test_flag(channel, CF_VERBOSE_EVENTS) || event->event_id == SWITCH_EVENT_CHANNEL_ORIGINATE || event->event_id == SWITCH_EVENT_CHANNEL_UUID || event->event_id == SWITCH_EVENT_CHANNEL_ANSWER || From mikej at freeswitch.org Thu Dec 11 07:26:00 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 11 Dec 2008 10:26:00 -0500 Subject: [Freeswitch-trunk] [commit] r10711 - freeswitch/trunk/src/mod/event_handlers/mod_event_socket Message-ID: Author: mikej Date: Thu Dec 11 10:25:59 2008 New Revision: 10711 Log: MODEVENT-33 missing : after Content-Length in event socket Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Thu Dec 11 10:25:59 2008 @@ -1649,7 +1649,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "IP %s Rejected by acl \"%s\"\n", listener->remote_ip, prefs.acl[x]); - switch_snprintf(buf, sizeof(buf), "Content-Type: text/rude-rejection\nContent-Length %d\n\n", mlen); + switch_snprintf(buf, sizeof(buf), "Content-Type: text/rude-rejection\nContent-Length: %d\n\n", mlen); len = strlen(buf); switch_socket_send(listener->sock, buf, &len); len = mlen; @@ -1799,7 +1799,7 @@ const char message[] = "Disconnected, goodbye!\nSee you at ClueCon http://www.cluecon.com!\n"; int mlen = strlen(message); - switch_snprintf(disco_buf, sizeof(disco_buf), "Content-Type: text/disconnect-notice\nContent-Length %d\n\n", mlen); + switch_snprintf(disco_buf, sizeof(disco_buf), "Content-Type: text/disconnect-notice\nContent-Length: %d\n\n", mlen); len = strlen(disco_buf); switch_socket_send(listener->sock, disco_buf, &len); len = mlen; From brian at freeswitch.org Thu Dec 11 07:51:15 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Thu, 11 Dec 2008 10:51:15 -0500 Subject: [Freeswitch-trunk] [commit] r10712 - freeswitch/trunk/conf/autoload_configs Message-ID: Author: brian Date: Thu Dec 11 10:51:15 2008 New Revision: 10712 Log: tweak this Modified: freeswitch/trunk/conf/autoload_configs/local_stream.conf.xml Modified: freeswitch/trunk/conf/autoload_configs/local_stream.conf.xml ============================================================================== --- freeswitch/trunk/conf/autoload_configs/local_stream.conf.xml (original) +++ freeswitch/trunk/conf/autoload_configs/local_stream.conf.xml Thu Dec 11 10:51:15 2008 @@ -14,7 +14,7 @@ - + From mikej at freeswitch.org Thu Dec 11 09:56:51 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 11 Dec 2008 12:56:51 -0500 Subject: [Freeswitch-trunk] [commit] r10714 - freeswitch/trunk/src/mod/applications/mod_commands Message-ID: Author: mikej Date: Thu Dec 11 12:56:51 2008 New Revision: 10714 Log: mod_commands only send content-type on status when it really is http. Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Thu Dec 11 12:56:51 2008 @@ -704,13 +704,14 @@ if (stream->param_event) { http = switch_event_get_header(stream->param_event, "http-host"); + if ((var = switch_event_get_header(stream->param_event, "content-type"))) { + if (!strcasecmp(var, "text/plain")) { + http = NULL; + } + } } - if ((var = switch_event_get_header(stream->param_event, "content-type"))) { - if (!strcasecmp(var, "text/plain")) { - http = NULL; - } - } else { + if (http) { stream->write_function(stream, "%s", "Content-Type: text/html\n\n"); } From brian at freeswitch.org Thu Dec 11 12:16:33 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Thu, 11 Dec 2008 15:16:33 -0500 Subject: [Freeswitch-trunk] [commit] r10715 - in freeswitch/trunk: conf/autoload_configs src/mod/endpoints/mod_sofia Message-ID: Author: brian Date: Thu Dec 11 15:16:32 2008 New Revision: 10715 Log: option to turn of auto_restart of sofia profiles on ip change Modified: freeswitch/trunk/conf/autoload_configs/sofia.conf.xml freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/conf/autoload_configs/sofia.conf.xml ============================================================================== --- freeswitch/trunk/conf/autoload_configs/sofia.conf.xml (original) +++ freeswitch/trunk/conf/autoload_configs/sofia.conf.xml Thu Dec 11 15:16:32 2008 @@ -2,6 +2,8 @@ + + From brian at freeswitch.org Fri Dec 12 15:53:37 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 12 Dec 2008 18:53:37 -0500 Subject: [Freeswitch-trunk] [commit] r10747 - freeswitch/trunk/conf/autoload_configs Message-ID: Author: brian Date: Fri Dec 12 18:53:37 2008 New Revision: 10747 Log: more tweaks Modified: freeswitch/trunk/conf/autoload_configs/java.conf.xml freeswitch/trunk/conf/autoload_configs/lua.conf.xml Modified: freeswitch/trunk/conf/autoload_configs/java.conf.xml ============================================================================== --- freeswitch/trunk/conf/autoload_configs/java.conf.xml (original) +++ freeswitch/trunk/conf/autoload_configs/java.conf.xml Fri Dec 12 18:53:37 2008 @@ -4,7 +4,7 @@ - Modified: freeswitch/trunk/conf/autoload_configs/lua.conf.xml ============================================================================== --- freeswitch/trunk/conf/autoload_configs/lua.conf.xml (original) +++ freeswitch/trunk/conf/autoload_configs/lua.conf.xml Fri Dec 12 18:53:37 2008 @@ -13,7 +13,7 @@ These entries will be pre-pended to the LUA_PATH environment variable --> - + From mcollins at freeswitch.org Fri Dec 12 20:57:27 2008 From: mcollins at freeswitch.org (FreeSWITCH SVN) Date: Fri, 12 Dec 2008 23:57:27 -0500 Subject: [Freeswitch-trunk] [commit] r10748 - freeswitch/trunk/src/mod/applications/mod_commands Message-ID: Author: mcollins Date: Fri Dec 12 23:57:27 2008 New Revision: 10748 Log: api command sent through sched_api was getting the last char lopped off Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Fri Dec 12 23:57:27 2008 @@ -2106,7 +2106,7 @@ } switch_zmalloc(api_task, sizeof(*api_task) + strlen(dcmd) + 1); - switch_copy_string(api_task->cmd, dcmd, strlen(dcmd)); + switch_copy_string(api_task->cmd, dcmd, strlen(dcmd) + 1); api_task->recur = recur; id = switch_scheduler_add_task(when, sch_api_callback, (char *) __SWITCH_FUNC__, group, 0, api_task, SSHF_FREE_ARG); From mcollins at freeswitch.org Fri Dec 12 22:31:32 2008 From: mcollins at freeswitch.org (FreeSWITCH SVN) Date: Sat, 13 Dec 2008 01:31:32 -0500 Subject: [Freeswitch-trunk] [commit] r10749 - freeswitch/trunk/scripts/contrib/mcollins Message-ID: Author: mcollins Date: Sat Dec 13 01:31:32 2008 New Revision: 10749 Log: Add uuid_send_dtmf.lua script Added: freeswitch/trunk/scripts/contrib/mcollins/uuid_send_dtmf.lua (contents, props changed) Added: freeswitch/trunk/scripts/contrib/mcollins/uuid_send_dtmf.lua ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/mcollins/uuid_send_dtmf.lua Sat Dec 13 01:31:32 2008 @@ -0,0 +1,44 @@ +--[[ + + uuid_send_dtmf.lua + +Do uuid_send_dtmf from dialplan +accepts three args: uuid, time, and dtmf +uuid is the uuid of the session +time is the "+ " value in seconds +dtmf is the sequence of dtmf digit(s) to send + +NOTE: only the "+" syntax of sched_api is supported here +NOTE: No error checking, so don't forget to send all args + +Example dialplan call: + + +--]] + +-- Do not hangup at end of script +session:setAutoHangup(false); + +-- get an api object +api = freeswitch.API(); + +-- get the calling args (uuid, time, dtmf) +uuid = argv[1]; +time = argv[2]; +dtmf = argv[3]; + +apicmd = "sched_api"; +apiarg = "+" .. time .. " none uuid_send_dtmf " .. uuid .. " " .. dtmf; + +freeswitch.console_log("NOTICE","apicmd: " .. apicmd .. "\n"); +freeswitch.console_log("NOTICE","apiarg: " .. apiarg .. "\n\n"); + +if uuid then + -- schedule the uuid_send_dtmf + res = api:execute(apicmd,apiarg); + freeswitch.console_log("ERR","Result is " .. res .. "\n\n"); +else + freeswitch.console_log("ERR","Did not receive a uuid for this call!\n"); +end + +-- All done! From mikej at freeswitch.org Sun Dec 14 08:37:40 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 14 Dec 2008 11:37:40 -0500 Subject: [Freeswitch-trunk] [commit] r10754 - freeswitch/trunk/src/mod/languages/mod_spidermonkey Message-ID: Author: mikej Date: Sun Dec 14 11:37:38 2008 New Revision: 10754 Log: type tweak Modified: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Modified: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c (original) +++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Sun Dec 14 11:37:38 2008 @@ -1723,7 +1723,7 @@ switch_input_args_t args = { 0 }; int32 ms = 0; jsval ret = JS_TRUE; - int sync; + int32 sync = 0; METHOD_SANITY_CHECK(); channel = switch_core_session_get_channel(jss->session); From mikej at freeswitch.org Sun Dec 14 08:38:22 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 14 Dec 2008 11:38:22 -0500 Subject: [Freeswitch-trunk] [commit] r10755 - freeswitch/trunk/src/include Message-ID: Author: mikej Date: Sun Dec 14 11:38:21 2008 New Revision: 10755 Log: FSCORE-252 Core NetBSD features are disabled if _XOPEN_SOURCE is defined Modified: freeswitch/trunk/src/include/switch.h Modified: freeswitch/trunk/src/include/switch.h ============================================================================== --- freeswitch/trunk/src/include/switch.h (original) +++ freeswitch/trunk/src/include/switch.h Sun Dec 14 11:38:21 2008 @@ -54,7 +54,7 @@ #define FREESWITCH_ITAD "543" #define __EXTENSIONS__ 1 #ifndef MACOSX -#if !defined(_XOPEN_SOURCE) && !defined(__OpenBSD__) +#if !defined(_XOPEN_SOURCE) && !defined(__OpenBSD__) && !defined(__NetBSD__) #ifndef __cplusplus #define _XOPEN_SOURCE 600 #endif From mikej at freeswitch.org Sun Dec 14 08:41:34 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 14 Dec 2008 11:41:34 -0500 Subject: [Freeswitch-trunk] [commit] r10756 - freeswitch/trunk/src Message-ID: Author: mikej Date: Sun Dec 14 11:41:33 2008 New Revision: 10756 Log: FSCORE-254 NetBSD does not have RLIMIT_AS Modified: freeswitch/trunk/src/switch_core.c Modified: freeswitch/trunk/src/switch_core.c ============================================================================== --- freeswitch/trunk/src/switch_core.c (original) +++ freeswitch/trunk/src/switch_core.c Sun Dec 14 11:41:33 2008 @@ -781,7 +781,7 @@ setrlimit(RLIMIT_CPU, &rlp); setrlimit(RLIMIT_DATA, &rlp); setrlimit(RLIMIT_FSIZE, &rlp); -#ifndef __OpenBSD__ +#if !defined(__OpenBSD__) && !defined(__NetBSD__) setrlimit(RLIMIT_AS, &rlp); #endif #endif From mikej at freeswitch.org Sun Dec 14 08:45:25 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 14 Dec 2008 11:45:25 -0500 Subject: [Freeswitch-trunk] [commit] r10757 - freeswitch/trunk/src/mod/endpoints/mod_iax Message-ID: Author: mikej Date: Sun Dec 14 11:45:25 2008 New Revision: 10757 Log: MODENDP-160 __NetBSD__ is a better define to use than NETBSD Modified: freeswitch/trunk/src/mod/endpoints/mod_iax/iax-client.h Modified: freeswitch/trunk/src/mod/endpoints/mod_iax/iax-client.h ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_iax/iax-client.h (original) +++ freeswitch/trunk/src/mod/endpoints/mod_iax/iax-client.h Sun Dec 14 11:45:25 2008 @@ -23,7 +23,7 @@ #pragma warning(disable:4200) #endif -#if !defined(LINUX) && !defined(NETBSD) +#if !defined(LINUX) && !defined(__NetBSD__) #define socklen_t int #endif From mikej at freeswitch.org Sun Dec 14 09:11:05 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 14 Dec 2008 12:11:05 -0500 Subject: [Freeswitch-trunk] [commit] r10758 - freeswitch/trunk/debian Message-ID: Author: mikej Date: Sun Dec 14 12:11:04 2008 New Revision: 10758 Log: FSBUILD-95 user freeswitch not added to audio group Modified: freeswitch/trunk/debian/postinst Modified: freeswitch/trunk/debian/postinst ============================================================================== --- freeswitch/trunk/debian/postinst (original) +++ freeswitch/trunk/debian/postinst Sun Dec 14 12:11:04 2008 @@ -25,6 +25,7 @@ adduser --disabled-password --quiet --system \ --home /opt/freeswitch \ --gecos "FreeSwitch Voice Platform" --ingroup daemon \ + --add_extra_groups audio \ freeswitch fi From mikej at freeswitch.org Sun Dec 14 16:57:08 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 14 Dec 2008 19:57:08 -0500 Subject: [Freeswitch-trunk] [commit] r10759 - freeswitch/trunk/debian Message-ID: Author: mikej Date: Sun Dec 14 19:57:04 2008 New Revision: 10759 Log: FSBUILD-96 Debian packager still includes woomera Modified: freeswitch/trunk/debian/freeswitch.conffiles freeswitch/trunk/debian/freeswitch.install freeswitch/trunk/debian/rules Modified: freeswitch/trunk/debian/freeswitch.conffiles ============================================================================== --- freeswitch/trunk/debian/freeswitch.conffiles (original) +++ freeswitch/trunk/debian/freeswitch.conffiles Sun Dec 14 19:57:04 2008 @@ -62,7 +62,6 @@ /opt/freeswitch/conf/autoload_configs/modules.conf.xml /opt/freeswitch/conf/autoload_configs/dingaling.conf.xml /opt/freeswitch/conf/autoload_configs/iax.conf.xml -/opt/freeswitch/conf/autoload_configs/woomera.conf.xml /opt/freeswitch/conf/autoload_configs/post_load_modules.conf.xml /opt/freeswitch/conf/autoload_configs/pocketsphinx.conf.xml /opt/freeswitch/conf/autoload_configs/xml_cdr.conf.xml Modified: freeswitch/trunk/debian/freeswitch.install ============================================================================== --- freeswitch/trunk/debian/freeswitch.install (original) +++ freeswitch/trunk/debian/freeswitch.install Sun Dec 14 19:57:04 2008 @@ -29,7 +29,6 @@ opt/freeswitch/mod/mod_iax.so* opt/freeswitch/mod/mod_portaudio.so* opt/freeswitch/mod/mod_sofia.so* -opt/freeswitch/mod/mod_woomera.so* opt/freeswitch/mod/mod_openzap.so opt/freeswitch/mod/ozmod_analog_em.so opt/freeswitch/mod/ozmod_analog.so @@ -110,7 +109,6 @@ opt/freeswitch/conf/autoload_configs/modules.conf.xml opt/freeswitch/conf/autoload_configs/dingaling.conf.xml opt/freeswitch/conf/autoload_configs/iax.conf.xml -opt/freeswitch/conf/autoload_configs/woomera.conf.xml opt/freeswitch/conf/autoload_configs/post_load_modules.conf.xml opt/freeswitch/conf/autoload_configs/pocketsphinx.conf.xml opt/freeswitch/conf/autoload_configs/xml_cdr.conf.xml Modified: freeswitch/trunk/debian/rules ============================================================================== --- freeswitch/trunk/debian/rules (original) +++ freeswitch/trunk/debian/rules Sun Dec 14 19:57:04 2008 @@ -20,8 +20,7 @@ export DIRECTORIES_MODULES= export DOTNET_MODULES= export ENDPOINTS_MODULES=endpoints/mod_dingaling endpoints/mod_iax endpoints/mod_portaudio endpoints/mod_sofia \ - endpoints/mod_woomera endpoints/mod_loopback \ - ../../libs/openzap/mod_openzap + endpoints/mod_loopback ../../libs/openzap/mod_openzap 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 LANGUAGES_MODULES=languages/mod_perl languages/mod_lua From mikej at freeswitch.org Sun Dec 14 18:48:50 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 14 Dec 2008 21:48:50 -0500 Subject: [Freeswitch-trunk] [commit] r10760 - in freeswitch/trunk/src: . include mod/formats/mod_sndfile Message-ID: Author: mikej Date: Sun Dec 14 21:48:50 2008 New Revision: 10760 Log: FSCRE-253 netbsd does not follow opengroup prototypes on toupper and tolower so we have to do stupid workarounds. Modified: freeswitch/trunk/src/include/switch_utils.h freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c freeswitch/trunk/src/switch_utils.c Modified: freeswitch/trunk/src/include/switch_utils.h ============================================================================== --- freeswitch/trunk/src/include/switch_utils.h (original) +++ freeswitch/trunk/src/include/switch_utils.h Sun Dec 14 21:48:50 2008 @@ -41,6 +41,10 @@ #include SWITCH_BEGIN_EXTERN_C + +SWITCH_DECLARE(int) switch_toupper(int c); +SWITCH_DECLARE(int) switch_tolower(int c); + #define switch_samples_per_packet(rate, interval) ((uint32_t)((float)rate / (1000.0f / (float)interval))) #define SWITCH_SMAX 32767 #define SWITCH_SMIN -32768 @@ -303,7 +307,7 @@ if (it) { dup = strdup(it); for(p = dup; p && *p; p++) { - *p = (char) tolower(*p); + *p = (char) switch_tolower(*p); } return dup; } @@ -320,7 +324,7 @@ if (it) { dup = strdup(it); for(p = dup; p && *p; p++) { - *p = (char) toupper(*p); + *p = (char) switch_toupper(*p); } return dup; } @@ -353,7 +357,7 @@ assert(S != NULL); for (p = S; p && *p; p++) { - *p = (char) toupper(*p); + *p = (char) switch_toupper(*p); } if (strstr(S, q)) { @@ -365,7 +369,7 @@ assert(Q != NULL); for (p = Q; p && *p; p++) { - *p = (char) toupper(*p); + *p = (char) switch_toupper(*p); } if (strstr(s, Q)) { Modified: freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c (original) +++ freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c Sun Dec 14 21:48:50 2008 @@ -339,13 +339,13 @@ map->format = info.format; if (map->ext) { for (p = map->ext; *p; p++) { - *p = (char) tolower(*p); + *p = (char) switch_tolower(*p); } switch_core_hash_insert(globals.format_hash, map->ext, map); } if (map->uext) { for (p = map->uext; *p; p++) { - *p = (char) toupper(*p); + *p = (char) switch_toupper(*p); } switch_core_hash_insert(globals.format_hash, map->uext, map); } Modified: freeswitch/trunk/src/switch_utils.c ============================================================================== --- freeswitch/trunk/src/switch_utils.c (original) +++ freeswitch/trunk/src/switch_utils.c Sun Dec 14 21:48:50 2008 @@ -654,7 +654,7 @@ for (start = str; *start; start++) { /* find start of pattern in string */ - for (; ((*start) && (toupper(*start) != toupper(*instr))); start++); + for (; ((*start) && (switch_toupper(*start) != switch_toupper(*instr))); start++); if (!*start) return NULL; @@ -662,7 +662,7 @@ pptr = instr; sptr = start; - while (toupper(*sptr) == toupper(*pptr)) { + while (switch_toupper(*sptr) == switch_toupper(*pptr)) { sptr++; pptr++; @@ -1138,7 +1138,7 @@ char *c; unsigned char counter = 0; - key = (char) toupper(key); + key = (char) switch_toupper(key); for (c = RFC2833_CHARS; *c; c++) { if (*c == key) { return counter; @@ -1507,6 +1507,105 @@ return s; } + +/* Written by Marc Espie, public domain */ +#define SWITCH_CTYPE_NUM_CHARS 256 + +const short _switch_C_toupper_[1 + SWITCH_CTYPE_NUM_CHARS] = { + EOF, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff +}; + +const short *_switch_toupper_tab_ = _switch_C_toupper_; + +SWITCH_DECLARE(int) switch_toupper(int c) +{ + if ((unsigned int)c > 255) + return(c); + if (c < -1) + return EOF; + return((_switch_toupper_tab_ + 1)[c]); +} + +const short _switch_C_tolower_[1 + SWITCH_CTYPE_NUM_CHARS] = { + EOF, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff +}; + +const short *_switch_tolower_tab_ = _switch_C_tolower_; + +SWITCH_DECLARE(int) switch_tolower(int c) +{ + if ((unsigned int)c > 255) + return(c); + if (c < -1) + return EOF; + return((_switch_tolower_tab_ + 1)[c]); +} + + /* For Emacs: * Local Variables: * mode:c From mikej at freeswitch.org Sun Dec 14 19:21:37 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 14 Dec 2008 22:21:37 -0500 Subject: [Freeswitch-trunk] [commit] r10761 - in freeswitch/trunk/src: . include Message-ID: Author: mikej Date: Sun Dec 14 22:21:36 2008 New Revision: 10761 Log: FSCORE-253. add the following functions to work around netbsd failures switch_toupper switch_tolower switch_isalnum switch_isalpha switch_iscntrl switch_isdigit switch_isgraph switch_islower switch_isprint switch_ispunct switch_isspace switch_isupper switch_isxdigit Modified: freeswitch/trunk/src/include/switch_utils.h freeswitch/trunk/src/switch_utils.c Modified: freeswitch/trunk/src/include/switch_utils.h ============================================================================== --- freeswitch/trunk/src/include/switch_utils.h (original) +++ freeswitch/trunk/src/include/switch_utils.h Sun Dec 14 22:21:36 2008 @@ -44,6 +44,18 @@ SWITCH_DECLARE(int) switch_toupper(int c); SWITCH_DECLARE(int) switch_tolower(int c); +SWITCH_DECLARE(int) switch_isalnum(int c); +SWITCH_DECLARE(int) switch_isalpha(int c); +SWITCH_DECLARE(int) switch_iscntrl(int c); +SWITCH_DECLARE(int) switch_isdigit(int c); +SWITCH_DECLARE(int) switch_isgraph(int c); +SWITCH_DECLARE(int) switch_islower(int c); +SWITCH_DECLARE(int) switch_isprint(int c); +SWITCH_DECLARE(int) switch_ispunct(int c); +SWITCH_DECLARE(int) switch_isspace(int c); +SWITCH_DECLARE(int) switch_isupper(int c); +SWITCH_DECLARE(int) switch_isxdigit(int c); + #define switch_samples_per_packet(rate, interval) ((uint32_t)((float)rate / (1000.0f / (float)interval))) #define SWITCH_SMAX 32767 Modified: freeswitch/trunk/src/switch_utils.c ============================================================================== --- freeswitch/trunk/src/switch_utils.c (original) +++ freeswitch/trunk/src/switch_utils.c Sun Dec 14 22:21:36 2008 @@ -1605,6 +1605,152 @@ return((_switch_tolower_tab_ + 1)[c]); } +/* + * Copyright (c) 1989 The Regents of the University of California. + * All rights reserved. + * (c) UNIX System Laboratories, Inc. + * All or some portions of this file are derived from material licensed + * to the University of California by American Telephone and Telegraph + * Co. or Unix System Laboratories, Inc. and are reproduced herein with + * the permission of UNIX System Laboratories, Inc. + * + * 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. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. + */ + +#undef _U +#undef _L +#undef _N +#undef _S +#undef _P +#undef _C +#undef _X +#undef _B + +#define _U 0x01 +#define _L 0x02 +#define _N 0x04 +#define _S 0x08 +#define _P 0x10 +#define _C 0x20 +#define _X 0x40 +#define _B 0x80 + +const char _switch_C_ctype_[1 + SWITCH_CTYPE_NUM_CHARS] = { + 0, + _C, _C, _C, _C, _C, _C, _C, _C, + _C, _C|_S, _C|_S, _C|_S, _C|_S, _C|_S, _C, _C, + _C, _C, _C, _C, _C, _C, _C, _C, + _C, _C, _C, _C, _C, _C, _C, _C, + _S|_B, _P, _P, _P, _P, _P, _P, _P, + _P, _P, _P, _P, _P, _P, _P, _P, + _N, _N, _N, _N, _N, _N, _N, _N, + _N, _N, _P, _P, _P, _P, _P, _P, + _P, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U, + _U, _U, _U, _U, _U, _U, _U, _U, + _U, _U, _U, _U, _U, _U, _U, _U, + _U, _U, _U, _P, _P, _P, _P, _P, + _P, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L, + _L, _L, _L, _L, _L, _L, _L, _L, + _L, _L, _L, _L, _L, _L, _L, _L, +/* determine printability based on the IS0 8859 8-bit standard */ + _L, _L, _L, _P, _P, _P, _P, _C, + + _C, _C, _C, _C, _C, _C, _C, _C, /* 80 */ + _C, _C, _C, _C, _C, _C, _C, _C, /* 88 */ + _C, _C, _C, _C, _C, _C, _C, _C, /* 90 */ + _C, _C, _C, _C, _C, _C, _C, _C, /* 98 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* A0 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* A8 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* B0 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* B8 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* C0 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* C8 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* D0 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* D8 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* E0 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* E8 */ + _P, _P, _P, _P, _P, _P, _P, _P, /* F0 */ + _P, _P, _P, _P, _P, _P, _P, _P /* F8 */ +}; + +const char *_switch_ctype_ = _switch_C_ctype_; + +SWITCH_DECLARE(int) switch_isalnum(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & (_U|_L|_N))); +} + +SWITCH_DECLARE(int) switch_isalpha(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & (_U|_L))); +} + +SWITCH_DECLARE(int) switch_iscntrl(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & _C)); +} + +SWITCH_DECLARE(int) switch_isdigit(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & _N)); +} + +SWITCH_DECLARE(int) switch_isgraph(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & (_P|_U|_L|_N))); +} + +SWITCH_DECLARE(int) switch_islower(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & _L)); +} + +SWITCH_DECLARE(int) switch_isprint(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & (_P|_U|_L|_N|_B))); +} + +SWITCH_DECLARE(int) switch_ispunct(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & _P)); +} + +SWITCH_DECLARE(int) switch_isspace(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & _S)); +} + +SWITCH_DECLARE(int) switch_isupper(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & _U)); +} + +SWITCH_DECLARE(int) switch_isxdigit(int c) +{ + return (c < 0 ? 0 : c > 255 ? 0 : ((_switch_ctype_ + 1)[(unsigned char)c] & (_N|_X))); +} /* For Emacs: * Local Variables: From mikej at freeswitch.org Sun Dec 14 19:28:24 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 14 Dec 2008 22:28:24 -0500 Subject: [Freeswitch-trunk] [commit] r10762 - freeswitch/trunk/src/mod/applications/mod_expr Message-ID: Author: mikej Date: Sun Dec 14 22:28:23 2008 New Revision: 10762 Log: FSCORE-253 work around netbsd failures Modified: freeswitch/trunk/src/mod/applications/mod_expr/exprpars.c freeswitch/trunk/src/mod/applications/mod_expr/exprutil.c Modified: freeswitch/trunk/src/mod/applications/mod_expr/exprpars.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_expr/exprpars.c (original) +++ freeswitch/trunk/src/mod/applications/mod_expr/exprpars.c Sun Dec 14 22:28:23 2008 @@ -12,6 +12,7 @@ #include "exprpriv.h" #include "exprmem.h" +#include "switch_utils.h" /* Data structure used by parser */ typedef struct _exprToken { @@ -314,12 +315,12 @@ default: { if (!comment) { - if (expr[pos] == '.' || isdigit(expr[pos])) { + if (expr[pos] == '.' || switch_isdigit(expr[pos])) { /* Value */ start = pos; /* Find digits before a period */ - while (isdigit(expr[pos])) + while (switch_isdigit(expr[pos])) pos++; /* Find a period */ @@ -327,7 +328,7 @@ pos++; /* Find digits after a period */ - while (isdigit(expr[pos])) + while (switch_isdigit(expr[pos])) pos++; /* pos is AFTER last item, back up */ @@ -356,12 +357,12 @@ list[tpos].data.val = (EXPRTYPE) atof(buf); tpos++; } - } else if (expr[pos] == '_' || isalpha(expr[pos])) { + } else if (expr[pos] == '_' || switch_isalpha(expr[pos])) { /* Identifier */ start = pos; /* Find rest of identifier */ - while (expr[pos] == '_' || isalnum(expr[pos])) + while (expr[pos] == '_' || switch_isalnum(expr[pos])) pos++; /* pos is AFTER last item, back up */ @@ -397,7 +398,7 @@ strcpy(list[tpos].data.str, buf); tpos++; } - } else if (isspace(expr[pos])) { + } else if (switch_isspace(expr[pos])) { /* Spaces are ignored, do nothing */ } else { /* Unknown */ Modified: freeswitch/trunk/src/mod/applications/mod_expr/exprutil.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_expr/exprutil.c (original) +++ freeswitch/trunk/src/mod/applications/mod_expr/exprutil.c Sun Dec 14 22:28:23 2008 @@ -11,6 +11,7 @@ #include "exprincl.h" #include "exprpriv.h" +#include "switch_utils.h" /* Return the version number */ @@ -27,13 +28,13 @@ return 0; /* First must be letter or underscore */ - if (isalpha(*name) || *name == '_') + if (switch_isalpha(*name) || *name == '_') name++; /* Point to next letter */ else return 0; /* Not letter or underscore, maybe empty */ /* others can be letter, number, or underscore */ - while (isalnum(*name) || *name == '_') + while (switch_isalnum(*name) || *name == '_') name++; /* When the while breaks out, we should be at the end */ From mikej at freeswitch.org Sun Dec 14 19:45:39 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 14 Dec 2008 22:45:39 -0500 Subject: [Freeswitch-trunk] [commit] r10763 - in freeswitch/trunk/src/mod/languages: mod_java mod_java/src/org/freeswitch/swig mod_lua mod_managed mod_managed/managed mod_perl mod_python Message-ID: Author: mikej Date: Sun Dec 14 22:45:38 2008 New Revision: 10763 Log: swigall Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java (original) +++ freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java Sun Dec 14 22:45:38 2008 @@ -245,8 +245,12 @@ return freeswitchJNI.CoreSession_streamFile__SWIG_1(swigCPtr, this, file); } + public int sleep(int ms, int sync) { + return freeswitchJNI.CoreSession_sleep__SWIG_0(swigCPtr, this, ms, sync); + } + public int sleep(int ms) { - return freeswitchJNI.CoreSession_sleep(swigCPtr, this, ms); + return freeswitchJNI.CoreSession_sleep__SWIG_1(swigCPtr, this, ms); } public int flushEvents() { Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java (original) +++ freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java Sun Dec 14 22:45:38 2008 @@ -136,7 +136,8 @@ public final static native String CoreSession_playAndGetDigits(long jarg1, CoreSession jarg1_, int jarg2, int jarg3, int jarg4, int jarg5, String jarg6, String jarg7, String jarg8, String jarg9); public final static native int CoreSession_streamFile__SWIG_0(long jarg1, CoreSession jarg1_, String jarg2, int jarg3); public final static native int CoreSession_streamFile__SWIG_1(long jarg1, CoreSession jarg1_, String jarg2); - public final static native int CoreSession_sleep(long jarg1, CoreSession jarg1_, int jarg2); + public final static native int CoreSession_sleep__SWIG_0(long jarg1, CoreSession jarg1_, int jarg2, int jarg3); + public final static native int CoreSession_sleep__SWIG_1(long jarg1, CoreSession jarg1_, int jarg2); public final static native int CoreSession_flushEvents(long jarg1, CoreSession jarg1_); public final static native int CoreSession_flushDigits(long jarg1, CoreSession jarg1_); public final static native int CoreSession_setAutoHangup(long jarg1, CoreSession jarg1_, boolean jarg2); Modified: freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp Sun Dec 14 22:45:38 2008 @@ -2674,7 +2674,26 @@ } -SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sleep(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { +SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sleep_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jint jarg3) { + jint jresult = 0 ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(CoreSession **)&jarg1; + arg2 = (int)jarg2; + arg3 = (int)jarg3; + result = (int)(arg1)->sleep(arg2,arg3); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sleep_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { jint jresult = 0 ; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; Modified: freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp Sun Dec 14 22:45:38 2008 @@ -6077,7 +6077,38 @@ } -static int _wrap_CoreSession_sleep(lua_State* L) { +static int _wrap_CoreSession_sleep__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int result; + + SWIG_check_num_args("sleep",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("sleep",1,"CoreSession *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("sleep",2,"int"); + if(!lua_isnumber(L,3)) SWIG_fail_arg("sleep",3,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_sleep",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (int)lua_tonumber(L, 2); + arg3 = (int)lua_tonumber(L, 3); + result = (int)(arg1)->sleep(arg2,arg3); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} + + +static int _wrap_CoreSession_sleep__SWIG_1(lua_State* L) { int SWIG_arg = -1; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; @@ -6105,6 +6136,62 @@ } +static int _wrap_CoreSession_sleep(lua_State* L) { + int argc; + int argv[4]={ + 1,2,3,4 + }; + + argc = lua_gettop(L); + if (argc == 2) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isnumber(L,argv[1]); + } + if (_v) { + return _wrap_CoreSession_sleep__SWIG_1(L); + } + } + } + if (argc == 3) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isnumber(L,argv[1]); + } + if (_v) { + { + _v = lua_isnumber(L,argv[2]); + } + if (_v) { + return _wrap_CoreSession_sleep__SWIG_0(L); + } + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'CoreSession_sleep'"); + lua_error(L);return 0; +} + + static int _wrap_CoreSession_flushEvents(lua_State* L) { int SWIG_arg = -1; CoreSession *arg1 = (CoreSession *) 0 ; Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx Sun Dec 14 22:45:38 2008 @@ -7514,6 +7514,162 @@ } +SWIGEXPORT int SWIGSTDCALL CSharp_switch_toupper(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_toupper(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_tolower(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_tolower(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isalnum(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isalnum(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isalpha(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isalpha(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_iscntrl(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_iscntrl(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isdigit(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isdigit(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isgraph(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isgraph(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_islower(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_islower(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isprint(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isprint(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ispunct(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_ispunct(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isspace(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isspace(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isupper(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isupper(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isxdigit(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isxdigit(arg1); + jresult = result; + return jresult; +} + + SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_SMAX_get() { int jresult ; int result; Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Sun Dec 14 22:45:38 2008 @@ -1937,6 +1937,71 @@ return ret; } + public static int switch_toupper(int c) { + int ret = freeswitchPINVOKE.switch_toupper(c); + return ret; + } + + public static int switch_tolower(int c) { + int ret = freeswitchPINVOKE.switch_tolower(c); + return ret; + } + + public static int switch_isalnum(int c) { + int ret = freeswitchPINVOKE.switch_isalnum(c); + return ret; + } + + public static int switch_isalpha(int c) { + int ret = freeswitchPINVOKE.switch_isalpha(c); + return ret; + } + + public static int switch_iscntrl(int c) { + int ret = freeswitchPINVOKE.switch_iscntrl(c); + return ret; + } + + public static int switch_isdigit(int c) { + int ret = freeswitchPINVOKE.switch_isdigit(c); + return ret; + } + + public static int switch_isgraph(int c) { + int ret = freeswitchPINVOKE.switch_isgraph(c); + return ret; + } + + public static int switch_islower(int c) { + int ret = freeswitchPINVOKE.switch_islower(c); + return ret; + } + + public static int switch_isprint(int c) { + int ret = freeswitchPINVOKE.switch_isprint(c); + return ret; + } + + public static int switch_ispunct(int c) { + int ret = freeswitchPINVOKE.switch_ispunct(c); + return ret; + } + + public static int switch_isspace(int c) { + int ret = freeswitchPINVOKE.switch_isspace(c); + return ret; + } + + public static int switch_isupper(int c) { + int ret = freeswitchPINVOKE.switch_isupper(c); + return ret; + } + + public static int switch_isxdigit(int c) { + int ret = freeswitchPINVOKE.switch_isxdigit(c); + return ret; + } + public static switch_bool_t switch_is_moh(string s) { switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_is_moh(s); return ret; @@ -5987,6 +6052,45 @@ [DllImport("mod_managed", EntryPoint="CSharp_switch_console_stream_raw_write")] public static extern int switch_console_stream_raw_write(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + [DllImport("mod_managed", EntryPoint="CSharp_switch_toupper")] + public static extern int switch_toupper(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_tolower")] + public static extern int switch_tolower(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isalnum")] + public static extern int switch_isalnum(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isalpha")] + public static extern int switch_isalpha(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_iscntrl")] + public static extern int switch_iscntrl(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isdigit")] + public static extern int switch_isdigit(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isgraph")] + public static extern int switch_isgraph(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_islower")] + public static extern int switch_islower(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isprint")] + public static extern int switch_isprint(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ispunct")] + public static extern int switch_ispunct(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isspace")] + public static extern int switch_isspace(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isupper")] + public static extern int switch_isupper(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isxdigit")] + public static extern int switch_isxdigit(int jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SMAX_get")] public static extern int SWITCH_SMAX_get(); Modified: freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp Sun Dec 14 22:45:38 2008 @@ -8146,7 +8146,55 @@ } -XS(_wrap_CoreSession_sleep) { +XS(_wrap_CoreSession_sleep__SWIG_0) { + { + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int result; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + int val3 ; + int ecode3 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 3) || (items > 3)) { + SWIG_croak("Usage: CoreSession_sleep(self,ms,sync);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sleep" "', argument " "1"" of type '" "CoreSession *""'"); + } + arg1 = reinterpret_cast< CoreSession * >(argp1); + ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoreSession_sleep" "', argument " "2"" of type '" "int""'"); + } + arg2 = static_cast< int >(val2); + ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoreSession_sleep" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + result = (int)(arg1)->sleep(arg2,arg3); + ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(result)); argvi++ ; + + + + XSRETURN(argvi); + fail: + + + + SWIG_croak_null(); + } +} + + +XS(_wrap_CoreSession_sleep__SWIG_1) { { CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; @@ -8184,6 +8232,98 @@ } +XS(_wrap_CoreSession_sleep) { + dXSARGS; + + { + unsigned long _index = 0; + SWIG_TypeRank _rank = 0; + if (items == 2) { + SWIG_TypeRank _ranki = 0; + SWIG_TypeRank _rankm = 0; + SWIG_TypeRank _pi = 1; + int _v = 0; + { + void *vptr = 0; + int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0); + _v = SWIG_CheckState(res); + } + if (!_v) goto check_1; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + { + { + int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL); + _v = SWIG_CheckState(res); + } + } + if (!_v) goto check_1; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + if (!_index || (_ranki < _rank)) { + _rank = _ranki; _index = 1; + if (_rank == _rankm) goto dispatch; + } + } + check_1: + + if (items == 3) { + SWIG_TypeRank _ranki = 0; + SWIG_TypeRank _rankm = 0; + SWIG_TypeRank _pi = 1; + int _v = 0; + { + void *vptr = 0; + int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0); + _v = SWIG_CheckState(res); + } + if (!_v) goto check_2; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + { + { + int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL); + _v = SWIG_CheckState(res); + } + } + if (!_v) goto check_2; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + { + { + int res = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), NULL); + _v = SWIG_CheckState(res); + } + } + if (!_v) goto check_2; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + if (!_index || (_ranki < _rank)) { + _rank = _ranki; _index = 2; + if (_rank == _rankm) goto dispatch; + } + } + check_2: + + dispatch: + switch(_index) { + case 1: + ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_sleep__SWIG_1); return; + case 2: + ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_sleep__SWIG_0); return; + } + } + + croak("No matching function for overloaded 'CoreSession_sleep'"); + XSRETURN(0); +} + + XS(_wrap_CoreSession_flushEvents) { { CoreSession *arg1 = (CoreSession *) 0 ; Modified: freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp Sun Dec 14 22:45:38 2008 @@ -8018,7 +8018,47 @@ } -SWIGINTERN PyObject *_wrap_CoreSession_sleep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_CoreSession_sleep__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int result; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:CoreSession_sleep",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sleep" "', argument " "1"" of type '" "CoreSession *""'"); + } + arg1 = reinterpret_cast< CoreSession * >(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoreSession_sleep" "', argument " "2"" of type '" "int""'"); + } + arg2 = static_cast< int >(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoreSession_sleep" "', argument " "3"" of type '" "int""'"); + } + arg3 = static_cast< int >(val3); + result = (int)(arg1)->sleep(arg2,arg3); + resultobj = SWIG_From_int(static_cast< int >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_CoreSession_sleep__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; @@ -8049,6 +8089,62 @@ } +SWIGINTERN PyObject *_wrap_CoreSession_sleep(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = (int)PyObject_Length(args); + for (ii = 0; (ii < argc) && (ii < 3); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CoreSession_sleep__SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_int(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_CoreSession_sleep__SWIG_0(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_sleep'.\n" + " Possible C/C++ prototypes are:\n" + " sleep(CoreSession *,int,int)\n" + " sleep(CoreSession *,int)\n"); + return NULL; +} + + SWIGINTERN PyObject *_wrap_CoreSession_flushEvents(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; CoreSession *arg1 = (CoreSession *) 0 ; From mikej at freeswitch.org Sun Dec 14 21:12:13 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 00:12:13 -0500 Subject: [Freeswitch-trunk] [commit] r10764 - freeswitch/trunk/src Message-ID: Author: mikej Date: Mon Dec 15 00:12:12 2008 New Revision: 10764 Log: FSCORE-253 workaround netbsd failures Modified: freeswitch/trunk/src/switch_utils.c Modified: freeswitch/trunk/src/switch_utils.c ============================================================================== --- freeswitch/trunk/src/switch_utils.c (original) +++ freeswitch/trunk/src/switch_utils.c Mon Dec 15 00:12:12 2008 @@ -1657,7 +1657,7 @@ #define _X 0x40 #define _B 0x80 -const char _switch_C_ctype_[1 + SWITCH_CTYPE_NUM_CHARS] = { +const int _switch_C_ctype_[1 + SWITCH_CTYPE_NUM_CHARS] = { 0, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C|_S, _C|_S, _C|_S, _C|_S, _C|_S, _C, _C, @@ -1695,7 +1695,7 @@ _P, _P, _P, _P, _P, _P, _P, _P /* F8 */ }; -const char *_switch_ctype_ = _switch_C_ctype_; +const int *_switch_ctype_ = _switch_C_ctype_; SWITCH_DECLARE(int) switch_isalnum(int c) { From anthm at freeswitch.org Mon Dec 15 08:10:22 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 11:10:22 -0500 Subject: [Freeswitch-trunk] [commit] r10766 - freeswitch/trunk/src Message-ID: Author: anthm Date: Mon Dec 15 11:10:20 2008 New Revision: 10766 Log: fix null mutex race cond Modified: freeswitch/trunk/src/switch_core_io.c Modified: freeswitch/trunk/src/switch_core_io.c ============================================================================== --- freeswitch/trunk/src/switch_core_io.c (original) +++ freeswitch/trunk/src/switch_core_io.c Mon Dec 15 11:10:20 2008 @@ -600,12 +600,16 @@ switch_assert(frame->codec != NULL); switch_assert(frame->codec->implementation != NULL); - if (!(session->write_codec && frame->codec)) { + switch_mutex_lock(session->codec_write_mutex); + + if (!(session->write_codec && session->write_codec->mutex && frame->codec)) { + switch_mutex_unlock(session->codec_write_mutex); return SWITCH_STATUS_FALSE; } + switch_mutex_lock(session->write_codec->mutex); switch_mutex_lock(frame->codec->mutex); - switch_mutex_lock(session->codec_write_mutex); + if ((session->write_codec && frame->codec && session->write_codec->implementation != frame->codec->implementation)) { if (session->write_codec->implementation->codec_id == frame->codec->implementation->codec_id) { From brian at freeswitch.org Mon Dec 15 08:14:39 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 11:14:39 -0500 Subject: [Freeswitch-trunk] [commit] r10767 - freeswitch/trunk/conf/autoload_configs Message-ID: Author: brian Date: Mon Dec 15 11:14:39 2008 New Revision: 10767 Log: add siren to conf file Modified: freeswitch/trunk/conf/autoload_configs/modules.conf.xml Modified: freeswitch/trunk/conf/autoload_configs/modules.conf.xml ============================================================================== --- freeswitch/trunk/conf/autoload_configs/modules.conf.xml (original) +++ freeswitch/trunk/conf/autoload_configs/modules.conf.xml Mon Dec 15 11:14:39 2008 @@ -63,6 +63,7 @@ + From brian at freeswitch.org Mon Dec 15 08:21:16 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 11:21:16 -0500 Subject: [Freeswitch-trunk] [commit] r10768 - freeswitch/trunk/conf/sip_profiles Message-ID: Author: brian Date: Mon Dec 15 11:21:15 2008 New Revision: 10768 Log: add docs for force-subscription-expires Modified: freeswitch/trunk/conf/sip_profiles/internal.xml Modified: freeswitch/trunk/conf/sip_profiles/internal.xml ============================================================================== --- freeswitch/trunk/conf/sip_profiles/internal.xml (original) +++ freeswitch/trunk/conf/sip_profiles/internal.xml Mon Dec 15 11:21:15 2008 @@ -148,6 +148,8 @@ + + From brian at freeswitch.org Mon Dec 15 09:26:25 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 12:26:25 -0500 Subject: [Freeswitch-trunk] [commit] r10770 - freeswitch/trunk/support-d Message-ID: Author: brian Date: Mon Dec 15 12:26:24 2008 New Revision: 10770 Log: download from fs.org Modified: freeswitch/trunk/support-d/install-cc-mode.sh Modified: freeswitch/trunk/support-d/install-cc-mode.sh ============================================================================== --- freeswitch/trunk/support-d/install-cc-mode.sh (original) +++ freeswitch/trunk/support-d/install-cc-mode.sh Mon Dec 15 12:26:24 2008 @@ -1,5 +1,5 @@ version=5.31.3 -wget http://easynews.dl.sourceforge.net/sourceforge/cc-mode/cc-mode-${version}.tar.gz +wget http://www.freeswitch.org/eg/cc-mode-${version}.tar.gz tar -zxvf cc-mode-${version}.tar.gz cd cc-mode-${version} emacs -batch -no-site-file -q -f batch-byte-compile cc-*.el From brian at freeswitch.org Mon Dec 15 10:14:54 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 13:14:54 -0500 Subject: [Freeswitch-trunk] [commit] r10775 - freeswitch/trunk/build Message-ID: Author: brian Date: Mon Dec 15 13:14:53 2008 New Revision: 10775 Log: FSSCRIPTS-10 thanks Sergey Added: freeswitch/trunk/build/freeswitch.init.archlinux Added: freeswitch/trunk/build/freeswitch.init.archlinux ============================================================================== --- (empty file) +++ freeswitch/trunk/build/freeswitch.init.archlinux Mon Dec 15 13:14:53 2008 @@ -0,0 +1,35 @@ +#!/bin/sh +# +# freeswitch.sh - startup script for freeswitch + +. /etc/rc.conf +. /etc/rc.d/functions + +case "$1" in + + start) + if [ -x /var/freeswitch/bin/freeswitch ] ; then + stat_busy "freeswitch starting..." + + /var/freeswitch/bin/freeswitch -nc & + add_daemon freeswitch + stat_done + fi + ;; + + stop) + if [ -x /var/freeswitch/bin/freeswitch ] ; then + stat_busy "freeswitch stopping..." + + /var/freeswitch/bin/freeswitch -stop & + rm_daemon freeswitch + stat_done + fi + ;; + + *) + echo "usage: $0 { start | stop }" >&2 + exit 1 + ;; + +esac From brian at freeswitch.org Mon Dec 15 10:16:35 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 13:16:35 -0500 Subject: [Freeswitch-trunk] [commit] r10776 - freeswitch/trunk/scripts/s25vmail Message-ID: Author: brian Date: Mon Dec 15 13:16:34 2008 New Revision: 10776 Log: FSSCRIPTS-8 Thanks John Added: freeswitch/trunk/scripts/s25vmail/ freeswitch/trunk/scripts/s25vmail/README freeswitch/trunk/scripts/s25vmail/s25vmail.js freeswitch/trunk/scripts/s25vmail/s25vmail_mwi.c Added: freeswitch/trunk/scripts/s25vmail/README ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/s25vmail/README Mon Dec 15 13:16:34 2008 @@ -0,0 +1,42 @@ +This directory contains software used for interfacing the +FreeSWITCH voicemail application with the AT&T (aka Lucent +aka Avaya) System 25 PBX. It's possible that System 75 +and Definity PBXs may also work. + +s25vmail.js goes into the FreeSWITCH scripts directory. +s25vmail_mwi.c should be compiled and the resulting binary +put into the FreeSWITCH bin directory. Modify the FreeSWITCH +rc.d script to also start / stop s25vmail_mwi. + +Configuration fragments look something like: + + conf/openzap.conf: + + [span zt] + ; A204DX + name => OpenZAP + dtmf_hangup = ##99 + + number => 551 + fxo-channel => 49 + + number => 552 + fxo-channel => 50 + + number => 553 + fxo-channel => 51 + + number => 554 + fxo-channel => 52 + + conf/dialplan/default.xml + + + + + + + +Tested using FreeSWITCH SVN 10428 running on FreeBSD 6.3 +with a Sangoma A200DX Analog Series w/ Echo Cancellation +ports card containing 2 FXO modules. Added: freeswitch/trunk/scripts/s25vmail/s25vmail.js ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/s25vmail/s25vmail.js Mon Dec 15 13:16:34 2008 @@ -0,0 +1,193 @@ +/* + * File: s25vmail.js + * Purpose: Invoke voicemail based on AT&T System 25 PBX voicemail mode codes + * Machine: OS: + * Author: John Wehle Date: June 24, 2008 + * + * Copyright (c) 2008 Feith Systems and Software, Inc. + * All Rights Reserved + * + * The message waiting indicator is handled by a separate program. + */ + + +var id_digits_required = 3; + +var digitTimeOut = 3000; +var interDigitTimeOut = 1000; +var absoluteTimeOut = 10000; + + +var dtmf_digits = ""; + +function on_dtmf (session, type, obj, arg) + { + + if (type == "dtmf") { + dtmf_digits += obj.digit; + } + + return true; + } + + +function prompt_for_id () + { + var id; + var index; + var repeat; + + dtmf_digits = ""; + id = ""; + repeat = 0; + + while (session.ready () && repeat < 3) { + session.flushDigits (); + + /* play phrase - if digit keyed while playing callback will catch them*/ + session.sayPhrase ("voicemail_enter_id", "#", "", on_dtmf, ""); + + if (! session.ready ()) + return ""; + + id = dtmf_digits; + + if (id.indexOf ('#') == -1) { + dtmf_digits = session.getDigits (5, '#', digitTimeOut, + interDigitTimeOut, absoluteTimeOut); + id += dtmf_digits; + id += '#'; + } + + /* a valid id must meet the minimum length requirements */ + if ((index = id.indexOf ('#')) >= id_digits_required) { + id = id.substring (0,index); + break; + } + + dtmf_digits = ""; + id = ""; + repeat++; + } + + return id; + } + + +var start = ""; +var mode = ""; +var from = ""; +var to = ""; + +var domain = session.getVariable ("domain"); + +session.answer (); + +start = session.getDigits (1, '', digitTimeOut, + interDigitTimeOut, absoluteTimeOut); + +if (start != "#") { + console_log ("err", "Invalid VMAIL start code from PBX\n"); + exit(); + } + +mode = session.getDigits (5, '#', digitTimeOut, + interDigitTimeOut, absoluteTimeOut); + +from = session.getDigits (5, '#', digitTimeOut, + interDigitTimeOut, absoluteTimeOut); + +to = session.getDigits (5, '#', digitTimeOut, + interDigitTimeOut, absoluteTimeOut); + +session.execute("sleep", "1000"); + +// Verify that the proper parameters are present +switch (mode) { + + // Direct Inside Access + case "00": + if (isNaN (parseInt (from, 10))) { + console_log ("err", "Invalid VMAIL calling PDC from PBX\n"); + break; + } + + session.setVariable ("voicemail_authorized", "false"); + session.execute ("voicemail", "check default " + domain + " " + from); + break; + + // Direct Dial Access + case "01": + from = prompt_for_id (); + + if (! session.ready ()) { + session.hangup(); + exit(); + } + + if (isNaN (parseInt (from, 10))) { + console_log ("err", "Invalid VMAIL mailbox from caller\n"); + break; + } + + session.setVariable ("voicemail_authorized", "false"); + session.execute ("voicemail", "check default " + domain + " " + from); + break; + + // Coverage - caller is inside + case "02": + if (isNaN (parseInt (from, 10)) || isNaN (parseInt (to, 10))) { + console_log ("err", "Invalid VMAIL calling or called PDC from PBX\n"); + break; + } + + session.setVariable ("effective_caller_id_name", "inside caller"); + session.setVariable ("effective_caller_id_number", from); + + session.execute ("voicemail", "default " + domain + " " + to); + break; + + // Coverage - caller is dial + case "03": + if (isNaN (parseInt (to, 10))) { + console_log ("err", "Invalid VMAIL called PDC from PBX\n"); + break; + } + + session.setVariable ("effective_caller_id_name", "outside caller"); + session.setVariable ("effective_caller_id_number", "Unknown"); + + session.execute ("voicemail", "default " + domain + " " + to); + break; + + // Coverage - not yet defined + case "04": + break; + + // Leave Word Calling + case "05": + if (isNaN (parseInt (from, 10)) || isNaN (parseInt (to, 10))) { + console_log ("err", "Invalid VMAIL calling or called PDC from PBX\n"); + break; + } + break; + + // Refresh MW lamps + case "06": + break; + + // Voice Port failed to answer + case "08": + if (isNaN (parseInt (to, 10))) { + console_log ("err", "Invalid VMAIL PDC from PBX\n"); + break; + } + break; + + // Unknown + default: + console_log ("err", "Invalid VMAIL mode code from PBX\n"); + break; + } + +exit(); Added: freeswitch/trunk/scripts/s25vmail/s25vmail_mwi.c ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/s25vmail/s25vmail_mwi.c Mon Dec 15 13:16:34 2008 @@ -0,0 +1,953 @@ +/* + * File: s25vmail_mwi.c + * Purpose: Send AT&T System 25 PBX MWI DTMF based on MWI events + * Machine: OS: + * Author: John Wehle Date: July 24, 2008 + * + * Copyright (c) 2008 Feith Systems and Software, Inc. + * All Rights Reserved + * + * Tested using a Zyxel U90e configured using: + * + * at OK at&f OK at&d3&y2q2 OK ats0=0s2=255s15.7=0s18=4s35.1=0 OK + * ats38.3=1s42.3=1s42.6=1 OK atl0 OK at&w OK at&v + * + * though just about any modem should work. Preferred settings are + * + * DTR OFF causes hangup and reset from profile 0 + * RTS / CTS flow control + * allow abort during modem handshake + * auto answer off + * ring message off + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + +#define LOGFILE "/var/log/s25vmail_mwi.log" + + +static const char *MyName = "s25vmail_mwi"; + +static int daimon = 0; +static int error_msg_throttle = 0; +static volatile int shutdown_server = 0; + + +static void +debugmsg (const char *fmt, ...) + { + char message[256]; + va_list args; + + if (daimon) + return; + + va_start (args, fmt); + vsprintf (message, fmt, args); + va_end (args); + + fprintf (stderr, "%s: %s", MyName, message); + if ( !strchr (message, '\n')) + fprintf (stderr, "\n"); + fflush (stderr); + } + + +static void +errmsg (const char *fmt, ...) + { + char time_stamp[256]; + struct tm *tmp; + time_t now; + va_list args; + + if (! daimon) { + fprintf (stderr, "%s: ", MyName); + + va_start (args, fmt); + vfprintf (stderr, fmt, args); + va_end (args); + + if (! strchr (fmt, '\n')) + fputc ('\n', stderr); + + fflush (stderr); + return; + } + + if (error_msg_throttle) + return; + + time (&now); + + if ( !(tmp = localtime (&now)) ) { + fprintf (stderr, "%s: errmsg -- localtime failed.\n", MyName); + perror (MyName); + fflush (stderr); + return; + } + + strftime (time_stamp, sizeof (time_stamp), "%b %d %H:%M:%S", tmp); + fprintf (stderr, "%s %s[%d]: ", time_stamp, MyName, (int)getpid ()); + + va_start (args, fmt); + vfprintf (stderr, fmt, args); + va_end (args); + + if (! strchr (fmt, '\n')) + fputc ('\n', stderr); + + fflush (stderr); + } + + +static void +catch_signal () + { + + shutdown_server = 1; + } + + +static void +daemonize() + { + +#ifdef SIGTSTP + (void)signal(SIGTSTP, SIG_IGN); +#endif +#ifdef SIGTTIN + (void)signal(SIGTTIN, SIG_IGN); +#endif +#ifdef SIGTTOU + (void)signal(SIGTTOU, SIG_IGN); +#endif + + switch (fork ()) { + case 0: + break; + + case -1: + fprintf (stderr, "%s: daemonize -- fork failed.", MyName); + perror (MyName); + exit (1); + /* NOTREACHED */ + break; + + default: + exit (0); + /* NOTREACHED */ + break; + } + + setsid(); + + close (0); + close (1); + close (2); + + (void)open ("/dev/null", O_RDWR); + (void)open ("/dev/null", O_RDWR); + (void)open (LOGFILE, O_WRONLY | O_APPEND | O_CREAT, 0644); + + daimon = 1; + } + + +static void +install_signal_handlers () + { + struct sigaction act; + + memset (&act, '\0', sizeof (act)); + + act.sa_handler = catch_signal; + sigemptyset (&act.sa_mask); + act.sa_flags = 0; + + if (signal (SIGHUP, SIG_IGN) != SIG_IGN) + sigaction (SIGHUP, &act, NULL); + if (signal (SIGINT, SIG_IGN) != SIG_IGN) + sigaction (SIGINT, &act, NULL); + (void)sigaction (SIGTERM, &act, NULL); + } + + +static int +connect_to_service (const char *hostname, const char *port) + { + int sock; + struct hostent *hp; + struct in_addr address; + struct servent *servp; + struct sockaddr_in sin; + + if ((sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { + char *errstr = strerror (errno); + + errmsg ("socket failed\n"); + errmsg (errstr); + return -1; + } + + memset (&sin, 0, sizeof (sin)); + + if (isalpha (hostname[0])) { + if ( !(hp = gethostbyname (hostname))) { + char *errstr = strerror (errno); + + errmsg ("gethostbyname failed\n"); + errmsg (errstr); + close (sock); + return -1; + } + if (hp->h_addrtype != AF_INET) { + errmsg ("gethostbyname returned unsupported family\n"); + close (sock); + return -1; + } + memcpy (&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr)); + } + else { + address.s_addr = inet_addr (hostname); + + if ((long)address.s_addr == -1) { + char *errstr = strerror (errno); + + errmsg ("inet_addr failed\n"); + errmsg (errstr); + close (sock); + return -1; + } + sin.sin_addr.s_addr = address.s_addr; + } + + if (isalpha (*port)) { + if ( !(servp = getservbyname(port, "tcp"))) { + char *errstr = strerror (errno); + + errmsg ("getservbyname failed\n"); + errmsg (errstr); + close (sock); + return -1; + } + sin.sin_port = servp->s_port; + } + else + sin.sin_port = htons ((unsigned short)atoi (port)); + + sin.sin_family = AF_INET; + + if (connect (sock, (struct sockaddr *)&sin, sizeof(sin)) == -1) { + char *errstr = strerror (errno); + + errmsg ("connect failed\n"); + errmsg (errstr); + close (sock); + return -1; + } + + debugmsg ("Connected to service\n"); + + return sock; + } + + +static ssize_t +read_line (int fd, char *buf, size_t buf_len) + { + size_t l; + ssize_t nbytes_read; + + l = 0; + + for ( ; ; ) { + nbytes_read = read (fd, &buf[l], 1); + + if (nbytes_read < 0) { + char *errstr = strerror (errno); + + errmsg ("read failed in middle of line\n"); + errmsg (errstr); + return -1; + } + + if (nbytes_read == 0) { + if (l) + errmsg ("EOF in middle of line\n"); + return l ? -1 : 0; + } + + if (buf[l] == '\n') { + while (l && buf[l - 1] == '\r') + l--; + buf[l++] = '\0'; + break; + } + + l++; + + if (l == buf_len) { + errmsg ("line too long\n"); + return -1; + } + } + + return l; + } + + +static int +read_trailing_newline(int fd) + { + char c; + ssize_t nbytes_read; + + nbytes_read = read (fd, &c, 1); + + if (nbytes_read < 0) { + char *errstr = strerror (errno); + + errmsg ("read failed in trailing newline\n"); + errmsg (errstr); + return -1; + } + + if (nbytes_read == 0) { + errmsg ("EOF in trailing newline\n"); + return -1; + } + + if (c != '\n') { + errmsg ("missing trailing newline\n"); + return -1; + } + + return 0; + } + + +static char * +retrieve_message (int fd) + { + char cl_buf[64]; + char ct_buf[64]; + char *h; + char *m; + ssize_t cl; + ssize_t nbytes_read; + size_t l; + size_t nbytes_to_read; + + if (shutdown_server) + return NULL; + + /* + * Read / parse Content-Length and Content-Type. + */ + + nbytes_read = read_line (fd, cl_buf, sizeof (cl_buf)); + + if (nbytes_read < 0) { + errmsg ("read_line failed\n"); + return NULL; + } + + if (nbytes_read == 0) { + + /* + * EOF + */ + + return NULL; + } + + nbytes_read = read_line (fd, ct_buf, sizeof (ct_buf)); + + if (nbytes_read < 0) { + errmsg ("read_line failed\n"); + return NULL; + } + + if (nbytes_read == 0) { + errmsg ("EOF in middle of headers\n"); + return NULL; + } + + h = "Content-Length: "; + l = strlen (h); + + if (strncmp (cl_buf, h, l) != 0) { + + /* + * If the message header doesn't being with Content-Length, + * then it needs to be a Content-Type we understand. + */ + + h = "Content-Type: "; + l = strlen (h); + + if (strncmp (cl_buf, h, l) != 0) { + errmsg ("missing Content-Type\n"); + return NULL; + } + + if (strcmp (&cl_buf[l], "auth/request") != 0 + && strcmp (&cl_buf[l], "command/reply") != 0) { + errmsg ("Unsupported Content-Type\n"); + return NULL; + } + + if (ct_buf[0]) + if (read_trailing_newline (fd) < 0) { + return NULL; + } + + m = malloc (strlen (cl_buf) + 1 + strlen (ct_buf) + 1 + 1); + + if (! m) { + char *errstr = strerror (errno); + + errmsg ("malloc failed\n"); + errmsg (errstr); + return NULL; + } + + sprintf (m, "%s\n%s\n", cl_buf, ct_buf); + + return m; + } + + cl = atoi (&cl_buf[l]); + + if (cl <= 0) { + errmsg ("Content-Length must be greater than zero\n"); + return NULL; + } + + h = "Content-Type: "; + l = strlen (h); + + if (strncmp (ct_buf, h, l) != 0) { + errmsg ("missing Content-Type\n"); + return NULL; + } + + if (strcmp (&ct_buf[l], "text/event-plain") != 0) { + errmsg ("Unsupported Content-Type\n"); + return NULL; + } + + if (read_trailing_newline (fd) < 0) { + return NULL; + } + + /* + * Read the event. + */ + + m = malloc (cl); + + if (! m) { + char *errstr = strerror (errno); + + errmsg ("malloc failed\n"); + errmsg (errstr); + return NULL; + } + + for (nbytes_to_read = cl; nbytes_to_read; nbytes_to_read -= nbytes_read) { + nbytes_read = read (fd, m + (cl - nbytes_to_read), nbytes_to_read); + + if (nbytes_read < 0) { + char *errstr = strerror (errno); + + errmsg ("read failed in middle of message\n"); + errmsg (errstr); + free (m); + return NULL; + } + + if (nbytes_read == 0) { + errmsg ("EOF in middle of message\n"); + free (m); + return NULL; + } + } + + if (m[cl - 2] != '\n' || m[cl - 1] != '\n') { + errmsg ("Message is missing trailing newlines\n"); + free (m); + return NULL; + } + + return m; + } + + +static int +send_password (int fd, const char *passwd) + { + char *h; + char *last; + char *m; + char *p; + int l; + size_t ml; + + m = retrieve_message (fd); + if (! m) + return -1; + + p = strtok_r (m, "\n", &last); + + h = "Content-Type: auth/request"; + + if (strcmp (p, h) != 0) { + errmsg ("Content-Type wasn't auth/request\n"); + free (m); + return -1; + } + + free (m); + + l = snprintf (NULL, 0, "auth %s\n\n", passwd); + if (l <= 0) { + errmsg ("snprintf failed\n"); + return -1; + } + l++; + + m = malloc (l); + if (! m) { + char *errstr = strerror (errno); + + errmsg ("malloc failed\n"); + errmsg (errstr); + return -1; + } + + ml = snprintf (m, l, "auth %s\n\n", passwd); + if ((ml + 1) != l) { + errmsg ("snprintf failed\n"); + free (m); + return -1; + } + + if (write (fd, m, ml) != ml) { + char *errstr = strerror (errno); + + errmsg ("write failed\n"); + errmsg (errstr); + free (m); + return -1; + } + + m = retrieve_message (fd); + if (! m ) + return -1; + + p = strtok_r (m, "\n", &last); + + h = "Content-Type: command/reply"; + + if (! p || strcmp (p, h) != 0) { + errmsg ("Content-Type wasn't command/reply\n"); + free (m); + return -1; + } + + p = strtok_r (NULL, "\n", &last); + + h = "Reply-Text: +OK accepted"; + + if (! p || strcmp (p, h) != 0) { + errmsg ("auth wasn't accepted\n"); + free (m); + return -1; + } + + free (m); + + debugmsg ("Logged into service\n"); + + return 0; + } + + +static int +enable_mwi_event (int fd) + { + char *h; + char *last; + char *m; + char *p; + size_t ml; + + m = "event plain MESSAGE_WAITING\n\n"; + ml = strlen (m); + + if (write (fd, m, ml) != ml) { + char *errstr = strerror (errno); + + errmsg ("write failed\n"); + errmsg (errstr); + return -1; + } + + m = retrieve_message (fd); + if (! m ) + return -1; + + p = strtok_r (m, "\n", &last); + + h = "Content-Type: command/reply"; + + if (! p || strcmp (p, h) != 0) { + errmsg ("Content-Type wasn't command/reply\n"); + free (m); + return -1; + } + + p = strtok_r (NULL, "\n", &last); + + h = "Reply-Text: +OK event listener enabled plain"; + + if (! p || strcmp (p, h) != 0) { + errmsg ("event wasn't enabled\n"); + free (m); + return -1; + } + + free (m); + + debugmsg ("Enabled message waiting event\n"); + + return 0; + } + + +static int +process_mwi_event (char *m, const char *device) + { + char cbuf[64]; + char rbuf[64]; + char *h; + char *last; + char *ma; + char *mw; + char *p; + int fd; + int mwi_off; + int mwi_on; + int r; + int w; + size_t l; + ssize_t ml; + ssize_t nbytes_read; + struct termios tio; + + debugmsg ("Processing MWI event\n"); + + ma = NULL; + mw = NULL; + + p = m; + + while ( (p = strtok_r (p, "\n", &last)) ) { + h = "MWI-Messages-Waiting: "; + l = strlen (h); + + if (strncmp (p, h, l) == 0) + mw = p + l; + + h = "MWI-Message-Account: "; + l = strlen (h); + + if (strncmp (p, h, l) == 0) + ma = p + l; + + p = NULL; + } + + if (! (ma && mw) ) { + errmsg ("message account or message waiting missing\n"); + return -1; + } + + p = strchr (ma, '\n'); + if (p) + *p = '\n'; + + p = strchr (mw, '\n'); + if (p) + *p = '\n'; + + /* + * The account is considered to be a System 25 extension if + * it's of the form: + * + * numeric_string at host + */ + + p = strchr (ma, '%'); + if (! p) + p = strchr (ma, '@'); + + if (! p || (strncmp (p, "%40", 3) != 0 && strncmp (p, "@", 1) != 0)) { + debugmsg (" %s is not a System 25 extension\n", ma); + return 0; + } + + *p = '\0'; + + for (p = ma; *p; p++) + if (! isdigit (*p)) { + debugmsg (" %s is not a System 25 extension\n", ma); + return 0; + } + + mwi_off = strcasecmp (mw, "no") == 0; + mwi_on = strcasecmp (mw, "yes") == 0; + + if (mwi_off == mwi_on) { + errmsg ("Unsupported Messages-Waiting\n"); + return 0; + } + + for (r = 0; r < 3; r++) { + if ((fd = open (device, O_RDWR)) < 0) { + char *errstr = strerror (errno); + + errmsg ("open failed for device node <%s>.\n", device); + errmsg (errstr); + return -1; + } + + cfmakeraw (&tio); + + tio.c_cflag = CS8 | CREAD | HUPCL | CCTS_OFLOW | CRTS_IFLOW; + + tio.c_cc[VMIN] = 0; + tio.c_cc[VTIME] = 50; + + cfsetispeed (&tio, B9600); + cfsetospeed (&tio, B9600); + + if (tcsetattr (fd, TCSAFLUSH, &tio) < 0) { + char *errstr = strerror (errno); + + errmsg ("tcsetattr failed\n"); + errmsg (errstr); + close (fd); + return -1; + } + + m = "AT"; + ml = strlen (m); + + if (write (fd, m, ml) != ml + || write (fd, "\r\n", 2) != 2) { + char *errstr = strerror (errno); + + errmsg ("write failed\n"); + errmsg (errstr); + close (fd); + return -1; + } + + for (w = 0; w < 2; w++) { + nbytes_read = read_line (fd, rbuf, sizeof (rbuf)); + if (nbytes_read > 0 && (rbuf[0] == '\0' || strcmp (rbuf, m) == 0)) + continue; + break; + } + + if (nbytes_read < 0) { + errmsg ("read_line failed\n"); + close (fd); + return -1; + } + + if (nbytes_read == 0 + || strcmp (rbuf, "OK") != 0) { + errmsg ("modem failed to wake up\n"); + close (fd); + continue; + } + + m = cbuf; + ml = snprintf (cbuf, sizeof (cbuf), + "ATDT%s%s", (mwi_on ? "#90" : "#91"), ma); + if (ml <= 0 || ml >= sizeof (cbuf)) { + errmsg ("snprintf failed.\n"); + close (fd); + return -1; + } + + if (write (fd, m, ml) != ml + || write (fd, "\r\n", 2) != 2) { + char *errstr = strerror (errno); + + errmsg ("write failed\n"); + errmsg (errstr); + close (fd); + return -1; + } + + sleep (5); + + if (write (fd, "\r\n", 2) != 2) { + char *errstr = strerror (errno); + + errmsg ("write failed\n"); + errmsg (errstr); + close (fd); + return -1; + } + + for (w = 0; w < 2; w++) { + nbytes_read = read_line (fd, rbuf, sizeof (rbuf)); + if (nbytes_read > 0 && (rbuf[0] == '\0' || strcmp (rbuf, m) == 0)) + continue; + break; + } + + if (nbytes_read < 0) { + errmsg ("read_line failed\n"); + close (fd); + return -1; + } + + if (nbytes_read > 0 && strcmp (rbuf, "NO DIALTONE") == 0) { + errmsg ("modem failed to detect dialtone\n"); + close (fd); + return -1; + } + + if (nbytes_read == 0 + || strcmp (rbuf, "NO CARRIER") != 0) { + errmsg ("modem failed to update MWI\n"); + close (fd); + continue; + } + + close (fd); + + debugmsg (" message waiting indicator updated for %s\n", ma); + return 0; + } + + errmsg (" failed to update message waiting indicator for %s\n", ma); + + return -1; + } + + +int +main (int argc, char **argv) + { + const char *device = "/dev/cuad0"; + const char *machine = "localhost"; + const char *port = "8021"; + const char *passwd = "ClueCon"; + char *m; + int c; + int debug; + int fd; + struct stat statbuf; + + debug = 0; + + while ((c = getopt (argc, argv, "dm:p:w:")) != -1) + switch (c) { + case 'd': + debug = 1; + break; + + case 'm': + machine = optarg; + break; + + case 'p': + port = optarg; + break; + + case 'w': + passwd = optarg; + break; + + case 'l': + device = optarg; + break; + + default: + fprintf (stderr, + "Usage: %s [-d] [-m machine] [-p port] [-w passwd] [-l device]\n", + MyName); + exit(1); + /* NOTREACHED */ + break; + } + + if (stat (device, &statbuf) < 0 || ! S_ISCHR (statbuf.st_mode)) { + fprintf (stderr, "%s: stat failed for path <%s>\n", MyName, device); + fprintf (stderr, "%s: or the path isn't a character special file.\n", + MyName); + perror (MyName); + exit (1); + } + + install_signal_handlers (); + + if (! debug) + daemonize (); + + while (! shutdown_server) { + sleep (5); + + fd = connect_to_service (machine, port); + if (fd < 0) { + error_msg_throttle = 1; + continue; + } + + if (send_password (fd, passwd) < 0 + || enable_mwi_event (fd) < 0) { + error_msg_throttle = 1; + close (fd); + continue; + } + + error_msg_throttle = 0; + + while (m = retrieve_message (fd)) { + process_mwi_event (m, device); + free (m); + } + + close (fd); + } + + exit (0); + } From brian at freeswitch.org Mon Dec 15 10:17:53 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 13:17:53 -0500 Subject: [Freeswitch-trunk] [commit] r10777 - freeswitch/trunk/scripts/aadir Message-ID: Author: brian Date: Mon Dec 15 13:17:53 2008 New Revision: 10777 Log: FSSCRIPTS-9 thanks john, sound files will appear by friday for this Added: freeswitch/trunk/scripts/aadir/ freeswitch/trunk/scripts/aadir/README freeswitch/trunk/scripts/aadir/aadir.js Added: freeswitch/trunk/scripts/aadir/README ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/aadir/README Mon Dec 15 13:17:53 2008 @@ -0,0 +1,6 @@ +This directory contains a javascript auto attendant which queries +FreeSWITCH for name / extension information rather than using +hardcoded values. It requires a wave file which says: + + Please spell the name of the person using your telephone keypad + last name first. Press 1 for Q or Z. Added: freeswitch/trunk/scripts/aadir/aadir.js ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/aadir/aadir.js Mon Dec 15 13:17:53 2008 @@ -0,0 +1,242 @@ +/* + * File: aadir.js + * Purpose: Auto Attendant directory. + * Machine: OS: + * Author: John Wehle Date: November 6, 2008 + * + * Copyright (c) 2008 Feith Systems and Software, Inc. + * All Rights Reserved + */ + + +var digitTimeOut = 3000; +var interDigitTimeOut = 1000; +var absoluteTimeOut = 10000; + + +var base_dir = session.getVariable ("base_dir"); +var domain = session.getVariable ("domain"); +var voicemail_path = base_dir + "/storage/voicemail/default/" + domain + "/"; + +var file_exts = [ ".wav", ".mp3" ]; + +var extRE = /^1[0-9][0-9][0-9]$/g; +var operator = "operator"; + +var directory; +var directory_camelcase; + +var translations = [ "0", + "QZ", "ABC", "DEF", + "GHI", "JKL", "MNO", + "PQRS", "TUV", "WXYZ" ]; + +var extension = ""; +var dtmf_digits = ""; + + +function load_directory () + { + var i; + var name; + var number; + + var dir = apiExecute ("xml_locate", "directory domain name " + domain); + var re = /\s+$/g; + var length = dir.search (re); + + if (length == -1) + length = dir.length; + + dir = dir.substring (0, length); + + var xdir = new XML (dir); + + directory = new Array (); + i = 0; + + re = /[^A-Z0-9\s]/gi; + + for each (var variables in xdir.user.variables) { + name = ""; + number = ""; + + for each (variable in variables.variable) { + if (variable. at name.toString() == "effective_caller_id_name") + name = variable. at value.toString(); + if (variable. at name.toString() == "effective_caller_id_number") + number = variable. at value.toString(); + } + + if (name.length == 0 || number.length == 0 || number.search (extRE) == -1) + continue; + + directory[i] = new Array (2); + directory[i][0] = name.replace (re, ""); + directory[i][1] = number; + + i++; + } + } + + +function build_camelcase_directory () + { + var i; + var fname; + var lname; + var fre = /^[A-Z0-9]+/gi; + var lre = /[A-Z0-9]+$/gi; + + directory_camelcase = new Array (directory.length); + + for (i = 0; i < directory.length; i++) { + directory_camelcase[i] = new Array (2); + + directory_camelcase[i][0] = ""; + directory_camelcase[i][1] = 0; + + fname = directory[i][0].match (fre); + lname = directory[i][0].match (lre); + if (fname.length != 1 || lname.length != 1) { + console_log ("err", "Can't parse " + directory[i][0] + " for directory\n"); + continue; + } + + directory_camelcase[i][0] = lname[0] + fname[0]; + directory_camelcase[i][1] = directory[i][1]; + } + } + + +function directory_lookup (digits) + { + var i; + var match = ""; + var pattern = "^"; + var re; + + if (digits.length && digits[0] == 0) + return 0; + + for (i = 0; i < digits.length; i++) { + if (isNaN (parseInt (digits[i], 10))) + return -1; + pattern += "[" + translations[parseInt (digits[i], 10)] + "]"; + } + + re = new RegExp (pattern, "i"); + + for (i = 0; i < directory_camelcase.length; i++) + if (directory_camelcase[i][0].search (re) != -1) { + if (! isNaN (parseInt (match, 10))) + return ""; + match = directory_camelcase[i][1]; + } + + if (isNaN (parseInt (match, 10))) + return -1; + + return match; + } + + +function on_dtmf (session, type, obj, arg) + { + + if (type == "dtmf") { + dtmf_digits += obj.digit; + extension = directory_lookup (dtmf_digits) + return false; + } + + return true; + } + + +function directory_prompt () + { + var choice; + var index; + var repeat; + + extension = ""; + choice = ""; + repeat = 0; + + while (session.ready () && repeat < 3) { + + /* play phrase - if digit keyed while playing callback will catch them*/ + session.sayPhrase ("feith_aa_directory", "#", "", on_dtmf, ""); + + choice = dtmf_digits; + + while ( isNaN (parseInt (extension, 10)) ) { + if (! session.ready ()) + return ""; + + dtmf_digits = session.getDigits (1, '#', digitTimeOut, + interDigitTimeOut, absoluteTimeOut); + choice += dtmf_digits; + + extension = directory_lookup (choice); + } + + if (parseInt (extension, 10) >= 0) + break; + + session.sayPhrase ("voicemail_invalid_extension", "#", "", on_dtmf, ""); + + dtmf_digits = ""; + extension = ""; + choice = ""; + repeat++; + + session.flushDigits (); + } + + return extension; + } + + +var choice = ""; +var fd; +var i; +var recorded_name; + +session.answer (); + +session.execute("sleep", "1000"); + +load_directory (); + +build_camelcase_directory (); + +dtmf_digits = ""; +session.flushDigits (); +choice = directory_prompt (); + +if (! session.ready ()) { + session.hangup(); + exit(); + } + +if ( isNaN (parseInt (choice, 10)) || parseInt (choice, 10) <= 0) { + session.execute ("transfer", operator + " XML default"); + exit(); + } + +for (i = 0; i < file_exts.length; i++) { + recorded_name = voicemail_path + choice + "/recorded_name" + file_exts[i]; + fd = new File (recorded_name); + if (fd.exists) { + session.streamFile (recorded_name); + break; + } + } + +session.execute ("phrase", "spell," + choice); + +session.execute ("transfer", choice + " XML default"); + +exit(); From brian at freeswitch.org Mon Dec 15 10:55:44 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 13:55:44 -0500 Subject: [Freeswitch-trunk] [commit] r10778 - freeswitch/trunk/support-d Message-ID: Author: brian Date: Mon Dec 15 13:55:44 2008 New Revision: 10778 Log: adding fstop Modified: freeswitch/trunk/support-d/.bashrc Modified: freeswitch/trunk/support-d/.bashrc ============================================================================== --- freeswitch/trunk/support-d/.bashrc (original) +++ freeswitch/trunk/support-d/.bashrc Mon Dec 15 13:55:44 2008 @@ -25,5 +25,5 @@ alias tcommit='svn commit --no-auth-cache --username=anthm' alias mcommit='svn commit --no-auth-cache --username=mikej' alias dp='emacs /usr/local/freeswitch/conf/dialplan/default.xml' - +alias fstop='top -p `cat /usr/local/freeswitch/log/freeswitch.pid`' # End of file From cparker at freeswitch.org Mon Dec 15 11:42:03 2008 From: cparker at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 14:42:03 -0500 Subject: [Freeswitch-trunk] [commit] r10780 - freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr Message-ID: Author: cparker Date: Mon Dec 15 14:42:02 2008 New Revision: 10780 Log: Added patch to close JIRA MODEVENT-28 Modified: freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c Mon Dec 15 14:42:02 2008 @@ -155,6 +155,13 @@ return SWITCH_STATUS_FALSE; } + if(channel) { + if(switch_true(switch_channel_get_variable(channel, "disable_radius_start"))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "[mod_radius_cdr] Not Sending RADIUS Start\n"); + return SWITCH_STATUS_SUCCESS; + } + } + switch_thread_rwlock_rdlock(globals.rwlock); rad_config = my_radius_init(); @@ -385,6 +392,14 @@ return SWITCH_STATUS_FALSE; } + + if(channel) { + if(switch_true(switch_channel_get_variable(channel, "disable_radius_stop"))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "[mod_radius_cdr] Not Sending RADIUS Stop\n"); + return SWITCH_STATUS_SUCCESS; + } + } + switch_thread_rwlock_rdlock(globals.rwlock); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "[mod_radius_cdr] Entering my_on_hangup\n"); From stkn at freeswitch.org Mon Dec 15 11:46:23 2008 From: stkn at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 14:46:23 -0500 Subject: [Freeswitch-trunk] [commit] r10781 - freeswitch/trunk/src/mod/endpoints/mod_opal Message-ID: Author: stkn Date: Mon Dec 15 14:46:22 2008 New Revision: 10781 Log: Silence GCC-4.2 warning / possible GCC-4.3 error Modified: freeswitch/trunk/src/mod/endpoints/mod_opal/mod_opal.cpp Modified: freeswitch/trunk/src/mod/endpoints/mod_opal/mod_opal.cpp ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_opal/mod_opal.cpp (original) +++ freeswitch/trunk/src/mod/endpoints/mod_opal/mod_opal.cpp Mon Dec 15 14:46:22 2008 @@ -82,7 +82,7 @@ /* Prevent the loading of OPAL codecs via "plug ins", this is a directory full of DLLs that will be loaded automatically. */ - putenv("PTLIBPLUGINDIR=/no/thanks"); + putenv((char *)"PTLIBPLUGINDIR=/no/thanks"); *module_interface = switch_loadable_module_create_module_interface(pool, modname); From mikej at freeswitch.org Mon Dec 15 12:50:22 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 15:50:22 -0500 Subject: [Freeswitch-trunk] [commit] r10784 - freeswitch/trunk/src/mod/languages/mod_lua Message-ID: Author: mikej Date: Mon Dec 15 15:50:22 2008 New Revision: 10784 Log: MODLANG-92 startup scripts do not honor the LUA_PATH and LUA_CPATH env vars Modified: freeswitch/trunk/src/mod/languages/mod_lua/mod_lua.cpp Modified: freeswitch/trunk/src/mod/languages/mod_lua/mod_lua.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_lua/mod_lua.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_lua/mod_lua.cpp Mon Dec 15 15:50:22 2008 @@ -278,10 +278,6 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "binding '%s' to '%s'\n", globals.xml_handler, val); switch_xml_bind_search_function(lua_fetch, switch_xml_parse_section_string(val), NULL); } - } else if (!strcmp(var, "startup-script")) { - if (val) { - lua_thread(val); - } } else if (!strcmp(var, "module-directory") && !switch_strlen_zero(val)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "lua: appending module directory: '%s'\n", val); if(cpath_stream.data_len) { @@ -332,6 +328,19 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "lua: LUA_PATH set to: '%s'\n", (char *)path_stream.data); } } + + if ((settings = switch_xml_child(cfg, "settings"))) { + for (param = switch_xml_child(settings, "param"); param; param = param->next) { + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); + if (!strcmp(var, "startup-script")) { + if (val) { + lua_thread(val); + } + } + } + } + switch_safe_free(path_stream.data); switch_xml_free(xml); From mikej at freeswitch.org Mon Dec 15 13:13:03 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 16:13:03 -0500 Subject: [Freeswitch-trunk] [commit] r10785 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: mikej Date: Mon Dec 15 16:13:03 2008 New Revision: 10785 Log: little leak Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Mon Dec 15 16:13:03 2008 @@ -441,10 +441,10 @@ case SWITCH_EVENT_PRESENCE_PROBE: if (proto) { char *to = switch_event_get_header(event, "to"); - char *probe_user, *probe_euser, *probe_host, *p; + char *probe_user = NULL, *probe_euser, *probe_host, *p; if (!to || !(probe_user = strdup(to))) { - return; + goto done; } if ((probe_host = strchr(probe_user, '@'))) { @@ -488,10 +488,9 @@ switch_safe_free(sql); } - switch_safe_free(user); switch_safe_free(probe_user); } - return; + goto done; default: break; } From brian at freeswitch.org Mon Dec 15 17:57:57 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 20:57:57 -0500 Subject: [Freeswitch-trunk] [commit] r10786 - freeswitch/trunk/src/mod/endpoints/mod_opal Message-ID: Author: brian Date: Mon Dec 15 20:57:56 2008 New Revision: 10786 Log: tweak from stangor Modified: freeswitch/trunk/src/mod/endpoints/mod_opal/mod_opal.cpp Modified: freeswitch/trunk/src/mod/endpoints/mod_opal/mod_opal.cpp ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_opal/mod_opal.cpp (original) +++ freeswitch/trunk/src/mod/endpoints/mod_opal/mod_opal.cpp Mon Dec 15 20:57:56 2008 @@ -162,7 +162,7 @@ char name[256] = "opal/"; switch_copy_string(name + 5, outbound_profile->destination_number, sizeof(name)-5); switch_channel_set_name(channel, name); - + switch_channel_set_flag(channel, CF_OUTBOUND); switch_channel_set_caller_profile(channel, caller_profile); switch_channel_set_state(channel, CS_INIT); From brian at freeswitch.org Mon Dec 15 19:56:12 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 22:56:12 -0500 Subject: [Freeswitch-trunk] [commit] r10787 - freeswitch/trunk/build Message-ID: Author: brian Date: Mon Dec 15 22:56:11 2008 New Revision: 10787 Log: buildopal make sure you have flex and bison installed first Added: freeswitch/trunk/build/buildopal.sh Added: freeswitch/trunk/build/buildopal.sh ============================================================================== --- (empty file) +++ freeswitch/trunk/build/buildopal.sh Mon Dec 15 22:56:11 2008 @@ -0,0 +1,13 @@ +#!/bin/sh +cd /root +svn co https://opalvoip.svn.sourceforge.net/svnroot/opalvoip/ptlib/trunk ptlib +cd ptlib +./configure --prefix=/usr +make +make install +cd .. +svn co https://opalvoip.svn.sourceforge.net/svnroot/opalvoip/opal/trunk opal +cd opal +PKG_CONFIG_PATH=/usr/lib/pkgconfig ./configure --prefix=/usr +make +make install From mikej at freeswitch.org Mon Dec 15 20:14:57 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 15 Dec 2008 23:14:57 -0500 Subject: [Freeswitch-trunk] [commit] r10788 - in freeswitch/trunk: . libs/libg722_1/src libs/win32/libg722_1 src/mod/codecs/mod_siren Message-ID: Author: mikej Date: Mon Dec 15 23:14:57 2008 New Revision: 10788 Log: MODCODEC-6 siren windows build Added: freeswitch/trunk/libs/win32/libg722_1/ (props changed) freeswitch/trunk/libs/win32/libg722_1/libg722_1.vcproj freeswitch/trunk/src/mod/codecs/mod_siren/mod_siren.2008.vcproj Modified: freeswitch/trunk/Freeswitch.2008.sln freeswitch/trunk/libs/libg722_1/src/coef2sam.h freeswitch/trunk/libs/libg722_1/src/dct4.h freeswitch/trunk/libs/libg722_1/src/decoderf.c freeswitch/trunk/libs/libg722_1/src/sam2coef.h freeswitch/trunk/libs/libg722_1/src/tables.c freeswitch/trunk/src/mod/codecs/mod_siren/ (props changed) Modified: freeswitch/trunk/Freeswitch.2008.sln ============================================================================== --- freeswitch/trunk/Freeswitch.2008.sln (original) +++ freeswitch/trunk/Freeswitch.2008.sln Mon Dec 15 23:14:57 2008 @@ -424,12 +424,6 @@ {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_woomera", "src\mod\endpoints\mod_woomera\mod_woomera.2008.vcproj", "{FE3540C5-3303-46E0-A69E-D92F775687F1}" - ProjectSection(ProjectDependencies) = postProject - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "docs", "docs\docs.2008.vcproj", "{1A1FF289-4FD6-4285-A422-D31DD67A4723}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_xml", "src\mod\dialplans\mod_dialplan_xml\mod_dialplan_xml.2008.vcproj", "{07113B25-D3AF-4E04-BA77-4CD1171F022C}" @@ -996,6 +990,14 @@ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libg722_1", "libs\win32\libg722_1\libg722_1.vcproj", "{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_siren", "src\mod\codecs\mod_siren\mod_siren.2008.vcproj", "{0B6C905B-142E-4999-B39D-92FF7951E921}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} = {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -1046,12 +1048,6 @@ {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|Win32 - {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.ActiveCfg = Debug|Win32 - {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.Build.0 = Debug|Win32 - {FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|x64.ActiveCfg = Debug|Win32 - {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.ActiveCfg = Release|Win32 - {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.Build.0 = Release|Win32 - {FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|x64.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}.Release|Win32.ActiveCfg = Release|Win32 @@ -1746,6 +1742,18 @@ {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|Win32 + {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|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|Win32 + {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|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|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1758,9 +1766,9 @@ {8DEB383C-4091-4F42-A56F-C9E46D552D79} = {F881ADA2-2F1A-4046-9FEB-191D9422D781} {2C3C2423-234B-4772-8899-D3B137E5CA35} = {F881ADA2-2F1A-4046-9FEB-191D9422D781} {42B6C2E3-7D5F-4204-A1F6-C0376B86C315} = {F881ADA2-2F1A-4046-9FEB-191D9422D781} + {0B6C905B-142E-4999-B39D-92FF7951E921} = {F881ADA2-2F1A-4046-9FEB-191D9422D781} {3A5B9131-F20C-4A85-9447-6C1610941CEE} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {5FD31A25-5D83-4794-8BEE-904DAD84CE71} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} - {FE3540C5-3303-46E0-A69E-D92F775687F1} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {0DF3ABD0-DDC0-4265-B778-07C66780979B} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {B3F424EC-3D8F-417C-B244-3919D5E1A577} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} @@ -1799,7 +1807,6 @@ {36E854E3-CE12-4348-A125-CCF3F9D74813} = {0C808854-54D1-4230-BFF5-77B5FD905000} {7B077E7F-1BE7-4291-AB86-55E527B25CAC} = {0C808854-54D1-4230-BFF5-77B5FD905000} {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E} = {0C808854-54D1-4230-BFF5-77B5FD905000} - {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0} = {0C808854-54D1-4230-BFF5-77B5FD905000} {692F6330-4D87-4C82-81DF-40DB5892636E} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0} {E7116F50-2B10-472F-92BD-C8667AA9C1AE} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0} {2286DA73-9FC5-45BC-A508-85994C3317AB} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0} @@ -1844,6 +1851,7 @@ {D3D8B329-20BE-475E-9E83-653CEA0E0EF5} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} {419C8F80-D858-4B48-A25C-AF4007608137} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} {5927104D-C14C-4AC8-925C-4AB681762E75} = {C120A020-773F-4EA3-923F-B67AF28B750D} {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {C120A020-773F-4EA3-923F-B67AF28B750D} {4F92B672-DADB-4047-8D6A-4BB3796733FD} = {C120A020-773F-4EA3-923F-B67AF28B750D} Modified: freeswitch/trunk/libs/libg722_1/src/coef2sam.h ============================================================================== --- freeswitch/trunk/libs/libg722_1/src/coef2sam.h (original) +++ freeswitch/trunk/libs/libg722_1/src/coef2sam.h Mon Dec 15 23:14:57 2008 @@ -123,970 +123,970 @@ #else const float rmlt_to_samples_window[DCT_LENGTH] = { - 2.45436677e-03, - 7.36304140e-03, - 1.22715384e-02, - 1.71797387e-02, - 2.20875274e-02, - 2.69947816e-02, - 3.19013856e-02, - 3.68072242e-02, - 4.17121723e-02, - 4.66161147e-02, - 5.15189357e-02, - 5.64205162e-02, - 6.13207370e-02, - 6.62194788e-02, - 7.11166263e-02, - 7.60120600e-02, - 8.09056610e-02, - 8.57973099e-02, - 9.06868950e-02, - 9.55742970e-02, - 1.00459397e-01, - 1.05342068e-01, - 1.10222206e-01, - 1.15099691e-01, - 1.19974397e-01, - 1.24846213e-01, - 1.29715025e-01, - 1.34580702e-01, - 1.39443144e-01, - 1.44302234e-01, - 1.49157837e-01, - 1.54009849e-01, - 1.58858150e-01, - 1.63702607e-01, - 1.68543145e-01, - 1.73379600e-01, - 1.78211898e-01, - 1.83039889e-01, - 1.87863469e-01, - 1.92682534e-01, - 1.97496936e-01, - 2.02306598e-01, - 2.07111374e-01, - 2.11911172e-01, - 2.16705844e-01, - 2.21495315e-01, - 2.26279438e-01, - 2.31058106e-01, - 2.35831216e-01, - 2.40598634e-01, - 2.45360255e-01, - 2.50115961e-01, - 2.54865646e-01, - 2.59609193e-01, - 2.64346480e-01, - 2.69077420e-01, - 2.73801863e-01, - 2.78519690e-01, - 2.83230811e-01, - 2.87935108e-01, - 2.92632490e-01, - 2.97322810e-01, - 3.02005947e-01, - 3.06681812e-01, - 3.11350316e-01, - 3.16011280e-01, - 3.20664644e-01, - 3.25310290e-01, - 3.29948097e-01, - 3.34577948e-01, - 3.39199722e-01, - 3.43813360e-01, - 3.48418683e-01, - 3.53015602e-01, - 3.57604057e-01, - 3.62183869e-01, - 3.66754949e-01, - 3.71317208e-01, - 3.75870496e-01, - 3.80414754e-01, - 3.84949833e-01, - 3.89475614e-01, - 3.93992037e-01, - 3.98498952e-01, - 4.02996302e-01, - 4.07483906e-01, - 4.11961704e-01, - 4.16429549e-01, - 4.20887381e-01, - 4.25335079e-01, - 4.29772526e-01, - 4.34199601e-01, - 4.38616246e-01, - 4.43022281e-01, - 4.47417676e-01, - 4.51802284e-01, - 4.56175983e-01, - 4.60538715e-01, - 4.64890331e-01, - 4.69230771e-01, - 4.73559886e-01, - 4.77877587e-01, - 4.82183784e-01, - 4.86478359e-01, - 4.90761191e-01, - 4.95032221e-01, - 4.99291331e-01, - 5.03538370e-01, - 5.07773340e-01, - 5.11996031e-01, - 5.16206384e-01, - 5.20404279e-01, - 5.24589658e-01, - 5.28762400e-01, - 5.32922447e-01, - 5.37069619e-01, - 5.41203797e-01, - 5.45324981e-01, - 5.49433053e-01, - 5.53527832e-01, - 5.57609320e-01, - 5.61677337e-01, - 5.65731823e-01, - 5.69772661e-01, - 5.73799789e-01, - 5.77813089e-01, - 5.81812501e-01, - 5.85797846e-01, - 5.89769125e-01, - 5.93726158e-01, - 5.97668886e-01, - 6.01597190e-01, - 6.05511069e-01, - 6.09410286e-01, - 6.13294840e-01, - 6.17164612e-01, - 6.21019542e-01, - 6.24859512e-01, - 6.28684402e-01, - 6.32494152e-01, - 6.36288643e-01, - 6.40067816e-01, - 6.43831551e-01, - 6.47579789e-01, - 6.51312411e-01, - 6.55029356e-01, - 6.58730507e-01, - 6.62415802e-01, - 6.66085124e-01, - 6.69738352e-01, - 6.73375487e-01, - 6.76996410e-01, - 6.80601001e-01, - 6.84189200e-01, - 6.87760890e-01, - 6.91316009e-01, - 6.94854498e-01, - 6.98376238e-01, - 7.01881170e-01, - 7.05369174e-01, - 7.08840132e-01, - 7.12294042e-01, - 7.15730846e-01, - 7.19150364e-01, - 7.22552538e-01, - 7.25937307e-01, - 7.29304552e-01, - 7.32654274e-01, - 7.35986352e-01, - 7.39300668e-01, - 7.42597163e-01, - 7.45875776e-01, - 7.49136388e-01, - 7.52379000e-01, - 7.55603433e-01, - 7.58809686e-01, - 7.61997640e-01, - 7.65167236e-01, - 7.68318415e-01, - 7.71451116e-01, - 7.74565160e-01, - 7.77660549e-01, - 7.80737221e-01, - 7.83795059e-01, - 7.86834061e-01, - 7.89854050e-01, - 7.92855024e-01, - 7.95836926e-01, - 7.98799574e-01, - 8.01743031e-01, - 8.04667175e-01, - 8.07571888e-01, - 8.10457170e-01, - 8.13322961e-01, - 8.16169083e-01, - 8.18995595e-01, - 8.21802378e-01, - 8.24589312e-01, - 8.27356398e-01, - 8.30103517e-01, - 8.32830667e-01, - 8.35537732e-01, - 8.38224709e-01, - 8.40891480e-01, - 8.43537927e-01, - 8.46164107e-01, - 8.48769844e-01, - 8.51355195e-01, - 8.53919983e-01, - 8.56464207e-01, - 8.58987808e-01, - 8.61490726e-01, - 8.63972843e-01, - 8.66434157e-01, - 8.68874609e-01, - 8.71294141e-01, - 8.73692632e-01, - 8.76070082e-01, - 8.78426433e-01, - 8.80761623e-01, - 8.83075595e-01, - 8.85368288e-01, - 8.87639642e-01, - 8.89889598e-01, - 8.92118096e-01, - 8.94325137e-01, - 8.96510601e-01, - 8.98674488e-01, - 9.00816679e-01, - 9.02937174e-01, - 9.05035973e-01, - 9.07112896e-01, - 9.09168005e-01, - 9.11201179e-01, - 9.13212419e-01, - 9.15201604e-01, - 9.17168796e-01, - 9.19113874e-01, - 9.21036780e-01, - 9.22937512e-01, - 9.24816012e-01, - 9.26672220e-01, - 9.28506076e-01, - 9.30317581e-01, - 9.32106674e-01, - 9.33873296e-01, - 9.35617447e-01, - 9.37339008e-01, - 9.39037979e-01, - 9.40714359e-01, - 9.42368090e-01, - 9.43999052e-01, - 9.45607305e-01, - 9.47192788e-01, - 9.48755443e-01, - 9.50295210e-01, - 9.51812088e-01, - 9.53306019e-01, - 9.54777002e-01, - 9.56224978e-01, - 9.57649946e-01, - 9.59051788e-01, - 9.60430503e-01, - 9.61786151e-01, - 9.63118553e-01, - 9.64427769e-01, - 9.65713739e-01, - 9.66976464e-01, - 9.68215883e-01, - 9.69431996e-01, - 9.70624685e-01, - 9.71794009e-01, - 9.72939968e-01, - 9.74062443e-01, - 9.75161433e-01, - 9.76236939e-01, - 9.77288961e-01, - 9.78317380e-01, - 9.79322255e-01, - 9.80303526e-01, - 9.81261134e-01, - 9.82195139e-01, - 9.83105481e-01, - 9.83992159e-01, - 9.84855056e-01, - 9.85694289e-01, - 9.86509740e-01, - 9.87301409e-01, - 9.88069296e-01, - 9.88813400e-01, - 9.89533663e-01, - 9.90230083e-01, - 9.90902662e-01, - 9.91551340e-01, - 9.92176116e-01, - 9.92776990e-01, - 9.93353963e-01, - 9.93906975e-01, - 9.94436026e-01, - 9.94941175e-01, - 9.95422304e-01, - 9.95879471e-01, - 9.96312618e-01, - 9.96721745e-01, - 9.97106910e-01, - 9.97467995e-01, - 9.97805059e-01, - 9.98118103e-01, - 9.98407066e-01, - 9.98672009e-01, - 9.98912871e-01, - 9.99129653e-01, - 9.99322355e-01, - 9.99491036e-01, - 9.99635577e-01, - 9.99756038e-01, - 9.99852419e-01, - 9.99924719e-01, - 9.99972880e-01, - 9.99996960e-01 + 2.45436677e-03f, + 7.36304140e-03f, + 1.22715384e-02f, + 1.71797387e-02f, + 2.20875274e-02f, + 2.69947816e-02f, + 3.19013856e-02f, + 3.68072242e-02f, + 4.17121723e-02f, + 4.66161147e-02f, + 5.15189357e-02f, + 5.64205162e-02f, + 6.13207370e-02f, + 6.62194788e-02f, + 7.11166263e-02f, + 7.60120600e-02f, + 8.09056610e-02f, + 8.57973099e-02f, + 9.06868950e-02f, + 9.55742970e-02f, + 1.00459397e-01f, + 1.05342068e-01f, + 1.10222206e-01f, + 1.15099691e-01f, + 1.19974397e-01f, + 1.24846213e-01f, + 1.29715025e-01f, + 1.34580702e-01f, + 1.39443144e-01f, + 1.44302234e-01f, + 1.49157837e-01f, + 1.54009849e-01f, + 1.58858150e-01f, + 1.63702607e-01f, + 1.68543145e-01f, + 1.73379600e-01f, + 1.78211898e-01f, + 1.83039889e-01f, + 1.87863469e-01f, + 1.92682534e-01f, + 1.97496936e-01f, + 2.02306598e-01f, + 2.07111374e-01f, + 2.11911172e-01f, + 2.16705844e-01f, + 2.21495315e-01f, + 2.26279438e-01f, + 2.31058106e-01f, + 2.35831216e-01f, + 2.40598634e-01f, + 2.45360255e-01f, + 2.50115961e-01f, + 2.54865646e-01f, + 2.59609193e-01f, + 2.64346480e-01f, + 2.69077420e-01f, + 2.73801863e-01f, + 2.78519690e-01f, + 2.83230811e-01f, + 2.87935108e-01f, + 2.92632490e-01f, + 2.97322810e-01f, + 3.02005947e-01f, + 3.06681812e-01f, + 3.11350316e-01f, + 3.16011280e-01f, + 3.20664644e-01f, + 3.25310290e-01f, + 3.29948097e-01f, + 3.34577948e-01f, + 3.39199722e-01f, + 3.43813360e-01f, + 3.48418683e-01f, + 3.53015602e-01f, + 3.57604057e-01f, + 3.62183869e-01f, + 3.66754949e-01f, + 3.71317208e-01f, + 3.75870496e-01f, + 3.80414754e-01f, + 3.84949833e-01f, + 3.89475614e-01f, + 3.93992037e-01f, + 3.98498952e-01f, + 4.02996302e-01f, + 4.07483906e-01f, + 4.11961704e-01f, + 4.16429549e-01f, + 4.20887381e-01f, + 4.25335079e-01f, + 4.29772526e-01f, + 4.34199601e-01f, + 4.38616246e-01f, + 4.43022281e-01f, + 4.47417676e-01f, + 4.51802284e-01f, + 4.56175983e-01f, + 4.60538715e-01f, + 4.64890331e-01f, + 4.69230771e-01f, + 4.73559886e-01f, + 4.77877587e-01f, + 4.82183784e-01f, + 4.86478359e-01f, + 4.90761191e-01f, + 4.95032221e-01f, + 4.99291331e-01f, + 5.03538370e-01f, + 5.07773340e-01f, + 5.11996031e-01f, + 5.16206384e-01f, + 5.20404279e-01f, + 5.24589658e-01f, + 5.28762400e-01f, + 5.32922447e-01f, + 5.37069619e-01f, + 5.41203797e-01f, + 5.45324981e-01f, + 5.49433053e-01f, + 5.53527832e-01f, + 5.57609320e-01f, + 5.61677337e-01f, + 5.65731823e-01f, + 5.69772661e-01f, + 5.73799789e-01f, + 5.77813089e-01f, + 5.81812501e-01f, + 5.85797846e-01f, + 5.89769125e-01f, + 5.93726158e-01f, + 5.97668886e-01f, + 6.01597190e-01f, + 6.05511069e-01f, + 6.09410286e-01f, + 6.13294840e-01f, + 6.17164612e-01f, + 6.21019542e-01f, + 6.24859512e-01f, + 6.28684402e-01f, + 6.32494152e-01f, + 6.36288643e-01f, + 6.40067816e-01f, + 6.43831551e-01f, + 6.47579789e-01f, + 6.51312411e-01f, + 6.55029356e-01f, + 6.58730507e-01f, + 6.62415802e-01f, + 6.66085124e-01f, + 6.69738352e-01f, + 6.73375487e-01f, + 6.76996410e-01f, + 6.80601001e-01f, + 6.84189200e-01f, + 6.87760890e-01f, + 6.91316009e-01f, + 6.94854498e-01f, + 6.98376238e-01f, + 7.01881170e-01f, + 7.05369174e-01f, + 7.08840132e-01f, + 7.12294042e-01f, + 7.15730846e-01f, + 7.19150364e-01f, + 7.22552538e-01f, + 7.25937307e-01f, + 7.29304552e-01f, + 7.32654274e-01f, + 7.35986352e-01f, + 7.39300668e-01f, + 7.42597163e-01f, + 7.45875776e-01f, + 7.49136388e-01f, + 7.52379000e-01f, + 7.55603433e-01f, + 7.58809686e-01f, + 7.61997640e-01f, + 7.65167236e-01f, + 7.68318415e-01f, + 7.71451116e-01f, + 7.74565160e-01f, + 7.77660549e-01f, + 7.80737221e-01f, + 7.83795059e-01f, + 7.86834061e-01f, + 7.89854050e-01f, + 7.92855024e-01f, + 7.95836926e-01f, + 7.98799574e-01f, + 8.01743031e-01f, + 8.04667175e-01f, + 8.07571888e-01f, + 8.10457170e-01f, + 8.13322961e-01f, + 8.16169083e-01f, + 8.18995595e-01f, + 8.21802378e-01f, + 8.24589312e-01f, + 8.27356398e-01f, + 8.30103517e-01f, + 8.32830667e-01f, + 8.35537732e-01f, + 8.38224709e-01f, + 8.40891480e-01f, + 8.43537927e-01f, + 8.46164107e-01f, + 8.48769844e-01f, + 8.51355195e-01f, + 8.53919983e-01f, + 8.56464207e-01f, + 8.58987808e-01f, + 8.61490726e-01f, + 8.63972843e-01f, + 8.66434157e-01f, + 8.68874609e-01f, + 8.71294141e-01f, + 8.73692632e-01f, + 8.76070082e-01f, + 8.78426433e-01f, + 8.80761623e-01f, + 8.83075595e-01f, + 8.85368288e-01f, + 8.87639642e-01f, + 8.89889598e-01f, + 8.92118096e-01f, + 8.94325137e-01f, + 8.96510601e-01f, + 8.98674488e-01f, + 9.00816679e-01f, + 9.02937174e-01f, + 9.05035973e-01f, + 9.07112896e-01f, + 9.09168005e-01f, + 9.11201179e-01f, + 9.13212419e-01f, + 9.15201604e-01f, + 9.17168796e-01f, + 9.19113874e-01f, + 9.21036780e-01f, + 9.22937512e-01f, + 9.24816012e-01f, + 9.26672220e-01f, + 9.28506076e-01f, + 9.30317581e-01f, + 9.32106674e-01f, + 9.33873296e-01f, + 9.35617447e-01f, + 9.37339008e-01f, + 9.39037979e-01f, + 9.40714359e-01f, + 9.42368090e-01f, + 9.43999052e-01f, + 9.45607305e-01f, + 9.47192788e-01f, + 9.48755443e-01f, + 9.50295210e-01f, + 9.51812088e-01f, + 9.53306019e-01f, + 9.54777002e-01f, + 9.56224978e-01f, + 9.57649946e-01f, + 9.59051788e-01f, + 9.60430503e-01f, + 9.61786151e-01f, + 9.63118553e-01f, + 9.64427769e-01f, + 9.65713739e-01f, + 9.66976464e-01f, + 9.68215883e-01f, + 9.69431996e-01f, + 9.70624685e-01f, + 9.71794009e-01f, + 9.72939968e-01f, + 9.74062443e-01f, + 9.75161433e-01f, + 9.76236939e-01f, + 9.77288961e-01f, + 9.78317380e-01f, + 9.79322255e-01f, + 9.80303526e-01f, + 9.81261134e-01f, + 9.82195139e-01f, + 9.83105481e-01f, + 9.83992159e-01f, + 9.84855056e-01f, + 9.85694289e-01f, + 9.86509740e-01f, + 9.87301409e-01f, + 9.88069296e-01f, + 9.88813400e-01f, + 9.89533663e-01f, + 9.90230083e-01f, + 9.90902662e-01f, + 9.91551340e-01f, + 9.92176116e-01f, + 9.92776990e-01f, + 9.93353963e-01f, + 9.93906975e-01f, + 9.94436026e-01f, + 9.94941175e-01f, + 9.95422304e-01f, + 9.95879471e-01f, + 9.96312618e-01f, + 9.96721745e-01f, + 9.97106910e-01f, + 9.97467995e-01f, + 9.97805059e-01f, + 9.98118103e-01f, + 9.98407066e-01f, + 9.98672009e-01f, + 9.98912871e-01f, + 9.99129653e-01f, + 9.99322355e-01f, + 9.99491036e-01f, + 9.99635577e-01f, + 9.99756038e-01f, + 9.99852419e-01f, + 9.99924719e-01f, + 9.99972880e-01f, + 9.99996960e-01f }; const float max_rmlt_to_samples_window[MAX_DCT_LENGTH] = { - 1.22718432e-03, - 3.68154561e-03, - 6.13588467e-03, - 8.59018695e-03, - 1.10444371e-02, - 1.34986211e-02, - 1.59527231e-02, - 1.84067301e-02, - 2.08606254e-02, - 2.33143959e-02, - 2.57680248e-02, - 2.82214992e-02, - 3.06748040e-02, - 3.31279226e-02, - 3.55808437e-02, - 3.80335487e-02, - 4.04860228e-02, - 4.29382585e-02, - 4.53902297e-02, - 4.78419326e-02, - 5.02933450e-02, - 5.27444519e-02, - 5.51952459e-02, - 5.76457046e-02, - 6.00958169e-02, - 6.25455678e-02, - 6.49949387e-02, - 6.74439222e-02, - 6.98924959e-02, - 7.23406523e-02, - 7.47883692e-02, - 7.72356316e-02, - 7.96824396e-02, - 8.21287632e-02, - 8.45745876e-02, - 8.70199054e-02, - 8.94647017e-02, - 9.19089541e-02, - 9.43526551e-02, - 9.67957899e-02, - 9.92383435e-02, - 1.01680294e-01, - 1.04121633e-01, - 1.06562346e-01, - 1.09002419e-01, - 1.11441828e-01, - 1.13880575e-01, - 1.16318628e-01, - 1.18755989e-01, - 1.21192627e-01, - 1.23628542e-01, - 1.26063704e-01, - 1.28498107e-01, - 1.30931750e-01, - 1.33364588e-01, - 1.35796621e-01, - 1.38227850e-01, - 1.40658244e-01, - 1.43087775e-01, - 1.45516455e-01, - 1.47944272e-01, - 1.50371179e-01, - 1.52797192e-01, - 1.55222267e-01, - 1.57646418e-01, - 1.60069630e-01, - 1.62491858e-01, - 1.64913118e-01, - 1.67333379e-01, - 1.69752643e-01, - 1.72170877e-01, - 1.74588069e-01, - 1.77004218e-01, - 1.79419294e-01, - 1.81833297e-01, - 1.84246197e-01, - 1.86657995e-01, - 1.89068660e-01, - 1.91478193e-01, - 1.93886578e-01, - 1.96293786e-01, - 1.98699802e-01, - 2.01104641e-01, - 2.03508258e-01, - 2.05910638e-01, - 2.08311796e-01, - 2.10711688e-01, - 2.13110313e-01, - 2.15507656e-01, - 2.17903703e-01, - 2.20298439e-01, - 2.22691849e-01, - 2.25083917e-01, - 2.27474615e-01, - 2.29863957e-01, - 2.32251912e-01, - 2.34638467e-01, - 2.37023607e-01, - 2.39407316e-01, - 2.41789594e-01, - 2.44170398e-01, - 2.46549740e-01, - 2.48927608e-01, - 2.51303971e-01, - 2.53678799e-01, - 2.56052136e-01, - 2.58423895e-01, - 2.60794103e-01, - 2.63162762e-01, - 2.65529811e-01, - 2.67895281e-01, - 2.70259142e-01, - 2.72621363e-01, - 2.74981946e-01, - 2.77340859e-01, - 2.79698104e-01, - 2.82053679e-01, - 2.84407526e-01, - 2.86759704e-01, - 2.89110124e-01, - 2.91458815e-01, - 2.93805718e-01, - 2.96150893e-01, - 2.98494250e-01, - 3.00835848e-01, - 3.03175598e-01, - 3.05513531e-01, - 3.07849646e-01, - 3.10183883e-01, - 3.12516272e-01, - 3.14846754e-01, - 3.17175359e-01, - 3.19502026e-01, - 3.21826786e-01, - 3.24149609e-01, - 3.26470494e-01, - 3.28789383e-01, - 3.31106305e-01, - 3.33421230e-01, - 3.35734159e-01, - 3.38045061e-01, - 3.40353906e-01, - 3.42660725e-01, - 3.44965458e-01, - 3.47268134e-01, - 3.49568695e-01, - 3.51867169e-01, - 3.54163527e-01, - 3.56457740e-01, - 3.58749807e-01, - 3.61039728e-01, - 3.63327444e-01, - 3.65612984e-01, - 3.67896348e-01, - 3.70177478e-01, - 3.72456372e-01, - 3.74733001e-01, - 3.77007425e-01, - 3.79279524e-01, - 3.81549388e-01, - 3.83816928e-01, - 3.86082143e-01, - 3.88345033e-01, - 3.90605599e-01, - 3.92863810e-01, - 3.95119667e-01, - 3.97373140e-01, - 3.99624199e-01, - 4.01872873e-01, - 4.04119104e-01, - 4.06362921e-01, - 4.08604264e-01, - 4.10843164e-01, - 4.13079590e-01, - 4.15313542e-01, - 4.17544961e-01, - 4.19773877e-01, - 4.22000259e-01, - 4.24224108e-01, - 4.26445425e-01, - 4.28664148e-01, - 4.30880278e-01, - 4.33093816e-01, - 4.35304761e-01, - 4.37513083e-01, - 4.39718753e-01, - 4.41921771e-01, - 4.44122136e-01, - 4.46319848e-01, - 4.48514849e-01, - 4.50707138e-01, - 4.52896714e-01, - 4.55083579e-01, - 4.57267702e-01, - 4.59449053e-01, - 4.61627662e-01, - 4.63803470e-01, - 4.65976506e-01, - 4.68146712e-01, - 4.70314115e-01, - 4.72478658e-01, - 4.74640369e-01, - 4.76799220e-01, - 4.78955209e-01, - 4.81108308e-01, - 4.83258516e-01, - 4.85405803e-01, - 4.87550169e-01, - 4.89691585e-01, - 4.91830051e-01, - 4.93965566e-01, - 4.96098131e-01, - 4.98227656e-01, - 5.00354230e-01, - 5.02477765e-01, - 5.04598260e-01, - 5.06715715e-01, - 5.08830130e-01, - 5.10941505e-01, - 5.13049781e-01, - 5.15154958e-01, - 5.17257035e-01, - 5.19356012e-01, - 5.21451831e-01, - 5.23544490e-01, - 5.25634050e-01, - 5.27720451e-01, - 5.29803634e-01, - 5.31883657e-01, - 5.33960402e-01, - 5.36033988e-01, - 5.38104355e-01, - 5.40171444e-01, - 5.42235315e-01, - 5.44295907e-01, - 5.46353221e-01, - 5.48407257e-01, - 5.50457954e-01, - 5.52505374e-01, - 5.54549456e-01, - 5.56590199e-01, - 5.58627546e-01, - 5.60661554e-01, - 5.62692225e-01, - 5.64719439e-01, - 5.66743314e-01, - 5.68763733e-01, - 5.70780754e-01, - 5.72794318e-01, - 5.74804425e-01, - 5.76811075e-01, - 5.78814268e-01, - 5.80813944e-01, - 5.82810163e-01, - 5.84802806e-01, - 5.86791992e-01, - 5.88777602e-01, - 5.90759695e-01, - 5.92738211e-01, - 5.94713151e-01, - 5.96684515e-01, - 5.98652303e-01, - 6.00616455e-01, - 6.02577031e-01, - 6.04533970e-01, - 6.06487215e-01, - 6.08436823e-01, - 6.10382795e-01, - 6.12325072e-01, - 6.14263654e-01, - 6.16198599e-01, - 6.18129730e-01, - 6.20057225e-01, - 6.21980906e-01, - 6.23900890e-01, - 6.25817120e-01, - 6.27729595e-01, - 6.29638255e-01, - 6.31543100e-01, - 6.33444190e-01, - 6.35341406e-01, - 6.37234867e-01, - 6.39124453e-01, - 6.41010165e-01, - 6.42892063e-01, - 6.44770086e-01, - 6.46644175e-01, - 6.48514390e-01, - 6.50380731e-01, - 6.52243137e-01, - 6.54101610e-01, - 6.55956089e-01, - 6.57806695e-01, - 6.59653306e-01, - 6.61495924e-01, - 6.63334608e-01, - 6.65169239e-01, - 6.66999936e-01, - 6.68826580e-01, - 6.70649171e-01, - 6.72467709e-01, - 6.74282253e-01, - 6.76092684e-01, - 6.77899063e-01, - 6.79701388e-01, - 6.81499600e-01, - 6.83293700e-01, - 6.85083687e-01, - 6.86869502e-01, - 6.88651264e-01, - 6.90428793e-01, - 6.92202210e-01, - 6.93971455e-01, - 6.95736527e-01, - 6.97497368e-01, - 6.99254036e-01, - 7.01006532e-01, - 7.02754736e-01, - 7.04498768e-01, - 7.06238508e-01, - 7.07974017e-01, - 7.09705234e-01, - 7.11432219e-01, - 7.13154852e-01, - 7.14873254e-01, - 7.16587305e-01, - 7.18297064e-01, - 7.20002532e-01, - 7.21703589e-01, - 7.23400354e-01, - 7.25092709e-01, - 7.26780772e-01, - 7.28464365e-01, - 7.30143666e-01, - 7.31818497e-01, - 7.33488917e-01, - 7.35154986e-01, - 7.36816585e-01, - 7.38473713e-01, - 7.40126431e-01, - 7.41774678e-01, - 7.43418455e-01, - 7.45057762e-01, - 7.46692598e-01, - 7.48322904e-01, - 7.49948740e-01, - 7.51570046e-01, - 7.53186822e-01, - 7.54799008e-01, - 7.56406724e-01, - 7.58009851e-01, - 7.59608388e-01, - 7.61202395e-01, - 7.62791812e-01, - 7.64376581e-01, - 7.65956819e-01, - 7.67532349e-01, - 7.69103348e-01, - 7.70669639e-01, - 7.72231340e-01, - 7.73788393e-01, - 7.75340736e-01, - 7.76888490e-01, - 7.78431475e-01, - 7.79969811e-01, - 7.81503439e-01, - 7.83032358e-01, - 7.84556568e-01, - 7.86076069e-01, - 7.87590802e-01, - 7.89100826e-01, - 7.90606081e-01, - 7.92106569e-01, - 7.93602288e-01, - 7.95093238e-01, - 7.96579361e-01, - 7.98060715e-01, - 7.99537241e-01, - 8.01008999e-01, - 8.02475870e-01, - 8.03937972e-01, - 8.05395186e-01, - 8.06847572e-01, - 8.08295071e-01, - 8.09737682e-01, - 8.11175466e-01, - 8.12608361e-01, - 8.14036310e-01, - 8.15459430e-01, - 8.16877604e-01, - 8.18290830e-01, - 8.19699109e-01, - 8.21102500e-01, - 8.22500944e-01, - 8.23894441e-01, - 8.25282931e-01, - 8.26666474e-01, - 8.28045070e-01, - 8.29418600e-01, - 8.30787182e-01, - 8.32150757e-01, - 8.33509326e-01, - 8.34862888e-01, - 8.36211383e-01, - 8.37554872e-01, - 8.38893294e-01, - 8.40226650e-01, - 8.41554999e-01, - 8.42878222e-01, - 8.44196379e-01, - 8.45509470e-01, - 8.46817434e-01, - 8.48120332e-01, - 8.49418104e-01, - 8.50710809e-01, - 8.51998329e-01, - 8.53280723e-01, - 8.54557991e-01, - 8.55830133e-01, - 8.57097089e-01, - 8.58358860e-01, - 8.59615505e-01, - 8.60866964e-01, - 8.62113178e-01, - 8.63354266e-01, - 8.64590168e-01, - 8.65820825e-01, - 8.67046237e-01, - 8.68266463e-01, - 8.69481444e-01, - 8.70691240e-01, - 8.71895730e-01, - 8.73094976e-01, - 8.74288976e-01, - 8.75477731e-01, - 8.76661181e-01, - 8.77839327e-01, - 8.79012227e-01, - 8.80179822e-01, - 8.81342113e-01, - 8.82499099e-01, - 8.83650780e-01, - 8.84797096e-01, - 8.85938108e-01, - 8.87073815e-01, - 8.88204098e-01, - 8.89329076e-01, - 8.90448749e-01, - 8.91562998e-01, - 8.92671883e-01, - 8.93775403e-01, - 8.94873500e-01, - 8.95966232e-01, - 8.97053599e-01, - 8.98135543e-01, - 8.99212062e-01, - 9.00283158e-01, - 9.01348829e-01, - 9.02409077e-01, - 9.03463900e-01, - 9.04513299e-01, - 9.05557215e-01, - 9.06595707e-01, - 9.07628715e-01, - 9.08656240e-01, - 9.09678340e-01, - 9.10694897e-01, - 9.11706030e-01, - 9.12711620e-01, - 9.13711786e-01, - 9.14706349e-01, - 9.15695488e-01, - 9.16679084e-01, - 9.17657137e-01, - 9.18629646e-01, - 9.19596672e-01, - 9.20558095e-01, - 9.21514034e-01, - 9.22464430e-01, - 9.23409224e-01, - 9.24348474e-01, - 9.25282121e-01, - 9.26210225e-01, - 9.27132785e-01, - 9.28049684e-01, - 9.28961039e-01, - 9.29866791e-01, - 9.30766940e-01, - 9.31661487e-01, - 9.32550430e-01, - 9.33433771e-01, - 9.34311450e-01, - 9.35183525e-01, - 9.36049938e-01, - 9.36910748e-01, - 9.37765896e-01, - 9.38615382e-01, - 9.39459205e-01, - 9.40297425e-01, - 9.41129923e-01, - 9.41956758e-01, - 9.42777932e-01, - 9.43593442e-01, - 9.44403291e-01, - 9.45207417e-01, - 9.46005821e-01, - 9.46798563e-01, - 9.47585583e-01, - 9.48366940e-01, - 9.49142516e-01, - 9.49912429e-01, - 9.50676560e-01, - 9.51435030e-01, - 9.52187717e-01, - 9.52934682e-01, - 9.53675926e-01, - 9.54411447e-01, - 9.55141187e-01, - 9.55865145e-01, - 9.56583381e-01, - 9.57295835e-01, - 9.58002567e-01, - 9.58703458e-01, - 9.59398627e-01, - 9.60088015e-01, - 9.60771620e-01, - 9.61449385e-01, - 9.62121427e-01, - 9.62787628e-01, - 9.63448048e-01, - 9.64102626e-01, - 9.64751422e-01, - 9.65394437e-01, - 9.66031611e-01, - 9.66663003e-01, - 9.67288494e-01, - 9.67908204e-01, - 9.68522072e-01, - 9.69130158e-01, - 9.69732344e-01, - 9.70328689e-01, - 9.70919251e-01, - 9.71503913e-01, - 9.72082734e-01, - 9.72655654e-01, - 9.73222792e-01, - 9.73784029e-01, - 9.74339366e-01, - 9.74888861e-01, - 9.75432515e-01, - 9.75970268e-01, - 9.76502120e-01, - 9.77028131e-01, - 9.77548242e-01, - 9.78062451e-01, - 9.78570819e-01, - 9.79073226e-01, - 9.79569793e-01, - 9.80060399e-01, - 9.80545104e-01, - 9.81023967e-01, - 9.81496871e-01, - 9.81963873e-01, - 9.82424974e-01, - 9.82880116e-01, - 9.83329356e-01, - 9.83772695e-01, - 9.84210074e-01, - 9.84641552e-01, - 9.85067070e-01, - 9.85486686e-01, - 9.85900342e-01, - 9.86308098e-01, - 9.86709893e-01, - 9.87105727e-01, - 9.87495601e-01, - 9.87879574e-01, - 9.88257587e-01, - 9.88629639e-01, - 9.88995671e-01, - 9.89355803e-01, - 9.89709973e-01, - 9.90058184e-01, - 9.90400434e-01, - 9.90736723e-01, - 9.91067052e-01, - 9.91391361e-01, - 9.91709769e-01, - 9.92022157e-01, - 9.92328584e-01, - 9.92628992e-01, - 9.92923498e-01, - 9.93211925e-01, - 9.93494451e-01, - 9.93770957e-01, - 9.94041502e-01, - 9.94306028e-01, - 9.94564593e-01, - 9.94817138e-01, - 9.95063663e-01, - 9.95304286e-01, - 9.95538831e-01, - 9.95767415e-01, - 9.95989978e-01, - 9.96206582e-01, - 9.96417165e-01, - 9.96621728e-01, - 9.96820271e-01, - 9.97012854e-01, - 9.97199416e-01, - 9.97379959e-01, - 9.97554541e-01, - 9.97723043e-01, - 9.97885585e-01, - 9.98042107e-01, - 9.98192608e-01, - 9.98337090e-01, - 9.98475552e-01, - 9.98608053e-01, - 9.98734474e-01, - 9.98854935e-01, - 9.98969316e-01, - 9.99077737e-01, - 9.99180079e-01, - 9.99276459e-01, - 9.99366820e-01, - 9.99451101e-01, - 9.99529421e-01, - 9.99601722e-01, - 9.99667943e-01, - 9.99728203e-01, - 9.99782383e-01, - 9.99830604e-01, - 9.99872744e-01, - 9.99908864e-01, - 9.99939024e-01, - 9.99963105e-01, - 9.99981165e-01, - 9.99993205e-01, - 9.99999225e-01 + 1.22718432e-03f, + 3.68154561e-03f, + 6.13588467e-03f, + 8.59018695e-03f, + 1.10444371e-02f, + 1.34986211e-02f, + 1.59527231e-02f, + 1.84067301e-02f, + 2.08606254e-02f, + 2.33143959e-02f, + 2.57680248e-02f, + 2.82214992e-02f, + 3.06748040e-02f, + 3.31279226e-02f, + 3.55808437e-02f, + 3.80335487e-02f, + 4.04860228e-02f, + 4.29382585e-02f, + 4.53902297e-02f, + 4.78419326e-02f, + 5.02933450e-02f, + 5.27444519e-02f, + 5.51952459e-02f, + 5.76457046e-02f, + 6.00958169e-02f, + 6.25455678e-02f, + 6.49949387e-02f, + 6.74439222e-02f, + 6.98924959e-02f, + 7.23406523e-02f, + 7.47883692e-02f, + 7.72356316e-02f, + 7.96824396e-02f, + 8.21287632e-02f, + 8.45745876e-02f, + 8.70199054e-02f, + 8.94647017e-02f, + 9.19089541e-02f, + 9.43526551e-02f, + 9.67957899e-02f, + 9.92383435e-02f, + 1.01680294e-01f, + 1.04121633e-01f, + 1.06562346e-01f, + 1.09002419e-01f, + 1.11441828e-01f, + 1.13880575e-01f, + 1.16318628e-01f, + 1.18755989e-01f, + 1.21192627e-01f, + 1.23628542e-01f, + 1.26063704e-01f, + 1.28498107e-01f, + 1.30931750e-01f, + 1.33364588e-01f, + 1.35796621e-01f, + 1.38227850e-01f, + 1.40658244e-01f, + 1.43087775e-01f, + 1.45516455e-01f, + 1.47944272e-01f, + 1.50371179e-01f, + 1.52797192e-01f, + 1.55222267e-01f, + 1.57646418e-01f, + 1.60069630e-01f, + 1.62491858e-01f, + 1.64913118e-01f, + 1.67333379e-01f, + 1.69752643e-01f, + 1.72170877e-01f, + 1.74588069e-01f, + 1.77004218e-01f, + 1.79419294e-01f, + 1.81833297e-01f, + 1.84246197e-01f, + 1.86657995e-01f, + 1.89068660e-01f, + 1.91478193e-01f, + 1.93886578e-01f, + 1.96293786e-01f, + 1.98699802e-01f, + 2.01104641e-01f, + 2.03508258e-01f, + 2.05910638e-01f, + 2.08311796e-01f, + 2.10711688e-01f, + 2.13110313e-01f, + 2.15507656e-01f, + 2.17903703e-01f, + 2.20298439e-01f, + 2.22691849e-01f, + 2.25083917e-01f, + 2.27474615e-01f, + 2.29863957e-01f, + 2.32251912e-01f, + 2.34638467e-01f, + 2.37023607e-01f, + 2.39407316e-01f, + 2.41789594e-01f, + 2.44170398e-01f, + 2.46549740e-01f, + 2.48927608e-01f, + 2.51303971e-01f, + 2.53678799e-01f, + 2.56052136e-01f, + 2.58423895e-01f, + 2.60794103e-01f, + 2.63162762e-01f, + 2.65529811e-01f, + 2.67895281e-01f, + 2.70259142e-01f, + 2.72621363e-01f, + 2.74981946e-01f, + 2.77340859e-01f, + 2.79698104e-01f, + 2.82053679e-01f, + 2.84407526e-01f, + 2.86759704e-01f, + 2.89110124e-01f, + 2.91458815e-01f, + 2.93805718e-01f, + 2.96150893e-01f, + 2.98494250e-01f, + 3.00835848e-01f, + 3.03175598e-01f, + 3.05513531e-01f, + 3.07849646e-01f, + 3.10183883e-01f, + 3.12516272e-01f, + 3.14846754e-01f, + 3.17175359e-01f, + 3.19502026e-01f, + 3.21826786e-01f, + 3.24149609e-01f, + 3.26470494e-01f, + 3.28789383e-01f, + 3.31106305e-01f, + 3.33421230e-01f, + 3.35734159e-01f, + 3.38045061e-01f, + 3.40353906e-01f, + 3.42660725e-01f, + 3.44965458e-01f, + 3.47268134e-01f, + 3.49568695e-01f, + 3.51867169e-01f, + 3.54163527e-01f, + 3.56457740e-01f, + 3.58749807e-01f, + 3.61039728e-01f, + 3.63327444e-01f, + 3.65612984e-01f, + 3.67896348e-01f, + 3.70177478e-01f, + 3.72456372e-01f, + 3.74733001e-01f, + 3.77007425e-01f, + 3.79279524e-01f, + 3.81549388e-01f, + 3.83816928e-01f, + 3.86082143e-01f, + 3.88345033e-01f, + 3.90605599e-01f, + 3.92863810e-01f, + 3.95119667e-01f, + 3.97373140e-01f, + 3.99624199e-01f, + 4.01872873e-01f, + 4.04119104e-01f, + 4.06362921e-01f, + 4.08604264e-01f, + 4.10843164e-01f, + 4.13079590e-01f, + 4.15313542e-01f, + 4.17544961e-01f, + 4.19773877e-01f, + 4.22000259e-01f, + 4.24224108e-01f, + 4.26445425e-01f, + 4.28664148e-01f, + 4.30880278e-01f, + 4.33093816e-01f, + 4.35304761e-01f, + 4.37513083e-01f, + 4.39718753e-01f, + 4.41921771e-01f, + 4.44122136e-01f, + 4.46319848e-01f, + 4.48514849e-01f, + 4.50707138e-01f, + 4.52896714e-01f, + 4.55083579e-01f, + 4.57267702e-01f, + 4.59449053e-01f, + 4.61627662e-01f, + 4.63803470e-01f, + 4.65976506e-01f, + 4.68146712e-01f, + 4.70314115e-01f, + 4.72478658e-01f, + 4.74640369e-01f, + 4.76799220e-01f, + 4.78955209e-01f, + 4.81108308e-01f, + 4.83258516e-01f, + 4.85405803e-01f, + 4.87550169e-01f, + 4.89691585e-01f, + 4.91830051e-01f, + 4.93965566e-01f, + 4.96098131e-01f, + 4.98227656e-01f, + 5.00354230e-01f, + 5.02477765e-01f, + 5.04598260e-01f, + 5.06715715e-01f, + 5.08830130e-01f, + 5.10941505e-01f, + 5.13049781e-01f, + 5.15154958e-01f, + 5.17257035e-01f, + 5.19356012e-01f, + 5.21451831e-01f, + 5.23544490e-01f, + 5.25634050e-01f, + 5.27720451e-01f, + 5.29803634e-01f, + 5.31883657e-01f, + 5.33960402e-01f, + 5.36033988e-01f, + 5.38104355e-01f, + 5.40171444e-01f, + 5.42235315e-01f, + 5.44295907e-01f, + 5.46353221e-01f, + 5.48407257e-01f, + 5.50457954e-01f, + 5.52505374e-01f, + 5.54549456e-01f, + 5.56590199e-01f, + 5.58627546e-01f, + 5.60661554e-01f, + 5.62692225e-01f, + 5.64719439e-01f, + 5.66743314e-01f, + 5.68763733e-01f, + 5.70780754e-01f, + 5.72794318e-01f, + 5.74804425e-01f, + 5.76811075e-01f, + 5.78814268e-01f, + 5.80813944e-01f, + 5.82810163e-01f, + 5.84802806e-01f, + 5.86791992e-01f, + 5.88777602e-01f, + 5.90759695e-01f, + 5.92738211e-01f, + 5.94713151e-01f, + 5.96684515e-01f, + 5.98652303e-01f, + 6.00616455e-01f, + 6.02577031e-01f, + 6.04533970e-01f, + 6.06487215e-01f, + 6.08436823e-01f, + 6.10382795e-01f, + 6.12325072e-01f, + 6.14263654e-01f, + 6.16198599e-01f, + 6.18129730e-01f, + 6.20057225e-01f, + 6.21980906e-01f, + 6.23900890e-01f, + 6.25817120e-01f, + 6.27729595e-01f, + 6.29638255e-01f, + 6.31543100e-01f, + 6.33444190e-01f, + 6.35341406e-01f, + 6.37234867e-01f, + 6.39124453e-01f, + 6.41010165e-01f, + 6.42892063e-01f, + 6.44770086e-01f, + 6.46644175e-01f, + 6.48514390e-01f, + 6.50380731e-01f, + 6.52243137e-01f, + 6.54101610e-01f, + 6.55956089e-01f, + 6.57806695e-01f, + 6.59653306e-01f, + 6.61495924e-01f, + 6.63334608e-01f, + 6.65169239e-01f, + 6.66999936e-01f, + 6.68826580e-01f, + 6.70649171e-01f, + 6.72467709e-01f, + 6.74282253e-01f, + 6.76092684e-01f, + 6.77899063e-01f, + 6.79701388e-01f, + 6.81499600e-01f, + 6.83293700e-01f, + 6.85083687e-01f, + 6.86869502e-01f, + 6.88651264e-01f, + 6.90428793e-01f, + 6.92202210e-01f, + 6.93971455e-01f, + 6.95736527e-01f, + 6.97497368e-01f, + 6.99254036e-01f, + 7.01006532e-01f, + 7.02754736e-01f, + 7.04498768e-01f, + 7.06238508e-01f, + 7.07974017e-01f, + 7.09705234e-01f, + 7.11432219e-01f, + 7.13154852e-01f, + 7.14873254e-01f, + 7.16587305e-01f, + 7.18297064e-01f, + 7.20002532e-01f, + 7.21703589e-01f, + 7.23400354e-01f, + 7.25092709e-01f, + 7.26780772e-01f, + 7.28464365e-01f, + 7.30143666e-01f, + 7.31818497e-01f, + 7.33488917e-01f, + 7.35154986e-01f, + 7.36816585e-01f, + 7.38473713e-01f, + 7.40126431e-01f, + 7.41774678e-01f, + 7.43418455e-01f, + 7.45057762e-01f, + 7.46692598e-01f, + 7.48322904e-01f, + 7.49948740e-01f, + 7.51570046e-01f, + 7.53186822e-01f, + 7.54799008e-01f, + 7.56406724e-01f, + 7.58009851e-01f, + 7.59608388e-01f, + 7.61202395e-01f, + 7.62791812e-01f, + 7.64376581e-01f, + 7.65956819e-01f, + 7.67532349e-01f, + 7.69103348e-01f, + 7.70669639e-01f, + 7.72231340e-01f, + 7.73788393e-01f, + 7.75340736e-01f, + 7.76888490e-01f, + 7.78431475e-01f, + 7.79969811e-01f, + 7.81503439e-01f, + 7.83032358e-01f, + 7.84556568e-01f, + 7.86076069e-01f, + 7.87590802e-01f, + 7.89100826e-01f, + 7.90606081e-01f, + 7.92106569e-01f, + 7.93602288e-01f, + 7.95093238e-01f, + 7.96579361e-01f, + 7.98060715e-01f, + 7.99537241e-01f, + 8.01008999e-01f, + 8.02475870e-01f, + 8.03937972e-01f, + 8.05395186e-01f, + 8.06847572e-01f, + 8.08295071e-01f, + 8.09737682e-01f, + 8.11175466e-01f, + 8.12608361e-01f, + 8.14036310e-01f, + 8.15459430e-01f, + 8.16877604e-01f, + 8.18290830e-01f, + 8.19699109e-01f, + 8.21102500e-01f, + 8.22500944e-01f, + 8.23894441e-01f, + 8.25282931e-01f, + 8.26666474e-01f, + 8.28045070e-01f, + 8.29418600e-01f, + 8.30787182e-01f, + 8.32150757e-01f, + 8.33509326e-01f, + 8.34862888e-01f, + 8.36211383e-01f, + 8.37554872e-01f, + 8.38893294e-01f, + 8.40226650e-01f, + 8.41554999e-01f, + 8.42878222e-01f, + 8.44196379e-01f, + 8.45509470e-01f, + 8.46817434e-01f, + 8.48120332e-01f, + 8.49418104e-01f, + 8.50710809e-01f, + 8.51998329e-01f, + 8.53280723e-01f, + 8.54557991e-01f, + 8.55830133e-01f, + 8.57097089e-01f, + 8.58358860e-01f, + 8.59615505e-01f, + 8.60866964e-01f, + 8.62113178e-01f, + 8.63354266e-01f, + 8.64590168e-01f, + 8.65820825e-01f, + 8.67046237e-01f, + 8.68266463e-01f, + 8.69481444e-01f, + 8.70691240e-01f, + 8.71895730e-01f, + 8.73094976e-01f, + 8.74288976e-01f, + 8.75477731e-01f, + 8.76661181e-01f, + 8.77839327e-01f, + 8.79012227e-01f, + 8.80179822e-01f, + 8.81342113e-01f, + 8.82499099e-01f, + 8.83650780e-01f, + 8.84797096e-01f, + 8.85938108e-01f, + 8.87073815e-01f, + 8.88204098e-01f, + 8.89329076e-01f, + 8.90448749e-01f, + 8.91562998e-01f, + 8.92671883e-01f, + 8.93775403e-01f, + 8.94873500e-01f, + 8.95966232e-01f, + 8.97053599e-01f, + 8.98135543e-01f, + 8.99212062e-01f, + 9.00283158e-01f, + 9.01348829e-01f, + 9.02409077e-01f, + 9.03463900e-01f, + 9.04513299e-01f, + 9.05557215e-01f, + 9.06595707e-01f, + 9.07628715e-01f, + 9.08656240e-01f, + 9.09678340e-01f, + 9.10694897e-01f, + 9.11706030e-01f, + 9.12711620e-01f, + 9.13711786e-01f, + 9.14706349e-01f, + 9.15695488e-01f, + 9.16679084e-01f, + 9.17657137e-01f, + 9.18629646e-01f, + 9.19596672e-01f, + 9.20558095e-01f, + 9.21514034e-01f, + 9.22464430e-01f, + 9.23409224e-01f, + 9.24348474e-01f, + 9.25282121e-01f, + 9.26210225e-01f, + 9.27132785e-01f, + 9.28049684e-01f, + 9.28961039e-01f, + 9.29866791e-01f, + 9.30766940e-01f, + 9.31661487e-01f, + 9.32550430e-01f, + 9.33433771e-01f, + 9.34311450e-01f, + 9.35183525e-01f, + 9.36049938e-01f, + 9.36910748e-01f, + 9.37765896e-01f, + 9.38615382e-01f, + 9.39459205e-01f, + 9.40297425e-01f, + 9.41129923e-01f, + 9.41956758e-01f, + 9.42777932e-01f, + 9.43593442e-01f, + 9.44403291e-01f, + 9.45207417e-01f, + 9.46005821e-01f, + 9.46798563e-01f, + 9.47585583e-01f, + 9.48366940e-01f, + 9.49142516e-01f, + 9.49912429e-01f, + 9.50676560e-01f, + 9.51435030e-01f, + 9.52187717e-01f, + 9.52934682e-01f, + 9.53675926e-01f, + 9.54411447e-01f, + 9.55141187e-01f, + 9.55865145e-01f, + 9.56583381e-01f, + 9.57295835e-01f, + 9.58002567e-01f, + 9.58703458e-01f, + 9.59398627e-01f, + 9.60088015e-01f, + 9.60771620e-01f, + 9.61449385e-01f, + 9.62121427e-01f, + 9.62787628e-01f, + 9.63448048e-01f, + 9.64102626e-01f, + 9.64751422e-01f, + 9.65394437e-01f, + 9.66031611e-01f, + 9.66663003e-01f, + 9.67288494e-01f, + 9.67908204e-01f, + 9.68522072e-01f, + 9.69130158e-01f, + 9.69732344e-01f, + 9.70328689e-01f, + 9.70919251e-01f, + 9.71503913e-01f, + 9.72082734e-01f, + 9.72655654e-01f, + 9.73222792e-01f, + 9.73784029e-01f, + 9.74339366e-01f, + 9.74888861e-01f, + 9.75432515e-01f, + 9.75970268e-01f, + 9.76502120e-01f, + 9.77028131e-01f, + 9.77548242e-01f, + 9.78062451e-01f, + 9.78570819e-01f, + 9.79073226e-01f, + 9.79569793e-01f, + 9.80060399e-01f, + 9.80545104e-01f, + 9.81023967e-01f, + 9.81496871e-01f, + 9.81963873e-01f, + 9.82424974e-01f, + 9.82880116e-01f, + 9.83329356e-01f, + 9.83772695e-01f, + 9.84210074e-01f, + 9.84641552e-01f, + 9.85067070e-01f, + 9.85486686e-01f, + 9.85900342e-01f, + 9.86308098e-01f, + 9.86709893e-01f, + 9.87105727e-01f, + 9.87495601e-01f, + 9.87879574e-01f, + 9.88257587e-01f, + 9.88629639e-01f, + 9.88995671e-01f, + 9.89355803e-01f, + 9.89709973e-01f, + 9.90058184e-01f, + 9.90400434e-01f, + 9.90736723e-01f, + 9.91067052e-01f, + 9.91391361e-01f, + 9.91709769e-01f, + 9.92022157e-01f, + 9.92328584e-01f, + 9.92628992e-01f, + 9.92923498e-01f, + 9.93211925e-01f, + 9.93494451e-01f, + 9.93770957e-01f, + 9.94041502e-01f, + 9.94306028e-01f, + 9.94564593e-01f, + 9.94817138e-01f, + 9.95063663e-01f, + 9.95304286e-01f, + 9.95538831e-01f, + 9.95767415e-01f, + 9.95989978e-01f, + 9.96206582e-01f, + 9.96417165e-01f, + 9.96621728e-01f, + 9.96820271e-01f, + 9.97012854e-01f, + 9.97199416e-01f, + 9.97379959e-01f, + 9.97554541e-01f, + 9.97723043e-01f, + 9.97885585e-01f, + 9.98042107e-01f, + 9.98192608e-01f, + 9.98337090e-01f, + 9.98475552e-01f, + 9.98608053e-01f, + 9.98734474e-01f, + 9.98854935e-01f, + 9.98969316e-01f, + 9.99077737e-01f, + 9.99180079e-01f, + 9.99276459e-01f, + 9.99366820e-01f, + 9.99451101e-01f, + 9.99529421e-01f, + 9.99601722e-01f, + 9.99667943e-01f, + 9.99728203e-01f, + 9.99782383e-01f, + 9.99830604e-01f, + 9.99872744e-01f, + 9.99908864e-01f, + 9.99939024e-01f, + 9.99963105e-01f, + 9.99981165e-01f, + 9.99993205e-01f, + 9.99999225e-01f }; #endif /*- End of file ------------------------------------------------------------*/ Modified: freeswitch/trunk/libs/libg722_1/src/dct4.h ============================================================================== --- freeswitch/trunk/libs/libg722_1/src/dct4.h (original) +++ freeswitch/trunk/libs/libg722_1/src/dct4.h Mon Dec 15 23:14:57 2008 @@ -1,1515 +1,1515 @@ static const float max_dct_core_a[] = { - 5.572937315437795e-02, - 5.435713103213160e-02, - 5.164643594289910e-02, - 4.766403419605858e-02, - 4.250798573945089e-02, - 3.630524959802148e-02, - 2.920855772127337e-02, - 2.139265421578210e-02, - 1.304999256534943e-02, - 4.385996787515619e-03, - 5.435713103213160e-02, - 4.250798573945089e-02, - 2.139265421578210e-02, - -4.385996787515612e-03, - -2.920855772127336e-02, - -4.766403419605858e-02, - -5.572937315437795e-02, - -5.164643594289911e-02, - -3.630524959802151e-02, - -1.304999256534941e-02, - 5.164643594289910e-02, - 2.139265421578210e-02, - -2.139265421578209e-02, - -5.164643594289910e-02, - -5.164643594289911e-02, - -2.139265421578213e-02, - 2.139265421578211e-02, - 5.164643594289909e-02, - 5.164643594289910e-02, - 2.139265421578213e-02, - 4.766403419605858e-02, - -4.385996787515612e-03, - -5.164643594289910e-02, - -4.250798573945090e-02, - 1.304999256534939e-02, - 5.435713103213161e-02, - 3.630524959802152e-02, - -2.139265421578210e-02, - -5.572937315437795e-02, - -2.920855772127336e-02, - 4.250798573945089e-02, - -2.920855772127336e-02, - -5.164643594289911e-02, - 1.304999256534939e-02, - 5.572937315437795e-02, - 4.385996787515657e-03, - -5.435713103213161e-02, - -2.139265421578214e-02, - 4.766403419605858e-02, - 3.630524959802153e-02, - 3.630524959802148e-02, - -4.766403419605858e-02, - -2.139265421578213e-02, - 5.435713103213161e-02, - 4.385996787515657e-03, - -5.572937315437795e-02, - 1.304999256534937e-02, - 5.164643594289910e-02, - -2.920855772127332e-02, - -4.250798573945090e-02, - 2.920855772127337e-02, - -5.572937315437795e-02, - 2.139265421578211e-02, - 3.630524959802152e-02, - -5.435713103213161e-02, - 1.304999256534937e-02, - 4.250798573945089e-02, - -5.164643594289908e-02, - 4.385996787515504e-03, - 4.766403419605861e-02, - 2.139265421578210e-02, - -5.164643594289911e-02, - 5.164643594289909e-02, - -2.139265421578210e-02, - -2.139265421578214e-02, - 5.164643594289910e-02, - -5.164643594289908e-02, - 2.139265421578208e-02, - 2.139265421578216e-02, - -5.164643594289915e-02, - 1.304999256534943e-02, - -3.630524959802151e-02, - 5.164643594289910e-02, - -5.572937315437795e-02, - 4.766403419605858e-02, - -2.920855772127332e-02, - 4.385996787515504e-03, - 2.139265421578216e-02, - -4.250798573945092e-02, - 5.435713103213160e-02, - 4.385996787515619e-03, - -1.304999256534941e-02, - 2.139265421578213e-02, - -2.920855772127336e-02, - 3.630524959802153e-02, - -4.250798573945090e-02, - 4.766403419605861e-02, - -5.164643594289915e-02, - 5.435713103213160e-02, - -5.572937315437796e-02 + 5.572937315437795e-02f, + 5.435713103213160e-02f, + 5.164643594289910e-02f, + 4.766403419605858e-02f, + 4.250798573945089e-02f, + 3.630524959802148e-02f, + 2.920855772127337e-02f, + 2.139265421578210e-02f, + 1.304999256534943e-02f, + 4.385996787515619e-03f, + 5.435713103213160e-02f, + 4.250798573945089e-02f, + 2.139265421578210e-02f, + -4.385996787515612e-03f, + -2.920855772127336e-02f, + -4.766403419605858e-02f, + -5.572937315437795e-02f, + -5.164643594289911e-02f, + -3.630524959802151e-02f, + -1.304999256534941e-02f, + 5.164643594289910e-02f, + 2.139265421578210e-02f, + -2.139265421578209e-02f, + -5.164643594289910e-02f, + -5.164643594289911e-02f, + -2.139265421578213e-02f, + 2.139265421578211e-02f, + 5.164643594289909e-02f, + 5.164643594289910e-02f, + 2.139265421578213e-02f, + 4.766403419605858e-02f, + -4.385996787515612e-03f, + -5.164643594289910e-02f, + -4.250798573945090e-02f, + 1.304999256534939e-02f, + 5.435713103213161e-02f, + 3.630524959802152e-02f, + -2.139265421578210e-02f, + -5.572937315437795e-02f, + -2.920855772127336e-02f, + 4.250798573945089e-02f, + -2.920855772127336e-02f, + -5.164643594289911e-02f, + 1.304999256534939e-02f, + 5.572937315437795e-02f, + 4.385996787515657e-03f, + -5.435713103213161e-02f, + -2.139265421578214e-02f, + 4.766403419605858e-02f, + 3.630524959802153e-02f, + 3.630524959802148e-02f, + -4.766403419605858e-02f, + -2.139265421578213e-02f, + 5.435713103213161e-02f, + 4.385996787515657e-03f, + -5.572937315437795e-02f, + 1.304999256534937e-02f, + 5.164643594289910e-02f, + -2.920855772127332e-02f, + -4.250798573945090e-02f, + 2.920855772127337e-02f, + -5.572937315437795e-02f, + 2.139265421578211e-02f, + 3.630524959802152e-02f, + -5.435713103213161e-02f, + 1.304999256534937e-02f, + 4.250798573945089e-02f, + -5.164643594289908e-02f, + 4.385996787515504e-03f, + 4.766403419605861e-02f, + 2.139265421578210e-02f, + -5.164643594289911e-02f, + 5.164643594289909e-02f, + -2.139265421578210e-02f, + -2.139265421578214e-02f, + 5.164643594289910e-02f, + -5.164643594289908e-02f, + 2.139265421578208e-02f, + 2.139265421578216e-02f, + -5.164643594289915e-02f, + 1.304999256534943e-02f, + -3.630524959802151e-02f, + 5.164643594289910e-02f, + -5.572937315437795e-02f, + 4.766403419605858e-02f, + -2.920855772127332e-02f, + 4.385996787515504e-03f, + 2.139265421578216e-02f, + -4.250798573945092e-02f, + 5.435713103213160e-02f, + 4.385996787515619e-03f, + -1.304999256534941e-02f, + 2.139265421578213e-02f, + -2.920855772127336e-02f, + 3.630524959802153e-02f, + -4.250798573945090e-02f, + 4.766403419605861e-02f, + -5.164643594289915e-02f, + 5.435713103213160e-02f, + -5.572937315437796e-02f }; static const float dct_core_a[] = { - 7.881323533747238e-02, - 7.687259191733195e-02, - 7.303909015868119e-02, - 6.740712359748102e-02, - 6.011536994189358e-02, - 5.134337636686234e-02, - 4.130713846678219e-02, - 3.025378172711701e-02, - 1.845547647478522e-02, - 6.202736141429415e-03, - 7.687259191733195e-02, - 6.011536994189358e-02, - 3.025378172711701e-02, - -6.202736141429404e-03, - -4.130713846678218e-02, - -6.740712359748102e-02, - -7.881323533747238e-02, - -7.303909015868121e-02, - -5.134337636686238e-02, - -1.845547647478519e-02, - 7.303909015868119e-02, - 3.025378172711701e-02, - -3.025378172711701e-02, - -7.303909015868119e-02, - -7.303909015868121e-02, - -3.025378172711705e-02, - 3.025378172711703e-02, - 7.303909015868118e-02, - 7.303909015868119e-02, - 3.025378172711706e-02, - 6.740712359748102e-02, - -6.202736141429404e-03, - -7.303909015868119e-02, - -6.011536994189359e-02, - 1.845547647478516e-02, - 7.687259191733196e-02, - 5.134337636686239e-02, - -3.025378172711702e-02, - -7.881323533747238e-02, - -4.130713846678218e-02, - 6.011536994189358e-02, - -4.130713846678218e-02, - -7.303909015868121e-02, - 1.845547647478516e-02, - 7.881323533747238e-02, - 6.202736141429469e-03, - -7.687259191733196e-02, - -3.025378172711707e-02, - 6.740712359748102e-02, - 5.134337636686240e-02, - 5.134337636686234e-02, - -6.740712359748102e-02, - -3.025378172711705e-02, - 7.687259191733196e-02, - 6.202736141429469e-03, - -7.881323533747238e-02, - 1.845547647478515e-02, - 7.303909015868119e-02, - -4.130713846678212e-02, - -6.011536994189359e-02, - 4.130713846678219e-02, - -7.881323533747238e-02, - 3.025378172711703e-02, - 5.134337636686239e-02, - -7.687259191733196e-02, - 1.845547647478515e-02, - 6.011536994189358e-02, - -7.303909015868118e-02, - 6.202736141429252e-03, - 6.740712359748108e-02, - 3.025378172711701e-02, - -7.303909015868121e-02, - 7.303909015868118e-02, - -3.025378172711702e-02, - -3.025378172711707e-02, - 7.303909015868119e-02, - -7.303909015868118e-02, - 3.025378172711699e-02, - 3.025378172711710e-02, - -7.303909015868128e-02, - 1.845547647478522e-02, - -5.134337636686238e-02, - 7.303909015868119e-02, - -7.881323533747238e-02, - 6.740712359748102e-02, - -4.130713846678212e-02, - 6.202736141429252e-03, - 3.025378172711710e-02, - -6.011536994189360e-02, - 7.687259191733195e-02, - 6.202736141429415e-03, - -1.845547647478519e-02, - 3.025378172711706e-02, - -4.130713846678218e-02, - 5.134337636686240e-02, - -6.011536994189359e-02, - 6.740712359748108e-02, - -7.303909015868128e-02, - 7.687259191733195e-02, - -7.881323533747239e-02 + 7.881323533747238e-02f, + 7.687259191733195e-02f, + 7.303909015868119e-02f, + 6.740712359748102e-02f, + 6.011536994189358e-02f, + 5.134337636686234e-02f, + 4.130713846678219e-02f, + 3.025378172711701e-02f, + 1.845547647478522e-02f, + 6.202736141429415e-03f, + 7.687259191733195e-02f, + 6.011536994189358e-02f, + 3.025378172711701e-02f, + -6.202736141429404e-03f, + -4.130713846678218e-02f, + -6.740712359748102e-02f, + -7.881323533747238e-02f, + -7.303909015868121e-02f, + -5.134337636686238e-02f, + -1.845547647478519e-02f, + 7.303909015868119e-02f, + 3.025378172711701e-02f, + -3.025378172711701e-02f, + -7.303909015868119e-02f, + -7.303909015868121e-02f, + -3.025378172711705e-02f, + 3.025378172711703e-02f, + 7.303909015868118e-02f, + 7.303909015868119e-02f, + 3.025378172711706e-02f, + 6.740712359748102e-02f, + -6.202736141429404e-03f, + -7.303909015868119e-02f, + -6.011536994189359e-02f, + 1.845547647478516e-02f, + 7.687259191733196e-02f, + 5.134337636686239e-02f, + -3.025378172711702e-02f, + -7.881323533747238e-02f, + -4.130713846678218e-02f, + 6.011536994189358e-02f, + -4.130713846678218e-02f, + -7.303909015868121e-02f, + 1.845547647478516e-02f, + 7.881323533747238e-02f, + 6.202736141429469e-03f, + -7.687259191733196e-02f, + -3.025378172711707e-02f, + 6.740712359748102e-02f, + 5.134337636686240e-02f, + 5.134337636686234e-02f, + -6.740712359748102e-02f, + -3.025378172711705e-02f, + 7.687259191733196e-02f, + 6.202736141429469e-03f, + -7.881323533747238e-02f, + 1.845547647478515e-02f, + 7.303909015868119e-02f, + -4.130713846678212e-02f, + -6.011536994189359e-02f, + 4.130713846678219e-02f, + -7.881323533747238e-02f, + 3.025378172711703e-02f, + 5.134337636686239e-02f, + -7.687259191733196e-02f, + 1.845547647478515e-02f, + 6.011536994189358e-02f, + -7.303909015868118e-02f, + 6.202736141429252e-03f, + 6.740712359748108e-02f, + 3.025378172711701e-02f, + -7.303909015868121e-02f, + 7.303909015868118e-02f, + -3.025378172711702e-02f, + -3.025378172711707e-02f, + 7.303909015868119e-02f, + -7.303909015868118e-02f, + 3.025378172711699e-02f, + 3.025378172711710e-02f, + -7.303909015868128e-02f, + 1.845547647478522e-02f, + -5.134337636686238e-02f, + 7.303909015868119e-02f, + -7.881323533747238e-02f, + 6.740712359748102e-02f, + -4.130713846678212e-02f, + 6.202736141429252e-03f, + 3.025378172711710e-02f, + -6.011536994189360e-02f, + 7.687259191733195e-02f, + 6.202736141429415e-03f, + -1.845547647478519e-02f, + 3.025378172711706e-02f, + -4.130713846678218e-02f, + 5.134337636686240e-02f, + -6.011536994189359e-02f, + 6.740712359748108e-02f, + -7.303909015868128e-02f, + 7.687259191733195e-02f, + -7.881323533747239e-02f }; static const cos_msin_t cos_msin_5[5] = { - {9.969173337331280e-01, -7.845909572784494e-02}, - {9.723699203976766e-01, -2.334453638559054e-01}, - {9.238795325112867e-01, -3.826834323650898e-01}, - {8.526401643540922e-01, -5.224985647159488e-01}, - {7.604059656000309e-01, -6.494480483301837e-01} + {9.969173337331280e-01f, -7.845909572784494e-02f}, + {9.723699203976766e-01f, -2.334453638559054e-01f}, + {9.238795325112867e-01f, -3.826834323650898e-01f}, + {8.526401643540922e-01f, -5.224985647159488e-01f}, + {7.604059656000309e-01f, -6.494480483301837e-01f} }; static const cos_msin_t cos_msin_10[10] = { - {9.992290362407229e-01, -3.925981575906861e-02}, - {9.930684569549263e-01, -1.175373974578376e-01}, - {9.807852804032304e-01, -1.950903220161282e-01}, - {9.624552364536473e-01, -2.714404498650743e-01}, - {9.381913359224842e-01, -3.461170570774930e-01}, - {9.081431738250813e-01, -4.186597375374281e-01}, - {8.724960070727972e-01, -4.886212414969549e-01}, - {8.314696123025452e-01, -5.555702330196022e-01}, - {7.853169308807449e-01, -6.190939493098340e-01}, - {7.343225094356856e-01, -6.788007455329417e-01} + {9.992290362407229e-01f, -3.925981575906861e-02f}, + {9.930684569549263e-01f, -1.175373974578376e-01f}, + {9.807852804032304e-01f, -1.950903220161282e-01f}, + {9.624552364536473e-01f, -2.714404498650743e-01f}, + {9.381913359224842e-01f, -3.461170570774930e-01f}, + {9.081431738250813e-01f, -4.186597375374281e-01f}, + {8.724960070727972e-01f, -4.886212414969549e-01f}, + {8.314696123025452e-01f, -5.555702330196022e-01f}, + {7.853169308807449e-01f, -6.190939493098340e-01f}, + {7.343225094356856e-01f, -6.788007455329417e-01f} }; static const cos_msin_t cos_msin_20[20] = { - {9.998072404820648e-01, -1.963369246062830e-02}, - {9.982656101847159e-01, -5.887080365118903e-02}, - {9.951847266721969e-01, -9.801714032956060e-02}, - {9.905693404435773e-01, -1.370123416819680e-01}, - {9.844265680898916e-01, -1.757962799343545e-01}, - {9.767658813208724e-01, -2.143091530650507e-01}, - {9.675990923602598e-01, -2.524915770151580e-01}, - {9.569403357322088e-01, -2.902846772544623e-01}, - {9.448060464668780e-01, -3.276301795616935e-01}, - {9.312149347588036e-01, -3.644704998791496e-01}, - {9.161879571171360e-01, -4.007488331031410e-01}, - {8.997482840522215e-01, -4.364092406733421e-01}, - {8.819212643483550e-01, -4.713967368259976e-01}, - {8.627343859777918e-01, -5.056573733779846e-01}, - {8.422172337162865e-01, -5.391383229110002e-01}, - {8.204014435255136e-01, -5.717879602276122e-01}, - {7.973206537727071e-01, -6.035559419535714e-01}, - {7.730104533627370e-01, -6.343932841636455e-01}, - {7.475083268625968e-01, -6.642524379112817e-01}, - {7.208535967029188e-01, -6.930873625456359e-01} + {9.998072404820648e-01f, -1.963369246062830e-02f}, + {9.982656101847159e-01f, -5.887080365118903e-02f}, + {9.951847266721969e-01f, -9.801714032956060e-02f}, + {9.905693404435773e-01f, -1.370123416819680e-01f}, + {9.844265680898916e-01f, -1.757962799343545e-01f}, + {9.767658813208724e-01f, -2.143091530650507e-01f}, + {9.675990923602598e-01f, -2.524915770151580e-01f}, + {9.569403357322088e-01f, -2.902846772544623e-01f}, + {9.448060464668780e-01f, -3.276301795616935e-01f}, + {9.312149347588036e-01f, -3.644704998791496e-01f}, + {9.161879571171360e-01f, -4.007488331031410e-01f}, + {8.997482840522215e-01f, -4.364092406733421e-01f}, + {8.819212643483550e-01f, -4.713967368259976e-01f}, + {8.627343859777918e-01f, -5.056573733779846e-01f}, + {8.422172337162865e-01f, -5.391383229110002e-01f}, + {8.204014435255136e-01f, -5.717879602276122e-01f}, + {7.973206537727071e-01f, -6.035559419535714e-01f}, + {7.730104533627370e-01f, -6.343932841636455e-01f}, + {7.475083268625968e-01f, -6.642524379112817e-01f}, + {7.208535967029188e-01f, -6.930873625456359e-01f} }; static const cos_msin_t cos_msin_40[40] = { - {9.999518089593280e-01, -9.817319337149617e-03}, - {9.995663085020212e-01, -2.944817324796316e-02}, - {9.987954562051724e-01, -4.906767432741801e-02}, - {9.976395492470157e-01, -6.866825888437376e-02}, - {9.960990332516871e-01, -8.824237052036951e-02}, - {9.941745021174282e-01, -1.077824630427593e-01}, - {9.918666977876260e-01, -1.272810033739132e-01}, - {9.891765099647810e-01, -1.467304744553617e-01}, - {9.861049757675088e-01, -1.661233781457655e-01}, - {9.826532793307118e-01, -1.854522381115909e-01}, - {9.788227513490724e-01, -2.047096027093796e-01}, - {9.746148685640450e-01, -2.238880478584984e-01}, - {9.700312531945440e-01, -2.429801799032639e-01}, - {9.650736723115474e-01, -2.619786384633375e-01}, - {9.597440371568574e-01, -2.808760992712921e-01}, - {9.540444024062804e-01, -2.996652769962566e-01}, - {9.479769653775104e-01, -3.183389280525497e-01}, - {9.415440651830208e-01, -3.368898533922201e-01}, - {9.347481818282924e-01, -3.553109012804161e-01}, - {9.275919352557240e-01, -3.735949700525164e-01}, - {9.200780843345949e-01, -3.917350108519559e-01}, - {9.122095257974677e-01, -4.097240303476953e-01}, - {9.039892931234433e-01, -4.275550934302821e-01}, - {8.954205553686970e-01, -4.452213258854682e-01}, - {8.865066159447464e-01, -4.627159170443501e-01}, - {8.772509113449243e-01, -4.800321224090111e-01}, - {8.676570098195440e-01, -4.971632662526544e-01}, - {8.577286100002721e-01, -5.141027441932217e-01}, - {8.474695394742344e-01, -5.308440257395095e-01}, - {8.368837533084094e-01, -5.473806568087964e-01}, - {8.259753325248732e-01, -5.637062622150167e-01}, - {8.147484825274894e-01, -5.798145481265136e-01}, - {8.032075314806449e-01, -5.956993044924334e-01}, - {7.913569286406602e-01, -6.113544074368165e-01}, - {7.792012426405167e-01, -6.267738216194696e-01}, - {7.667451597285615e-01, -6.419516025627030e-01}, - {7.539934819618694e-01, -6.568818989430414e-01}, - {7.409511253549591e-01, -6.715589548470183e-01}, - {7.276231179845748e-01, -6.859771119901928e-01}, - {7.140145980512683e-01, -7.001308118985236e-01} + {9.999518089593280e-01f, -9.817319337149617e-03f}, + {9.995663085020212e-01f, -2.944817324796316e-02f}, + {9.987954562051724e-01f, -4.906767432741801e-02f}, + {9.976395492470157e-01f, -6.866825888437376e-02f}, + {9.960990332516871e-01f, -8.824237052036951e-02f}, + {9.941745021174282e-01f, -1.077824630427593e-01f}, + {9.918666977876260e-01f, -1.272810033739132e-01f}, + {9.891765099647810e-01f, -1.467304744553617e-01f}, + {9.861049757675088e-01f, -1.661233781457655e-01f}, + {9.826532793307118e-01f, -1.854522381115909e-01f}, + {9.788227513490724e-01f, -2.047096027093796e-01f}, + {9.746148685640450e-01f, -2.238880478584984e-01f}, + {9.700312531945440e-01f, -2.429801799032639e-01f}, + {9.650736723115474e-01f, -2.619786384633375e-01f}, + {9.597440371568574e-01f, -2.808760992712921e-01f}, + {9.540444024062804e-01f, -2.996652769962566e-01f}, + {9.479769653775104e-01f, -3.183389280525497e-01f}, + {9.415440651830208e-01f, -3.368898533922201e-01f}, + {9.347481818282924e-01f, -3.553109012804161e-01f}, + {9.275919352557240e-01f, -3.735949700525164e-01f}, + {9.200780843345949e-01f, -3.917350108519559e-01f}, + {9.122095257974677e-01f, -4.097240303476953e-01f}, + {9.039892931234433e-01f, -4.275550934302821e-01f}, + {8.954205553686970e-01f, -4.452213258854682e-01f}, + {8.865066159447464e-01f, -4.627159170443501e-01f}, + {8.772509113449243e-01f, -4.800321224090111e-01f}, + {8.676570098195440e-01f, -4.971632662526544e-01f}, + {8.577286100002721e-01f, -5.141027441932217e-01f}, + {8.474695394742344e-01f, -5.308440257395095e-01f}, + {8.368837533084094e-01f, -5.473806568087964e-01f}, + {8.259753325248732e-01f, -5.637062622150167e-01f}, + {8.147484825274894e-01f, -5.798145481265136e-01f}, + {8.032075314806449e-01f, -5.956993044924334e-01f}, + {7.913569286406602e-01f, -6.113544074368165e-01f}, + {7.792012426405167e-01f, -6.267738216194696e-01f}, + {7.667451597285615e-01f, -6.419516025627030e-01f}, + {7.539934819618694e-01f, -6.568818989430414e-01f}, + {7.409511253549591e-01f, -6.715589548470183e-01f}, + {7.276231179845748e-01f, -6.859771119901928e-01f}, + {7.140145980512683e-01f, -7.001308118985236e-01f} }; static const cos_msin_t cos_msin_80[80] = { - {9.999879521672569e-01, -4.908718807997990e-03}, - {9.998915712471080e-01, -1.472568331145852e-02}, - {9.996988186962042e-01, -2.454122852291229e-02}, - {9.994097130924373e-01, -3.435440839968228e-02}, - {9.990242823004072e-01, -4.416427712706736e-02}, - {9.985425634687357e-01, -5.396988920950188e-02}, - {9.979646030264866e-01, -6.377029956168449e-02}, - {9.972904566786902e-01, -7.356456359966743e-02}, - {9.965201894009746e-01, -8.335173733189745e-02}, - {9.956538754333033e-01, -9.313087745019979e-02}, - {9.946915982728195e-01, -1.029010414206961e-01}, - {9.936334506657989e-01, -1.126612875746478e-01}, - {9.924795345987100e-01, -1.224106751992162e-01}, - {9.912299612883853e-01, -1.321482646281301e-01}, - {9.898848511713010e-01, -1.418731173322532e-01}, - {9.884443338919700e-01, -1.515842960100411e-01}, - {9.869085482904458e-01, -1.612808646778805e-01}, - {9.852776423889412e-01, -1.709618887603012e-01}, - {9.835517733775615e-01, -1.806264351800528e-01}, - {9.817311075991542e-01, -1.902735724480359e-01}, - {9.798158205332763e-01, -1.999023707530817e-01}, - {9.778060967792817e-01, -2.095119020515688e-01}, - {9.757021300385286e-01, -2.191012401568698e-01}, - {9.735041230957107e-01, -2.286694608286194e-01}, - {9.712122877993118e-01, -2.382156418617946e-01}, - {9.688268450411880e-01, -2.477388631755984e-01}, - {9.663480247352773e-01, -2.572382069021397e-01}, - {9.637760657954398e-01, -2.667127574748984e-01}, - {9.611112161124317e-01, -2.761616017169707e-01}, - {9.583537325300114e-01, -2.855838289290823e-01}, - {9.555038808201862e-01, -2.949785309773635e-01}, - {9.525619356575953e-01, -3.043448023808773e-01}, - {9.495281805930367e-01, -3.136817403988915e-01}, - {9.464029080261377e-01, -3.229884451178863e-01}, - {9.431864191771733e-01, -3.322640195382908e-01}, - {9.398790240580331e-01, -3.415075696609363e-01}, - {9.364810414423427e-01, -3.507182045732232e-01}, - {9.329927988347390e-01, -3.598950365349881e-01}, - {9.294146324393044e-01, -3.690371810640665e-01}, - {9.257468871271640e-01, -3.781437570215405e-01}, - {9.219899164032445e-01, -3.872138866966656e-01}, - {9.181440823722039e-01, -3.962466958914656e-01}, - {9.142097557035307e-01, -4.052413140049899e-01}, - {9.101873155958178e-01, -4.141968741172237e-01}, - {9.060771497402148e-01, -4.231125130726441e-01}, - {9.018796542830616e-01, -4.319873715634118e-01}, - {8.975952337877069e-01, -4.408205942121939e-01}, - {8.932243011955153e-01, -4.496113296546065e-01}, - {8.887672777860675e-01, -4.583587306212713e-01}, - {8.842245931365562e-01, -4.670619540194765e-01}, - {8.795966850803829e-01, -4.757201610144369e-01}, - {8.748839996649583e-01, -4.843325171101412e-01}, - {8.700869911087115e-01, -4.928981922297840e-01}, - {8.652061217573113e-01, -5.014163607957690e-01}, - {8.602418620391045e-01, -5.098862018092806e-01}, - {8.551946904197751e-01, -5.183068989294132e-01}, - {8.500650933562288e-01, -5.266776405518521e-01}, - {8.448535652497071e-01, -5.349976198870972e-01}, - {8.395606083981356e-01, -5.432660350382236e-01}, - {8.341867329477124e-01, -5.514820890781694e-01}, - {8.287324568437381e-01, -5.596449901265460e-01}, - {8.231983057806959e-01, -5.677539514259605e-01}, - {8.175848131515837e-01, -5.758081914178453e-01}, - {8.118925199965048e-01, -5.838069338177863e-01}, - {8.061219749505210e-01, -5.917494076903429e-01}, - {8.002737341907743e-01, -5.996348475233523e-01}, - {7.943483613828813e-01, -6.074624933017110e-01}, - {7.883464276266063e-01, -6.152315905806268e-01}, - {7.822685114008164e-01, -6.229413905583340e-01}, - {7.761151985077279e-01, -6.305911501482637e-01}, - {7.698870820164444e-01, -6.381801320506653e-01}, - {7.635847622057965e-01, -6.457076048236672e-01}, - {7.572088465064846e-01, -6.531728429537768e-01}, - {7.507599494425343e-01, -6.605751269258050e-01}, - {7.442386925720670e-01, -6.679137432922161e-01}, - {7.376457044273930e-01, -6.751879847418903e-01}, - {7.309816204544317e-01, -6.823971501682968e-01}, - {7.242470829514670e-01, -6.895405447370668e-01}, - {7.174427410072399e-01, -6.966174799529642e-01}, - {7.105692504383896e-01, -7.036272737262429e-01} + {9.999879521672569e-01f, -4.908718807997990e-03f}, + {9.998915712471080e-01f, -1.472568331145852e-02f}, + {9.996988186962042e-01f, -2.454122852291229e-02f}, + {9.994097130924373e-01f, -3.435440839968228e-02f}, + {9.990242823004072e-01f, -4.416427712706736e-02f}, + {9.985425634687357e-01f, -5.396988920950188e-02f}, + {9.979646030264866e-01f, -6.377029956168449e-02f}, + {9.972904566786902e-01f, -7.356456359966743e-02f}, + {9.965201894009746e-01f, -8.335173733189745e-02f}, + {9.956538754333033e-01f, -9.313087745019979e-02f}, + {9.946915982728195e-01f, -1.029010414206961e-01f}, + {9.936334506657989e-01f, -1.126612875746478e-01f}, + {9.924795345987100e-01f, -1.224106751992162e-01f}, + {9.912299612883853e-01f, -1.321482646281301e-01f}, + {9.898848511713010e-01f, -1.418731173322532e-01f}, + {9.884443338919700e-01f, -1.515842960100411e-01f}, + {9.869085482904458e-01f, -1.612808646778805e-01f}, + {9.852776423889412e-01f, -1.709618887603012e-01f}, + {9.835517733775615e-01f, -1.806264351800528e-01f}, + {9.817311075991542e-01f, -1.902735724480359e-01f}, + {9.798158205332763e-01f, -1.999023707530817e-01f}, + {9.778060967792817e-01f, -2.095119020515688e-01f}, + {9.757021300385286e-01f, -2.191012401568698e-01f}, + {9.735041230957107e-01f, -2.286694608286194e-01f}, + {9.712122877993118e-01f, -2.382156418617946e-01f}, + {9.688268450411880e-01f, -2.477388631755984e-01f}, + {9.663480247352773e-01f, -2.572382069021397e-01f}, + {9.637760657954398e-01f, -2.667127574748984e-01f}, + {9.611112161124317e-01f, -2.761616017169707e-01f}, + {9.583537325300114e-01f, -2.855838289290823e-01f}, + {9.555038808201862e-01f, -2.949785309773635e-01f}, + {9.525619356575953e-01f, -3.043448023808773e-01f}, + {9.495281805930367e-01f, -3.136817403988915e-01f}, + {9.464029080261377e-01f, -3.229884451178863e-01f}, + {9.431864191771733e-01f, -3.322640195382908e-01f}, + {9.398790240580331e-01f, -3.415075696609363e-01f}, + {9.364810414423427e-01f, -3.507182045732232e-01f}, + {9.329927988347390e-01f, -3.598950365349881e-01f}, + {9.294146324393044e-01f, -3.690371810640665e-01f}, + {9.257468871271640e-01f, -3.781437570215405e-01f}, + {9.219899164032445e-01f, -3.872138866966656e-01f}, + {9.181440823722039e-01f, -3.962466958914656e-01f}, + {9.142097557035307e-01f, -4.052413140049899e-01f}, + {9.101873155958178e-01f, -4.141968741172237e-01f}, + {9.060771497402148e-01f, -4.231125130726441e-01f}, + {9.018796542830616e-01f, -4.319873715634118e-01f}, + {8.975952337877069e-01f, -4.408205942121939e-01f}, + {8.932243011955153e-01f, -4.496113296546065e-01f}, + {8.887672777860675e-01f, -4.583587306212713e-01f}, + {8.842245931365562e-01f, -4.670619540194765e-01f}, + {8.795966850803829e-01f, -4.757201610144369e-01f}, + {8.748839996649583e-01f, -4.843325171101412e-01f}, + {8.700869911087115e-01f, -4.928981922297840e-01f}, + {8.652061217573113e-01f, -5.014163607957690e-01f}, + {8.602418620391045e-01f, -5.098862018092806e-01f}, + {8.551946904197751e-01f, -5.183068989294132e-01f}, + {8.500650933562288e-01f, -5.266776405518521e-01f}, + {8.448535652497071e-01f, -5.349976198870972e-01f}, + {8.395606083981356e-01f, -5.432660350382236e-01f}, + {8.341867329477124e-01f, -5.514820890781694e-01f}, + {8.287324568437381e-01f, -5.596449901265460e-01f}, + {8.231983057806959e-01f, -5.677539514259605e-01f}, + {8.175848131515837e-01f, -5.758081914178453e-01f}, + {8.118925199965048e-01f, -5.838069338177863e-01f}, + {8.061219749505210e-01f, -5.917494076903429e-01f}, + {8.002737341907743e-01f, -5.996348475233523e-01f}, + {7.943483613828813e-01f, -6.074624933017110e-01f}, + {7.883464276266063e-01f, -6.152315905806268e-01f}, + {7.822685114008164e-01f, -6.229413905583340e-01f}, + {7.761151985077279e-01f, -6.305911501482637e-01f}, + {7.698870820164444e-01f, -6.381801320506653e-01f}, + {7.635847622057965e-01f, -6.457076048236672e-01f}, + {7.572088465064846e-01f, -6.531728429537768e-01f}, + {7.507599494425343e-01f, -6.605751269258050e-01f}, + {7.442386925720670e-01f, -6.679137432922161e-01f}, + {7.376457044273930e-01f, -6.751879847418903e-01f}, + {7.309816204544317e-01f, -6.823971501682968e-01f}, + {7.242470829514670e-01f, -6.895405447370668e-01f}, + {7.174427410072399e-01f, -6.966174799529642e-01f}, + {7.105692504383896e-01f, -7.036272737262429e-01f} }; static const cos_msin_t cos_msin_160[160] = { - {9.999969880372782e-01, -2.454366796460292e-03}, - {9.999728924443673e-01, -7.363041249779567e-03}, - {9.999247018391445e-01, -1.227153828571993e-02}, - {9.998524173827948e-01, -1.717973963077875e-02}, - {9.997560408170603e-01, -2.208752701857829e-02}, - {9.996355744641984e-01, -2.699478219271537e-02}, - {9.994910212269259e-01, -3.190138690961086e-02}, - {9.993223845883495e-01, -3.680722294135883e-02}, - {9.991296686118811e-01, -4.171217207857533e-02}, - {9.989128779411404e-01, -4.661611613324671e-02}, - {9.986720177998429e-01, -5.151893694157748e-02}, - {9.984070939916740e-01, -5.642051636683749e-02}, - {9.981181129001492e-01, -6.132073630220858e-02}, - {9.978050814884601e-01, -6.621947867363034e-02}, - {9.974680072993071e-01, -7.111662544264533e-02}, - {9.971068984547168e-01, -7.601205860924312e-02}, - {9.967217636558474e-01, -8.090566021470375e-02}, - {9.963126121827780e-01, -8.579731234443989e-02}, - {9.958794538942858e-01, -9.068689713083816e-02}, - {9.954222992276077e-01, -9.557429675609919e-02}, - {9.949411591981900e-01, -1.004593934550765e-01}, - {9.944360453994218e-01, -1.053420695181141e-01}, - {9.939069700023561e-01, -1.102222072938831e-01}, - {9.933539457554167e-01, -1.150996891922159e-01}, - {9.927769859840909e-01, -1.199743976869403e-01}, - {9.921761045906085e-01, -1.248462153187112e-01}, - {9.915513160536062e-01, -1.297150246978405e-01}, - {9.909026354277800e-01, -1.345807085071262e-01}, - {9.902300783435211e-01, -1.394431495046788e-01}, - {9.895336610065398e-01, -1.443022305267465e-01}, - {9.888134001974757e-01, -1.491578344905386e-01}, - {9.880693132714919e-01, -1.540098443970461e-01}, - {9.873014181578584e-01, -1.588581433338614e-01}, - {9.865097333595187e-01, -1.637026144779952e-01}, - {9.856942779526452e-01, -1.685431410986913e-01}, - {9.848550715861784e-01, -1.733796065602395e-01}, - {9.839921344813541e-01, -1.782118943247859e-01}, - {9.831054874312163e-01, -1.830398879551410e-01}, - {9.821951518001156e-01, -1.878634711175852e-01}, - {9.812611495231950e-01, -1.926825275846723e-01}, - {9.803035031058607e-01, -1.974969412380297e-01}, - {9.793222356232406e-01, -2.023065960711564e-01}, - {9.783173707196277e-01, -2.071113761922186e-01}, - {9.772889326079104e-01, -2.119111658268416e-01}, - {9.762369460689896e-01, -2.167058493209000e-01}, - {9.751614364511810e-01, -2.214953111433043e-01}, - {9.740624296696047e-01, -2.262794358887845e-01}, - {9.729399522055602e-01, -2.310581082806711e-01}, - {9.717940311058891e-01, -2.358312131736727e-01}, - {9.706246939823230e-01, -2.405986355566504e-01}, - {9.694319690108180e-01, -2.453602605553894e-01}, - {9.682158849308760e-01, -2.501159734353663e-01}, - {9.669764710448521e-01, -2.548656596045146e-01}, - {9.657137572172489e-01, -2.596092046159851e-01}, - {9.644277738739964e-01, -2.643464941709040e-01}, - {9.631185520017188e-01, -2.690774141211269e-01}, - {9.617861231469886e-01, -2.738018504719892e-01}, - {9.604305194155658e-01, -2.785196893850531e-01}, - {9.590517734716243e-01, -2.832308171808502e-01}, - {9.576499185369652e-01, -2.879351203416211e-01}, - {9.562249883902162e-01, -2.926324855140505e-01}, - {9.547770173660172e-01, -2.973227995119985e-01}, - {9.533060403541939e-01, -3.020059493192281e-01}, - {9.518120927989161e-01, -3.066818220921279e-01}, - {9.502952106978444e-01, -3.113503051624320e-01}, - {9.487554306012626e-01, -3.160112860399338e-01}, - {9.471927896111967e-01, -3.206646524151973e-01}, - {9.456073253805213e-01, -3.253102921622629e-01}, - {9.439990761120522e-01, -3.299480933413494e-01}, - {9.423680805576258e-01, -3.345779442015508e-01}, - {9.407143780171653e-01, -3.391997331835298e-01}, - {9.390380083377340e-01, -3.438133489222048e-01}, - {9.373390119125750e-01, -3.484186802494346e-01}, - {9.356174296801376e-01, -3.530156161966958e-01}, - {9.338733031230915e-01, -3.576040459977578e-01}, - {9.321066742673269e-01, -3.621838590913509e-01}, - {9.303175856809415e-01, -3.667549451238308e-01}, - {9.285060804732156e-01, -3.713171939518375e-01}, - {9.266722022935726e-01, -3.758704956449495e-01}, - {9.248159953305278e-01, -3.804147404883323e-01}, - {9.229375043106232e-01, -3.849498189853822e-01}, - {9.210367744973499e-01, -3.894756218603648e-01}, - {9.191138516900578e-01, -3.939920400610481e-01}, - {9.171687822228516e-01, -3.984989647613298e-01}, - {9.152016129634744e-01, -4.029962873638600e-01}, - {9.132123913121788e-01, -4.074838995026576e-01}, - {9.112011652005843e-01, -4.119616930457218e-01}, - {9.091679830905224e-01, -4.164295600976372e-01}, - {9.071128939728691e-01, -4.208873930021739e-01}, - {9.050359473663644e-01, -4.253350843448814e-01}, - {9.029371933164189e-01, -4.297725269556770e-01}, - {9.008166823939081e-01, -4.341996139114278e-01}, - {8.986744656939538e-01, -4.386162385385277e-01}, - {8.965105948346932e-01, -4.430222944154668e-01}, - {8.943251219560346e-01, -4.474176753753967e-01}, - {8.921180997184014e-01, -4.518022755086881e-01}, - {8.898895813014630e-01, -4.561759891654830e-01}, - {8.876396204028539e-01, -4.605387109582400e-01}, - {8.853682712368793e-01, -4.648903357642744e-01}, - {8.830755885332088e-01, -4.692307587282903e-01}, - {8.807616275355579e-01, -4.735598752649081e-01}, - {8.784264440003567e-01, -4.778775810611837e-01}, - {8.760700941954066e-01, -4.821837720791227e-01}, - {8.736926348985243e-01, -4.864783445581868e-01}, - {8.712941233961736e-01, -4.907611950177941e-01}, - {8.688746174820854e-01, -4.950322202598127e-01}, - {8.664341754558650e-01, -4.992913173710469e-01}, - {8.639728561215868e-01, -5.035383837257176e-01}, - {8.614907187863783e-01, -5.077733169879345e-01}, - {8.589878232589904e-01, -5.119960151141624e-01}, - {8.564642298483565e-01, -5.162063763556797e-01}, - {8.539199993621391e-01, -5.204042992610306e-01}, - {8.513551931052652e-01, -5.245896826784689e-01}, - {8.487698728784481e-01, -5.287624257583958e-01}, - {8.461641009766995e-01, -5.329224279557898e-01}, - {8.435379401878270e-01, -5.370695890326298e-01}, - {8.408914537909229e-01, -5.412038090603096e-01}, - {8.382247055548381e-01, -5.453249884220465e-01}, - {8.355377597366458e-01, -5.494330278152808e-01}, - {8.328306810800937e-01, -5.535278282540700e-01}, - {8.301035348140438e-01, -5.576092910714722e-01}, - {8.273563866508998e-01, -5.616773179219247e-01}, - {8.245893027850253e-01, -5.657318107836131e-01}, - {8.218023498911473e-01, -5.697726719608341e-01}, - {8.189955951227504e-01, -5.737998040863485e-01}, - {8.161691061104588e-01, -5.778131101237274e-01}, - {8.133229509604062e-01, -5.818124933696910e-01}, - {8.104571982525948e-01, -5.857978574564389e-01}, - {8.075719170392435e-01, -5.897691063539708e-01}, - {8.046671768431229e-01, -5.937261443724019e-01}, - {8.017430476558816e-01, -5.976688761642677e-01}, - {7.987995999363579e-01, -6.015972067268220e-01}, - {7.958369046088836e-01, -6.055110414043255e-01}, - {7.928550330615741e-01, -6.094102858903271e-01}, - {7.898540571446090e-01, -6.132948462299359e-01}, - {7.868340491684999e-01, -6.171646288220856e-01}, - {7.837950819023488e-01, -6.210195404217892e-01}, - {7.807372285720945e-01, -6.248594881423863e-01}, - {7.776605628587479e-01, -6.286843794577813e-01}, - {7.745651588966166e-01, -6.324941222046724e-01}, - {7.714510912715192e-01, -6.362886245847729e-01}, - {7.683184350189877e-01, -6.400677951670226e-01}, - {7.651672656224590e-01, -6.438315428897914e-01}, - {7.619976590114568e-01, -6.475797770630733e-01}, - {7.588096915597616e-01, -6.513124073706714e-01}, - {7.556034400835709e-01, -6.550293438723744e-01}, - {7.523789818396478e-01, -6.587304970061237e-01}, - {7.491363945234594e-01, -6.624157775901718e-01}, - {7.458757562673048e-01, -6.660850968252301e-01}, - {7.425971456384329e-01, -6.697383662966099e-01}, - {7.393006416371488e-01, -6.733754979763520e-01}, - {7.359863236949099e-01, -6.769964042253483e-01}, - {7.326542716724128e-01, -6.806009977954530e-01}, - {7.293045658576685e-01, -6.841891918315852e-01}, - {7.259372869640676e-01, -6.877608998738217e-01}, - {7.225525161284360e-01, -6.913160358594803e-01}, - {7.191503349090794e-01, -6.948545141251936e-01}, - {7.157308252838186e-01, -6.983762494089729e-01}, - {7.122940696480137e-01, -7.018811568522627e-01}, - {7.088401508125785e-01, -7.053691520019861e-01} + {9.999969880372782e-01f, -2.454366796460292e-03f}, + {9.999728924443673e-01f, -7.363041249779567e-03f}, + {9.999247018391445e-01f, -1.227153828571993e-02f}, + {9.998524173827948e-01f, -1.717973963077875e-02f}, + {9.997560408170603e-01f, -2.208752701857829e-02f}, + {9.996355744641984e-01f, -2.699478219271537e-02f}, + {9.994910212269259e-01f, -3.190138690961086e-02f}, + {9.993223845883495e-01f, -3.680722294135883e-02f}, + {9.991296686118811e-01f, -4.171217207857533e-02f}, + {9.989128779411404e-01f, -4.661611613324671e-02f}, + {9.986720177998429e-01f, -5.151893694157748e-02f}, + {9.984070939916740e-01f, -5.642051636683749e-02f}, + {9.981181129001492e-01f, -6.132073630220858e-02f}, + {9.978050814884601e-01f, -6.621947867363034e-02f}, + {9.974680072993071e-01f, -7.111662544264533e-02f}, + {9.971068984547168e-01f, -7.601205860924312e-02f}, + {9.967217636558474e-01f, -8.090566021470375e-02f}, + {9.963126121827780e-01f, -8.579731234443989e-02f}, + {9.958794538942858e-01f, -9.068689713083816e-02f}, + {9.954222992276077e-01f, -9.557429675609919e-02f}, + {9.949411591981900e-01f, -1.004593934550765e-01f}, + {9.944360453994218e-01f, -1.053420695181141e-01f}, + {9.939069700023561e-01f, -1.102222072938831e-01f}, + {9.933539457554167e-01f, -1.150996891922159e-01f}, + {9.927769859840909e-01f, -1.199743976869403e-01f}, + {9.921761045906085e-01f, -1.248462153187112e-01f}, + {9.915513160536062e-01f, -1.297150246978405e-01f}, + {9.909026354277800e-01f, -1.345807085071262e-01f}, + {9.902300783435211e-01f, -1.394431495046788e-01f}, + {9.895336610065398e-01f, -1.443022305267465e-01f}, + {9.888134001974757e-01f, -1.491578344905386e-01f}, + {9.880693132714919e-01f, -1.540098443970461e-01f}, + {9.873014181578584e-01f, -1.588581433338614e-01f}, + {9.865097333595187e-01f, -1.637026144779952e-01f}, + {9.856942779526452e-01f, -1.685431410986913e-01f}, + {9.848550715861784e-01f, -1.733796065602395e-01f}, + {9.839921344813541e-01f, -1.782118943247859e-01f}, + {9.831054874312163e-01f, -1.830398879551410e-01f}, + {9.821951518001156e-01f, -1.878634711175852e-01f}, + {9.812611495231950e-01f, -1.926825275846723e-01f}, + {9.803035031058607e-01f, -1.974969412380297e-01f}, + {9.793222356232406e-01f, -2.023065960711564e-01f}, + {9.783173707196277e-01f, -2.071113761922186e-01f}, + {9.772889326079104e-01f, -2.119111658268416e-01f}, + {9.762369460689896e-01f, -2.167058493209000e-01f}, + {9.751614364511810e-01f, -2.214953111433043e-01f}, + {9.740624296696047e-01f, -2.262794358887845e-01f}, + {9.729399522055602e-01f, -2.310581082806711e-01f}, + {9.717940311058891e-01f, -2.358312131736727e-01f}, + {9.706246939823230e-01f, -2.405986355566504e-01f}, + {9.694319690108180e-01f, -2.453602605553894e-01f}, + {9.682158849308760e-01f, -2.501159734353663e-01f}, + {9.669764710448521e-01f, -2.548656596045146e-01f}, + {9.657137572172489e-01f, -2.596092046159851e-01f}, + {9.644277738739964e-01f, -2.643464941709040e-01f}, + {9.631185520017188e-01f, -2.690774141211269e-01f}, + {9.617861231469886e-01f, -2.738018504719892e-01f}, + {9.604305194155658e-01f, -2.785196893850531e-01f}, + {9.590517734716243e-01f, -2.832308171808502e-01f}, + {9.576499185369652e-01f, -2.879351203416211e-01f}, + {9.562249883902162e-01f, -2.926324855140505e-01f}, + {9.547770173660172e-01f, -2.973227995119985e-01f}, + {9.533060403541939e-01f, -3.020059493192281e-01f}, + {9.518120927989161e-01f, -3.066818220921279e-01f}, + {9.502952106978444e-01f, -3.113503051624320e-01f}, + {9.487554306012626e-01f, -3.160112860399338e-01f}, + {9.471927896111967e-01f, -3.206646524151973e-01f}, + {9.456073253805213e-01f, -3.253102921622629e-01f}, + {9.439990761120522e-01f, -3.299480933413494e-01f}, + {9.423680805576258e-01f, -3.345779442015508e-01f}, + {9.407143780171653e-01f, -3.391997331835298e-01f}, + {9.390380083377340e-01f, -3.438133489222048e-01f}, + {9.373390119125750e-01f, -3.484186802494346e-01f}, + {9.356174296801376e-01f, -3.530156161966958e-01f}, + {9.338733031230915e-01f, -3.576040459977578e-01f}, + {9.321066742673269e-01f, -3.621838590913509e-01f}, + {9.303175856809415e-01f, -3.667549451238308e-01f}, + {9.285060804732156e-01f, -3.713171939518375e-01f}, + {9.266722022935726e-01f, -3.758704956449495e-01f}, + {9.248159953305278e-01f, -3.804147404883323e-01f}, + {9.229375043106232e-01f, -3.849498189853822e-01f}, + {9.210367744973499e-01f, -3.894756218603648e-01f}, + {9.191138516900578e-01f, -3.939920400610481e-01f}, + {9.171687822228516e-01f, -3.984989647613298e-01f}, + {9.152016129634744e-01f, -4.029962873638600e-01f}, + {9.132123913121788e-01f, -4.074838995026576e-01f}, + {9.112011652005843e-01f, -4.119616930457218e-01f}, + {9.091679830905224e-01f, -4.164295600976372e-01f}, + {9.071128939728691e-01f, -4.208873930021739e-01f}, + {9.050359473663644e-01f, -4.253350843448814e-01f}, + {9.029371933164189e-01f, -4.297725269556770e-01f}, + {9.008166823939081e-01f, -4.341996139114278e-01f}, + {8.986744656939538e-01f, -4.386162385385277e-01f}, + {8.965105948346932e-01f, -4.430222944154668e-01f}, + {8.943251219560346e-01f, -4.474176753753967e-01f}, + {8.921180997184014e-01f, -4.518022755086881e-01f}, + {8.898895813014630e-01f, -4.561759891654830e-01f}, + {8.876396204028539e-01f, -4.605387109582400e-01f}, + {8.853682712368793e-01f, -4.648903357642744e-01f}, + {8.830755885332088e-01f, -4.692307587282903e-01f}, + {8.807616275355579e-01f, -4.735598752649081e-01f}, + {8.784264440003567e-01f, -4.778775810611837e-01f}, + {8.760700941954066e-01f, -4.821837720791227e-01f}, + {8.736926348985243e-01f, -4.864783445581868e-01f}, + {8.712941233961736e-01f, -4.907611950177941e-01f}, + {8.688746174820854e-01f, -4.950322202598127e-01f}, + {8.664341754558650e-01f, -4.992913173710469e-01f}, + {8.639728561215868e-01f, -5.035383837257176e-01f}, + {8.614907187863783e-01f, -5.077733169879345e-01f}, + {8.589878232589904e-01f, -5.119960151141624e-01f}, + {8.564642298483565e-01f, -5.162063763556797e-01f}, + {8.539199993621391e-01f, -5.204042992610306e-01f}, + {8.513551931052652e-01f, -5.245896826784689e-01f}, + {8.487698728784481e-01f, -5.287624257583958e-01f}, + {8.461641009766995e-01f, -5.329224279557898e-01f}, + {8.435379401878270e-01f, -5.370695890326298e-01f}, + {8.408914537909229e-01f, -5.412038090603096e-01f}, + {8.382247055548381e-01f, -5.453249884220465e-01f}, + {8.355377597366458e-01f, -5.494330278152808e-01f}, + {8.328306810800937e-01f, -5.535278282540700e-01f}, + {8.301035348140438e-01f, -5.576092910714722e-01f}, + {8.273563866508998e-01f, -5.616773179219247e-01f}, + {8.245893027850253e-01f, -5.657318107836131e-01f}, + {8.218023498911473e-01f, -5.697726719608341e-01f}, + {8.189955951227504e-01f, -5.737998040863485e-01f}, + {8.161691061104588e-01f, -5.778131101237274e-01f}, + {8.133229509604062e-01f, -5.818124933696910e-01f}, + {8.104571982525948e-01f, -5.857978574564389e-01f}, + {8.075719170392435e-01f, -5.897691063539708e-01f}, + {8.046671768431229e-01f, -5.937261443724019e-01f}, + {8.017430476558816e-01f, -5.976688761642677e-01f}, + {7.987995999363579e-01f, -6.015972067268220e-01f}, + {7.958369046088836e-01f, -6.055110414043255e-01f}, + {7.928550330615741e-01f, -6.094102858903271e-01f}, + {7.898540571446090e-01f, -6.132948462299359e-01f}, + {7.868340491684999e-01f, -6.171646288220856e-01f}, + {7.837950819023488e-01f, -6.210195404217892e-01f}, + {7.807372285720945e-01f, -6.248594881423863e-01f}, + {7.776605628587479e-01f, -6.286843794577813e-01f}, + {7.745651588966166e-01f, -6.324941222046724e-01f}, + {7.714510912715192e-01f, -6.362886245847729e-01f}, + {7.683184350189877e-01f, -6.400677951670226e-01f}, + {7.651672656224590e-01f, -6.438315428897914e-01f}, + {7.619976590114568e-01f, -6.475797770630733e-01f}, + {7.588096915597616e-01f, -6.513124073706714e-01f}, + {7.556034400835709e-01f, -6.550293438723744e-01f}, + {7.523789818396478e-01f, -6.587304970061237e-01f}, + {7.491363945234594e-01f, -6.624157775901718e-01f}, + {7.458757562673048e-01f, -6.660850968252301e-01f}, + {7.425971456384329e-01f, -6.697383662966099e-01f}, + {7.393006416371488e-01f, -6.733754979763520e-01f}, + {7.359863236949099e-01f, -6.769964042253483e-01f}, + {7.326542716724128e-01f, -6.806009977954530e-01f}, + {7.293045658576685e-01f, -6.841891918315852e-01f}, + {7.259372869640676e-01f, -6.877608998738217e-01f}, + {7.225525161284360e-01f, -6.913160358594803e-01f}, + {7.191503349090794e-01f, -6.948545141251936e-01f}, + {7.157308252838186e-01f, -6.983762494089729e-01f}, + {7.122940696480137e-01f, -7.018811568522627e-01f}, + {7.088401508125785e-01f, -7.053691520019861e-01f} }; static const cos_msin_t cos_msin_320[320] = { - {9.999992470090361e-01, -1.227184322288852e-03}, - {9.999932230881285e-01, -3.681545574399692e-03}, - {9.999811752826011e-01, -6.135884649154475e-03}, - {9.999631036650289e-01, -8.590186761797602e-03}, - {9.999390083442741e-01, -1.104443712779613e-02}, - {9.999088894654848e-01, -1.349862096292883e-02}, - {9.998727472100952e-01, -1.595272348337527e-02}, - {9.998305817958234e-01, -1.840672990580482e-02}, - {9.997823934766707e-01, -2.086062544746576e-02}, - {9.997281825429201e-01, -2.331439532627430e-02}, - {9.996679493211340e-01, -2.576802476090363e-02}, - {9.996016941741530e-01, -2.822149897087298e-02}, - {9.995294175010931e-01, -3.067480317663663e-02}, - {9.994511197373437e-01, -3.312792259967294e-02}, - {9.993668013545645e-01, -3.558084246257342e-02}, - {9.992764628606833e-01, -3.803354798913168e-02}, - {9.991801047998923e-01, -4.048602440443251e-02}, - {9.990777277526454e-01, -4.293825693494082e-02}, - {9.989693323356542e-01, -4.539023080859068e-02}, - {9.988549192018848e-01, -4.784193125487429e-02}, - {9.987344890405533e-01, -5.029334350493095e-02}, - {9.986080425771219e-01, -5.274445279163603e-02}, - {9.984755805732948e-01, -5.519524434968993e-02}, - {9.983371038270131e-01, -5.764570341570704e-02}, - {9.981926131724506e-01, -6.009581522830464e-02}, - {9.980421094800079e-01, -6.254556502819182e-02}, - {9.978855936563085e-01, -6.499493805825848e-02}, - {9.977230666441916e-01, -6.744391956366405e-02}, - {9.975545294227081e-01, -6.989249479192657e-02}, - {9.973799830071135e-01, -7.234064899301137e-02}, - {9.971994284488623e-01, -7.478836741942015e-02}, - {9.970128668356021e-01, -7.723563532627951e-02}, - {9.968202992911657e-01, -7.968243797143013e-02}, - {9.966217269755658e-01, -8.212876061551522e-02}, - {9.964171510849874e-01, -8.457458852206962e-02}, - {9.962065728517802e-01, -8.701990695760831e-02}, - {9.959899935444517e-01, -8.946470119171543e-02}, - {9.957674144676598e-01, -9.190895649713272e-02}, - {9.955388369622040e-01, -9.435265814984850e-02}, - {9.953042624050182e-01, -9.679579142918618e-02}, - {9.950636922091622e-01, -9.923834161789306e-02}, - {9.948171278238128e-01, -1.016802940022289e-01}, - {9.945645707342554e-01, -1.041216338720546e-01}, - {9.943060224618753e-01, -1.065623465209208e-01}, - {9.940414845641478e-01, -1.090024172461564e-01}, - {9.937709586346295e-01, -1.114418313489574e-01}, - {9.934944463029486e-01, -1.138805741344751e-01}, - {9.932119492347945e-01, -1.163186309119048e-01}, - {9.929234691319088e-01, -1.187559869945741e-01}, - {9.926290077320739e-01, -1.211926277000318e-01}, - {9.923285668091033e-01, -1.236285383501360e-01}, - {9.920221481728309e-01, -1.260637042711424e-01}, - {9.917097536690995e-01, -1.284981107937932e-01}, - {9.913913851797506e-01, -1.309317432534049e-01}, - {9.910670446226119e-01, -1.333645869899571e-01}, - {9.907367339514870e-01, -1.357966273481804e-01}, - {9.904004551561425e-01, -1.382278496776452e-01}, - {9.900582102622971e-01, -1.406582393328492e-01}, - {9.897100013316084e-01, -1.430877816733065e-01}, - {9.893558304616609e-01, -1.455164620636352e-01}, - {9.889956997859536e-01, -1.479442658736455e-01}, - {9.886296114738869e-01, -1.503711784784285e-01}, - {9.882575677307495e-01, -1.527971852584434e-01}, - {9.878795707977051e-01, -1.552222715996064e-01}, - {9.874956229517791e-01, -1.576464228933781e-01}, - {9.871057265058446e-01, -1.600696245368518e-01}, - {9.867098838086088e-01, -1.624918619328416e-01}, - {9.863080972445987e-01, -1.649131204899699e-01}, - {9.859003692341464e-01, -1.673333856227558e-01}, - {9.854867022333751e-01, -1.697526427517024e-01}, - {9.850670987341841e-01, -1.721708773033852e-01}, - {9.846415612642334e-01, -1.745880747105397e-01}, - {9.842100923869290e-01, -1.770042204121487e-01}, - {9.837726947014075e-01, -1.794192998535309e-01}, - {9.833293708425197e-01, -1.818332984864276e-01}, - {9.828801234808157e-01, -1.842462017690910e-01}, - {9.824249553225278e-01, -1.866579951663718e-01}, - {9.819638691095552e-01, -1.890686641498062e-01}, - {9.814968676194470e-01, -1.914781941977041e-01}, - {9.810239536653852e-01, -1.938865707952361e-01}, - {9.805451300961683e-01, -1.962937794345212e-01}, - {9.800603997961936e-01, -1.986998056147138e-01}, - {9.795697656854405e-01, -2.011046348420919e-01}, - {9.790732307194523e-01, -2.035082526301433e-01}, - {9.785707978893183e-01, -2.059106444996538e-01}, - {9.780624702216568e-01, -2.083117959787937e-01}, - {9.775482507785956e-01, -2.107116926032057e-01}, - {9.770281426577544e-01, -2.131103199160914e-01}, - {9.765021489922255e-01, -2.155076634682986e-01}, - {9.759702729505557e-01, -2.179037088184086e-01}, - {9.754325177367266e-01, -2.202984415328229e-01}, - {9.748888865901355e-01, -2.226918471858500e-01}, - {9.743393827855759e-01, -2.250839113597928e-01}, - {9.737840096332177e-01, -2.274746196450351e-01}, - {9.732227704785874e-01, -2.298639576401283e-01}, - {9.726556687025479e-01, -2.322519109518786e-01}, - {9.720827077212779e-01, -2.346384651954331e-01}, - {9.715038909862518e-01, -2.370236059943672e-01}, - {9.709192219842182e-01, -2.394073189807704e-01}, - {9.703287042371799e-01, -2.417895897953334e-01}, - {9.697323413023714e-01, -2.441704040874346e-01}, - {9.691301367722388e-01, -2.465497475152259e-01}, - {9.685220942744174e-01, -2.489276057457201e-01}, - {9.679082174717095e-01, -2.513039644548766e-01}, - {9.672885100620635e-01, -2.536788093276874e-01}, - {9.666629757785506e-01, -2.560521260582643e-01}, - {9.660316183893426e-01, -2.584239003499241e-01}, - {9.653944416976894e-01, -2.607941179152755e-01}, - {9.647514495418958e-01, -2.631627644763044e-01}, - {9.641026457952987e-01, -2.655298257644607e-01}, - {9.634480343662435e-01, -2.678952875207434e-01}, - {9.627876191980606e-01, -2.702591354957875e-01}, - {9.621214042690416e-01, -2.726213554499490e-01}, - {9.614493935924158e-01, -2.749819331533909e-01}, - {9.607715912163253e-01, -2.773408543861692e-01}, - {9.600880012238011e-01, -2.796981049383182e-01}, - {9.593986277327383e-01, -2.820536706099365e-01}, - {9.587034748958716e-01, -2.844075372112719e-01}, - {9.580025469007496e-01, -2.867596905628075e-01}, - {9.572958479697103e-01, -2.891101164953470e-01}, - {9.565833823598556e-01, -2.914588008500998e-01}, - {9.558651543630251e-01, -2.938057294787664e-01}, - {9.551411683057708e-01, -2.961508882436238e-01}, - {9.544114285493304e-01, -2.984942630176104e-01}, - {9.536759394896021e-01, -3.008358396844112e-01}, - {9.529347055571170e-01, -3.031756041385431e-01}, - {9.521877312170133e-01, -3.055135422854393e-01}, - {9.514350209690083e-01, -3.078496400415349e-01}, - {9.506765793473728e-01, -3.101838833343510e-01}, - {9.499124109209025e-01, -3.125162581025802e-01}, - {9.491425202928909e-01, -3.148467502961706e-01}, - {9.483669121011018e-01, -3.171753458764112e-01}, - {9.475855910177411e-01, -3.195020308160157e-01}, - {9.467985617494289e-01, -3.218267910992075e-01}, - {9.460058290371707e-01, -3.241496127218040e-01}, - {9.452073976563291e-01, -3.264704816913009e-01}, - {9.444032724165956e-01, -3.287893840269567e-01}, - {9.435934581619604e-01, -3.311063057598764e-01}, - {9.427779597706842e-01, -3.334212329330963e-01}, - {9.419567821552687e-01, -3.357341516016679e-01}, - {9.411299302624264e-01, -3.380450478327413e-01}, - {9.402974090730516e-01, -3.403539077056500e-01}, - {9.394592236021899e-01, -3.426607173119944e-01}, - {9.386153788990080e-01, -3.449654627557252e-01}, - {9.377658800467635e-01, -3.472681301532278e-01}, - {9.369107321627741e-01, -3.495687056334055e-01}, - {9.360499403983871e-01, -3.518671753377630e-01}, - {9.351835099389476e-01, -3.541635254204903e-01}, - {9.343114460037683e-01, -3.564577420485457e-01}, - {9.334337538460973e-01, -3.587498114017393e-01}, - {9.325504387530866e-01, -3.610397196728160e-01}, - {9.316615060457607e-01, -3.633274530675394e-01}, - {9.307669610789837e-01, -3.656129978047739e-01}, - {9.298668092414279e-01, -3.678963401165684e-01}, - {9.289610559555410e-01, -3.701774662482391e-01}, - {9.280497066775131e-01, -3.724563624584523e-01}, - {9.271327668972442e-01, -3.747330150193071e-01}, - {9.262102421383114e-01, -3.770074102164183e-01}, - {9.252821379579349e-01, -3.792795343489985e-01}, - {9.243484599469451e-01, -3.815493737299417e-01}, - {9.234092137297489e-01, -3.838169146859046e-01}, - {9.224644049642953e-01, -3.860821435573893e-01}, - {9.215140393420420e-01, -3.883450466988262e-01}, - {9.205581225879205e-01, -3.906056104786556e-01}, - {9.195966604603021e-01, -3.928638212794095e-01}, - {9.186296587509630e-01, -3.951196654977946e-01}, - {9.176571232850496e-01, -3.973731295447735e-01}, - {9.166790599210427e-01, -3.996241998456468e-01}, - {9.156954745507232e-01, -4.018728628401348e-01}, - {9.147063730991362e-01, -4.041191049824593e-01}, - {9.137117615245548e-01, -4.063629127414251e-01}, - {9.127116458184452e-01, -4.086042726005015e-01}, - {9.117060320054299e-01, -4.108431710579039e-01}, - {9.106949261432513e-01, -4.130795946266749e-01}, - {9.096783343227359e-01, -4.153135298347656e-01}, - {9.086562626677570e-01, -4.175449632251170e-01}, - {9.076287173351980e-01, -4.197738813557405e-01}, - {9.065957045149153e-01, -4.220002707997997e-01}, - {9.055572304297014e-01, -4.242241181456904e-01}, - {9.045133013352465e-01, -4.264454099971220e-01}, - {9.034639235201017e-01, -4.286641329731982e-01}, - {9.024091033056408e-01, -4.308802737084970e-01}, - {9.013488470460220e-01, -4.330938188531520e-01}, - {9.002831611281501e-01, -4.353047550729321e-01}, - {8.992120519716374e-01, -4.375130690493225e-01}, - {8.981355260287659e-01, -4.397187474796043e-01}, - {8.970535897844474e-01, -4.419217770769352e-01}, - {8.959662497561852e-01, -4.441221445704292e-01}, - {8.948735124940346e-01, -4.463198367052365e-01}, - {8.937753845805634e-01, -4.485148402426236e-01}, - {8.926718726308122e-01, -4.507071419600526e-01}, - {8.915629832922548e-01, -4.528967286512617e-01}, - {8.904487232447579e-01, -4.550835871263438e-01}, - {8.893290992005409e-01, -4.572677042118265e-01}, - {8.882041179041357e-01, -4.594490667507513e-01}, - {8.870737861323454e-01, -4.616276616027529e-01}, - {8.859381106942048e-01, -4.638034756441384e-01}, - {8.847970984309378e-01, -4.659764957679662e-01}, - {8.836507562159172e-01, -4.681467088841250e-01}, - {8.824990909546231e-01, -4.703141019194129e-01}, - {8.813421095846011e-01, -4.724786618176158e-01}, - {8.801798190754208e-01, -4.746403755395864e-01}, - {8.790122264286335e-01, -4.767992300633221e-01}, - {8.778393386777302e-01, -4.789552123840445e-01}, - {8.766611628880995e-01, -4.811083095142767e-01}, - {8.754777061569843e-01, -4.832585084839222e-01}, - {8.742889756134398e-01, -4.854057963403425e-01}, - {8.730949784182901e-01, -4.875501601484360e-01}, - {8.718957217640854e-01, -4.896915869907146e-01}, - {8.706912128750582e-01, -4.918300639673830e-01}, - {8.694814590070804e-01, -4.939655781964152e-01}, - {8.682664674476190e-01, -4.960981168136327e-01}, - {8.670462455156926e-01, -4.982276669727819e-01}, - {8.658208005618273e-01, -5.003542158456112e-01}, - {8.645901399680118e-01, -5.024777506219491e-01}, - {8.633542711476541e-01, -5.045982585097801e-01}, - {8.621132015455357e-01, -5.067157267353229e-01}, - {8.608669386377673e-01, -5.088301425431070e-01}, - {8.596154899317437e-01, -5.109414931960489e-01}, - {8.583588629660989e-01, -5.130497659755299e-01}, - {8.570970653106597e-01, -5.151549481814718e-01}, - {8.558301045664012e-01, -5.172570271324139e-01}, - {8.545579883654005e-01, -5.193559901655896e-01}, - {8.532807243707908e-01, -5.214518246370019e-01}, - {8.519983202767152e-01, -5.235445179215000e-01}, - {8.507107838082801e-01, -5.256340574128560e-01}, - {8.494181227215095e-01, -5.277204305238395e-01}, - {8.481203448032972e-01, -5.298036246862946e-01}, - {8.468174578713608e-01, -5.318836273512150e-01}, - {8.455094697741939e-01, -5.339604259888194e-01}, - {8.441963883910193e-01, -5.360340080886280e-01}, - {8.428782216317413e-01, -5.381043611595366e-01}, - {8.415549774368984e-01, -5.401714727298929e-01}, - {8.402266637776148e-01, -5.422353303475707e-01}, - {8.388932886555529e-01, -5.442959215800456e-01}, - {8.375548601028652e-01, -5.463532340144698e-01}, - {8.362113861821453e-01, -5.484072552577465e-01}, - {8.348628749863800e-01, -5.504579729366048e-01}, - {8.335093346389004e-01, -5.525053746976744e-01}, - {8.321507732933324e-01, -5.545494482075597e-01}, - {8.307871991335484e-01, -5.565901811529141e-01}, - {8.294186203736174e-01, -5.586275612405148e-01}, - {8.280450452577558e-01, -5.606615761973360e-01}, - {8.266664820602777e-01, -5.626922137706231e-01}, - {8.252829390855451e-01, -5.647194617279668e-01}, - {8.238944246679176e-01, -5.667433078573766e-01}, - {8.225009471717026e-01, -5.687637399673542e-01}, - {8.211025149911046e-01, -5.707807458869673e-01}, - {8.196991365501750e-01, -5.727943134659226e-01}, - {8.182908203027607e-01, -5.748044305746390e-01}, - {8.168775747324537e-01, -5.768110851043212e-01}, - {8.154594083525400e-01, -5.788142649670318e-01}, - {8.140363297059484e-01, -5.808139580957645e-01}, - {8.126083473651983e-01, -5.828101524445172e-01}, - {8.111754699323488e-01, -5.848028359883638e-01}, - {8.097377060389469e-01, -5.867919967235272e-01}, - {8.082950643459751e-01, -5.887776226674516e-01}, - {8.068475535437993e-01, -5.907597018588742e-01}, - {8.053951823521167e-01, -5.927382223578977e-01}, - {8.039379595199031e-01, -5.947131722460625e-01}, - {8.024758938253601e-01, -5.966845396264172e-01}, - {8.010089940758625e-01, -5.986523126235920e-01}, - {7.995372691079050e-01, -6.006164793838690e-01}, - {7.980607277870492e-01, -6.025770280752539e-01}, - {7.965793790078698e-01, -6.045339468875478e-01}, - {7.950932316939014e-01, -6.064872240324176e-01}, - {7.936022947975847e-01, -6.084368477434675e-01}, - {7.921065773002124e-01, -6.103828062763095e-01}, - {7.906060882118751e-01, -6.123250879086344e-01}, - {7.891008365714072e-01, -6.142636809402826e-01}, - {7.875908314463325e-01, -6.161985736933142e-01}, - {7.860760819328091e-01, -6.181297545120795e-01}, - {7.845565971555752e-01, -6.200572117632891e-01}, - {7.830323862678940e-01, -6.219809338360844e-01}, - {7.815034584514979e-01, -6.239009091421072e-01}, - {7.799698229165344e-01, -6.258171261155689e-01}, - {7.784314889015095e-01, -6.277295732133219e-01}, - {7.768884656732324e-01, -6.296382389149270e-01}, - {7.753407625267603e-01, -6.315431117227246e-01}, - {7.737883887853415e-01, -6.334441801619028e-01}, - {7.722313538003597e-01, -6.353414327805670e-01}, - {7.706696669512773e-01, -6.372348581498091e-01}, - {7.691033376455797e-01, -6.391244448637757e-01}, - {7.675323753187178e-01, -6.410101815397373e-01}, - {7.659567894340514e-01, -6.428920568181569e-01}, - {7.643765894827926e-01, -6.447700593627579e-01}, - {7.627917849839481e-01, -6.466441778605931e-01}, - {7.612023854842618e-01, -6.485144010221124e-01}, - {7.596084005581580e-01, -6.503807175812309e-01}, - {7.580098398076831e-01, -6.522431162953969e-01}, - {7.564067128624476e-01, -6.541015859456593e-01}, - {7.547990293795690e-01, -6.559561153367355e-01}, - {7.531867990436125e-01, -6.578066932970786e-01}, - {7.515700315665336e-01, -6.596533086789452e-01}, - {7.499487366876190e-01, -6.614959503584616e-01}, - {7.483229241734281e-01, -6.633346072356920e-01}, - {7.466926038177344e-01, -6.651692682347043e-01}, - {7.450577854414661e-01, -6.669999223036375e-01}, - {7.434184788926470e-01, -6.688265584147679e-01}, - {7.417746940463380e-01, -6.706491655645758e-01}, - {7.401264408045760e-01, -6.724677327738116e-01}, - {7.384737290963160e-01, -6.742822490875620e-01}, - {7.368165688773699e-01, -6.760927035753159e-01}, - {7.351549701303474e-01, -6.778990853310308e-01}, - {7.334889428645953e-01, -6.797013834731973e-01}, - {7.318184971161379e-01, -6.814995871449060e-01}, - {7.301436429476156e-01, -6.832936855139119e-01}, - {7.284643904482252e-01, -6.850836677727004e-01}, - {7.267807497336585e-01, -6.868695231385515e-01}, - {7.250927309460417e-01, -6.886512408536060e-01}, - {7.234003442538740e-01, -6.904288101849290e-01}, - {7.217035998519666e-01, -6.922022204245754e-01}, - {7.200025079613817e-01, -6.939714608896540e-01}, - {7.182970788293696e-01, -6.957365209223924e-01}, - {7.165873227293083e-01, -6.974973898902004e-01}, - {7.148732499606411e-01, -6.992540571857347e-01}, - {7.131548708488146e-01, -7.010065122269625e-01}, - {7.114321957452164e-01, -7.027547444572253e-01}, - {7.097052350271130e-01, -7.044987433453024e-01}, - {7.079739990975870e-01, -7.062384983854745e-01} + {9.999992470090361e-01f, -1.227184322288852e-03f}, + {9.999932230881285e-01f, -3.681545574399692e-03f}, + {9.999811752826011e-01f, -6.135884649154475e-03f}, + {9.999631036650289e-01f, -8.590186761797602e-03f}, + {9.999390083442741e-01f, -1.104443712779613e-02f}, + {9.999088894654848e-01f, -1.349862096292883e-02f}, + {9.998727472100952e-01f, -1.595272348337527e-02f}, + {9.998305817958234e-01f, -1.840672990580482e-02f}, + {9.997823934766707e-01f, -2.086062544746576e-02f}, + {9.997281825429201e-01f, -2.331439532627430e-02f}, + {9.996679493211340e-01f, -2.576802476090363e-02f}, + {9.996016941741530e-01f, -2.822149897087298e-02f}, + {9.995294175010931e-01f, -3.067480317663663e-02f}, + {9.994511197373437e-01f, -3.312792259967294e-02f}, + {9.993668013545645e-01f, -3.558084246257342e-02f}, + {9.992764628606833e-01f, -3.803354798913168e-02f}, + {9.991801047998923e-01f, -4.048602440443251e-02f}, + {9.990777277526454e-01f, -4.293825693494082e-02f}, + {9.989693323356542e-01f, -4.539023080859068e-02f}, + {9.988549192018848e-01f, -4.784193125487429e-02f}, + {9.987344890405533e-01f, -5.029334350493095e-02f}, + {9.986080425771219e-01f, -5.274445279163603e-02f}, + {9.984755805732948e-01f, -5.519524434968993e-02f}, + {9.983371038270131e-01f, -5.764570341570704e-02f}, + {9.981926131724506e-01f, -6.009581522830464e-02f}, + {9.980421094800079e-01f, -6.254556502819182e-02f}, + {9.978855936563085e-01f, -6.499493805825848e-02f}, + {9.977230666441916e-01f, -6.744391956366405e-02f}, + {9.975545294227081e-01f, -6.989249479192657e-02f}, + {9.973799830071135e-01f, -7.234064899301137e-02f}, + {9.971994284488623e-01f, -7.478836741942015e-02f}, + {9.970128668356021e-01f, -7.723563532627951e-02f}, + {9.968202992911657e-01f, -7.968243797143013e-02f}, + {9.966217269755658e-01f, -8.212876061551522e-02f}, + {9.964171510849874e-01f, -8.457458852206962e-02f}, + {9.962065728517802e-01f, -8.701990695760831e-02f}, + {9.959899935444517e-01f, -8.946470119171543e-02f}, + {9.957674144676598e-01f, -9.190895649713272e-02f}, + {9.955388369622040e-01f, -9.435265814984850e-02f}, + {9.953042624050182e-01f, -9.679579142918618e-02f}, + {9.950636922091622e-01f, -9.923834161789306e-02f}, + {9.948171278238128e-01f, -1.016802940022289e-01f}, + {9.945645707342554e-01f, -1.041216338720546e-01f}, + {9.943060224618753e-01f, -1.065623465209208e-01f}, + {9.940414845641478e-01f, -1.090024172461564e-01f}, + {9.937709586346295e-01f, -1.114418313489574e-01f}, + {9.934944463029486e-01f, -1.138805741344751e-01f}, + {9.932119492347945e-01f, -1.163186309119048e-01f}, + {9.929234691319088e-01f, -1.187559869945741e-01f}, + {9.926290077320739e-01f, -1.211926277000318e-01f}, + {9.923285668091033e-01f, -1.236285383501360e-01f}, + {9.920221481728309e-01f, -1.260637042711424e-01f}, + {9.917097536690995e-01f, -1.284981107937932e-01f}, + {9.913913851797506e-01f, -1.309317432534049e-01f}, + {9.910670446226119e-01f, -1.333645869899571e-01f}, + {9.907367339514870e-01f, -1.357966273481804e-01f}, + {9.904004551561425e-01f, -1.382278496776452e-01f}, + {9.900582102622971e-01f, -1.406582393328492e-01f}, + {9.897100013316084e-01f, -1.430877816733065e-01f}, + {9.893558304616609e-01f, -1.455164620636352e-01f}, + {9.889956997859536e-01f, -1.479442658736455e-01f}, + {9.886296114738869e-01f, -1.503711784784285e-01f}, + {9.882575677307495e-01f, -1.527971852584434e-01f}, + {9.878795707977051e-01f, -1.552222715996064e-01f}, + {9.874956229517791e-01f, -1.576464228933781e-01f}, + {9.871057265058446e-01f, -1.600696245368518e-01f}, + {9.867098838086088e-01f, -1.624918619328416e-01f}, + {9.863080972445987e-01f, -1.649131204899699e-01f}, + {9.859003692341464e-01f, -1.673333856227558e-01f}, + {9.854867022333751e-01f, -1.697526427517024e-01f}, + {9.850670987341841e-01f, -1.721708773033852e-01f}, + {9.846415612642334e-01f, -1.745880747105397e-01f}, + {9.842100923869290e-01f, -1.770042204121487e-01f}, + {9.837726947014075e-01f, -1.794192998535309e-01f}, + {9.833293708425197e-01f, -1.818332984864276e-01f}, + {9.828801234808157e-01f, -1.842462017690910e-01f}, + {9.824249553225278e-01f, -1.866579951663718e-01f}, + {9.819638691095552e-01f, -1.890686641498062e-01f}, + {9.814968676194470e-01f, -1.914781941977041e-01f}, + {9.810239536653852e-01f, -1.938865707952361e-01f}, + {9.805451300961683e-01f, -1.962937794345212e-01f}, + {9.800603997961936e-01f, -1.986998056147138e-01f}, + {9.795697656854405e-01f, -2.011046348420919e-01f}, + {9.790732307194523e-01f, -2.035082526301433e-01f}, + {9.785707978893183e-01f, -2.059106444996538e-01f}, + {9.780624702216568e-01f, -2.083117959787937e-01f}, + {9.775482507785956e-01f, -2.107116926032057e-01f}, + {9.770281426577544e-01f, -2.131103199160914e-01f}, + {9.765021489922255e-01f, -2.155076634682986e-01f}, + {9.759702729505557e-01f, -2.179037088184086e-01f}, + {9.754325177367266e-01f, -2.202984415328229e-01f}, + {9.748888865901355e-01f, -2.226918471858500e-01f}, + {9.743393827855759e-01f, -2.250839113597928e-01f}, + {9.737840096332177e-01f, -2.274746196450351e-01f}, + {9.732227704785874e-01f, -2.298639576401283e-01f}, + {9.726556687025479e-01f, -2.322519109518786e-01f}, + {9.720827077212779e-01f, -2.346384651954331e-01f}, + {9.715038909862518e-01f, -2.370236059943672e-01f}, + {9.709192219842182e-01f, -2.394073189807704e-01f}, + {9.703287042371799e-01f, -2.417895897953334e-01f}, + {9.697323413023714e-01f, -2.441704040874346e-01f}, + {9.691301367722388e-01f, -2.465497475152259e-01f}, + {9.685220942744174e-01f, -2.489276057457201e-01f}, + {9.679082174717095e-01f, -2.513039644548766e-01f}, + {9.672885100620635e-01f, -2.536788093276874e-01f}, + {9.666629757785506e-01f, -2.560521260582643e-01f}, + {9.660316183893426e-01f, -2.584239003499241e-01f}, + {9.653944416976894e-01f, -2.607941179152755e-01f}, + {9.647514495418958e-01f, -2.631627644763044e-01f}, + {9.641026457952987e-01f, -2.655298257644607e-01f}, + {9.634480343662435e-01f, -2.678952875207434e-01f}, + {9.627876191980606e-01f, -2.702591354957875e-01f}, + {9.621214042690416e-01f, -2.726213554499490e-01f}, + {9.614493935924158e-01f, -2.749819331533909e-01f}, + {9.607715912163253e-01f, -2.773408543861692e-01f}, + {9.600880012238011e-01f, -2.796981049383182e-01f}, + {9.593986277327383e-01f, -2.820536706099365e-01f}, + {9.587034748958716e-01f, -2.844075372112719e-01f}, + {9.580025469007496e-01f, -2.867596905628075e-01f}, + {9.572958479697103e-01f, -2.891101164953470e-01f}, + {9.565833823598556e-01f, -2.914588008500998e-01f}, + {9.558651543630251e-01f, -2.938057294787664e-01f}, + {9.551411683057708e-01f, -2.961508882436238e-01f}, + {9.544114285493304e-01f, -2.984942630176104e-01f}, + {9.536759394896021e-01f, -3.008358396844112e-01f}, + {9.529347055571170e-01f, -3.031756041385431e-01f}, + {9.521877312170133e-01f, -3.055135422854393e-01f}, + {9.514350209690083e-01f, -3.078496400415349e-01f}, + {9.506765793473728e-01f, -3.101838833343510e-01f}, + {9.499124109209025e-01f, -3.125162581025802e-01f}, + {9.491425202928909e-01f, -3.148467502961706e-01f}, + {9.483669121011018e-01f, -3.171753458764112e-01f}, + {9.475855910177411e-01f, -3.195020308160157e-01f}, + {9.467985617494289e-01f, -3.218267910992075e-01f}, + {9.460058290371707e-01f, -3.241496127218040e-01f}, + {9.452073976563291e-01f, -3.264704816913009e-01f}, + {9.444032724165956e-01f, -3.287893840269567e-01f}, + {9.435934581619604e-01f, -3.311063057598764e-01f}, + {9.427779597706842e-01f, -3.334212329330963e-01f}, + {9.419567821552687e-01f, -3.357341516016679e-01f}, + {9.411299302624264e-01f, -3.380450478327413e-01f}, + {9.402974090730516e-01f, -3.403539077056500e-01f}, + {9.394592236021899e-01f, -3.426607173119944e-01f}, + {9.386153788990080e-01f, -3.449654627557252e-01f}, + {9.377658800467635e-01f, -3.472681301532278e-01f}, + {9.369107321627741e-01f, -3.495687056334055e-01f}, + {9.360499403983871e-01f, -3.518671753377630e-01f}, + {9.351835099389476e-01f, -3.541635254204903e-01f}, + {9.343114460037683e-01f, -3.564577420485457e-01f}, + {9.334337538460973e-01f, -3.587498114017393e-01f}, + {9.325504387530866e-01f, -3.610397196728160e-01f}, + {9.316615060457607e-01f, -3.633274530675394e-01f}, + {9.307669610789837e-01f, -3.656129978047739e-01f}, + {9.298668092414279e-01f, -3.678963401165684e-01f}, + {9.289610559555410e-01f, -3.701774662482391e-01f}, + {9.280497066775131e-01f, -3.724563624584523e-01f}, + {9.271327668972442e-01f, -3.747330150193071e-01f}, + {9.262102421383114e-01f, -3.770074102164183e-01f}, + {9.252821379579349e-01f, -3.792795343489985e-01f}, + {9.243484599469451e-01f, -3.815493737299417e-01f}, + {9.234092137297489e-01f, -3.838169146859046e-01f}, + {9.224644049642953e-01f, -3.860821435573893e-01f}, + {9.215140393420420e-01f, -3.883450466988262e-01f}, + {9.205581225879205e-01f, -3.906056104786556e-01f}, + {9.195966604603021e-01f, -3.928638212794095e-01f}, + {9.186296587509630e-01f, -3.951196654977946e-01f}, + {9.176571232850496e-01f, -3.973731295447735e-01f}, + {9.166790599210427e-01f, -3.996241998456468e-01f}, + {9.156954745507232e-01f, -4.018728628401348e-01f}, + {9.147063730991362e-01f, -4.041191049824593e-01f}, + {9.137117615245548e-01f, -4.063629127414251e-01f}, + {9.127116458184452e-01f, -4.086042726005015e-01f}, + {9.117060320054299e-01f, -4.108431710579039e-01f}, + {9.106949261432513e-01f, -4.130795946266749e-01f}, + {9.096783343227359e-01f, -4.153135298347656e-01f}, + {9.086562626677570e-01f, -4.175449632251170e-01f}, + {9.076287173351980e-01f, -4.197738813557405e-01f}, + {9.065957045149153e-01f, -4.220002707997997e-01f}, + {9.055572304297014e-01f, -4.242241181456904e-01f}, + {9.045133013352465e-01f, -4.264454099971220e-01f}, + {9.034639235201017e-01f, -4.286641329731982e-01f}, + {9.024091033056408e-01f, -4.308802737084970e-01f}, + {9.013488470460220e-01f, -4.330938188531520e-01f}, + {9.002831611281501e-01f, -4.353047550729321e-01f}, + {8.992120519716374e-01f, -4.375130690493225e-01f}, + {8.981355260287659e-01f, -4.397187474796043e-01f}, + {8.970535897844474e-01f, -4.419217770769352e-01f}, + {8.959662497561852e-01f, -4.441221445704292e-01f}, + {8.948735124940346e-01f, -4.463198367052365e-01f}, + {8.937753845805634e-01f, -4.485148402426236e-01f}, + {8.926718726308122e-01f, -4.507071419600526e-01f}, + {8.915629832922548e-01f, -4.528967286512617e-01f}, + {8.904487232447579e-01f, -4.550835871263438e-01f}, + {8.893290992005409e-01f, -4.572677042118265e-01f}, + {8.882041179041357e-01f, -4.594490667507513e-01f}, + {8.870737861323454e-01f, -4.616276616027529e-01f}, + {8.859381106942048e-01f, -4.638034756441384e-01f}, + {8.847970984309378e-01f, -4.659764957679662e-01f}, + {8.836507562159172e-01f, -4.681467088841250e-01f}, + {8.824990909546231e-01f, -4.703141019194129e-01f}, + {8.813421095846011e-01f, -4.724786618176158e-01f}, + {8.801798190754208e-01f, -4.746403755395864e-01f}, + {8.790122264286335e-01f, -4.767992300633221e-01f}, + {8.778393386777302e-01f, -4.789552123840445e-01f}, + {8.766611628880995e-01f, -4.811083095142767e-01f}, + {8.754777061569843e-01f, -4.832585084839222e-01f}, + {8.742889756134398e-01f, -4.854057963403425e-01f}, + {8.730949784182901e-01f, -4.875501601484360e-01f}, + {8.718957217640854e-01f, -4.896915869907146e-01f}, + {8.706912128750582e-01f, -4.918300639673830e-01f}, + {8.694814590070804e-01f, -4.939655781964152e-01f}, + {8.682664674476190e-01f, -4.960981168136327e-01f}, + {8.670462455156926e-01f, -4.982276669727819e-01f}, + {8.658208005618273e-01f, -5.003542158456112e-01f}, + {8.645901399680118e-01f, -5.024777506219491e-01f}, + {8.633542711476541e-01f, -5.045982585097801e-01f}, + {8.621132015455357e-01f, -5.067157267353229e-01f}, + {8.608669386377673e-01f, -5.088301425431070e-01f}, + {8.596154899317437e-01f, -5.109414931960489e-01f}, + {8.583588629660989e-01f, -5.130497659755299e-01f}, + {8.570970653106597e-01f, -5.151549481814718e-01f}, + {8.558301045664012e-01f, -5.172570271324139e-01f}, + {8.545579883654005e-01f, -5.193559901655896e-01f}, + {8.532807243707908e-01f, -5.214518246370019e-01f}, + {8.519983202767152e-01f, -5.235445179215000e-01f}, + {8.507107838082801e-01f, -5.256340574128560e-01f}, + {8.494181227215095e-01f, -5.277204305238395e-01f}, + {8.481203448032972e-01f, -5.298036246862946e-01f}, + {8.468174578713608e-01f, -5.318836273512150e-01f}, + {8.455094697741939e-01f, -5.339604259888194e-01f}, + {8.441963883910193e-01f, -5.360340080886280e-01f}, + {8.428782216317413e-01f, -5.381043611595366e-01f}, + {8.415549774368984e-01f, -5.401714727298929e-01f}, + {8.402266637776148e-01f, -5.422353303475707e-01f}, + {8.388932886555529e-01f, -5.442959215800456e-01f}, + {8.375548601028652e-01f, -5.463532340144698e-01f}, + {8.362113861821453e-01f, -5.484072552577465e-01f}, + {8.348628749863800e-01f, -5.504579729366048e-01f}, + {8.335093346389004e-01f, -5.525053746976744e-01f}, + {8.321507732933324e-01f, -5.545494482075597e-01f}, + {8.307871991335484e-01f, -5.565901811529141e-01f}, + {8.294186203736174e-01f, -5.586275612405148e-01f}, + {8.280450452577558e-01f, -5.606615761973360e-01f}, + {8.266664820602777e-01f, -5.626922137706231e-01f}, + {8.252829390855451e-01f, -5.647194617279668e-01f}, + {8.238944246679176e-01f, -5.667433078573766e-01f}, + {8.225009471717026e-01f, -5.687637399673542e-01f}, + {8.211025149911046e-01f, -5.707807458869673e-01f}, + {8.196991365501750e-01f, -5.727943134659226e-01f}, + {8.182908203027607e-01f, -5.748044305746390e-01f}, + {8.168775747324537e-01f, -5.768110851043212e-01f}, + {8.154594083525400e-01f, -5.788142649670318e-01f}, + {8.140363297059484e-01f, -5.808139580957645e-01f}, + {8.126083473651983e-01f, -5.828101524445172e-01f}, + {8.111754699323488e-01f, -5.848028359883638e-01f}, + {8.097377060389469e-01f, -5.867919967235272e-01f}, + {8.082950643459751e-01f, -5.887776226674516e-01f}, + {8.068475535437993e-01f, -5.907597018588742e-01f}, + {8.053951823521167e-01f, -5.927382223578977e-01f}, + {8.039379595199031e-01f, -5.947131722460625e-01f}, + {8.024758938253601e-01f, -5.966845396264172e-01f}, + {8.010089940758625e-01f, -5.986523126235920e-01f}, + {7.995372691079050e-01f, -6.006164793838690e-01f}, + {7.980607277870492e-01f, -6.025770280752539e-01f}, + {7.965793790078698e-01f, -6.045339468875478e-01f}, + {7.950932316939014e-01f, -6.064872240324176e-01f}, + {7.936022947975847e-01f, -6.084368477434675e-01f}, + {7.921065773002124e-01f, -6.103828062763095e-01f}, + {7.906060882118751e-01f, -6.123250879086344e-01f}, + {7.891008365714072e-01f, -6.142636809402826e-01f}, + {7.875908314463325e-01f, -6.161985736933142e-01f}, + {7.860760819328091e-01f, -6.181297545120795e-01f}, + {7.845565971555752e-01f, -6.200572117632891e-01f}, + {7.830323862678940e-01f, -6.219809338360844e-01f}, + {7.815034584514979e-01f, -6.239009091421072e-01f}, + {7.799698229165344e-01f, -6.258171261155689e-01f}, + {7.784314889015095e-01f, -6.277295732133219e-01f}, + {7.768884656732324e-01f, -6.296382389149270e-01f}, + {7.753407625267603e-01f, -6.315431117227246e-01f}, + {7.737883887853415e-01f, -6.334441801619028e-01f}, + {7.722313538003597e-01f, -6.353414327805670e-01f}, + {7.706696669512773e-01f, -6.372348581498091e-01f}, + {7.691033376455797e-01f, -6.391244448637757e-01f}, + {7.675323753187178e-01f, -6.410101815397373e-01f}, + {7.659567894340514e-01f, -6.428920568181569e-01f}, + {7.643765894827926e-01f, -6.447700593627579e-01f}, + {7.627917849839481e-01f, -6.466441778605931e-01f}, + {7.612023854842618e-01f, -6.485144010221124e-01f}, + {7.596084005581580e-01f, -6.503807175812309e-01f}, + {7.580098398076831e-01f, -6.522431162953969e-01f}, + {7.564067128624476e-01f, -6.541015859456593e-01f}, + {7.547990293795690e-01f, -6.559561153367355e-01f}, + {7.531867990436125e-01f, -6.578066932970786e-01f}, + {7.515700315665336e-01f, -6.596533086789452e-01f}, + {7.499487366876190e-01f, -6.614959503584616e-01f}, + {7.483229241734281e-01f, -6.633346072356920e-01f}, + {7.466926038177344e-01f, -6.651692682347043e-01f}, + {7.450577854414661e-01f, -6.669999223036375e-01f}, + {7.434184788926470e-01f, -6.688265584147679e-01f}, + {7.417746940463380e-01f, -6.706491655645758e-01f}, + {7.401264408045760e-01f, -6.724677327738116e-01f}, + {7.384737290963160e-01f, -6.742822490875620e-01f}, + {7.368165688773699e-01f, -6.760927035753159e-01f}, + {7.351549701303474e-01f, -6.778990853310308e-01f}, + {7.334889428645953e-01f, -6.797013834731973e-01f}, + {7.318184971161379e-01f, -6.814995871449060e-01f}, + {7.301436429476156e-01f, -6.832936855139119e-01f}, + {7.284643904482252e-01f, -6.850836677727004e-01f}, + {7.267807497336585e-01f, -6.868695231385515e-01f}, + {7.250927309460417e-01f, -6.886512408536060e-01f}, + {7.234003442538740e-01f, -6.904288101849290e-01f}, + {7.217035998519666e-01f, -6.922022204245754e-01f}, + {7.200025079613817e-01f, -6.939714608896540e-01f}, + {7.182970788293696e-01f, -6.957365209223924e-01f}, + {7.165873227293083e-01f, -6.974973898902004e-01f}, + {7.148732499606411e-01f, -6.992540571857347e-01f}, + {7.131548708488146e-01f, -7.010065122269625e-01f}, + {7.114321957452164e-01f, -7.027547444572253e-01f}, + {7.097052350271130e-01f, -7.044987433453024e-01f}, + {7.079739990975870e-01f, -7.062384983854745e-01f} }; static const cos_msin_t cos_msin_640[640] = { - {9.999998117522413e-01, -6.135922766517967e-04}, - {9.999983057705969e-01, -1.840775905896510e-03}, - {9.999952938095762e-01, -3.067956762965976e-03}, - {9.999907758737150e-01, -4.295132999748002e-03}, - {9.999847519698173e-01, -5.522302768137352e-03}, - {9.999772221069551e-01, -6.749464220038533e-03}, - {9.999681862964679e-01, -7.976615507368575e-03}, - {9.999576445519639e-01, -9.203754782059819e-03}, - {9.999455968893185e-01, -1.043088019606269e-02}, - {9.999320433266753e-01, -1.165798990134850e-02}, - {9.999169838844458e-01, -1.288508204991220e-02}, - {9.999004185853092e-01, -1.411215479377519e-02}, - {9.998823474542126e-01, -1.533920628498810e-02}, - {9.998627705183706e-01, -1.656623467563356e-02}, - {9.998416878072659e-01, -1.779323811782898e-02}, - {9.998190993526487e-01, -1.902021476372936e-02}, - {9.997950051885367e-01, -2.024716276553004e-02}, - {9.997694053512153e-01, -2.147408027546951e-02}, - {9.997422998792375e-01, -2.270096544583216e-02}, - {9.997136888134235e-01, -2.392781642895110e-02}, - {9.996835721968610e-01, -2.515463137721094e-02}, - {9.996519500749053e-01, -2.638140844305051e-02}, - {9.996188224951786e-01, -2.760814577896574e-02}, - {9.995841895075704e-01, -2.883484153751236e-02}, - {9.995480511642375e-01, -3.006149387130874e-02}, - {9.995104075196035e-01, -3.128810093303862e-02}, - {9.994712586303591e-01, -3.251466087545394e-02}, - {9.994306045554617e-01, -3.374117185137758e-02}, - {9.993884453561358e-01, -3.496763201370620e-02}, - {9.993447810958722e-01, -3.619403951541294e-02}, - {9.992996118404286e-01, -3.742039250955028e-02}, - {9.992529376578290e-01, -3.864668914925275e-02}, - {9.992047586183639e-01, -3.987292758773981e-02}, - {9.991550747945901e-01, -4.109910597831850e-02}, - {9.991038862613305e-01, -4.232522247438635e-02}, - {9.990511930956741e-01, -4.355127522943403e-02}, - {9.989969953769761e-01, -4.477726239704831e-02}, - {9.989412931868569e-01, -4.600318213091462e-02}, - {9.988840866092031e-01, -4.722903258482004e-02}, - {9.988253757301669e-01, -4.845481191265589e-02}, - {9.987651606381658e-01, -4.968051826842070e-02}, - {9.987034414238826e-01, -5.090614980622282e-02}, - {9.986402181802653e-01, -5.213170468028332e-02}, - {9.985754910025268e-01, -5.335718104493870e-02}, - {9.985092599881454e-01, -5.458257705464371e-02}, - {9.984415252368637e-01, -5.580789086397409e-02}, - {9.983722868506889e-01, -5.703312062762941e-02}, - {9.983015449338929e-01, -5.825826450043575e-02}, - {9.982292995930115e-01, -5.948332063734863e-02}, - {9.981555509368452e-01, -6.070828719345561e-02}, - {9.980802990764579e-01, -6.193316232397920e-02}, - {9.980035441251777e-01, -6.315794418427960e-02}, - {9.979252861985960e-01, -6.438263092985747e-02}, - {9.978455254145679e-01, -6.560722071635666e-02}, - {9.977642618932119e-01, -6.683171169956714e-02}, - {9.976814957569091e-01, -6.805610203542757e-02}, - {9.975972271303040e-01, -6.928038988002828e-02}, - {9.975114561403035e-01, -7.050457338961386e-02}, - {9.974241829160772e-01, -7.172865072058610e-02}, - {9.973354075890570e-01, -7.295262002950662e-02}, - {9.972451302929369e-01, -7.417647947309980e-02}, - {9.971533511636731e-01, -7.540022720825540e-02}, - {9.970600703394830e-01, -7.662386139203149e-02}, - {9.969652879608459e-01, -7.784738018165707e-02}, - {9.968690041705026e-01, -7.907078173453497e-02}, - {9.967712191134545e-01, -8.029406420824454e-02}, - {9.966719329369642e-01, -8.151722576054453e-02}, - {9.965711457905548e-01, -8.274026454937569e-02}, - {9.964688578260101e-01, -8.396317873286374e-02}, - {9.963650691973739e-01, -8.518596646932200e-02}, - {9.962597800609497e-01, -8.640862591725426e-02}, - {9.961529905753015e-01, -8.763115523535747e-02}, - {9.960447009012520e-01, -8.885355258252460e-02}, - {9.959349112018836e-01, -9.007581611784729e-02}, - {9.958236216425376e-01, -9.129794400061877e-02}, - {9.957108323908140e-01, -9.251993439033654e-02}, - {9.955965436165716e-01, -9.374178544670515e-02}, - {9.954807554919269e-01, -9.496349532963899e-02}, - {9.953634681912550e-01, -9.618506219926506e-02}, - {9.952446818911883e-01, -9.740648421592572e-02}, - {9.951243967706169e-01, -9.862775954018151e-02}, - {9.950026130106879e-01, -9.984888633281383e-02}, - {9.948793307948056e-01, -1.010698627548278e-01}, - {9.947545503086307e-01, -1.022906869674551e-01}, - {9.946282717400804e-01, -1.035113571321563e-01}, - {9.945004952793278e-01, -1.047318714106244e-01}, - {9.943712211188022e-01, -1.059522279647869e-01}, - {9.942404494531879e-01, -1.071724249568088e-01}, - {9.941081804794248e-01, -1.083924605490956e-01}, - {9.939744143967076e-01, -1.096123329042957e-01}, - {9.938391514064855e-01, -1.108320401853034e-01}, - {9.937023917124622e-01, -1.120515805552615e-01}, - {9.935641355205953e-01, -1.132709521775643e-01}, - {9.934243830390962e-01, -1.144901532158602e-01}, - {9.932831344784294e-01, -1.157091818340545e-01}, - {9.931403900513129e-01, -1.169280361963119e-01}, - {9.929961499727171e-01, -1.181467144670601e-01}, - {9.928504144598651e-01, -1.193652148109914e-01}, - {9.927031837322318e-01, -1.205835353930663e-01}, - {9.925544580115441e-01, -1.218016743785162e-01}, - {9.924042375217801e-01, -1.230196299328457e-01}, - {9.922525224891693e-01, -1.242374002218357e-01}, - {9.920993131421918e-01, -1.254549834115462e-01}, - {9.919446097115779e-01, -1.266723776683190e-01}, - {9.917884124303086e-01, -1.278895811587802e-01}, - {9.916307215336136e-01, -1.291065920498434e-01}, - {9.914715372589731e-01, -1.303234085087122e-01}, - {9.913108598461154e-01, -1.315400287028831e-01}, - {9.911486895370180e-01, -1.327564508001479e-01}, - {9.909850265759061e-01, -1.339726729685971e-01}, - {9.908198712092535e-01, -1.351886933766218e-01}, - {9.906532236857811e-01, -1.364045101929175e-01}, - {9.904850842564571e-01, -1.376201215864860e-01}, - {9.903154531744962e-01, -1.388355257266385e-01}, - {9.901443306953601e-01, -1.400507207829983e-01}, - {9.899717170767560e-01, -1.412657049255036e-01}, - {9.897976125786367e-01, -1.424804763244102e-01}, - {9.896220174632009e-01, -1.436950331502945e-01}, - {9.894449319948911e-01, -1.449093735740556e-01}, - {9.892663564403953e-01, -1.461234957669190e-01}, - {9.890862910686448e-01, -1.473373979004386e-01}, - {9.889047361508148e-01, -1.485510781464996e-01}, - {9.887216919603238e-01, -1.497645346773215e-01}, - {9.885371587728330e-01, -1.509777656654608e-01}, - {9.883511368662461e-01, -1.521907692838135e-01}, - {9.881636265207087e-01, -1.534035437056180e-01}, - {9.879746280186079e-01, -1.546160871044581e-01}, - {9.877841416445722e-01, -1.558283976542652e-01}, - {9.875921676854704e-01, -1.570404735293217e-01}, - {9.873987064304122e-01, -1.582523129042630e-01}, - {9.872037581707463e-01, -1.594639139540810e-01}, - {9.870073232000616e-01, -1.606752748541265e-01}, - {9.868094018141855e-01, -1.618863937801118e-01}, - {9.866099943111839e-01, -1.630972689081137e-01}, - {9.864091009913611e-01, -1.643078984145762e-01}, - {9.862067221572588e-01, -1.655182804763130e-01}, - {9.860028581136556e-01, -1.667284132705107e-01}, - {9.857975091675675e-01, -1.679382949747312e-01}, - {9.855906756282459e-01, -1.691479237669144e-01}, - {9.853823578071785e-01, -1.703572978253813e-01}, - {9.851725560180883e-01, -1.715664153288364e-01}, - {9.849612705769328e-01, -1.727752744563706e-01}, - {9.847485018019042e-01, -1.739838733874638e-01}, - {9.845342500134284e-01, -1.751922103019880e-01}, - {9.843185155341647e-01, -1.764002833802096e-01}, - {9.841012986890054e-01, -1.776080908027924e-01}, - {9.838825998050751e-01, -1.788156307508001e-01}, - {9.836624192117303e-01, -1.800229014056995e-01}, - {9.834407572405590e-01, -1.812299009493628e-01}, - {9.832176142253802e-01, -1.824366275640705e-01}, - {9.829929905022433e-01, -1.836430794325141e-01}, - {9.827668864094273e-01, -1.848492547377989e-01}, - {9.825393022874412e-01, -1.860551516634466e-01}, - {9.823102384790224e-01, -1.872607683933984e-01}, - {9.820796953291370e-01, -1.884661031120172e-01}, - {9.818476731849786e-01, -1.896711540040907e-01}, - {9.816141723959685e-01, -1.908759192548340e-01}, - {9.813791933137546e-01, -1.920803970498924e-01}, - {9.811427362922112e-01, -1.932845855753442e-01}, - {9.809048016874382e-01, -1.944884830177032e-01}, - {9.806653898577611e-01, -1.956920875639216e-01}, - {9.804245011637294e-01, -1.968953974013927e-01}, - {9.801821359681174e-01, -1.980984107179536e-01}, - {9.799382946359226e-01, -1.993011257018880e-01}, - {9.796929775343657e-01, -2.005035405419289e-01}, - {9.794461850328897e-01, -2.017056534272613e-01}, - {9.791979175031598e-01, -2.029074625475249e-01}, - {9.789481753190622e-01, -2.041089660928169e-01}, - {9.786969588567044e-01, -2.053101622536946e-01}, - {9.784442684944136e-01, -2.065110492211783e-01}, - {9.781901046127370e-01, -2.077116251867540e-01}, - {9.779344675944409e-01, -2.089118883423760e-01}, - {9.776773578245099e-01, -2.101118368804696e-01}, - {9.774187756901469e-01, -2.113114689939341e-01}, - {9.771587215807717e-01, -2.125107828761450e-01}, - {9.768971958880210e-01, -2.137097767209575e-01}, - {9.766341990057480e-01, -2.149084487227085e-01}, - {9.763697313300211e-01, -2.161067970762195e-01}, - {9.761037932591240e-01, -2.173048199767996e-01}, - {9.758363851935545e-01, -2.185025156202481e-01}, - {9.755675075360243e-01, -2.196998822028567e-01}, - {9.752971606914583e-01, -2.208969179214133e-01}, - {9.750253450669941e-01, -2.220936209732035e-01}, - {9.747520610719810e-01, -2.232899895560143e-01}, - {9.744773091179798e-01, -2.244860218681361e-01}, - {9.742010896187618e-01, -2.256817161083659e-01}, - {9.739234029903089e-01, -2.268770704760098e-01}, - {9.736442496508120e-01, -2.280720831708857e-01}, - {9.733636300206708e-01, -2.292667523933261e-01}, - {9.730815445224936e-01, -2.304610763441808e-01}, - {9.727979935810960e-01, -2.316550532248194e-01}, - {9.725129776235006e-01, -2.328486812371343e-01}, - {9.722264970789363e-01, -2.340419585835434e-01}, - {9.719385523788376e-01, -2.352348834669925e-01}, - {9.716491439568440e-01, -2.364274540909583e-01}, - {9.713582722487994e-01, -2.376196686594509e-01}, - {9.710659376927513e-01, -2.388115253770169e-01}, - {9.707721407289504e-01, -2.400030224487415e-01}, - {9.704768817998493e-01, -2.411941580802516e-01}, - {9.701801613501028e-01, -2.423849304777186e-01}, - {9.698819798265667e-01, -2.435753378478606e-01}, - {9.695823376782966e-01, -2.447653783979458e-01}, - {9.692812353565485e-01, -2.459550503357946e-01}, - {9.689786733147769e-01, -2.471443518697825e-01}, - {9.686746520086348e-01, -2.483332812088429e-01}, - {9.683691718959728e-01, -2.495218365624697e-01}, - {9.680622334368384e-01, -2.507100161407201e-01}, - {9.677538370934755e-01, -2.518978181542170e-01}, - {9.674439833303232e-01, -2.530852408141520e-01}, - {9.671326726140158e-01, -2.542722823322882e-01}, - {9.668199054133816e-01, -2.554589409209625e-01}, - {9.665056821994423e-01, -2.566452147930884e-01}, - {9.661900034454125e-01, -2.578311021621590e-01}, - {9.658728696266987e-01, -2.590166012422493e-01}, - {9.655542812208985e-01, -2.602017102480191e-01}, - {9.652342387078005e-01, -2.613864273947156e-01}, - {9.649127425693828e-01, -2.625707508981763e-01}, - {9.645897932898128e-01, -2.637546789748313e-01}, - {9.642653913554462e-01, -2.649382098417065e-01}, - {9.639395372548267e-01, -2.661213417164257e-01}, - {9.636122314786845e-01, -2.673040728172135e-01}, - {9.632834745199362e-01, -2.684864013628985e-01}, - {9.629532668736839e-01, -2.696683255729151e-01}, - {9.626216090372143e-01, -2.708498436673069e-01}, - {9.622885015099981e-01, -2.720309538667289e-01}, - {9.619539447936892e-01, -2.732116543924507e-01}, - {9.616179393921240e-01, -2.743919434663584e-01}, - {9.612804858113206e-01, -2.755718193109581e-01}, - {9.609415845594780e-01, -2.767512801493782e-01}, - {9.606012361469752e-01, -2.779303242053718e-01}, - {9.602594410863711e-01, -2.791089497033199e-01}, - {9.599161998924024e-01, -2.802871548682339e-01}, - {9.595715130819845e-01, -2.814649379257579e-01}, - {9.592253811742094e-01, -2.826422971021723e-01}, - {9.588778046903456e-01, -2.838192306243950e-01}, - {9.585287841538368e-01, -2.849957367199857e-01}, - {9.581783200903017e-01, -2.861718136171474e-01}, - {9.578264130275329e-01, -2.873474595447295e-01}, - {9.574730634954960e-01, -2.885226727322305e-01}, - {9.571182720263292e-01, -2.896974514098006e-01}, - {9.567620391543418e-01, -2.908717938082443e-01}, - {9.564043654160141e-01, -2.920456981590233e-01}, - {9.560452513499964e-01, -2.932191626942586e-01}, - {9.556846974971080e-01, -2.943921856467341e-01}, - {9.553227044003364e-01, -2.955647652498983e-01}, - {9.549592726048367e-01, -2.967368997378675e-01}, - {9.545944026579306e-01, -2.979085873454284e-01}, - {9.542280951091057e-01, -2.990798263080405e-01}, - {9.538603505100144e-01, -3.002506148618392e-01}, - {9.534911694144735e-01, -3.014209512436381e-01}, - {9.531205523784633e-01, -3.025908336909318e-01}, - {9.527484999601259e-01, -3.037602604418984e-01}, - {9.523750127197659e-01, -3.049292297354024e-01}, - {9.520000912198481e-01, -3.060977398109971e-01}, - {9.516237360249976e-01, -3.072657889089275e-01}, - {9.512459477019986e-01, -3.084333752701328e-01}, - {9.508667268197933e-01, -3.096004971362489e-01}, - {9.504860739494817e-01, -3.107671527496115e-01}, - {9.501039896643201e-01, -3.119333403532583e-01}, - {9.497204745397203e-01, -3.130990581909318e-01}, - {9.493355291532494e-01, -3.142643045070820e-01}, - {9.489491540846281e-01, -3.154290775468691e-01}, - {9.485613499157303e-01, -3.165933755561658e-01}, - {9.481721172305820e-01, -3.177571967815606e-01}, - {9.477814566153607e-01, -3.189205394703594e-01}, - {9.473893686583942e-01, -3.200834018705895e-01}, - {9.469958539501598e-01, -3.212457822310009e-01}, - {9.466009130832835e-01, -3.224076788010699e-01}, - {9.462045466525394e-01, -3.235690898310011e-01}, - {9.458067552548478e-01, -3.247300135717307e-01}, - {9.454075394892756e-01, -3.258904482749284e-01}, - {9.450068999570345e-01, -3.270503921930005e-01}, - {9.446048372614803e-01, -3.282098435790925e-01}, - {9.442013520081122e-01, -3.293688006870915e-01}, - {9.437964448045717e-01, -3.305272617716291e-01}, - {9.433901162606417e-01, -3.316852250880838e-01}, - {9.429823669882458e-01, -3.328426888925837e-01}, - {9.425731976014469e-01, -3.339996514420094e-01}, - {9.421626087164466e-01, -3.351561109939961e-01}, - {9.417506009515846e-01, -3.363120658069366e-01}, - {9.413371749273369e-01, -3.374675141399838e-01}, - {9.409223312663159e-01, -3.386224542530535e-01}, - {9.405060705932683e-01, -3.397768844068269e-01}, - {9.400883935350755e-01, -3.409308028627527e-01}, - {9.396693007207513e-01, -3.420842078830508e-01}, - {9.392487927814420e-01, -3.432370977307140e-01}, - {9.388268703504251e-01, -3.443894706695110e-01}, - {9.384035340631081e-01, -3.455413249639891e-01}, - {9.379787845570278e-01, -3.466926588794764e-01}, - {9.375526224718491e-01, -3.478434706820849e-01}, - {9.371250484493645e-01, -3.489937586387129e-01}, - {9.366960631334929e-01, -3.501435210170474e-01}, - {9.362656671702783e-01, -3.512927560855671e-01}, - {9.358338612078891e-01, -3.524414621135448e-01}, - {9.354006458966176e-01, -3.535896373710499e-01}, - {9.349660218888781e-01, -3.547372801289512e-01}, - {9.345299898392064e-01, -3.558843886589194e-01}, - {9.340925504042590e-01, -3.570309612334300e-01}, - {9.336537042428116e-01, -3.581769961257653e-01}, - {9.332134520157588e-01, -3.593224916100174e-01}, - {9.327717943861125e-01, -3.604674459610909e-01}, - {9.323287320190009e-01, -3.616118574547051e-01}, - {9.318842655816681e-01, -3.627557243673972e-01}, - {9.314383957434725e-01, -3.638990449765241e-01}, - {9.309911231758859e-01, -3.650418175602657e-01}, - {9.305424485524929e-01, -3.661840403976272e-01}, - {9.300923725489892e-01, -3.673257117684415e-01}, - {9.296408958431813e-01, -3.684668299533723e-01}, - {9.291880191149847e-01, -3.696073932339162e-01}, - {9.287337430464239e-01, -3.707473998924054e-01}, - {9.282780683216301e-01, -3.718868482120106e-01}, - {9.278209956268415e-01, -3.730257364767432e-01}, - {9.273625256504011e-01, -3.741640629714579e-01}, - {9.269026590827565e-01, -3.753018259818559e-01}, - {9.264413966164585e-01, -3.764390237944864e-01}, - {9.259787389461599e-01, -3.775756546967501e-01}, - {9.255146867686148e-01, -3.787117169769015e-01}, - {9.250492407826776e-01, -3.798472089240512e-01}, - {9.245824016893013e-01, -3.809821288281689e-01}, - {9.241141701915373e-01, -3.821164749800858e-01}, - {9.236445469945337e-01, -3.832502456714969e-01}, - {9.231735328055345e-01, -3.843834391949643e-01}, - {9.227011283338786e-01, -3.855160538439188e-01}, - {9.222273342909986e-01, -3.866480879126634e-01}, - {9.217521513904198e-01, -3.877795396963752e-01}, - {9.212755803477590e-01, -3.889104074911081e-01}, - {9.207976218807237e-01, -3.900406895937958e-01}, - {9.203182767091106e-01, -3.911703843022539e-01}, - {9.198375455548048e-01, -3.922994899151824e-01}, - {9.193554291417789e-01, -3.934280047321689e-01}, - {9.188719281960914e-01, -3.945559270536903e-01}, - {9.183870434458861e-01, -3.956832551811160e-01}, - {9.179007756213905e-01, -3.968099874167103e-01}, - {9.174131254549152e-01, -3.979361220636348e-01}, - {9.169240936808526e-01, -3.990616574259509e-01}, - {9.164336810356757e-01, -4.001865918086229e-01}, - {9.159418882579371e-01, -4.013109235175197e-01}, - {9.154487160882678e-01, -4.024346508594184e-01}, - {9.149541652693762e-01, -4.035577721420057e-01}, - {9.144582365460469e-01, -4.046802856738814e-01}, - {9.139609306651395e-01, -4.058021897645602e-01}, - {9.134622483755878e-01, -4.069234827244749e-01}, - {9.129621904283982e-01, -4.080441628649787e-01}, - {9.124607575766490e-01, -4.091642284983474e-01}, - {9.119579505754890e-01, -4.102836779377824e-01}, - {9.114537701821365e-01, -4.114025094974132e-01}, - {9.109482171558779e-01, -4.125207214922996e-01}, - {9.104412922580672e-01, -4.136383122384345e-01}, - {9.099329962521239e-01, -4.147552800527466e-01}, - {9.094233299035327e-01, -4.158716232531024e-01}, - {9.089122939798419e-01, -4.169873401583093e-01}, - {9.083998892506623e-01, -4.181024290881177e-01}, - {9.078861164876663e-01, -4.192168883632239e-01}, - {9.073709764645862e-01, -4.203307163052724e-01}, - {9.068544699572136e-01, -4.214439112368585e-01}, - {9.063365977433983e-01, -4.225564714815306e-01}, - {9.058173606030460e-01, -4.236683953637931e-01}, - {9.052967593181188e-01, -4.247796812091088e-01}, - {9.047747946726327e-01, -4.258903273439013e-01}, - {9.042514674526569e-01, -4.270003320955576e-01}, - {9.037267784463131e-01, -4.281096937924305e-01}, - {9.032007284437731e-01, -4.292184107638414e-01}, - {9.026733182372588e-01, -4.303264813400826e-01}, - {9.021445486210405e-01, -4.314339038524199e-01}, - {9.016144203914357e-01, -4.325406766330948e-01}, - {9.010829343468079e-01, -4.336467980153277e-01}, - {9.005500912875654e-01, -4.347522663333197e-01}, - {9.000158920161603e-01, -4.358570799222555e-01}, - {8.994803373370870e-01, -4.369612371183058e-01}, - {8.989434280568812e-01, -4.380647362586298e-01}, - {8.984051649841186e-01, -4.391675756813778e-01}, - {8.978655489294136e-01, -4.402697537256935e-01}, - {8.973245807054183e-01, -4.413712687317167e-01}, - {8.967822611268210e-01, -4.424721190405857e-01}, - {8.962385910103452e-01, -4.435723029944398e-01}, - {8.956935711747483e-01, -4.446718189364220e-01}, - {8.951472024408204e-01, -4.457706652106809e-01}, - {8.945994856313827e-01, -4.468688401623742e-01}, - {8.940504215712870e-01, -4.479663421376699e-01}, - {8.935000110874138e-01, -4.490631694837502e-01}, - {8.929482550086714e-01, -4.501593205488127e-01}, - {8.923951541659944e-01, -4.512547936820739e-01}, - {8.918407093923427e-01, -4.523495872337709e-01}, - {8.912849215227001e-01, -4.534436995551644e-01}, - {8.907277913940732e-01, -4.545371289985410e-01}, - {8.901693198454897e-01, -4.556298739172159e-01}, - {8.896095077179980e-01, -4.567219326655349e-01}, - {8.890483558546646e-01, -4.578133035988772e-01}, - {8.884858651005743e-01, -4.589039850736579e-01}, - {8.879220363028281e-01, -4.599939754473306e-01}, - {8.873568703105417e-01, -4.610832730783892e-01}, - {8.867903679748451e-01, -4.621718763263714e-01}, - {8.862225301488806e-01, -4.632597835518601e-01}, - {8.856533576878016e-01, -4.643469931164871e-01}, - {8.850828514487716e-01, -4.654335033829341e-01}, - {8.845110122909626e-01, -4.665193127149364e-01}, - {8.839378410755541e-01, -4.676044194772847e-01}, - {8.833633386657316e-01, -4.686888220358279e-01}, - {8.827875059266853e-01, -4.697725187574754e-01}, - {8.822103437256089e-01, -4.708555080101994e-01}, - {8.816318529316984e-01, -4.719377881630376e-01}, - {8.810520344161502e-01, -4.730193575860958e-01}, - {8.804708890521608e-01, -4.741002146505500e-01}, - {8.798884177149244e-01, -4.751803577286489e-01}, - {8.793046212816323e-01, -4.762597851937166e-01}, - {8.787195006314716e-01, -4.773384954201548e-01}, - {8.781330566456232e-01, -4.784164867834454e-01}, - {8.775452902072614e-01, -4.794937576601530e-01}, - {8.769562022015515e-01, -4.805703064279270e-01}, - {8.763657935156495e-01, -4.816461314655044e-01}, - {8.757740650387004e-01, -4.827212311527123e-01}, - {8.751810176618363e-01, -4.837956038704698e-01}, - {8.745866522781761e-01, -4.848692480007911e-01}, - {8.739909697828232e-01, -4.859421619267875e-01}, - {8.733939710728648e-01, -4.870143440326701e-01}, - {8.727956570473698e-01, -4.880857927037520e-01}, - {8.721960286073888e-01, -4.891565063264507e-01}, - {8.715950866559510e-01, -4.902264832882912e-01}, - {8.709928320980644e-01, -4.912957219779071e-01}, - {8.703892658407133e-01, -4.923642207850446e-01}, - {8.697843887928577e-01, -4.934319781005636e-01}, - {8.691782018654314e-01, -4.944989923164409e-01}, - {8.685707059713409e-01, -4.955652618257725e-01}, - {8.679619020254642e-01, -4.966307850227757e-01}, - {8.673517909446490e-01, -4.976955603027919e-01}, - {8.667403736477115e-01, -4.987595860622885e-01}, - {8.661276510554351e-01, -4.998228606988624e-01}, - {8.655136240905691e-01, -5.008853826112407e-01}, - {8.648982936778269e-01, -5.019471501992850e-01}, - {8.642816607438848e-01, -5.030081618639924e-01}, - {8.636637262173812e-01, -5.040684160074983e-01}, - {8.630444910289141e-01, -5.051279110330795e-01}, - {8.624239561110406e-01, -5.061866453451552e-01}, - {8.618021223982749e-01, -5.072446173492910e-01}, - {8.611789908270876e-01, -5.083018254522002e-01}, - {8.605545623359034e-01, -5.093582680617462e-01}, - {8.599288378651004e-01, -5.104139435869457e-01}, - {8.593018183570085e-01, -5.114688504379703e-01}, - {8.586735047559073e-01, -5.125229870261497e-01}, - {8.580438980080262e-01, -5.135763517639729e-01}, - {8.574129990615412e-01, -5.146289430650919e-01}, - {8.567808088665750e-01, -5.156807593443229e-01}, - {8.561473283751945e-01, -5.167317990176499e-01}, - {8.555125585414098e-01, -5.177820605022260e-01}, - {8.548765003211730e-01, -5.188315422163763e-01}, - {8.542391546723761e-01, -5.198802425796005e-01}, - {8.536005225548502e-01, -5.209281600125748e-01}, - {8.529606049303636e-01, -5.219752929371544e-01}, - {8.523194027626210e-01, -5.230216397763758e-01}, - {8.516769170172609e-01, -5.240671989544601e-01}, - {8.510331486618554e-01, -5.251119688968137e-01}, - {8.503880986659081e-01, -5.261559480300321e-01}, - {8.497417680008525e-01, -5.271991347819013e-01}, - {8.490941576400509e-01, -5.282415275814013e-01}, - {8.484452685587929e-01, -5.292831248587072e-01}, - {8.477951017342936e-01, -5.303239250451923e-01}, - {8.471436581456926e-01, -5.313639265734305e-01}, - {8.464909387740521e-01, -5.324031278771979e-01}, - {8.458369446023557e-01, -5.334415273914767e-01}, - {8.451816766155068e-01, -5.344791235524554e-01}, - {8.445251358003272e-01, -5.355159147975332e-01}, - {8.438673231455553e-01, -5.365518995653215e-01}, - {8.432082396418454e-01, -5.375870762956454e-01}, - {8.425478862817651e-01, -5.386214434295480e-01}, - {8.418862640597948e-01, -5.396549994092906e-01}, - {8.412233739723254e-01, -5.406877426783570e-01}, - {8.405592170176576e-01, -5.417196716814542e-01}, - {8.398937941959995e-01, -5.427507848645159e-01}, - {8.392271065094661e-01, -5.437810806747042e-01}, - {8.385591549620770e-01, -5.448105575604123e-01}, - {8.378899405597550e-01, -5.458392139712668e-01}, - {8.372194643103249e-01, -5.468670483581293e-01}, - {8.365477272235120e-01, -5.478940591731002e-01}, - {8.358747303109401e-01, -5.489202448695194e-01}, - {8.352004745861303e-01, -5.499456039019702e-01}, - {8.345249610644997e-01, -5.509701347262801e-01}, - {8.338481907633595e-01, -5.519938357995242e-01}, - {8.331701647019132e-01, -5.530167055800275e-01}, - {8.324908839012561e-01, -5.540387425273663e-01}, - {8.318103493843727e-01, -5.550599451023716e-01}, - {8.311285621761358e-01, -5.560803117671306e-01}, - {8.304455233033046e-01, -5.570998409849897e-01}, - {8.297612337945230e-01, -5.581185312205561e-01}, - {8.290756946803191e-01, -5.591363809397010e-01}, - {8.283889069931020e-01, -5.601533886095610e-01}, - {8.277008717671618e-01, -5.611695526985409e-01}, - {8.270115900386670e-01, -5.621848716763159e-01}, - {8.263210628456635e-01, -5.631993440138341e-01}, - {8.256292912280727e-01, -5.642129681833185e-01}, - {8.249362762276903e-01, -5.652257426582692e-01}, - {8.242420188881840e-01, -5.662376659134664e-01}, - {8.235465202550933e-01, -5.672487364249718e-01}, - {8.228497813758264e-01, -5.682589526701315e-01}, - {8.221518032996592e-01, -5.692683131275782e-01}, - {8.214525870777344e-01, -5.702768162772331e-01}, - {8.207521337630588e-01, -5.712844606003090e-01}, - {8.200504444105025e-01, -5.722912445793115e-01}, - {8.193475200767969e-01, -5.732971666980422e-01}, - {8.186433618205335e-01, -5.743022254416005e-01}, - {8.179379707021619e-01, -5.753064192963863e-01}, - {8.172313477839882e-01, -5.763097467501014e-01}, - {8.165234941301740e-01, -5.773122062917532e-01}, - {8.158144108067338e-01, -5.783137964116556e-01}, - {8.151040988815345e-01, -5.793145156014319e-01}, - {8.143925594242929e-01, -5.803143623540171e-01}, - {8.136797935065747e-01, -5.813133351636602e-01}, - {8.129658022017924e-01, -5.823114325259262e-01}, - {8.122505865852039e-01, -5.833086529376983e-01}, - {8.115341477339112e-01, -5.843049948971807e-01}, - {8.108164867268581e-01, -5.853004569039005e-01}, - {8.100976046448293e-01, -5.862950374587097e-01}, - {8.093775025704479e-01, -5.872887350637883e-01}, - {8.086561815881750e-01, -5.882815482226452e-01}, - {8.079336427843067e-01, -5.892734754401222e-01}, - {8.072098872469734e-01, -5.902645152223945e-01}, - {8.064849160661379e-01, -5.912546660769743e-01}, - {8.057587303335938e-01, -5.922439265127122e-01}, - {8.050313311429637e-01, -5.932322950397998e-01}, - {8.043027195896973e-01, -5.942197701697721e-01}, - {8.035728967710708e-01, -5.952063504155093e-01}, - {8.028418637861839e-01, -5.961920342912395e-01}, - {8.021096217359593e-01, -5.971768203125404e-01}, - {8.013761717231402e-01, -5.981607069963423e-01}, - {8.006415148522891e-01, -5.991436928609294e-01}, - {7.999056522297859e-01, -6.001257764259429e-01}, - {7.991685849638264e-01, -6.011069562123827e-01}, - {7.984303141644207e-01, -6.020872307426096e-01}, - {7.976908409433912e-01, -6.030665985403482e-01}, - {7.969501664143711e-01, -6.040450581306880e-01}, - {7.962082916928030e-01, -6.050226080400867e-01}, - {7.954652178959369e-01, -6.059992467963715e-01}, - {7.947209461428283e-01, -6.069749729287426e-01}, - {7.939754775543372e-01, -6.079497849677736e-01}, - {7.932288132531257e-01, -6.089236814454155e-01}, - {7.924809543636567e-01, -6.098966608949977e-01}, - {7.917319020121923e-01, -6.108687218512306e-01}, - {7.909816573267918e-01, -6.118398628502083e-01}, - {7.902302214373100e-01, -6.128100824294097e-01}, - {7.894775954753960e-01, -6.137793791277018e-01}, - {7.887237805744907e-01, -6.147477514853411e-01}, - {7.879687778698258e-01, -6.157151980439765e-01}, - {7.872125884984216e-01, -6.166817173466510e-01}, - {7.864552135990858e-01, -6.176473079378039e-01}, - {7.856966543124112e-01, -6.186119683632733e-01}, - {7.849369117807745e-01, -6.195756971702979e-01}, - {7.841759871483340e-01, -6.205384929075197e-01}, - {7.834138815610288e-01, -6.215003541249855e-01}, - {7.826505961665757e-01, -6.224612793741500e-01}, - {7.818861321144691e-01, -6.234212672078768e-01}, - {7.811204905559779e-01, -6.243803161804418e-01}, - {7.803536726441443e-01, -6.253384248475345e-01}, - {7.795856795337824e-01, -6.262955917662607e-01}, - {7.788165123814760e-01, -6.272518154951441e-01}, - {7.780461723455767e-01, -6.282070945941292e-01}, - {7.772746605862029e-01, -6.291614276245828e-01}, - {7.765019782652373e-01, -6.301148131492967e-01}, - {7.757281265463254e-01, -6.310672497324895e-01}, - {7.749531065948739e-01, -6.320187359398091e-01}, - {7.741769195780490e-01, -6.329692703383341e-01}, - {7.733995666647743e-01, -6.339188514965771e-01}, - {7.726210490257291e-01, -6.348674779844861e-01}, - {7.718413678333470e-01, -6.358151483734467e-01}, - {7.710605242618138e-01, -6.367618612362842e-01}, - {7.702785194870657e-01, -6.377076151472665e-01}, - {7.694953546867879e-01, -6.386524086821050e-01}, - {7.687110310404124e-01, -6.395962404179578e-01}, - {7.679255497291163e-01, -6.405391089334316e-01}, - {7.671389119358204e-01, -6.414810128085832e-01}, - {7.663511188451869e-01, -6.424219506249224e-01}, - {7.655621716436182e-01, -6.433619209654138e-01}, - {7.647720715192542e-01, -6.443009224144792e-01}, - {7.639808196619715e-01, -6.452389535579994e-01}, - {7.631884172633813e-01, -6.461760129833163e-01}, - {7.623948655168271e-01, -6.471120992792355e-01}, - {7.616001656173835e-01, -6.480472110360278e-01}, - {7.608043187618542e-01, -6.489813468454321e-01}, - {7.600073261487703e-01, -6.499145053006563e-01}, - {7.592091889783881e-01, -6.508466849963809e-01}, - {7.584099084526877e-01, -6.517778845287601e-01}, - {7.576094857753715e-01, -6.527081024954242e-01}, - {7.568079221518612e-01, -6.536373374954818e-01}, - {7.560052187892974e-01, -6.545655881295217e-01}, - {7.552013768965365e-01, -6.554928529996153e-01}, - {7.543963976841503e-01, -6.564191307093185e-01}, - {7.535902823644226e-01, -6.573444198636738e-01}, - {7.527830321513488e-01, -6.582687190692122e-01}, - {7.519746482606328e-01, -6.591920269339562e-01}, - {7.511651319096865e-01, -6.601143420674205e-01}, - {7.503544843176265e-01, -6.610356630806152e-01}, - {7.495427067052737e-01, -6.619559885860479e-01}, - {7.487298002951505e-01, -6.628753171977246e-01}, - {7.479157663114792e-01, -6.637936475311532e-01}, - {7.471006059801801e-01, -6.647109782033448e-01}, - {7.462843205288703e-01, -6.656273078328160e-01}, - {7.454669111868606e-01, -6.665426350395909e-01}, - {7.446483791851549e-01, -6.674569584452033e-01}, - {7.438287257564475e-01, -6.683702766726985e-01}, - {7.430079521351217e-01, -6.692825883466360e-01}, - {7.421860595572477e-01, -6.701938920930909e-01}, - {7.413630492605809e-01, -6.711041865396560e-01}, - {7.405389224845600e-01, -6.720134703154446e-01}, - {7.397136804703048e-01, -6.729217420510915e-01}, - {7.388873244606151e-01, -6.738290003787560e-01}, - {7.380598556999681e-01, -6.747352439321236e-01}, - {7.372312754345167e-01, -6.756404713464076e-01}, - {7.364015849120877e-01, -6.765446812583521e-01}, - {7.355707853821803e-01, -6.774478723062332e-01}, - {7.347388780959635e-01, -6.783500431298615e-01}, - {7.339058643062745e-01, -6.792511923705841e-01}, - {7.330717452676171e-01, -6.801513186712865e-01}, - {7.322365222361595e-01, -6.810504206763948e-01}, - {7.314001964697324e-01, -6.819484970318775e-01}, - {7.305627692278276e-01, -6.828455463852481e-01}, - {7.297242417715950e-01, -6.837415673855661e-01}, - {7.288846153638420e-01, -6.846365586834405e-01}, - {7.280438912690308e-01, -6.855305189310302e-01}, - {7.272020707532766e-01, -6.864234467820476e-01}, - {7.263591550843460e-01, -6.873153408917591e-01}, - {7.255151455316546e-01, -6.882061999169885e-01}, - {7.246700433662657e-01, -6.890960225161182e-01}, - {7.238238498608879e-01, -6.899848073490914e-01}, - {7.229765662898732e-01, -6.908725530774144e-01}, - {7.221281939292153e-01, -6.917592583641577e-01}, - {7.212787340565479e-01, -6.926449218739597e-01}, - {7.204281879511419e-01, -6.935295422730269e-01}, - {7.195765568939045e-01, -6.944131182291369e-01}, - {7.187238421673769e-01, -6.952956484116404e-01}, - {7.178700450557317e-01, -6.961771314914630e-01}, - {7.170151668447722e-01, -6.970575661411068e-01}, - {7.161592088219294e-01, -6.979369510346534e-01}, - {7.153021722762606e-01, -6.988152848477649e-01}, - {7.144440584984474e-01, -6.996925662576865e-01}, - {7.135848687807936e-01, -7.005687939432483e-01}, - {7.127246044172235e-01, -7.014439665848672e-01}, - {7.118632667032795e-01, -7.023180828645491e-01}, - {7.110008569361208e-01, -7.031911414658905e-01}, - {7.101373764145209e-01, -7.040631410740809e-01}, - {7.092728264388657e-01, -7.049340803759049e-01}, - {7.084072083111520e-01, -7.058039580597435e-01}, - {7.075405233349850e-01, -7.066727728155766e-01} + {9.999998117522413e-01f, -6.135922766517967e-04f}, + {9.999983057705969e-01f, -1.840775905896510e-03f}, + {9.999952938095762e-01f, -3.067956762965976e-03f}, + {9.999907758737150e-01f, -4.295132999748002e-03f}, + {9.999847519698173e-01f, -5.522302768137352e-03f}, + {9.999772221069551e-01f, -6.749464220038533e-03f}, + {9.999681862964679e-01f, -7.976615507368575e-03f}, + {9.999576445519639e-01f, -9.203754782059819e-03f}, + {9.999455968893185e-01f, -1.043088019606269e-02f}, + {9.999320433266753e-01f, -1.165798990134850e-02f}, + {9.999169838844458e-01f, -1.288508204991220e-02f}, + {9.999004185853092e-01f, -1.411215479377519e-02f}, + {9.998823474542126e-01f, -1.533920628498810e-02f}, + {9.998627705183706e-01f, -1.656623467563356e-02f}, + {9.998416878072659e-01f, -1.779323811782898e-02f}, + {9.998190993526487e-01f, -1.902021476372936e-02f}, + {9.997950051885367e-01f, -2.024716276553004e-02f}, + {9.997694053512153e-01f, -2.147408027546951e-02f}, + {9.997422998792375e-01f, -2.270096544583216e-02f}, + {9.997136888134235e-01f, -2.392781642895110e-02f}, + {9.996835721968610e-01f, -2.515463137721094e-02f}, + {9.996519500749053e-01f, -2.638140844305051e-02f}, + {9.996188224951786e-01f, -2.760814577896574e-02f}, + {9.995841895075704e-01f, -2.883484153751236e-02f}, + {9.995480511642375e-01f, -3.006149387130874e-02f}, + {9.995104075196035e-01f, -3.128810093303862e-02f}, + {9.994712586303591e-01f, -3.251466087545394e-02f}, + {9.994306045554617e-01f, -3.374117185137758e-02f}, + {9.993884453561358e-01f, -3.496763201370620e-02f}, + {9.993447810958722e-01f, -3.619403951541294e-02f}, + {9.992996118404286e-01f, -3.742039250955028e-02f}, + {9.992529376578290e-01f, -3.864668914925275e-02f}, + {9.992047586183639e-01f, -3.987292758773981e-02f}, + {9.991550747945901e-01f, -4.109910597831850e-02f}, + {9.991038862613305e-01f, -4.232522247438635e-02f}, + {9.990511930956741e-01f, -4.355127522943403e-02f}, + {9.989969953769761e-01f, -4.477726239704831e-02f}, + {9.989412931868569e-01f, -4.600318213091462e-02f}, + {9.988840866092031e-01f, -4.722903258482004e-02f}, + {9.988253757301669e-01f, -4.845481191265589e-02f}, + {9.987651606381658e-01f, -4.968051826842070e-02f}, + {9.987034414238826e-01f, -5.090614980622282e-02f}, + {9.986402181802653e-01f, -5.213170468028332e-02f}, + {9.985754910025268e-01f, -5.335718104493870e-02f}, + {9.985092599881454e-01f, -5.458257705464371e-02f}, + {9.984415252368637e-01f, -5.580789086397409e-02f}, + {9.983722868506889e-01f, -5.703312062762941e-02f}, + {9.983015449338929e-01f, -5.825826450043575e-02f}, + {9.982292995930115e-01f, -5.948332063734863e-02f}, + {9.981555509368452e-01f, -6.070828719345561e-02f}, + {9.980802990764579e-01f, -6.193316232397920e-02f}, + {9.980035441251777e-01f, -6.315794418427960e-02f}, + {9.979252861985960e-01f, -6.438263092985747e-02f}, + {9.978455254145679e-01f, -6.560722071635666e-02f}, + {9.977642618932119e-01f, -6.683171169956714e-02f}, + {9.976814957569091e-01f, -6.805610203542757e-02f}, + {9.975972271303040e-01f, -6.928038988002828e-02f}, + {9.975114561403035e-01f, -7.050457338961386e-02f}, + {9.974241829160772e-01f, -7.172865072058610e-02f}, + {9.973354075890570e-01f, -7.295262002950662e-02f}, + {9.972451302929369e-01f, -7.417647947309980e-02f}, + {9.971533511636731e-01f, -7.540022720825540e-02f}, + {9.970600703394830e-01f, -7.662386139203149e-02f}, + {9.969652879608459e-01f, -7.784738018165707e-02f}, + {9.968690041705026e-01f, -7.907078173453497e-02f}, + {9.967712191134545e-01f, -8.029406420824454e-02f}, + {9.966719329369642e-01f, -8.151722576054453e-02f}, + {9.965711457905548e-01f, -8.274026454937569e-02f}, + {9.964688578260101e-01f, -8.396317873286374e-02f}, + {9.963650691973739e-01f, -8.518596646932200e-02f}, + {9.962597800609497e-01f, -8.640862591725426e-02f}, + {9.961529905753015e-01f, -8.763115523535747e-02f}, + {9.960447009012520e-01f, -8.885355258252460e-02f}, + {9.959349112018836e-01f, -9.007581611784729e-02f}, + {9.958236216425376e-01f, -9.129794400061877e-02f}, + {9.957108323908140e-01f, -9.251993439033654e-02f}, + {9.955965436165716e-01f, -9.374178544670515e-02f}, + {9.954807554919269e-01f, -9.496349532963899e-02f}, + {9.953634681912550e-01f, -9.618506219926506e-02f}, + {9.952446818911883e-01f, -9.740648421592572e-02f}, + {9.951243967706169e-01f, -9.862775954018151e-02f}, + {9.950026130106879e-01f, -9.984888633281383e-02f}, + {9.948793307948056e-01f, -1.010698627548278e-01f}, + {9.947545503086307e-01f, -1.022906869674551e-01f}, + {9.946282717400804e-01f, -1.035113571321563e-01f}, + {9.945004952793278e-01f, -1.047318714106244e-01f}, + {9.943712211188022e-01f, -1.059522279647869e-01f}, + {9.942404494531879e-01f, -1.071724249568088e-01f}, + {9.941081804794248e-01f, -1.083924605490956e-01f}, + {9.939744143967076e-01f, -1.096123329042957e-01f}, + {9.938391514064855e-01f, -1.108320401853034e-01f}, + {9.937023917124622e-01f, -1.120515805552615e-01f}, + {9.935641355205953e-01f, -1.132709521775643e-01f}, + {9.934243830390962e-01f, -1.144901532158602e-01f}, + {9.932831344784294e-01f, -1.157091818340545e-01f}, + {9.931403900513129e-01f, -1.169280361963119e-01f}, + {9.929961499727171e-01f, -1.181467144670601e-01f}, + {9.928504144598651e-01f, -1.193652148109914e-01f}, + {9.927031837322318e-01f, -1.205835353930663e-01f}, + {9.925544580115441e-01f, -1.218016743785162e-01f}, + {9.924042375217801e-01f, -1.230196299328457e-01f}, + {9.922525224891693e-01f, -1.242374002218357e-01f}, + {9.920993131421918e-01f, -1.254549834115462e-01f}, + {9.919446097115779e-01f, -1.266723776683190e-01f}, + {9.917884124303086e-01f, -1.278895811587802e-01f}, + {9.916307215336136e-01f, -1.291065920498434e-01f}, + {9.914715372589731e-01f, -1.303234085087122e-01f}, + {9.913108598461154e-01f, -1.315400287028831e-01f}, + {9.911486895370180e-01f, -1.327564508001479e-01f}, + {9.909850265759061e-01f, -1.339726729685971e-01f}, + {9.908198712092535e-01f, -1.351886933766218e-01f}, + {9.906532236857811e-01f, -1.364045101929175e-01f}, + {9.904850842564571e-01f, -1.376201215864860e-01f}, + {9.903154531744962e-01f, -1.388355257266385e-01f}, + {9.901443306953601e-01f, -1.400507207829983e-01f}, + {9.899717170767560e-01f, -1.412657049255036e-01f}, + {9.897976125786367e-01f, -1.424804763244102e-01f}, + {9.896220174632009e-01f, -1.436950331502945e-01f}, + {9.894449319948911e-01f, -1.449093735740556e-01f}, + {9.892663564403953e-01f, -1.461234957669190e-01f}, + {9.890862910686448e-01f, -1.473373979004386e-01f}, + {9.889047361508148e-01f, -1.485510781464996e-01f}, + {9.887216919603238e-01f, -1.497645346773215e-01f}, + {9.885371587728330e-01f, -1.509777656654608e-01f}, + {9.883511368662461e-01f, -1.521907692838135e-01f}, + {9.881636265207087e-01f, -1.534035437056180e-01f}, + {9.879746280186079e-01f, -1.546160871044581e-01f}, + {9.877841416445722e-01f, -1.558283976542652e-01f}, + {9.875921676854704e-01f, -1.570404735293217e-01f}, + {9.873987064304122e-01f, -1.582523129042630e-01f}, + {9.872037581707463e-01f, -1.594639139540810e-01f}, + {9.870073232000616e-01f, -1.606752748541265e-01f}, + {9.868094018141855e-01f, -1.618863937801118e-01f}, + {9.866099943111839e-01f, -1.630972689081137e-01f}, + {9.864091009913611e-01f, -1.643078984145762e-01f}, + {9.862067221572588e-01f, -1.655182804763130e-01f}, + {9.860028581136556e-01f, -1.667284132705107e-01f}, + {9.857975091675675e-01f, -1.679382949747312e-01f}, + {9.855906756282459e-01f, -1.691479237669144e-01f}, + {9.853823578071785e-01f, -1.703572978253813e-01f}, + {9.851725560180883e-01f, -1.715664153288364e-01f}, + {9.849612705769328e-01f, -1.727752744563706e-01f}, + {9.847485018019042e-01f, -1.739838733874638e-01f}, + {9.845342500134284e-01f, -1.751922103019880e-01f}, + {9.843185155341647e-01f, -1.764002833802096e-01f}, + {9.841012986890054e-01f, -1.776080908027924e-01f}, + {9.838825998050751e-01f, -1.788156307508001e-01f}, + {9.836624192117303e-01f, -1.800229014056995e-01f}, + {9.834407572405590e-01f, -1.812299009493628e-01f}, + {9.832176142253802e-01f, -1.824366275640705e-01f}, + {9.829929905022433e-01f, -1.836430794325141e-01f}, + {9.827668864094273e-01f, -1.848492547377989e-01f}, + {9.825393022874412e-01f, -1.860551516634466e-01f}, + {9.823102384790224e-01f, -1.872607683933984e-01f}, + {9.820796953291370e-01f, -1.884661031120172e-01f}, + {9.818476731849786e-01f, -1.896711540040907e-01f}, + {9.816141723959685e-01f, -1.908759192548340e-01f}, + {9.813791933137546e-01f, -1.920803970498924e-01f}, + {9.811427362922112e-01f, -1.932845855753442e-01f}, + {9.809048016874382e-01f, -1.944884830177032e-01f}, + {9.806653898577611e-01f, -1.956920875639216e-01f}, + {9.804245011637294e-01f, -1.968953974013927e-01f}, + {9.801821359681174e-01f, -1.980984107179536e-01f}, + {9.799382946359226e-01f, -1.993011257018880e-01f}, + {9.796929775343657e-01f, -2.005035405419289e-01f}, + {9.794461850328897e-01f, -2.017056534272613e-01f}, + {9.791979175031598e-01f, -2.029074625475249e-01f}, + {9.789481753190622e-01f, -2.041089660928169e-01f}, + {9.786969588567044e-01f, -2.053101622536946e-01f}, + {9.784442684944136e-01f, -2.065110492211783e-01f}, + {9.781901046127370e-01f, -2.077116251867540e-01f}, + {9.779344675944409e-01f, -2.089118883423760e-01f}, + {9.776773578245099e-01f, -2.101118368804696e-01f}, + {9.774187756901469e-01f, -2.113114689939341e-01f}, + {9.771587215807717e-01f, -2.125107828761450e-01f}, + {9.768971958880210e-01f, -2.137097767209575e-01f}, + {9.766341990057480e-01f, -2.149084487227085e-01f}, + {9.763697313300211e-01f, -2.161067970762195e-01f}, + {9.761037932591240e-01f, -2.173048199767996e-01f}, + {9.758363851935545e-01f, -2.185025156202481e-01f}, + {9.755675075360243e-01f, -2.196998822028567e-01f}, + {9.752971606914583e-01f, -2.208969179214133e-01f}, + {9.750253450669941e-01f, -2.220936209732035e-01f}, + {9.747520610719810e-01f, -2.232899895560143e-01f}, + {9.744773091179798e-01f, -2.244860218681361e-01f}, + {9.742010896187618e-01f, -2.256817161083659e-01f}, + {9.739234029903089e-01f, -2.268770704760098e-01f}, + {9.736442496508120e-01f, -2.280720831708857e-01f}, + {9.733636300206708e-01f, -2.292667523933261e-01f}, + {9.730815445224936e-01f, -2.304610763441808e-01f}, + {9.727979935810960e-01f, -2.316550532248194e-01f}, + {9.725129776235006e-01f, -2.328486812371343e-01f}, + {9.722264970789363e-01f, -2.340419585835434e-01f}, + {9.719385523788376e-01f, -2.352348834669925e-01f}, + {9.716491439568440e-01f, -2.364274540909583e-01f}, + {9.713582722487994e-01f, -2.376196686594509e-01f}, + {9.710659376927513e-01f, -2.388115253770169e-01f}, + {9.707721407289504e-01f, -2.400030224487415e-01f}, + {9.704768817998493e-01f, -2.411941580802516e-01f}, + {9.701801613501028e-01f, -2.423849304777186e-01f}, + {9.698819798265667e-01f, -2.435753378478606e-01f}, + {9.695823376782966e-01f, -2.447653783979458e-01f}, + {9.692812353565485e-01f, -2.459550503357946e-01f}, + {9.689786733147769e-01f, -2.471443518697825e-01f}, + {9.686746520086348e-01f, -2.483332812088429e-01f}, + {9.683691718959728e-01f, -2.495218365624697e-01f}, + {9.680622334368384e-01f, -2.507100161407201e-01f}, + {9.677538370934755e-01f, -2.518978181542170e-01f}, + {9.674439833303232e-01f, -2.530852408141520e-01f}, + {9.671326726140158e-01f, -2.542722823322882e-01f}, + {9.668199054133816e-01f, -2.554589409209625e-01f}, + {9.665056821994423e-01f, -2.566452147930884e-01f}, + {9.661900034454125e-01f, -2.578311021621590e-01f}, + {9.658728696266987e-01f, -2.590166012422493e-01f}, + {9.655542812208985e-01f, -2.602017102480191e-01f}, + {9.652342387078005e-01f, -2.613864273947156e-01f}, + {9.649127425693828e-01f, -2.625707508981763e-01f}, + {9.645897932898128e-01f, -2.637546789748313e-01f}, + {9.642653913554462e-01f, -2.649382098417065e-01f}, + {9.639395372548267e-01f, -2.661213417164257e-01f}, + {9.636122314786845e-01f, -2.673040728172135e-01f}, + {9.632834745199362e-01f, -2.684864013628985e-01f}, + {9.629532668736839e-01f, -2.696683255729151e-01f}, + {9.626216090372143e-01f, -2.708498436673069e-01f}, + {9.622885015099981e-01f, -2.720309538667289e-01f}, + {9.619539447936892e-01f, -2.732116543924507e-01f}, + {9.616179393921240e-01f, -2.743919434663584e-01f}, + {9.612804858113206e-01f, -2.755718193109581e-01f}, + {9.609415845594780e-01f, -2.767512801493782e-01f}, + {9.606012361469752e-01f, -2.779303242053718e-01f}, + {9.602594410863711e-01f, -2.791089497033199e-01f}, + {9.599161998924024e-01f, -2.802871548682339e-01f}, + {9.595715130819845e-01f, -2.814649379257579e-01f}, + {9.592253811742094e-01f, -2.826422971021723e-01f}, + {9.588778046903456e-01f, -2.838192306243950e-01f}, + {9.585287841538368e-01f, -2.849957367199857e-01f}, + {9.581783200903017e-01f, -2.861718136171474e-01f}, + {9.578264130275329e-01f, -2.873474595447295e-01f}, + {9.574730634954960e-01f, -2.885226727322305e-01f}, + {9.571182720263292e-01f, -2.896974514098006e-01f}, + {9.567620391543418e-01f, -2.908717938082443e-01f}, + {9.564043654160141e-01f, -2.920456981590233e-01f}, + {9.560452513499964e-01f, -2.932191626942586e-01f}, + {9.556846974971080e-01f, -2.943921856467341e-01f}, + {9.553227044003364e-01f, -2.955647652498983e-01f}, + {9.549592726048367e-01f, -2.967368997378675e-01f}, + {9.545944026579306e-01f, -2.979085873454284e-01f}, + {9.542280951091057e-01f, -2.990798263080405e-01f}, + {9.538603505100144e-01f, -3.002506148618392e-01f}, + {9.534911694144735e-01f, -3.014209512436381e-01f}, + {9.531205523784633e-01f, -3.025908336909318e-01f}, + {9.527484999601259e-01f, -3.037602604418984e-01f}, + {9.523750127197659e-01f, -3.049292297354024e-01f}, + {9.520000912198481e-01f, -3.060977398109971e-01f}, + {9.516237360249976e-01f, -3.072657889089275e-01f}, + {9.512459477019986e-01f, -3.084333752701328e-01f}, + {9.508667268197933e-01f, -3.096004971362489e-01f}, + {9.504860739494817e-01f, -3.107671527496115e-01f}, + {9.501039896643201e-01f, -3.119333403532583e-01f}, + {9.497204745397203e-01f, -3.130990581909318e-01f}, + {9.493355291532494e-01f, -3.142643045070820e-01f}, + {9.489491540846281e-01f, -3.154290775468691e-01f}, + {9.485613499157303e-01f, -3.165933755561658e-01f}, + {9.481721172305820e-01f, -3.177571967815606e-01f}, + {9.477814566153607e-01f, -3.189205394703594e-01f}, + {9.473893686583942e-01f, -3.200834018705895e-01f}, + {9.469958539501598e-01f, -3.212457822310009e-01f}, + {9.466009130832835e-01f, -3.224076788010699e-01f}, + {9.462045466525394e-01f, -3.235690898310011e-01f}, + {9.458067552548478e-01f, -3.247300135717307e-01f}, + {9.454075394892756e-01f, -3.258904482749284e-01f}, + {9.450068999570345e-01f, -3.270503921930005e-01f}, + {9.446048372614803e-01f, -3.282098435790925e-01f}, + {9.442013520081122e-01f, -3.293688006870915e-01f}, + {9.437964448045717e-01f, -3.305272617716291e-01f}, + {9.433901162606417e-01f, -3.316852250880838e-01f}, + {9.429823669882458e-01f, -3.328426888925837e-01f}, + {9.425731976014469e-01f, -3.339996514420094e-01f}, + {9.421626087164466e-01f, -3.351561109939961e-01f}, + {9.417506009515846e-01f, -3.363120658069366e-01f}, + {9.413371749273369e-01f, -3.374675141399838e-01f}, + {9.409223312663159e-01f, -3.386224542530535e-01f}, + {9.405060705932683e-01f, -3.397768844068269e-01f}, + {9.400883935350755e-01f, -3.409308028627527e-01f}, + {9.396693007207513e-01f, -3.420842078830508e-01f}, + {9.392487927814420e-01f, -3.432370977307140e-01f}, + {9.388268703504251e-01f, -3.443894706695110e-01f}, + {9.384035340631081e-01f, -3.455413249639891e-01f}, + {9.379787845570278e-01f, -3.466926588794764e-01f}, + {9.375526224718491e-01f, -3.478434706820849e-01f}, + {9.371250484493645e-01f, -3.489937586387129e-01f}, + {9.366960631334929e-01f, -3.501435210170474e-01f}, + {9.362656671702783e-01f, -3.512927560855671e-01f}, + {9.358338612078891e-01f, -3.524414621135448e-01f}, + {9.354006458966176e-01f, -3.535896373710499e-01f}, + {9.349660218888781e-01f, -3.547372801289512e-01f}, + {9.345299898392064e-01f, -3.558843886589194e-01f}, + {9.340925504042590e-01f, -3.570309612334300e-01f}, + {9.336537042428116e-01f, -3.581769961257653e-01f}, + {9.332134520157588e-01f, -3.593224916100174e-01f}, + {9.327717943861125e-01f, -3.604674459610909e-01f}, + {9.323287320190009e-01f, -3.616118574547051e-01f}, + {9.318842655816681e-01f, -3.627557243673972e-01f}, + {9.314383957434725e-01f, -3.638990449765241e-01f}, + {9.309911231758859e-01f, -3.650418175602657e-01f}, + {9.305424485524929e-01f, -3.661840403976272e-01f}, + {9.300923725489892e-01f, -3.673257117684415e-01f}, + {9.296408958431813e-01f, -3.684668299533723e-01f}, + {9.291880191149847e-01f, -3.696073932339162e-01f}, + {9.287337430464239e-01f, -3.707473998924054e-01f}, + {9.282780683216301e-01f, -3.718868482120106e-01f}, + {9.278209956268415e-01f, -3.730257364767432e-01f}, + {9.273625256504011e-01f, -3.741640629714579e-01f}, + {9.269026590827565e-01f, -3.753018259818559e-01f}, + {9.264413966164585e-01f, -3.764390237944864e-01f}, + {9.259787389461599e-01f, -3.775756546967501e-01f}, + {9.255146867686148e-01f, -3.787117169769015e-01f}, + {9.250492407826776e-01f, -3.798472089240512e-01f}, + {9.245824016893013e-01f, -3.809821288281689e-01f}, + {9.241141701915373e-01f, -3.821164749800858e-01f}, + {9.236445469945337e-01f, -3.832502456714969e-01f}, + {9.231735328055345e-01f, -3.843834391949643e-01f}, + {9.227011283338786e-01f, -3.855160538439188e-01f}, + {9.222273342909986e-01f, -3.866480879126634e-01f}, + {9.217521513904198e-01f, -3.877795396963752e-01f}, + {9.212755803477590e-01f, -3.889104074911081e-01f}, + {9.207976218807237e-01f, -3.900406895937958e-01f}, + {9.203182767091106e-01f, -3.911703843022539e-01f}, + {9.198375455548048e-01f, -3.922994899151824e-01f}, + {9.193554291417789e-01f, -3.934280047321689e-01f}, + {9.188719281960914e-01f, -3.945559270536903e-01f}, + {9.183870434458861e-01f, -3.956832551811160e-01f}, + {9.179007756213905e-01f, -3.968099874167103e-01f}, + {9.174131254549152e-01f, -3.979361220636348e-01f}, + {9.169240936808526e-01f, -3.990616574259509e-01f}, + {9.164336810356757e-01f, -4.001865918086229e-01f}, + {9.159418882579371e-01f, -4.013109235175197e-01f}, + {9.154487160882678e-01f, -4.024346508594184e-01f}, + {9.149541652693762e-01f, -4.035577721420057e-01f}, + {9.144582365460469e-01f, -4.046802856738814e-01f}, + {9.139609306651395e-01f, -4.058021897645602e-01f}, + {9.134622483755878e-01f, -4.069234827244749e-01f}, + {9.129621904283982e-01f, -4.080441628649787e-01f}, + {9.124607575766490e-01f, -4.091642284983474e-01f}, + {9.119579505754890e-01f, -4.102836779377824e-01f}, + {9.114537701821365e-01f, -4.114025094974132e-01f}, + {9.109482171558779e-01f, -4.125207214922996e-01f}, + {9.104412922580672e-01f, -4.136383122384345e-01f}, + {9.099329962521239e-01f, -4.147552800527466e-01f}, + {9.094233299035327e-01f, -4.158716232531024e-01f}, + {9.089122939798419e-01f, -4.169873401583093e-01f}, + {9.083998892506623e-01f, -4.181024290881177e-01f}, + {9.078861164876663e-01f, -4.192168883632239e-01f}, + {9.073709764645862e-01f, -4.203307163052724e-01f}, + {9.068544699572136e-01f, -4.214439112368585e-01f}, + {9.063365977433983e-01f, -4.225564714815306e-01f}, + {9.058173606030460e-01f, -4.236683953637931e-01f}, + {9.052967593181188e-01f, -4.247796812091088e-01f}, + {9.047747946726327e-01f, -4.258903273439013e-01f}, + {9.042514674526569e-01f, -4.270003320955576e-01f}, + {9.037267784463131e-01f, -4.281096937924305e-01f}, + {9.032007284437731e-01f, -4.292184107638414e-01f}, + {9.026733182372588e-01f, -4.303264813400826e-01f}, + {9.021445486210405e-01f, -4.314339038524199e-01f}, + {9.016144203914357e-01f, -4.325406766330948e-01f}, + {9.010829343468079e-01f, -4.336467980153277e-01f}, + {9.005500912875654e-01f, -4.347522663333197e-01f}, + {9.000158920161603e-01f, -4.358570799222555e-01f}, + {8.994803373370870e-01f, -4.369612371183058e-01f}, + {8.989434280568812e-01f, -4.380647362586298e-01f}, + {8.984051649841186e-01f, -4.391675756813778e-01f}, + {8.978655489294136e-01f, -4.402697537256935e-01f}, + {8.973245807054183e-01f, -4.413712687317167e-01f}, + {8.967822611268210e-01f, -4.424721190405857e-01f}, + {8.962385910103452e-01f, -4.435723029944398e-01f}, + {8.956935711747483e-01f, -4.446718189364220e-01f}, + {8.951472024408204e-01f, -4.457706652106809e-01f}, + {8.945994856313827e-01f, -4.468688401623742e-01f}, + {8.940504215712870e-01f, -4.479663421376699e-01f}, + {8.935000110874138e-01f, -4.490631694837502e-01f}, + {8.929482550086714e-01f, -4.501593205488127e-01f}, + {8.923951541659944e-01f, -4.512547936820739e-01f}, + {8.918407093923427e-01f, -4.523495872337709e-01f}, + {8.912849215227001e-01f, -4.534436995551644e-01f}, + {8.907277913940732e-01f, -4.545371289985410e-01f}, + {8.901693198454897e-01f, -4.556298739172159e-01f}, + {8.896095077179980e-01f, -4.567219326655349e-01f}, + {8.890483558546646e-01f, -4.578133035988772e-01f}, + {8.884858651005743e-01f, -4.589039850736579e-01f}, + {8.879220363028281e-01f, -4.599939754473306e-01f}, + {8.873568703105417e-01f, -4.610832730783892e-01f}, + {8.867903679748451e-01f, -4.621718763263714e-01f}, + {8.862225301488806e-01f, -4.632597835518601e-01f}, + {8.856533576878016e-01f, -4.643469931164871e-01f}, + {8.850828514487716e-01f, -4.654335033829341e-01f}, + {8.845110122909626e-01f, -4.665193127149364e-01f}, + {8.839378410755541e-01f, -4.676044194772847e-01f}, + {8.833633386657316e-01f, -4.686888220358279e-01f}, + {8.827875059266853e-01f, -4.697725187574754e-01f}, + {8.822103437256089e-01f, -4.708555080101994e-01f}, + {8.816318529316984e-01f, -4.719377881630376e-01f}, + {8.810520344161502e-01f, -4.730193575860958e-01f}, + {8.804708890521608e-01f, -4.741002146505500e-01f}, + {8.798884177149244e-01f, -4.751803577286489e-01f}, + {8.793046212816323e-01f, -4.762597851937166e-01f}, + {8.787195006314716e-01f, -4.773384954201548e-01f}, + {8.781330566456232e-01f, -4.784164867834454e-01f}, + {8.775452902072614e-01f, -4.794937576601530e-01f}, + {8.769562022015515e-01f, -4.805703064279270e-01f}, + {8.763657935156495e-01f, -4.816461314655044e-01f}, + {8.757740650387004e-01f, -4.827212311527123e-01f}, + {8.751810176618363e-01f, -4.837956038704698e-01f}, + {8.745866522781761e-01f, -4.848692480007911e-01f}, + {8.739909697828232e-01f, -4.859421619267875e-01f}, + {8.733939710728648e-01f, -4.870143440326701e-01f}, + {8.727956570473698e-01f, -4.880857927037520e-01f}, + {8.721960286073888e-01f, -4.891565063264507e-01f}, + {8.715950866559510e-01f, -4.902264832882912e-01f}, + {8.709928320980644e-01f, -4.912957219779071e-01f}, + {8.703892658407133e-01f, -4.923642207850446e-01f}, + {8.697843887928577e-01f, -4.934319781005636e-01f}, + {8.691782018654314e-01f, -4.944989923164409e-01f}, + {8.685707059713409e-01f, -4.955652618257725e-01f}, + {8.679619020254642e-01f, -4.966307850227757e-01f}, + {8.673517909446490e-01f, -4.976955603027919e-01f}, + {8.667403736477115e-01f, -4.987595860622885e-01f}, + {8.661276510554351e-01f, -4.998228606988624e-01f}, + {8.655136240905691e-01f, -5.008853826112407e-01f}, + {8.648982936778269e-01f, -5.019471501992850e-01f}, + {8.642816607438848e-01f, -5.030081618639924e-01f}, + {8.636637262173812e-01f, -5.040684160074983e-01f}, + {8.630444910289141e-01f, -5.051279110330795e-01f}, + {8.624239561110406e-01f, -5.061866453451552e-01f}, + {8.618021223982749e-01f, -5.072446173492910e-01f}, + {8.611789908270876e-01f, -5.083018254522002e-01f}, + {8.605545623359034e-01f, -5.093582680617462e-01f}, + {8.599288378651004e-01f, -5.104139435869457e-01f}, + {8.593018183570085e-01f, -5.114688504379703e-01f}, + {8.586735047559073e-01f, -5.125229870261497e-01f}, + {8.580438980080262e-01f, -5.135763517639729e-01f}, + {8.574129990615412e-01f, -5.146289430650919e-01f}, + {8.567808088665750e-01f, -5.156807593443229e-01f}, + {8.561473283751945e-01f, -5.167317990176499e-01f}, + {8.555125585414098e-01f, -5.177820605022260e-01f}, + {8.548765003211730e-01f, -5.188315422163763e-01f}, + {8.542391546723761e-01f, -5.198802425796005e-01f}, + {8.536005225548502e-01f, -5.209281600125748e-01f}, + {8.529606049303636e-01f, -5.219752929371544e-01f}, + {8.523194027626210e-01f, -5.230216397763758e-01f}, + {8.516769170172609e-01f, -5.240671989544601e-01f}, + {8.510331486618554e-01f, -5.251119688968137e-01f}, + {8.503880986659081e-01f, -5.261559480300321e-01f}, + {8.497417680008525e-01f, -5.271991347819013e-01f}, + {8.490941576400509e-01f, -5.282415275814013e-01f}, + {8.484452685587929e-01f, -5.292831248587072e-01f}, + {8.477951017342936e-01f, -5.303239250451923e-01f}, + {8.471436581456926e-01f, -5.313639265734305e-01f}, + {8.464909387740521e-01f, -5.324031278771979e-01f}, + {8.458369446023557e-01f, -5.334415273914767e-01f}, + {8.451816766155068e-01f, -5.344791235524554e-01f}, + {8.445251358003272e-01f, -5.355159147975332e-01f}, + {8.438673231455553e-01f, -5.365518995653215e-01f}, + {8.432082396418454e-01f, -5.375870762956454e-01f}, + {8.425478862817651e-01f, -5.386214434295480e-01f}, + {8.418862640597948e-01f, -5.396549994092906e-01f}, + {8.412233739723254e-01f, -5.406877426783570e-01f}, + {8.405592170176576e-01f, -5.417196716814542e-01f}, + {8.398937941959995e-01f, -5.427507848645159e-01f}, + {8.392271065094661e-01f, -5.437810806747042e-01f}, + {8.385591549620770e-01f, -5.448105575604123e-01f}, + {8.378899405597550e-01f, -5.458392139712668e-01f}, + {8.372194643103249e-01f, -5.468670483581293e-01f}, + {8.365477272235120e-01f, -5.478940591731002e-01f}, + {8.358747303109401e-01f, -5.489202448695194e-01f}, + {8.352004745861303e-01f, -5.499456039019702e-01f}, + {8.345249610644997e-01f, -5.509701347262801e-01f}, + {8.338481907633595e-01f, -5.519938357995242e-01f}, + {8.331701647019132e-01f, -5.530167055800275e-01f}, + {8.324908839012561e-01f, -5.540387425273663e-01f}, + {8.318103493843727e-01f, -5.550599451023716e-01f}, + {8.311285621761358e-01f, -5.560803117671306e-01f}, + {8.304455233033046e-01f, -5.570998409849897e-01f}, + {8.297612337945230e-01f, -5.581185312205561e-01f}, + {8.290756946803191e-01f, -5.591363809397010e-01f}, + {8.283889069931020e-01f, -5.601533886095610e-01f}, + {8.277008717671618e-01f, -5.611695526985409e-01f}, + {8.270115900386670e-01f, -5.621848716763159e-01f}, + {8.263210628456635e-01f, -5.631993440138341e-01f}, + {8.256292912280727e-01f, -5.642129681833185e-01f}, + {8.249362762276903e-01f, -5.652257426582692e-01f}, + {8.242420188881840e-01f, -5.662376659134664e-01f}, + {8.235465202550933e-01f, -5.672487364249718e-01f}, + {8.228497813758264e-01f, -5.682589526701315e-01f}, + {8.221518032996592e-01f, -5.692683131275782e-01f}, + {8.214525870777344e-01f, -5.702768162772331e-01f}, + {8.207521337630588e-01f, -5.712844606003090e-01f}, + {8.200504444105025e-01f, -5.722912445793115e-01f}, + {8.193475200767969e-01f, -5.732971666980422e-01f}, + {8.186433618205335e-01f, -5.743022254416005e-01f}, + {8.179379707021619e-01f, -5.753064192963863e-01f}, + {8.172313477839882e-01f, -5.763097467501014e-01f}, + {8.165234941301740e-01f, -5.773122062917532e-01f}, + {8.158144108067338e-01f, -5.783137964116556e-01f}, + {8.151040988815345e-01f, -5.793145156014319e-01f}, + {8.143925594242929e-01f, -5.803143623540171e-01f}, + {8.136797935065747e-01f, -5.813133351636602e-01f}, + {8.129658022017924e-01f, -5.823114325259262e-01f}, + {8.122505865852039e-01f, -5.833086529376983e-01f}, + {8.115341477339112e-01f, -5.843049948971807e-01f}, + {8.108164867268581e-01f, -5.853004569039005e-01f}, + {8.100976046448293e-01f, -5.862950374587097e-01f}, + {8.093775025704479e-01f, -5.872887350637883e-01f}, + {8.086561815881750e-01f, -5.882815482226452e-01f}, + {8.079336427843067e-01f, -5.892734754401222e-01f}, + {8.072098872469734e-01f, -5.902645152223945e-01f}, + {8.064849160661379e-01f, -5.912546660769743e-01f}, + {8.057587303335938e-01f, -5.922439265127122e-01f}, + {8.050313311429637e-01f, -5.932322950397998e-01f}, + {8.043027195896973e-01f, -5.942197701697721e-01f}, + {8.035728967710708e-01f, -5.952063504155093e-01f}, + {8.028418637861839e-01f, -5.961920342912395e-01f}, + {8.021096217359593e-01f, -5.971768203125404e-01f}, + {8.013761717231402e-01f, -5.981607069963423e-01f}, + {8.006415148522891e-01f, -5.991436928609294e-01f}, + {7.999056522297859e-01f, -6.001257764259429e-01f}, + {7.991685849638264e-01f, -6.011069562123827e-01f}, + {7.984303141644207e-01f, -6.020872307426096e-01f}, + {7.976908409433912e-01f, -6.030665985403482e-01f}, + {7.969501664143711e-01f, -6.040450581306880e-01f}, + {7.962082916928030e-01f, -6.050226080400867e-01f}, + {7.954652178959369e-01f, -6.059992467963715e-01f}, + {7.947209461428283e-01f, -6.069749729287426e-01f}, + {7.939754775543372e-01f, -6.079497849677736e-01f}, + {7.932288132531257e-01f, -6.089236814454155e-01f}, + {7.924809543636567e-01f, -6.098966608949977e-01f}, + {7.917319020121923e-01f, -6.108687218512306e-01f}, + {7.909816573267918e-01f, -6.118398628502083e-01f}, + {7.902302214373100e-01f, -6.128100824294097e-01f}, + {7.894775954753960e-01f, -6.137793791277018e-01f}, + {7.887237805744907e-01f, -6.147477514853411e-01f}, + {7.879687778698258e-01f, -6.157151980439765e-01f}, + {7.872125884984216e-01f, -6.166817173466510e-01f}, + {7.864552135990858e-01f, -6.176473079378039e-01f}, + {7.856966543124112e-01f, -6.186119683632733e-01f}, + {7.849369117807745e-01f, -6.195756971702979e-01f}, + {7.841759871483340e-01f, -6.205384929075197e-01f}, + {7.834138815610288e-01f, -6.215003541249855e-01f}, + {7.826505961665757e-01f, -6.224612793741500e-01f}, + {7.818861321144691e-01f, -6.234212672078768e-01f}, + {7.811204905559779e-01f, -6.243803161804418e-01f}, + {7.803536726441443e-01f, -6.253384248475345e-01f}, + {7.795856795337824e-01f, -6.262955917662607e-01f}, + {7.788165123814760e-01f, -6.272518154951441e-01f}, + {7.780461723455767e-01f, -6.282070945941292e-01f}, + {7.772746605862029e-01f, -6.291614276245828e-01f}, + {7.765019782652373e-01f, -6.301148131492967e-01f}, + {7.757281265463254e-01f, -6.310672497324895e-01f}, + {7.749531065948739e-01f, -6.320187359398091e-01f}, + {7.741769195780490e-01f, -6.329692703383341e-01f}, + {7.733995666647743e-01f, -6.339188514965771e-01f}, + {7.726210490257291e-01f, -6.348674779844861e-01f}, + {7.718413678333470e-01f, -6.358151483734467e-01f}, + {7.710605242618138e-01f, -6.367618612362842e-01f}, + {7.702785194870657e-01f, -6.377076151472665e-01f}, + {7.694953546867879e-01f, -6.386524086821050e-01f}, + {7.687110310404124e-01f, -6.395962404179578e-01f}, + {7.679255497291163e-01f, -6.405391089334316e-01f}, + {7.671389119358204e-01f, -6.414810128085832e-01f}, + {7.663511188451869e-01f, -6.424219506249224e-01f}, + {7.655621716436182e-01f, -6.433619209654138e-01f}, + {7.647720715192542e-01f, -6.443009224144792e-01f}, + {7.639808196619715e-01f, -6.452389535579994e-01f}, + {7.631884172633813e-01f, -6.461760129833163e-01f}, + {7.623948655168271e-01f, -6.471120992792355e-01f}, + {7.616001656173835e-01f, -6.480472110360278e-01f}, + {7.608043187618542e-01f, -6.489813468454321e-01f}, + {7.600073261487703e-01f, -6.499145053006563e-01f}, + {7.592091889783881e-01f, -6.508466849963809e-01f}, + {7.584099084526877e-01f, -6.517778845287601e-01f}, + {7.576094857753715e-01f, -6.527081024954242e-01f}, + {7.568079221518612e-01f, -6.536373374954818e-01f}, + {7.560052187892974e-01f, -6.545655881295217e-01f}, + {7.552013768965365e-01f, -6.554928529996153e-01f}, + {7.543963976841503e-01f, -6.564191307093185e-01f}, + {7.535902823644226e-01f, -6.573444198636738e-01f}, + {7.527830321513488e-01f, -6.582687190692122e-01f}, + {7.519746482606328e-01f, -6.591920269339562e-01f}, + {7.511651319096865e-01f, -6.601143420674205e-01f}, + {7.503544843176265e-01f, -6.610356630806152e-01f}, + {7.495427067052737e-01f, -6.619559885860479e-01f}, + {7.487298002951505e-01f, -6.628753171977246e-01f}, + {7.479157663114792e-01f, -6.637936475311532e-01f}, + {7.471006059801801e-01f, -6.647109782033448e-01f}, + {7.462843205288703e-01f, -6.656273078328160e-01f}, + {7.454669111868606e-01f, -6.665426350395909e-01f}, + {7.446483791851549e-01f, -6.674569584452033e-01f}, + {7.438287257564475e-01f, -6.683702766726985e-01f}, + {7.430079521351217e-01f, -6.692825883466360e-01f}, + {7.421860595572477e-01f, -6.701938920930909e-01f}, + {7.413630492605809e-01f, -6.711041865396560e-01f}, + {7.405389224845600e-01f, -6.720134703154446e-01f}, + {7.397136804703048e-01f, -6.729217420510915e-01f}, + {7.388873244606151e-01f, -6.738290003787560e-01f}, + {7.380598556999681e-01f, -6.747352439321236e-01f}, + {7.372312754345167e-01f, -6.756404713464076e-01f}, + {7.364015849120877e-01f, -6.765446812583521e-01f}, + {7.355707853821803e-01f, -6.774478723062332e-01f}, + {7.347388780959635e-01f, -6.783500431298615e-01f}, + {7.339058643062745e-01f, -6.792511923705841e-01f}, + {7.330717452676171e-01f, -6.801513186712865e-01f}, + {7.322365222361595e-01f, -6.810504206763948e-01f}, + {7.314001964697324e-01f, -6.819484970318775e-01f}, + {7.305627692278276e-01f, -6.828455463852481e-01f}, + {7.297242417715950e-01f, -6.837415673855661e-01f}, + {7.288846153638420e-01f, -6.846365586834405e-01f}, + {7.280438912690308e-01f, -6.855305189310302e-01f}, + {7.272020707532766e-01f, -6.864234467820476e-01f}, + {7.263591550843460e-01f, -6.873153408917591e-01f}, + {7.255151455316546e-01f, -6.882061999169885e-01f}, + {7.246700433662657e-01f, -6.890960225161182e-01f}, + {7.238238498608879e-01f, -6.899848073490914e-01f}, + {7.229765662898732e-01f, -6.908725530774144e-01f}, + {7.221281939292153e-01f, -6.917592583641577e-01f}, + {7.212787340565479e-01f, -6.926449218739597e-01f}, + {7.204281879511419e-01f, -6.935295422730269e-01f}, + {7.195765568939045e-01f, -6.944131182291369e-01f}, + {7.187238421673769e-01f, -6.952956484116404e-01f}, + {7.178700450557317e-01f, -6.961771314914630e-01f}, + {7.170151668447722e-01f, -6.970575661411068e-01f}, + {7.161592088219294e-01f, -6.979369510346534e-01f}, + {7.153021722762606e-01f, -6.988152848477649e-01f}, + {7.144440584984474e-01f, -6.996925662576865e-01f}, + {7.135848687807936e-01f, -7.005687939432483e-01f}, + {7.127246044172235e-01f, -7.014439665848672e-01f}, + {7.118632667032795e-01f, -7.023180828645491e-01f}, + {7.110008569361208e-01f, -7.031911414658905e-01f}, + {7.101373764145209e-01f, -7.040631410740809e-01f}, + {7.092728264388657e-01f, -7.049340803759049e-01f}, + {7.084072083111520e-01f, -7.058039580597435e-01f}, + {7.075405233349850e-01f, -7.066727728155766e-01f} }; Modified: freeswitch/trunk/libs/libg722_1/src/decoderf.c ============================================================================== --- freeswitch/trunk/libs/libg722_1/src/decoderf.c (original) +++ freeswitch/trunk/libs/libg722_1/src/decoderf.c Mon Dec 15 23:14:57 2008 @@ -451,7 +451,7 @@ if (category == NUM_CATEGORIES - 1) { - noifillpos = standard_deviation*0.70711; + noifillpos = standard_deviation*0.70711f; noifillneg = -noifillpos; /* This assumes region_size = 20 */ Modified: freeswitch/trunk/libs/libg722_1/src/sam2coef.h ============================================================================== --- freeswitch/trunk/libs/libg722_1/src/sam2coef.h (original) +++ freeswitch/trunk/libs/libg722_1/src/sam2coef.h Mon Dec 15 23:14:57 2008 @@ -124,970 +124,970 @@ #else const float samples_to_rmlt_window[DCT_LENGTH] = { - 2.45436677e-03, - 7.36304140e-03, - 1.22715384e-02, - 1.71797387e-02, - 2.20875274e-02, - 2.69947816e-02, - 3.19013856e-02, - 3.68072242e-02, - 4.17121723e-02, - 4.66161147e-02, - 5.15189357e-02, - 5.64205162e-02, - 6.13207370e-02, - 6.62194788e-02, - 7.11166263e-02, - 7.60120600e-02, - 8.09056610e-02, - 8.57973099e-02, - 9.06868950e-02, - 9.55742970e-02, - 1.00459397e-01, - 1.05342068e-01, - 1.10222206e-01, - 1.15099691e-01, - 1.19974397e-01, - 1.24846213e-01, - 1.29715025e-01, - 1.34580702e-01, - 1.39443144e-01, - 1.44302234e-01, - 1.49157837e-01, - 1.54009849e-01, - 1.58858150e-01, - 1.63702607e-01, - 1.68543145e-01, - 1.73379600e-01, - 1.78211898e-01, - 1.83039889e-01, - 1.87863469e-01, - 1.92682534e-01, - 1.97496936e-01, - 2.02306598e-01, - 2.07111374e-01, - 2.11911172e-01, - 2.16705844e-01, - 2.21495315e-01, - 2.26279438e-01, - 2.31058106e-01, - 2.35831216e-01, - 2.40598634e-01, - 2.45360255e-01, - 2.50115961e-01, - 2.54865646e-01, - 2.59609193e-01, - 2.64346480e-01, - 2.69077420e-01, - 2.73801863e-01, - 2.78519690e-01, - 2.83230811e-01, - 2.87935108e-01, - 2.92632490e-01, - 2.97322810e-01, - 3.02005947e-01, - 3.06681812e-01, - 3.11350316e-01, - 3.16011280e-01, - 3.20664644e-01, - 3.25310290e-01, - 3.29948097e-01, - 3.34577948e-01, - 3.39199722e-01, - 3.43813360e-01, - 3.48418683e-01, - 3.53015602e-01, - 3.57604057e-01, - 3.62183869e-01, - 3.66754949e-01, - 3.71317208e-01, - 3.75870496e-01, - 3.80414754e-01, - 3.84949833e-01, - 3.89475614e-01, - 3.93992037e-01, - 3.98498952e-01, - 4.02996302e-01, - 4.07483906e-01, - 4.11961704e-01, - 4.16429549e-01, - 4.20887381e-01, - 4.25335079e-01, - 4.29772526e-01, - 4.34199601e-01, - 4.38616246e-01, - 4.43022281e-01, - 4.47417676e-01, - 4.51802284e-01, - 4.56175983e-01, - 4.60538715e-01, - 4.64890331e-01, - 4.69230771e-01, - 4.73559886e-01, - 4.77877587e-01, - 4.82183784e-01, - 4.86478359e-01, - 4.90761191e-01, - 4.95032221e-01, - 4.99291331e-01, - 5.03538370e-01, - 5.07773340e-01, - 5.11996031e-01, - 5.16206384e-01, - 5.20404279e-01, - 5.24589658e-01, - 5.28762400e-01, - 5.32922447e-01, - 5.37069619e-01, - 5.41203797e-01, - 5.45324981e-01, - 5.49433053e-01, - 5.53527832e-01, - 5.57609320e-01, - 5.61677337e-01, - 5.65731823e-01, - 5.69772661e-01, - 5.73799789e-01, - 5.77813089e-01, - 5.81812501e-01, - 5.85797846e-01, - 5.89769125e-01, - 5.93726158e-01, - 5.97668886e-01, - 6.01597190e-01, - 6.05511069e-01, - 6.09410286e-01, - 6.13294840e-01, - 6.17164612e-01, - 6.21019542e-01, - 6.24859512e-01, - 6.28684402e-01, - 6.32494152e-01, - 6.36288643e-01, - 6.40067816e-01, - 6.43831551e-01, - 6.47579789e-01, - 6.51312411e-01, - 6.55029356e-01, - 6.58730507e-01, - 6.62415802e-01, - 6.66085124e-01, - 6.69738352e-01, - 6.73375487e-01, - 6.76996410e-01, - 6.80601001e-01, - 6.84189200e-01, - 6.87760890e-01, - 6.91316009e-01, - 6.94854498e-01, - 6.98376238e-01, - 7.01881170e-01, - 7.05369174e-01, - 7.08840132e-01, - 7.12294042e-01, - 7.15730846e-01, - 7.19150364e-01, - 7.22552538e-01, - 7.25937307e-01, - 7.29304552e-01, - 7.32654274e-01, - 7.35986352e-01, - 7.39300668e-01, - 7.42597163e-01, - 7.45875776e-01, - 7.49136388e-01, - 7.52379000e-01, - 7.55603433e-01, - 7.58809686e-01, - 7.61997640e-01, - 7.65167236e-01, - 7.68318415e-01, - 7.71451116e-01, - 7.74565160e-01, - 7.77660549e-01, - 7.80737221e-01, - 7.83795059e-01, - 7.86834061e-01, - 7.89854050e-01, - 7.92855024e-01, - 7.95836926e-01, - 7.98799574e-01, - 8.01743031e-01, - 8.04667175e-01, - 8.07571888e-01, - 8.10457170e-01, - 8.13322961e-01, - 8.16169083e-01, - 8.18995595e-01, - 8.21802378e-01, - 8.24589312e-01, - 8.27356398e-01, - 8.30103517e-01, - 8.32830667e-01, - 8.35537732e-01, - 8.38224709e-01, - 8.40891480e-01, - 8.43537927e-01, - 8.46164107e-01, - 8.48769844e-01, - 8.51355195e-01, - 8.53919983e-01, - 8.56464207e-01, - 8.58987808e-01, - 8.61490726e-01, - 8.63972843e-01, - 8.66434157e-01, - 8.68874609e-01, - 8.71294141e-01, - 8.73692632e-01, - 8.76070082e-01, - 8.78426433e-01, - 8.80761623e-01, - 8.83075595e-01, - 8.85368288e-01, - 8.87639642e-01, - 8.89889598e-01, - 8.92118096e-01, - 8.94325137e-01, - 8.96510601e-01, - 8.98674488e-01, - 9.00816679e-01, - 9.02937174e-01, - 9.05035973e-01, - 9.07112896e-01, - 9.09168005e-01, - 9.11201179e-01, - 9.13212419e-01, - 9.15201604e-01, - 9.17168796e-01, - 9.19113874e-01, - 9.21036780e-01, - 9.22937512e-01, - 9.24816012e-01, - 9.26672220e-01, - 9.28506076e-01, - 9.30317581e-01, - 9.32106674e-01, - 9.33873296e-01, - 9.35617447e-01, - 9.37339008e-01, - 9.39037979e-01, - 9.40714359e-01, - 9.42368090e-01, - 9.43999052e-01, - 9.45607305e-01, - 9.47192788e-01, - 9.48755443e-01, - 9.50295210e-01, - 9.51812088e-01, - 9.53306019e-01, - 9.54777002e-01, - 9.56224978e-01, - 9.57649946e-01, - 9.59051788e-01, - 9.60430503e-01, - 9.61786151e-01, - 9.63118553e-01, - 9.64427769e-01, - 9.65713739e-01, - 9.66976464e-01, - 9.68215883e-01, - 9.69431996e-01, - 9.70624685e-01, - 9.71794009e-01, - 9.72939968e-01, - 9.74062443e-01, - 9.75161433e-01, - 9.76236939e-01, - 9.77288961e-01, - 9.78317380e-01, - 9.79322255e-01, - 9.80303526e-01, - 9.81261134e-01, - 9.82195139e-01, - 9.83105481e-01, - 9.83992159e-01, - 9.84855056e-01, - 9.85694289e-01, - 9.86509740e-01, - 9.87301409e-01, - 9.88069296e-01, - 9.88813400e-01, - 9.89533663e-01, - 9.90230083e-01, - 9.90902662e-01, - 9.91551340e-01, - 9.92176116e-01, - 9.92776990e-01, - 9.93353963e-01, - 9.93906975e-01, - 9.94436026e-01, - 9.94941175e-01, - 9.95422304e-01, - 9.95879471e-01, - 9.96312618e-01, - 9.96721745e-01, - 9.97106910e-01, - 9.97467995e-01, - 9.97805059e-01, - 9.98118103e-01, - 9.98407066e-01, - 9.98672009e-01, - 9.98912871e-01, - 9.99129653e-01, - 9.99322355e-01, - 9.99491036e-01, - 9.99635577e-01, - 9.99756038e-01, - 9.99852419e-01, - 9.99924719e-01, - 9.99972880e-01, - 9.99996960e-01 + 2.45436677e-03f, + 7.36304140e-03f, + 1.22715384e-02f, + 1.71797387e-02f, + 2.20875274e-02f, + 2.69947816e-02f, + 3.19013856e-02f, + 3.68072242e-02f, + 4.17121723e-02f, + 4.66161147e-02f, + 5.15189357e-02f, + 5.64205162e-02f, + 6.13207370e-02f, + 6.62194788e-02f, + 7.11166263e-02f, + 7.60120600e-02f, + 8.09056610e-02f, + 8.57973099e-02f, + 9.06868950e-02f, + 9.55742970e-02f, + 1.00459397e-01f, + 1.05342068e-01f, + 1.10222206e-01f, + 1.15099691e-01f, + 1.19974397e-01f, + 1.24846213e-01f, + 1.29715025e-01f, + 1.34580702e-01f, + 1.39443144e-01f, + 1.44302234e-01f, + 1.49157837e-01f, + 1.54009849e-01f, + 1.58858150e-01f, + 1.63702607e-01f, + 1.68543145e-01f, + 1.73379600e-01f, + 1.78211898e-01f, + 1.83039889e-01f, + 1.87863469e-01f, + 1.92682534e-01f, + 1.97496936e-01f, + 2.02306598e-01f, + 2.07111374e-01f, + 2.11911172e-01f, + 2.16705844e-01f, + 2.21495315e-01f, + 2.26279438e-01f, + 2.31058106e-01f, + 2.35831216e-01f, + 2.40598634e-01f, + 2.45360255e-01f, + 2.50115961e-01f, + 2.54865646e-01f, + 2.59609193e-01f, + 2.64346480e-01f, + 2.69077420e-01f, + 2.73801863e-01f, + 2.78519690e-01f, + 2.83230811e-01f, + 2.87935108e-01f, + 2.92632490e-01f, + 2.97322810e-01f, + 3.02005947e-01f, + 3.06681812e-01f, + 3.11350316e-01f, + 3.16011280e-01f, + 3.20664644e-01f, + 3.25310290e-01f, + 3.29948097e-01f, + 3.34577948e-01f, + 3.39199722e-01f, + 3.43813360e-01f, + 3.48418683e-01f, + 3.53015602e-01f, + 3.57604057e-01f, + 3.62183869e-01f, + 3.66754949e-01f, + 3.71317208e-01f, + 3.75870496e-01f, + 3.80414754e-01f, + 3.84949833e-01f, + 3.89475614e-01f, + 3.93992037e-01f, + 3.98498952e-01f, + 4.02996302e-01f, + 4.07483906e-01f, + 4.11961704e-01f, + 4.16429549e-01f, + 4.20887381e-01f, + 4.25335079e-01f, + 4.29772526e-01f, + 4.34199601e-01f, + 4.38616246e-01f, + 4.43022281e-01f, + 4.47417676e-01f, + 4.51802284e-01f, + 4.56175983e-01f, + 4.60538715e-01f, + 4.64890331e-01f, + 4.69230771e-01f, + 4.73559886e-01f, + 4.77877587e-01f, + 4.82183784e-01f, + 4.86478359e-01f, + 4.90761191e-01f, + 4.95032221e-01f, + 4.99291331e-01f, + 5.03538370e-01f, + 5.07773340e-01f, + 5.11996031e-01f, + 5.16206384e-01f, + 5.20404279e-01f, + 5.24589658e-01f, + 5.28762400e-01f, + 5.32922447e-01f, + 5.37069619e-01f, + 5.41203797e-01f, + 5.45324981e-01f, + 5.49433053e-01f, + 5.53527832e-01f, + 5.57609320e-01f, + 5.61677337e-01f, + 5.65731823e-01f, + 5.69772661e-01f, + 5.73799789e-01f, + 5.77813089e-01f, + 5.81812501e-01f, + 5.85797846e-01f, + 5.89769125e-01f, + 5.93726158e-01f, + 5.97668886e-01f, + 6.01597190e-01f, + 6.05511069e-01f, + 6.09410286e-01f, + 6.13294840e-01f, + 6.17164612e-01f, + 6.21019542e-01f, + 6.24859512e-01f, + 6.28684402e-01f, + 6.32494152e-01f, + 6.36288643e-01f, + 6.40067816e-01f, + 6.43831551e-01f, + 6.47579789e-01f, + 6.51312411e-01f, + 6.55029356e-01f, + 6.58730507e-01f, + 6.62415802e-01f, + 6.66085124e-01f, + 6.69738352e-01f, + 6.73375487e-01f, + 6.76996410e-01f, + 6.80601001e-01f, + 6.84189200e-01f, + 6.87760890e-01f, + 6.91316009e-01f, + 6.94854498e-01f, + 6.98376238e-01f, + 7.01881170e-01f, + 7.05369174e-01f, + 7.08840132e-01f, + 7.12294042e-01f, + 7.15730846e-01f, + 7.19150364e-01f, + 7.22552538e-01f, + 7.25937307e-01f, + 7.29304552e-01f, + 7.32654274e-01f, + 7.35986352e-01f, + 7.39300668e-01f, + 7.42597163e-01f, + 7.45875776e-01f, + 7.49136388e-01f, + 7.52379000e-01f, + 7.55603433e-01f, + 7.58809686e-01f, + 7.61997640e-01f, + 7.65167236e-01f, + 7.68318415e-01f, + 7.71451116e-01f, + 7.74565160e-01f, + 7.77660549e-01f, + 7.80737221e-01f, + 7.83795059e-01f, + 7.86834061e-01f, + 7.89854050e-01f, + 7.92855024e-01f, + 7.95836926e-01f, + 7.98799574e-01f, + 8.01743031e-01f, + 8.04667175e-01f, + 8.07571888e-01f, + 8.10457170e-01f, + 8.13322961e-01f, + 8.16169083e-01f, + 8.18995595e-01f, + 8.21802378e-01f, + 8.24589312e-01f, + 8.27356398e-01f, + 8.30103517e-01f, + 8.32830667e-01f, + 8.35537732e-01f, + 8.38224709e-01f, + 8.40891480e-01f, + 8.43537927e-01f, + 8.46164107e-01f, + 8.48769844e-01f, + 8.51355195e-01f, + 8.53919983e-01f, + 8.56464207e-01f, + 8.58987808e-01f, + 8.61490726e-01f, + 8.63972843e-01f, + 8.66434157e-01f, + 8.68874609e-01f, + 8.71294141e-01f, + 8.73692632e-01f, + 8.76070082e-01f, + 8.78426433e-01f, + 8.80761623e-01f, + 8.83075595e-01f, + 8.85368288e-01f, + 8.87639642e-01f, + 8.89889598e-01f, + 8.92118096e-01f, + 8.94325137e-01f, + 8.96510601e-01f, + 8.98674488e-01f, + 9.00816679e-01f, + 9.02937174e-01f, + 9.05035973e-01f, + 9.07112896e-01f, + 9.09168005e-01f, + 9.11201179e-01f, + 9.13212419e-01f, + 9.15201604e-01f, + 9.17168796e-01f, + 9.19113874e-01f, + 9.21036780e-01f, + 9.22937512e-01f, + 9.24816012e-01f, + 9.26672220e-01f, + 9.28506076e-01f, + 9.30317581e-01f, + 9.32106674e-01f, + 9.33873296e-01f, + 9.35617447e-01f, + 9.37339008e-01f, + 9.39037979e-01f, + 9.40714359e-01f, + 9.42368090e-01f, + 9.43999052e-01f, + 9.45607305e-01f, + 9.47192788e-01f, + 9.48755443e-01f, + 9.50295210e-01f, + 9.51812088e-01f, + 9.53306019e-01f, + 9.54777002e-01f, + 9.56224978e-01f, + 9.57649946e-01f, + 9.59051788e-01f, + 9.60430503e-01f, + 9.61786151e-01f, + 9.63118553e-01f, + 9.64427769e-01f, + 9.65713739e-01f, + 9.66976464e-01f, + 9.68215883e-01f, + 9.69431996e-01f, + 9.70624685e-01f, + 9.71794009e-01f, + 9.72939968e-01f, + 9.74062443e-01f, + 9.75161433e-01f, + 9.76236939e-01f, + 9.77288961e-01f, + 9.78317380e-01f, + 9.79322255e-01f, + 9.80303526e-01f, + 9.81261134e-01f, + 9.82195139e-01f, + 9.83105481e-01f, + 9.83992159e-01f, + 9.84855056e-01f, + 9.85694289e-01f, + 9.86509740e-01f, + 9.87301409e-01f, + 9.88069296e-01f, + 9.88813400e-01f, + 9.89533663e-01f, + 9.90230083e-01f, + 9.90902662e-01f, + 9.91551340e-01f, + 9.92176116e-01f, + 9.92776990e-01f, + 9.93353963e-01f, + 9.93906975e-01f, + 9.94436026e-01f, + 9.94941175e-01f, + 9.95422304e-01f, + 9.95879471e-01f, + 9.96312618e-01f, + 9.96721745e-01f, + 9.97106910e-01f, + 9.97467995e-01f, + 9.97805059e-01f, + 9.98118103e-01f, + 9.98407066e-01f, + 9.98672009e-01f, + 9.98912871e-01f, + 9.99129653e-01f, + 9.99322355e-01f, + 9.99491036e-01f, + 9.99635577e-01f, + 9.99756038e-01f, + 9.99852419e-01f, + 9.99924719e-01f, + 9.99972880e-01f, + 9.99996960e-01f }; const float max_samples_to_rmlt_window[MAX_DCT_LENGTH] = { - 1.22718432e-03, - 3.68154561e-03, - 6.13588467e-03, - 8.59018695e-03, - 1.10444371e-02, - 1.34986211e-02, - 1.59527231e-02, - 1.84067301e-02, - 2.08606254e-02, - 2.33143959e-02, - 2.57680248e-02, - 2.82214992e-02, - 3.06748040e-02, - 3.31279226e-02, - 3.55808437e-02, - 3.80335487e-02, - 4.04860228e-02, - 4.29382585e-02, - 4.53902297e-02, - 4.78419326e-02, - 5.02933450e-02, - 5.27444519e-02, - 5.51952459e-02, - 5.76457046e-02, - 6.00958169e-02, - 6.25455678e-02, - 6.49949387e-02, - 6.74439222e-02, - 6.98924959e-02, - 7.23406523e-02, - 7.47883692e-02, - 7.72356316e-02, - 7.96824396e-02, - 8.21287632e-02, - 8.45745876e-02, - 8.70199054e-02, - 8.94647017e-02, - 9.19089541e-02, - 9.43526551e-02, - 9.67957899e-02, - 9.92383435e-02, - 1.01680294e-01, - 1.04121633e-01, - 1.06562346e-01, - 1.09002419e-01, - 1.11441828e-01, - 1.13880575e-01, - 1.16318628e-01, - 1.18755989e-01, - 1.21192627e-01, - 1.23628542e-01, - 1.26063704e-01, - 1.28498107e-01, - 1.30931750e-01, - 1.33364588e-01, - 1.35796621e-01, - 1.38227850e-01, - 1.40658244e-01, - 1.43087775e-01, - 1.45516455e-01, - 1.47944272e-01, - 1.50371179e-01, - 1.52797192e-01, - 1.55222267e-01, - 1.57646418e-01, - 1.60069630e-01, - 1.62491858e-01, - 1.64913118e-01, - 1.67333379e-01, - 1.69752643e-01, - 1.72170877e-01, - 1.74588069e-01, - 1.77004218e-01, - 1.79419294e-01, - 1.81833297e-01, - 1.84246197e-01, - 1.86657995e-01, - 1.89068660e-01, - 1.91478193e-01, - 1.93886578e-01, - 1.96293786e-01, - 1.98699802e-01, - 2.01104641e-01, - 2.03508258e-01, - 2.05910638e-01, - 2.08311796e-01, - 2.10711688e-01, - 2.13110313e-01, - 2.15507656e-01, - 2.17903703e-01, - 2.20298439e-01, - 2.22691849e-01, - 2.25083917e-01, - 2.27474615e-01, - 2.29863957e-01, - 2.32251912e-01, - 2.34638467e-01, - 2.37023607e-01, - 2.39407316e-01, - 2.41789594e-01, - 2.44170398e-01, - 2.46549740e-01, - 2.48927608e-01, - 2.51303971e-01, - 2.53678799e-01, - 2.56052136e-01, - 2.58423895e-01, - 2.60794103e-01, - 2.63162762e-01, - 2.65529811e-01, - 2.67895281e-01, - 2.70259142e-01, - 2.72621363e-01, - 2.74981946e-01, - 2.77340859e-01, - 2.79698104e-01, - 2.82053679e-01, - 2.84407526e-01, - 2.86759704e-01, - 2.89110124e-01, - 2.91458815e-01, - 2.93805718e-01, - 2.96150893e-01, - 2.98494250e-01, - 3.00835848e-01, - 3.03175598e-01, - 3.05513531e-01, - 3.07849646e-01, - 3.10183883e-01, - 3.12516272e-01, - 3.14846754e-01, - 3.17175359e-01, - 3.19502026e-01, - 3.21826786e-01, - 3.24149609e-01, - 3.26470494e-01, - 3.28789383e-01, - 3.31106305e-01, - 3.33421230e-01, - 3.35734159e-01, - 3.38045061e-01, - 3.40353906e-01, - 3.42660725e-01, - 3.44965458e-01, - 3.47268134e-01, - 3.49568695e-01, - 3.51867169e-01, - 3.54163527e-01, - 3.56457740e-01, - 3.58749807e-01, - 3.61039728e-01, - 3.63327444e-01, - 3.65612984e-01, - 3.67896348e-01, - 3.70177478e-01, - 3.72456372e-01, - 3.74733001e-01, - 3.77007425e-01, - 3.79279524e-01, - 3.81549388e-01, - 3.83816928e-01, - 3.86082143e-01, - 3.88345033e-01, - 3.90605599e-01, - 3.92863810e-01, - 3.95119667e-01, - 3.97373140e-01, - 3.99624199e-01, - 4.01872873e-01, - 4.04119104e-01, - 4.06362921e-01, - 4.08604264e-01, - 4.10843164e-01, - 4.13079590e-01, - 4.15313542e-01, - 4.17544961e-01, - 4.19773877e-01, - 4.22000259e-01, - 4.24224108e-01, - 4.26445425e-01, - 4.28664148e-01, - 4.30880278e-01, - 4.33093816e-01, - 4.35304761e-01, - 4.37513083e-01, - 4.39718753e-01, - 4.41921771e-01, - 4.44122136e-01, - 4.46319848e-01, - 4.48514849e-01, - 4.50707138e-01, - 4.52896714e-01, - 4.55083579e-01, - 4.57267702e-01, - 4.59449053e-01, - 4.61627662e-01, - 4.63803470e-01, - 4.65976506e-01, - 4.68146712e-01, - 4.70314115e-01, - 4.72478658e-01, - 4.74640369e-01, - 4.76799220e-01, - 4.78955209e-01, - 4.81108308e-01, - 4.83258516e-01, - 4.85405803e-01, - 4.87550169e-01, - 4.89691585e-01, - 4.91830051e-01, - 4.93965566e-01, - 4.96098131e-01, - 4.98227656e-01, - 5.00354230e-01, - 5.02477765e-01, - 5.04598260e-01, - 5.06715715e-01, - 5.08830130e-01, - 5.10941505e-01, - 5.13049781e-01, - 5.15154958e-01, - 5.17257035e-01, - 5.19356012e-01, - 5.21451831e-01, - 5.23544490e-01, - 5.25634050e-01, - 5.27720451e-01, - 5.29803634e-01, - 5.31883657e-01, - 5.33960402e-01, - 5.36033988e-01, - 5.38104355e-01, - 5.40171444e-01, - 5.42235315e-01, - 5.44295907e-01, - 5.46353221e-01, - 5.48407257e-01, - 5.50457954e-01, - 5.52505374e-01, - 5.54549456e-01, - 5.56590199e-01, - 5.58627546e-01, - 5.60661554e-01, - 5.62692225e-01, - 5.64719439e-01, - 5.66743314e-01, - 5.68763733e-01, - 5.70780754e-01, - 5.72794318e-01, - 5.74804425e-01, - 5.76811075e-01, - 5.78814268e-01, - 5.80813944e-01, - 5.82810163e-01, - 5.84802806e-01, - 5.86791992e-01, - 5.88777602e-01, - 5.90759695e-01, - 5.92738211e-01, - 5.94713151e-01, - 5.96684515e-01, - 5.98652303e-01, - 6.00616455e-01, - 6.02577031e-01, - 6.04533970e-01, - 6.06487215e-01, - 6.08436823e-01, - 6.10382795e-01, - 6.12325072e-01, - 6.14263654e-01, - 6.16198599e-01, - 6.18129730e-01, - 6.20057225e-01, - 6.21980906e-01, - 6.23900890e-01, - 6.25817120e-01, - 6.27729595e-01, - 6.29638255e-01, - 6.31543100e-01, - 6.33444190e-01, - 6.35341406e-01, - 6.37234867e-01, - 6.39124453e-01, - 6.41010165e-01, - 6.42892063e-01, - 6.44770086e-01, - 6.46644175e-01, - 6.48514390e-01, - 6.50380731e-01, - 6.52243137e-01, - 6.54101610e-01, - 6.55956089e-01, - 6.57806695e-01, - 6.59653306e-01, - 6.61495924e-01, - 6.63334608e-01, - 6.65169239e-01, - 6.66999936e-01, - 6.68826580e-01, - 6.70649171e-01, - 6.72467709e-01, - 6.74282253e-01, - 6.76092684e-01, - 6.77899063e-01, - 6.79701388e-01, - 6.81499600e-01, - 6.83293700e-01, - 6.85083687e-01, - 6.86869502e-01, - 6.88651264e-01, - 6.90428793e-01, - 6.92202210e-01, - 6.93971455e-01, - 6.95736527e-01, - 6.97497368e-01, - 6.99254036e-01, - 7.01006532e-01, - 7.02754736e-01, - 7.04498768e-01, - 7.06238508e-01, - 7.07974017e-01, - 7.09705234e-01, - 7.11432219e-01, - 7.13154852e-01, - 7.14873254e-01, - 7.16587305e-01, - 7.18297064e-01, - 7.20002532e-01, - 7.21703589e-01, - 7.23400354e-01, - 7.25092709e-01, - 7.26780772e-01, - 7.28464365e-01, - 7.30143666e-01, - 7.31818497e-01, - 7.33488917e-01, - 7.35154986e-01, - 7.36816585e-01, - 7.38473713e-01, - 7.40126431e-01, - 7.41774678e-01, - 7.43418455e-01, - 7.45057762e-01, - 7.46692598e-01, - 7.48322904e-01, - 7.49948740e-01, - 7.51570046e-01, - 7.53186822e-01, - 7.54799008e-01, - 7.56406724e-01, - 7.58009851e-01, - 7.59608388e-01, - 7.61202395e-01, - 7.62791812e-01, - 7.64376581e-01, - 7.65956819e-01, - 7.67532349e-01, - 7.69103348e-01, - 7.70669639e-01, - 7.72231340e-01, - 7.73788393e-01, - 7.75340736e-01, - 7.76888490e-01, - 7.78431475e-01, - 7.79969811e-01, - 7.81503439e-01, - 7.83032358e-01, - 7.84556568e-01, - 7.86076069e-01, - 7.87590802e-01, - 7.89100826e-01, - 7.90606081e-01, - 7.92106569e-01, - 7.93602288e-01, - 7.95093238e-01, - 7.96579361e-01, - 7.98060715e-01, - 7.99537241e-01, - 8.01008999e-01, - 8.02475870e-01, - 8.03937972e-01, - 8.05395186e-01, - 8.06847572e-01, - 8.08295071e-01, - 8.09737682e-01, - 8.11175466e-01, - 8.12608361e-01, - 8.14036310e-01, - 8.15459430e-01, - 8.16877604e-01, - 8.18290830e-01, - 8.19699109e-01, - 8.21102500e-01, - 8.22500944e-01, - 8.23894441e-01, - 8.25282931e-01, - 8.26666474e-01, - 8.28045070e-01, - 8.29418600e-01, - 8.30787182e-01, - 8.32150757e-01, - 8.33509326e-01, - 8.34862888e-01, - 8.36211383e-01, - 8.37554872e-01, - 8.38893294e-01, - 8.40226650e-01, - 8.41554999e-01, - 8.42878222e-01, - 8.44196379e-01, - 8.45509470e-01, - 8.46817434e-01, - 8.48120332e-01, - 8.49418104e-01, - 8.50710809e-01, - 8.51998329e-01, - 8.53280723e-01, - 8.54557991e-01, - 8.55830133e-01, - 8.57097089e-01, - 8.58358860e-01, - 8.59615505e-01, - 8.60866964e-01, - 8.62113178e-01, - 8.63354266e-01, - 8.64590168e-01, - 8.65820825e-01, - 8.67046237e-01, - 8.68266463e-01, - 8.69481444e-01, - 8.70691240e-01, - 8.71895730e-01, - 8.73094976e-01, - 8.74288976e-01, - 8.75477731e-01, - 8.76661181e-01, - 8.77839327e-01, - 8.79012227e-01, - 8.80179822e-01, - 8.81342113e-01, - 8.82499099e-01, - 8.83650780e-01, - 8.84797096e-01, - 8.85938108e-01, - 8.87073815e-01, - 8.88204098e-01, - 8.89329076e-01, - 8.90448749e-01, - 8.91562998e-01, - 8.92671883e-01, - 8.93775403e-01, - 8.94873500e-01, - 8.95966232e-01, - 8.97053599e-01, - 8.98135543e-01, - 8.99212062e-01, - 9.00283158e-01, - 9.01348829e-01, - 9.02409077e-01, - 9.03463900e-01, - 9.04513299e-01, - 9.05557215e-01, - 9.06595707e-01, - 9.07628715e-01, - 9.08656240e-01, - 9.09678340e-01, - 9.10694897e-01, - 9.11706030e-01, - 9.12711620e-01, - 9.13711786e-01, - 9.14706349e-01, - 9.15695488e-01, - 9.16679084e-01, - 9.17657137e-01, - 9.18629646e-01, - 9.19596672e-01, - 9.20558095e-01, - 9.21514034e-01, - 9.22464430e-01, - 9.23409224e-01, - 9.24348474e-01, - 9.25282121e-01, - 9.26210225e-01, - 9.27132785e-01, - 9.28049684e-01, - 9.28961039e-01, - 9.29866791e-01, - 9.30766940e-01, - 9.31661487e-01, - 9.32550430e-01, - 9.33433771e-01, - 9.34311450e-01, - 9.35183525e-01, - 9.36049938e-01, - 9.36910748e-01, - 9.37765896e-01, - 9.38615382e-01, - 9.39459205e-01, - 9.40297425e-01, - 9.41129923e-01, - 9.41956758e-01, - 9.42777932e-01, - 9.43593442e-01, - 9.44403291e-01, - 9.45207417e-01, - 9.46005821e-01, - 9.46798563e-01, - 9.47585583e-01, - 9.48366940e-01, - 9.49142516e-01, - 9.49912429e-01, - 9.50676560e-01, - 9.51435030e-01, - 9.52187717e-01, - 9.52934682e-01, - 9.53675926e-01, - 9.54411447e-01, - 9.55141187e-01, - 9.55865145e-01, - 9.56583381e-01, - 9.57295835e-01, - 9.58002567e-01, - 9.58703458e-01, - 9.59398627e-01, - 9.60088015e-01, - 9.60771620e-01, - 9.61449385e-01, - 9.62121427e-01, - 9.62787628e-01, - 9.63448048e-01, - 9.64102626e-01, - 9.64751422e-01, - 9.65394437e-01, - 9.66031611e-01, - 9.66663003e-01, - 9.67288494e-01, - 9.67908204e-01, - 9.68522072e-01, - 9.69130158e-01, - 9.69732344e-01, - 9.70328689e-01, - 9.70919251e-01, - 9.71503913e-01, - 9.72082734e-01, - 9.72655654e-01, - 9.73222792e-01, - 9.73784029e-01, - 9.74339366e-01, - 9.74888861e-01, - 9.75432515e-01, - 9.75970268e-01, - 9.76502120e-01, - 9.77028131e-01, - 9.77548242e-01, - 9.78062451e-01, - 9.78570819e-01, - 9.79073226e-01, - 9.79569793e-01, - 9.80060399e-01, - 9.80545104e-01, - 9.81023967e-01, - 9.81496871e-01, - 9.81963873e-01, - 9.82424974e-01, - 9.82880116e-01, - 9.83329356e-01, - 9.83772695e-01, - 9.84210074e-01, - 9.84641552e-01, - 9.85067070e-01, - 9.85486686e-01, - 9.85900342e-01, - 9.86308098e-01, - 9.86709893e-01, - 9.87105727e-01, - 9.87495601e-01, - 9.87879574e-01, - 9.88257587e-01, - 9.88629639e-01, - 9.88995671e-01, - 9.89355803e-01, - 9.89709973e-01, - 9.90058184e-01, - 9.90400434e-01, - 9.90736723e-01, - 9.91067052e-01, - 9.91391361e-01, - 9.91709769e-01, - 9.92022157e-01, - 9.92328584e-01, - 9.92628992e-01, - 9.92923498e-01, - 9.93211925e-01, - 9.93494451e-01, - 9.93770957e-01, - 9.94041502e-01, - 9.94306028e-01, - 9.94564593e-01, - 9.94817138e-01, - 9.95063663e-01, - 9.95304286e-01, - 9.95538831e-01, - 9.95767415e-01, - 9.95989978e-01, - 9.96206582e-01, - 9.96417165e-01, - 9.96621728e-01, - 9.96820271e-01, - 9.97012854e-01, - 9.97199416e-01, - 9.97379959e-01, - 9.97554541e-01, - 9.97723043e-01, - 9.97885585e-01, - 9.98042107e-01, - 9.98192608e-01, - 9.98337090e-01, - 9.98475552e-01, - 9.98608053e-01, - 9.98734474e-01, - 9.98854935e-01, - 9.98969316e-01, - 9.99077737e-01, - 9.99180079e-01, - 9.99276459e-01, - 9.99366820e-01, - 9.99451101e-01, - 9.99529421e-01, - 9.99601722e-01, - 9.99667943e-01, - 9.99728203e-01, - 9.99782383e-01, - 9.99830604e-01, - 9.99872744e-01, - 9.99908864e-01, - 9.99939024e-01, - 9.99963105e-01, - 9.99981165e-01, - 9.99993205e-01, - 9.99999225e-01 + 1.22718432e-03f, + 3.68154561e-03f, + 6.13588467e-03f, + 8.59018695e-03f, + 1.10444371e-02f, + 1.34986211e-02f, + 1.59527231e-02f, + 1.84067301e-02f, + 2.08606254e-02f, + 2.33143959e-02f, + 2.57680248e-02f, + 2.82214992e-02f, + 3.06748040e-02f, + 3.31279226e-02f, + 3.55808437e-02f, + 3.80335487e-02f, + 4.04860228e-02f, + 4.29382585e-02f, + 4.53902297e-02f, + 4.78419326e-02f, + 5.02933450e-02f, + 5.27444519e-02f, + 5.51952459e-02f, + 5.76457046e-02f, + 6.00958169e-02f, + 6.25455678e-02f, + 6.49949387e-02f, + 6.74439222e-02f, + 6.98924959e-02f, + 7.23406523e-02f, + 7.47883692e-02f, + 7.72356316e-02f, + 7.96824396e-02f, + 8.21287632e-02f, + 8.45745876e-02f, + 8.70199054e-02f, + 8.94647017e-02f, + 9.19089541e-02f, + 9.43526551e-02f, + 9.67957899e-02f, + 9.92383435e-02f, + 1.01680294e-01f, + 1.04121633e-01f, + 1.06562346e-01f, + 1.09002419e-01f, + 1.11441828e-01f, + 1.13880575e-01f, + 1.16318628e-01f, + 1.18755989e-01f, + 1.21192627e-01f, + 1.23628542e-01f, + 1.26063704e-01f, + 1.28498107e-01f, + 1.30931750e-01f, + 1.33364588e-01f, + 1.35796621e-01f, + 1.38227850e-01f, + 1.40658244e-01f, + 1.43087775e-01f, + 1.45516455e-01f, + 1.47944272e-01f, + 1.50371179e-01f, + 1.52797192e-01f, + 1.55222267e-01f, + 1.57646418e-01f, + 1.60069630e-01f, + 1.62491858e-01f, + 1.64913118e-01f, + 1.67333379e-01f, + 1.69752643e-01f, + 1.72170877e-01f, + 1.74588069e-01f, + 1.77004218e-01f, + 1.79419294e-01f, + 1.81833297e-01f, + 1.84246197e-01f, + 1.86657995e-01f, + 1.89068660e-01f, + 1.91478193e-01f, + 1.93886578e-01f, + 1.96293786e-01f, + 1.98699802e-01f, + 2.01104641e-01f, + 2.03508258e-01f, + 2.05910638e-01f, + 2.08311796e-01f, + 2.10711688e-01f, + 2.13110313e-01f, + 2.15507656e-01f, + 2.17903703e-01f, + 2.20298439e-01f, + 2.22691849e-01f, + 2.25083917e-01f, + 2.27474615e-01f, + 2.29863957e-01f, + 2.32251912e-01f, + 2.34638467e-01f, + 2.37023607e-01f, + 2.39407316e-01f, + 2.41789594e-01f, + 2.44170398e-01f, + 2.46549740e-01f, + 2.48927608e-01f, + 2.51303971e-01f, + 2.53678799e-01f, + 2.56052136e-01f, + 2.58423895e-01f, + 2.60794103e-01f, + 2.63162762e-01f, + 2.65529811e-01f, + 2.67895281e-01f, + 2.70259142e-01f, + 2.72621363e-01f, + 2.74981946e-01f, + 2.77340859e-01f, + 2.79698104e-01f, + 2.82053679e-01f, + 2.84407526e-01f, + 2.86759704e-01f, + 2.89110124e-01f, + 2.91458815e-01f, + 2.93805718e-01f, + 2.96150893e-01f, + 2.98494250e-01f, + 3.00835848e-01f, + 3.03175598e-01f, + 3.05513531e-01f, + 3.07849646e-01f, + 3.10183883e-01f, + 3.12516272e-01f, + 3.14846754e-01f, + 3.17175359e-01f, + 3.19502026e-01f, + 3.21826786e-01f, + 3.24149609e-01f, + 3.26470494e-01f, + 3.28789383e-01f, + 3.31106305e-01f, + 3.33421230e-01f, + 3.35734159e-01f, + 3.38045061e-01f, + 3.40353906e-01f, + 3.42660725e-01f, + 3.44965458e-01f, + 3.47268134e-01f, + 3.49568695e-01f, + 3.51867169e-01f, + 3.54163527e-01f, + 3.56457740e-01f, + 3.58749807e-01f, + 3.61039728e-01f, + 3.63327444e-01f, + 3.65612984e-01f, + 3.67896348e-01f, + 3.70177478e-01f, + 3.72456372e-01f, + 3.74733001e-01f, + 3.77007425e-01f, + 3.79279524e-01f, + 3.81549388e-01f, + 3.83816928e-01f, + 3.86082143e-01f, + 3.88345033e-01f, + 3.90605599e-01f, + 3.92863810e-01f, + 3.95119667e-01f, + 3.97373140e-01f, + 3.99624199e-01f, + 4.01872873e-01f, + 4.04119104e-01f, + 4.06362921e-01f, + 4.08604264e-01f, + 4.10843164e-01f, + 4.13079590e-01f, + 4.15313542e-01f, + 4.17544961e-01f, + 4.19773877e-01f, + 4.22000259e-01f, + 4.24224108e-01f, + 4.26445425e-01f, + 4.28664148e-01f, + 4.30880278e-01f, + 4.33093816e-01f, + 4.35304761e-01f, + 4.37513083e-01f, + 4.39718753e-01f, + 4.41921771e-01f, + 4.44122136e-01f, + 4.46319848e-01f, + 4.48514849e-01f, + 4.50707138e-01f, + 4.52896714e-01f, + 4.55083579e-01f, + 4.57267702e-01f, + 4.59449053e-01f, + 4.61627662e-01f, + 4.63803470e-01f, + 4.65976506e-01f, + 4.68146712e-01f, + 4.70314115e-01f, + 4.72478658e-01f, + 4.74640369e-01f, + 4.76799220e-01f, + 4.78955209e-01f, + 4.81108308e-01f, + 4.83258516e-01f, + 4.85405803e-01f, + 4.87550169e-01f, + 4.89691585e-01f, + 4.91830051e-01f, + 4.93965566e-01f, + 4.96098131e-01f, + 4.98227656e-01f, + 5.00354230e-01f, + 5.02477765e-01f, + 5.04598260e-01f, + 5.06715715e-01f, + 5.08830130e-01f, + 5.10941505e-01f, + 5.13049781e-01f, + 5.15154958e-01f, + 5.17257035e-01f, + 5.19356012e-01f, + 5.21451831e-01f, + 5.23544490e-01f, + 5.25634050e-01f, + 5.27720451e-01f, + 5.29803634e-01f, + 5.31883657e-01f, + 5.33960402e-01f, + 5.36033988e-01f, + 5.38104355e-01f, + 5.40171444e-01f, + 5.42235315e-01f, + 5.44295907e-01f, + 5.46353221e-01f, + 5.48407257e-01f, + 5.50457954e-01f, + 5.52505374e-01f, + 5.54549456e-01f, + 5.56590199e-01f, + 5.58627546e-01f, + 5.60661554e-01f, + 5.62692225e-01f, + 5.64719439e-01f, + 5.66743314e-01f, + 5.68763733e-01f, + 5.70780754e-01f, + 5.72794318e-01f, + 5.74804425e-01f, + 5.76811075e-01f, + 5.78814268e-01f, + 5.80813944e-01f, + 5.82810163e-01f, + 5.84802806e-01f, + 5.86791992e-01f, + 5.88777602e-01f, + 5.90759695e-01f, + 5.92738211e-01f, + 5.94713151e-01f, + 5.96684515e-01f, + 5.98652303e-01f, + 6.00616455e-01f, + 6.02577031e-01f, + 6.04533970e-01f, + 6.06487215e-01f, + 6.08436823e-01f, + 6.10382795e-01f, + 6.12325072e-01f, + 6.14263654e-01f, + 6.16198599e-01f, + 6.18129730e-01f, + 6.20057225e-01f, + 6.21980906e-01f, + 6.23900890e-01f, + 6.25817120e-01f, + 6.27729595e-01f, + 6.29638255e-01f, + 6.31543100e-01f, + 6.33444190e-01f, + 6.35341406e-01f, + 6.37234867e-01f, + 6.39124453e-01f, + 6.41010165e-01f, + 6.42892063e-01f, + 6.44770086e-01f, + 6.46644175e-01f, + 6.48514390e-01f, + 6.50380731e-01f, + 6.52243137e-01f, + 6.54101610e-01f, + 6.55956089e-01f, + 6.57806695e-01f, + 6.59653306e-01f, + 6.61495924e-01f, + 6.63334608e-01f, + 6.65169239e-01f, + 6.66999936e-01f, + 6.68826580e-01f, + 6.70649171e-01f, + 6.72467709e-01f, + 6.74282253e-01f, + 6.76092684e-01f, + 6.77899063e-01f, + 6.79701388e-01f, + 6.81499600e-01f, + 6.83293700e-01f, + 6.85083687e-01f, + 6.86869502e-01f, + 6.88651264e-01f, + 6.90428793e-01f, + 6.92202210e-01f, + 6.93971455e-01f, + 6.95736527e-01f, + 6.97497368e-01f, + 6.99254036e-01f, + 7.01006532e-01f, + 7.02754736e-01f, + 7.04498768e-01f, + 7.06238508e-01f, + 7.07974017e-01f, + 7.09705234e-01f, + 7.11432219e-01f, + 7.13154852e-01f, + 7.14873254e-01f, + 7.16587305e-01f, + 7.18297064e-01f, + 7.20002532e-01f, + 7.21703589e-01f, + 7.23400354e-01f, + 7.25092709e-01f, + 7.26780772e-01f, + 7.28464365e-01f, + 7.30143666e-01f, + 7.31818497e-01f, + 7.33488917e-01f, + 7.35154986e-01f, + 7.36816585e-01f, + 7.38473713e-01f, + 7.40126431e-01f, + 7.41774678e-01f, + 7.43418455e-01f, + 7.45057762e-01f, + 7.46692598e-01f, + 7.48322904e-01f, + 7.49948740e-01f, + 7.51570046e-01f, + 7.53186822e-01f, + 7.54799008e-01f, + 7.56406724e-01f, + 7.58009851e-01f, + 7.59608388e-01f, + 7.61202395e-01f, + 7.62791812e-01f, + 7.64376581e-01f, + 7.65956819e-01f, + 7.67532349e-01f, + 7.69103348e-01f, + 7.70669639e-01f, + 7.72231340e-01f, + 7.73788393e-01f, + 7.75340736e-01f, + 7.76888490e-01f, + 7.78431475e-01f, + 7.79969811e-01f, + 7.81503439e-01f, + 7.83032358e-01f, + 7.84556568e-01f, + 7.86076069e-01f, + 7.87590802e-01f, + 7.89100826e-01f, + 7.90606081e-01f, + 7.92106569e-01f, + 7.93602288e-01f, + 7.95093238e-01f, + 7.96579361e-01f, + 7.98060715e-01f, + 7.99537241e-01f, + 8.01008999e-01f, + 8.02475870e-01f, + 8.03937972e-01f, + 8.05395186e-01f, + 8.06847572e-01f, + 8.08295071e-01f, + 8.09737682e-01f, + 8.11175466e-01f, + 8.12608361e-01f, + 8.14036310e-01f, + 8.15459430e-01f, + 8.16877604e-01f, + 8.18290830e-01f, + 8.19699109e-01f, + 8.21102500e-01f, + 8.22500944e-01f, + 8.23894441e-01f, + 8.25282931e-01f, + 8.26666474e-01f, + 8.28045070e-01f, + 8.29418600e-01f, + 8.30787182e-01f, + 8.32150757e-01f, + 8.33509326e-01f, + 8.34862888e-01f, + 8.36211383e-01f, + 8.37554872e-01f, + 8.38893294e-01f, + 8.40226650e-01f, + 8.41554999e-01f, + 8.42878222e-01f, + 8.44196379e-01f, + 8.45509470e-01f, + 8.46817434e-01f, + 8.48120332e-01f, + 8.49418104e-01f, + 8.50710809e-01f, + 8.51998329e-01f, + 8.53280723e-01f, + 8.54557991e-01f, + 8.55830133e-01f, + 8.57097089e-01f, + 8.58358860e-01f, + 8.59615505e-01f, + 8.60866964e-01f, + 8.62113178e-01f, + 8.63354266e-01f, + 8.64590168e-01f, + 8.65820825e-01f, + 8.67046237e-01f, + 8.68266463e-01f, + 8.69481444e-01f, + 8.70691240e-01f, + 8.71895730e-01f, + 8.73094976e-01f, + 8.74288976e-01f, + 8.75477731e-01f, + 8.76661181e-01f, + 8.77839327e-01f, + 8.79012227e-01f, + 8.80179822e-01f, + 8.81342113e-01f, + 8.82499099e-01f, + 8.83650780e-01f, + 8.84797096e-01f, + 8.85938108e-01f, + 8.87073815e-01f, + 8.88204098e-01f, + 8.89329076e-01f, + 8.90448749e-01f, + 8.91562998e-01f, + 8.92671883e-01f, + 8.93775403e-01f, + 8.94873500e-01f, + 8.95966232e-01f, + 8.97053599e-01f, + 8.98135543e-01f, + 8.99212062e-01f, + 9.00283158e-01f, + 9.01348829e-01f, + 9.02409077e-01f, + 9.03463900e-01f, + 9.04513299e-01f, + 9.05557215e-01f, + 9.06595707e-01f, + 9.07628715e-01f, + 9.08656240e-01f, + 9.09678340e-01f, + 9.10694897e-01f, + 9.11706030e-01f, + 9.12711620e-01f, + 9.13711786e-01f, + 9.14706349e-01f, + 9.15695488e-01f, + 9.16679084e-01f, + 9.17657137e-01f, + 9.18629646e-01f, + 9.19596672e-01f, + 9.20558095e-01f, + 9.21514034e-01f, + 9.22464430e-01f, + 9.23409224e-01f, + 9.24348474e-01f, + 9.25282121e-01f, + 9.26210225e-01f, + 9.27132785e-01f, + 9.28049684e-01f, + 9.28961039e-01f, + 9.29866791e-01f, + 9.30766940e-01f, + 9.31661487e-01f, + 9.32550430e-01f, + 9.33433771e-01f, + 9.34311450e-01f, + 9.35183525e-01f, + 9.36049938e-01f, + 9.36910748e-01f, + 9.37765896e-01f, + 9.38615382e-01f, + 9.39459205e-01f, + 9.40297425e-01f, + 9.41129923e-01f, + 9.41956758e-01f, + 9.42777932e-01f, + 9.43593442e-01f, + 9.44403291e-01f, + 9.45207417e-01f, + 9.46005821e-01f, + 9.46798563e-01f, + 9.47585583e-01f, + 9.48366940e-01f, + 9.49142516e-01f, + 9.49912429e-01f, + 9.50676560e-01f, + 9.51435030e-01f, + 9.52187717e-01f, + 9.52934682e-01f, + 9.53675926e-01f, + 9.54411447e-01f, + 9.55141187e-01f, + 9.55865145e-01f, + 9.56583381e-01f, + 9.57295835e-01f, + 9.58002567e-01f, + 9.58703458e-01f, + 9.59398627e-01f, + 9.60088015e-01f, + 9.60771620e-01f, + 9.61449385e-01f, + 9.62121427e-01f, + 9.62787628e-01f, + 9.63448048e-01f, + 9.64102626e-01f, + 9.64751422e-01f, + 9.65394437e-01f, + 9.66031611e-01f, + 9.66663003e-01f, + 9.67288494e-01f, + 9.67908204e-01f, + 9.68522072e-01f, + 9.69130158e-01f, + 9.69732344e-01f, + 9.70328689e-01f, + 9.70919251e-01f, + 9.71503913e-01f, + 9.72082734e-01f, + 9.72655654e-01f, + 9.73222792e-01f, + 9.73784029e-01f, + 9.74339366e-01f, + 9.74888861e-01f, + 9.75432515e-01f, + 9.75970268e-01f, + 9.76502120e-01f, + 9.77028131e-01f, + 9.77548242e-01f, + 9.78062451e-01f, + 9.78570819e-01f, + 9.79073226e-01f, + 9.79569793e-01f, + 9.80060399e-01f, + 9.80545104e-01f, + 9.81023967e-01f, + 9.81496871e-01f, + 9.81963873e-01f, + 9.82424974e-01f, + 9.82880116e-01f, + 9.83329356e-01f, + 9.83772695e-01f, + 9.84210074e-01f, + 9.84641552e-01f, + 9.85067070e-01f, + 9.85486686e-01f, + 9.85900342e-01f, + 9.86308098e-01f, + 9.86709893e-01f, + 9.87105727e-01f, + 9.87495601e-01f, + 9.87879574e-01f, + 9.88257587e-01f, + 9.88629639e-01f, + 9.88995671e-01f, + 9.89355803e-01f, + 9.89709973e-01f, + 9.90058184e-01f, + 9.90400434e-01f, + 9.90736723e-01f, + 9.91067052e-01f, + 9.91391361e-01f, + 9.91709769e-01f, + 9.92022157e-01f, + 9.92328584e-01f, + 9.92628992e-01f, + 9.92923498e-01f, + 9.93211925e-01f, + 9.93494451e-01f, + 9.93770957e-01f, + 9.94041502e-01f, + 9.94306028e-01f, + 9.94564593e-01f, + 9.94817138e-01f, + 9.95063663e-01f, + 9.95304286e-01f, + 9.95538831e-01f, + 9.95767415e-01f, + 9.95989978e-01f, + 9.96206582e-01f, + 9.96417165e-01f, + 9.96621728e-01f, + 9.96820271e-01f, + 9.97012854e-01f, + 9.97199416e-01f, + 9.97379959e-01f, + 9.97554541e-01f, + 9.97723043e-01f, + 9.97885585e-01f, + 9.98042107e-01f, + 9.98192608e-01f, + 9.98337090e-01f, + 9.98475552e-01f, + 9.98608053e-01f, + 9.98734474e-01f, + 9.98854935e-01f, + 9.98969316e-01f, + 9.99077737e-01f, + 9.99180079e-01f, + 9.99276459e-01f, + 9.99366820e-01f, + 9.99451101e-01f, + 9.99529421e-01f, + 9.99601722e-01f, + 9.99667943e-01f, + 9.99728203e-01f, + 9.99782383e-01f, + 9.99830604e-01f, + 9.99872744e-01f, + 9.99908864e-01f, + 9.99939024e-01f, + 9.99963105e-01f, + 9.99981165e-01f, + 9.99993205e-01f, + 9.99999225e-01f }; #endif /*- End of file ------------------------------------------------------------*/ Modified: freeswitch/trunk/libs/libg722_1/src/tables.c ============================================================================== --- freeswitch/trunk/libs/libg722_1/src/tables.c (original) +++ freeswitch/trunk/libs/libg722_1/src/tables.c Mon Dec 15 23:14:57 2008 @@ -65,70 +65,70 @@ #else const float region_standard_deviation_table[REGION_POWER_TABLE_SIZE] = { - 2.441406247570224e-04, - 3.452669826719395e-04, - 4.882812495545411e-04, - 6.905339654011486e-04, - 9.765624991900746e-04, - 1.381067930916839e-03, - 1.953124998542134e-03, - 2.762135862062757e-03, - 3.906249997408239e-03, - 5.524271724583683e-03, - 7.812499995464418e-03, - 1.104854345008369e-02, - 1.562499999222472e-02, - 2.209708690200003e-02, - 3.124999998704119e-02, - 4.419417380766535e-02, - 6.249999997926591e-02, - 8.838834762266132e-02, - 1.249999999688989e-01, - 1.767766952599839e-01, - 2.499999999585318e-01, - 3.535533905492901e-01, - 4.999999999585318e-01, - 7.071067811572251e-01, - 1.000000000000000e+00, - 1.414213562431740e+00, - 2.000000000165873e+00, - 2.828427125098059e+00, - 4.000000000663491e+00, - 5.656854250665278e+00, - 8.000000001990472e+00, - 1.131370850226887e+01, - 1.600000000530792e+01, - 2.262741700641438e+01, - 3.200000001326981e+01, - 4.525483401658204e+01, - 6.400000003184756e+01, - 9.050966804067060e+01, - 1.280000000743110e+02, - 1.810193360963542e+02, - 2.560000001698536e+02, - 3.620386722227349e+02, - 5.120000003821707e+02, - 7.240773445055215e+02, - 1.024000000849268e+03, - 1.448154689131149e+03, - 2.048000001868390e+03, - 2.896309378502505e+03, - 4.096000004076487e+03, - 5.792618757485434e+03, - 8.192000008832390e+03, - 1.158523751593169e+04, - 1.638400001902361e+04, - 2.317047503378509e+04, - 3.276800004076484e+04, - 4.634095007141347e+04, - 6.553600008696507e+04, - 9.268190015051374e+04, - 1.310720001848009e+05, - 1.853638003164007e+05, - 2.621440003913428e+05, - 3.707276006635486e+05, - 5.242880008261676e+05, - 7.414552013885899e+05 + 2.441406247570224e-04f, + 3.452669826719395e-04f, + 4.882812495545411e-04f, + 6.905339654011486e-04f, + 9.765624991900746e-04f, + 1.381067930916839e-03f, + 1.953124998542134e-03f, + 2.762135862062757e-03f, + 3.906249997408239e-03f, + 5.524271724583683e-03f, + 7.812499995464418e-03f, + 1.104854345008369e-02f, + 1.562499999222472e-02f, + 2.209708690200003e-02f, + 3.124999998704119e-02f, + 4.419417380766535e-02f, + 6.249999997926591e-02f, + 8.838834762266132e-02f, + 1.249999999688989e-01f, + 1.767766952599839e-01f, + 2.499999999585318e-01f, + 3.535533905492901e-01f, + 4.999999999585318e-01f, + 7.071067811572251e-01f, + 1.000000000000000e+00f, + 1.414213562431740e+00f, + 2.000000000165873e+00f, + 2.828427125098059e+00f, + 4.000000000663491e+00f, + 5.656854250665278e+00f, + 8.000000001990472e+00f, + 1.131370850226887e+01f, + 1.600000000530792e+01f, + 2.262741700641438e+01f, + 3.200000001326981e+01f, + 4.525483401658204e+01f, + 6.400000003184756e+01f, + 9.050966804067060e+01f, + 1.280000000743110e+02f, + 1.810193360963542e+02f, + 2.560000001698536e+02f, + 3.620386722227349e+02f, + 5.120000003821707e+02f, + 7.240773445055215e+02f, + 1.024000000849268e+03f, + 1.448154689131149e+03f, + 2.048000001868390e+03f, + 2.896309378502505e+03f, + 4.096000004076487e+03f, + 5.792618757485434e+03f, + 8.192000008832390e+03f, + 1.158523751593169e+04f, + 1.638400001902361e+04f, + 2.317047503378509e+04f, + 3.276800004076484e+04f, + 4.634095007141347e+04f, + 6.553600008696507e+04f, + 9.268190015051374e+04f, + 1.310720001848009e+05f, + 1.853638003164007e+05f, + 2.621440003913428e+05f, + 3.707276006635486e+05f, + 5.242880008261676e+05f, + 7.414552013885899e+05f }; #endif @@ -146,70 +146,70 @@ #else const float standard_deviation_inverse_table[REGION_POWER_TABLE_SIZE] = { - 4.096000004076488e+03, - 2.896309378502504e+03, - 2.048000001868390e+03, - 1.448154689131149e+03, - 1.024000000849268e+03, - 7.240773445055215e+02, - 5.120000003821708e+02, - 3.620386722227349e+02, - 2.560000001698537e+02, - 1.810193360963542e+02, - 1.280000000743110e+02, - 9.050966804067060e+01, - 6.400000003184756e+01, - 4.525483401658203e+01, - 3.200000001326982e+01, - 2.262741700641438e+01, - 1.600000000530793e+01, - 1.131370850226887e+01, - 8.000000001990474e+00, - 5.656854250665277e+00, - 4.000000000663491e+00, - 2.828427125098059e+00, - 2.000000000165873e+00, - 1.414213562431740e+00, - 1.000000000000000e+00, - 7.071067811572251e-01, - 4.999999999585318e-01, - 3.535533905492901e-01, - 2.499999999585318e-01, - 1.767766952599838e-01, - 1.249999999688989e-01, - 8.838834762266132e-02, - 6.249999997926592e-02, - 4.419417380766535e-02, - 3.124999998704120e-02, - 2.209708690200002e-02, - 1.562499999222472e-02, - 1.104854345008369e-02, - 7.812499995464418e-03, - 5.524271724583683e-03, - 3.906249997408239e-03, - 2.762135862062757e-03, - 1.953124998542134e-03, - 1.381067930916839e-03, - 9.765624991900747e-04, - 6.905339654011486e-04, - 4.882812495545411e-04, - 3.452669826719394e-04, - 2.441406247570224e-04, - 1.726334913216520e-04, - 1.220703123683871e-04, - 8.631674565366727e-05, - 6.103515617913153e-05, - 4.315837282325419e-05, - 3.051757808703478e-05, - 2.157918640983742e-05, - 1.525878904225187e-05, - 1.078959320402385e-05, - 7.629394520493171e-06, - 5.394796601564505e-06, - 3.814697259930213e-06, - 2.697398300558537e-06, - 1.907348629806920e-06, - 1.348699150167414e-06 + 4.096000004076488e+03f, + 2.896309378502504e+03f, + 2.048000001868390e+03f, + 1.448154689131149e+03f, + 1.024000000849268e+03f, + 7.240773445055215e+02f, + 5.120000003821708e+02f, + 3.620386722227349e+02f, + 2.560000001698537e+02f, + 1.810193360963542e+02f, + 1.280000000743110e+02f, + 9.050966804067060e+01f, + 6.400000003184756e+01f, + 4.525483401658203e+01f, + 3.200000001326982e+01f, + 2.262741700641438e+01f, + 1.600000000530793e+01f, + 1.131370850226887e+01f, + 8.000000001990474e+00f, + 5.656854250665277e+00f, + 4.000000000663491e+00f, + 2.828427125098059e+00f, + 2.000000000165873e+00f, + 1.414213562431740e+00f, + 1.000000000000000e+00f, + 7.071067811572251e-01f, + 4.999999999585318e-01f, + 3.535533905492901e-01f, + 2.499999999585318e-01f, + 1.767766952599838e-01f, + 1.249999999688989e-01f, + 8.838834762266132e-02f, + 6.249999997926592e-02f, + 4.419417380766535e-02f, + 3.124999998704120e-02f, + 2.209708690200002e-02f, + 1.562499999222472e-02f, + 1.104854345008369e-02f, + 7.812499995464418e-03f, + 5.524271724583683e-03f, + 3.906249997408239e-03f, + 2.762135862062757e-03f, + 1.953124998542134e-03f, + 1.381067930916839e-03f, + 9.765624991900747e-04f, + 6.905339654011486e-04f, + 4.882812495545411e-04f, + 3.452669826719394e-04f, + 2.441406247570224e-04f, + 1.726334913216520e-04f, + 1.220703123683871e-04f, + 8.631674565366727e-05f, + 6.103515617913153e-05f, + 4.315837282325419e-05f, + 3.051757808703478e-05f, + 2.157918640983742e-05f, + 1.525878904225187e-05f, + 1.078959320402385e-05f, + 7.629394520493171e-06f, + 5.394796601564505e-06f, + 3.814697259930213e-06f, + 2.697398300558537e-06f, + 1.907348629806920e-06f, + 1.348699150167414e-06f }; #endif @@ -241,14 +241,14 @@ const float step_size_inverse_table[NUM_CATEGORIES] = { - 2.82805443e+00, - 2.00000000e+00, - 1.41422713e+00, - 1.00000000e+00, - 7.07113564e-01, - 5.00000000e-01, - 3.53556782e-01, - 3.53556782e-01 + 2.82805443e+00f, + 2.00000000e+00f, + 1.41422713e+00f, + 1.00000000e+00f, + 7.07113564e-01f, + 5.00000000e-01f, + 3.53556782e-01f, + 3.53556782e-01f }; #endif @@ -279,137 +279,137 @@ #if !defined(G722_1_USE_FIXED_POINT) const float region_power_table[REGION_POWER_TABLE_SIZE] = { - 5.96046448e-08, - 1.19209290e-07, - 2.38418579e-07, - 4.76837158e-07, - 9.53674316e-07, - 1.90734863e-06, - 3.81469727e-06, - 7.62939453e-06, - 1.52587891e-05, - 3.05175781e-05, - 6.10351562e-05, - 1.22070312e-04, - 2.44140625e-04, - 4.88281250e-04, - 9.76562500e-04, - 1.95312500e-03, - 3.90625000e-03, - 7.81250000e-03, - 1.56250000e-02, - 3.12500000e-02, - 6.25000000e-02, - 1.25000000e-01, - 2.50000000e-01, - 5.00000000e-01, - 1.00000000e+00, - 2.00000000e+00, - 4.00000000e+00, - 8.00000000e+00, - 1.60000000e+01, - 3.20000000e+01, - 6.40000000e+01, - 1.28000000e+02, - 2.56000000e+02, - 5.12000000e+02, - 1.02400000e+03, - 2.04800000e+03, - 4.09600000e+03, - 8.19200000e+03, - 1.63840000e+04, - 3.27680000e+04, - 6.55360000e+04, - 1.31072000e+05, - 2.62144000e+05, - 5.24288000e+05, - 1.04857600e+06, - 2.09715200e+06, - 4.19430400e+06, - 8.38860800e+06, - 1.67772160e+07, - 3.35544320e+07, - 6.71088640e+07, - 1.34217728e+08, - 2.68435456e+08, - 5.36870912e+08, - 1.07374182e+09, - 2.14748365e+09, - 4.29496730e+09, - 8.58993459e+09, - 1.71798692e+10, - 3.43597384e+10, - 6.87194767e+10, - 1.37438953e+11, - 2.74877907e+11, - 5.49755814e+11 + 5.96046448e-08f, + 1.19209290e-07f, + 2.38418579e-07f, + 4.76837158e-07f, + 9.53674316e-07f, + 1.90734863e-06f, + 3.81469727e-06f, + 7.62939453e-06f, + 1.52587891e-05f, + 3.05175781e-05f, + 6.10351562e-05f, + 1.22070312e-04f, + 2.44140625e-04f, + 4.88281250e-04f, + 9.76562500e-04f, + 1.95312500e-03f, + 3.90625000e-03f, + 7.81250000e-03f, + 1.56250000e-02f, + 3.12500000e-02f, + 6.25000000e-02f, + 1.25000000e-01f, + 2.50000000e-01f, + 5.00000000e-01f, + 1.00000000e+00f, + 2.00000000e+00f, + 4.00000000e+00f, + 8.00000000e+00f, + 1.60000000e+01f, + 3.20000000e+01f, + 6.40000000e+01f, + 1.28000000e+02f, + 2.56000000e+02f, + 5.12000000e+02f, + 1.02400000e+03f, + 2.04800000e+03f, + 4.09600000e+03f, + 8.19200000e+03f, + 1.63840000e+04f, + 3.27680000e+04f, + 6.55360000e+04f, + 1.31072000e+05f, + 2.62144000e+05f, + 5.24288000e+05f, + 1.04857600e+06f, + 2.09715200e+06f, + 4.19430400e+06f, + 8.38860800e+06f, + 1.67772160e+07f, + 3.35544320e+07f, + 6.71088640e+07f, + 1.34217728e+08f, + 2.68435456e+08f, + 5.36870912e+08f, + 1.07374182e+09f, + 2.14748365e+09f, + 4.29496730e+09f, + 8.58993459e+09f, + 1.71798692e+10f, + 3.43597384e+10f, + 6.87194767e+10f, + 1.37438953e+11f, + 2.74877907e+11f, + 5.49755814e+11f }; const float region_power_table_boundary[REGION_POWER_TABLE_SIZE - 1] = { - 8.42936956e-08, - 1.68587391e-07, - 3.37174782e-07, - 6.74349565e-07, - 1.34869913e-06, - 2.69739826e-06, - 5.39479652e-06, - 1.07895930e-05, - 2.15791861e-05, - 4.31583721e-05, - 8.63167443e-05, - 1.72633489e-04, - 3.45266977e-04, - 6.90533954e-04, - 1.38106791e-03, - 2.76213582e-03, - 5.52427163e-03, - 1.10485433e-02, - 2.20970865e-02, - 4.41941731e-02, - 8.83883461e-02, - 1.76776692e-01, - 3.53553385e-01, - 7.07106769e-01, - 1.41421354e+00, - 2.82842708e+00, - 5.65685415e+00, - 1.13137083e+01, - 2.26274166e+01, - 4.52548332e+01, - 9.05096664e+01, - 1.81019333e+02, - 3.62038666e+02, - 7.24077332e+02, - 1.44815466e+03, - 2.89630933e+03, - 5.79261865e+03, - 1.15852373e+04, - 2.31704746e+04, - 4.63409492e+04, - 9.26818984e+04, - 1.85363797e+05, - 3.70727594e+05, - 7.41455188e+05, - 1.48291038e+06, - 2.96582075e+06, - 5.93164150e+06, - 1.18632830e+07, - 2.37265660e+07, - 4.74531320e+07, - 9.49062640e+07, - 1.89812528e+08, - 3.79625056e+08, - 7.59250112e+08, - 1.51850022e+09, - 3.03700045e+09, - 6.07400090e+09, - 1.21480018e+10, - 2.42960036e+10, - 4.85920072e+10, - 9.71840143e+10, - 1.94368029e+11, - 3.88736057e+11 + 8.42936956e-08f, + 1.68587391e-07f, + 3.37174782e-07f, + 6.74349565e-07f, + 1.34869913e-06f, + 2.69739826e-06f, + 5.39479652e-06f, + 1.07895930e-05f, + 2.15791861e-05f, + 4.31583721e-05f, + 8.63167443e-05f, + 1.72633489e-04f, + 3.45266977e-04f, + 6.90533954e-04f, + 1.38106791e-03f, + 2.76213582e-03f, + 5.52427163e-03f, + 1.10485433e-02f, + 2.20970865e-02f, + 4.41941731e-02f, + 8.83883461e-02f, + 1.76776692e-01f, + 3.53553385e-01f, + 7.07106769e-01f, + 1.41421354e+00f, + 2.82842708e+00f, + 5.65685415e+00f, + 1.13137083e+01f, + 2.26274166e+01f, + 4.52548332e+01f, + 9.05096664e+01f, + 1.81019333e+02f, + 3.62038666e+02f, + 7.24077332e+02f, + 1.44815466e+03f, + 2.89630933e+03f, + 5.79261865e+03f, + 1.15852373e+04f, + 2.31704746e+04f, + 4.63409492e+04f, + 9.26818984e+04f, + 1.85363797e+05f, + 3.70727594e+05f, + 7.41455188e+05f, + 1.48291038e+06f, + 2.96582075e+06f, + 5.93164150e+06f, + 1.18632830e+07f, + 2.37265660e+07f, + 4.74531320e+07f, + 9.49062640e+07f, + 1.89812528e+08f, + 3.79625056e+08f, + 7.59250112e+08f, + 1.51850022e+09f, + 3.03700045e+09f, + 6.07400090e+09f, + 1.21480018e+10f, + 2.42960036e+10f, + 4.85920072e+10f, + 9.71840143e+10f, + 1.94368029e+11f, + 3.88736057e+11f }; #endif Added: freeswitch/trunk/libs/win32/libg722_1/libg722_1.vcproj ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/win32/libg722_1/libg722_1.vcproj Mon Dec 15 23:14:57 2008 @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Added: freeswitch/trunk/src/mod/codecs/mod_siren/mod_siren.2008.vcproj ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/codecs/mod_siren/mod_siren.2008.vcproj Mon Dec 15 23:14:57 2008 @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From mikej at freeswitch.org Tue Dec 16 05:15:44 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 08:15:44 -0500 Subject: [Freeswitch-trunk] [commit] r10789 - freeswitch/trunk/src/mod/applications/mod_commands Message-ID: Author: mikej Date: Tue Dec 16 08:15:42 2008 New Revision: 10789 Log: uninitialized var. Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Tue Dec 16 08:15:42 2008 @@ -2707,7 +2707,7 @@ switch_core_session_t *psession = NULL; char *mycmd = NULL, *vars, *argv[64] = { 0 }; int argc = 0; - char *var_name, *var_value; + char *var_name, *var_value = NULL; if (session) { return SWITCH_STATUS_FALSE; From anthm at freeswitch.org Tue Dec 16 05:48:43 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 08:48:43 -0500 Subject: [Freeswitch-trunk] [commit] r10790 - freeswitch/trunk/src/mod/applications/mod_commands Message-ID: Author: anthm Date: Tue Dec 16 08:48:43 2008 New Revision: 10790 Log: let more commands in mod_commmands run from the dialplan via the eval app Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Tue Dec 16 08:48:43 2008 @@ -457,10 +457,6 @@ const char *err; switch_xml_t xml_root; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (cmd && !strcmp(cmd, "reloadxml")) { if ((xml_root = switch_xml_open_root(1, &err))) { switch_xml_free(xml_root); @@ -696,10 +692,6 @@ int sps = 0, last_sps = 0; const char *var; - if (session) { - return SWITCH_STATUS_FALSE; - } - switch_core_measure_time(switch_core_uptime(), &duration); if (stream->param_event) { @@ -877,10 +869,6 @@ { const char *err; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (switch_strlen_zero(cmd)) { stream->write_function(stream, "-USAGE: %s\n", LOAD_SYNTAX); return SWITCH_STATUS_SUCCESS; @@ -902,10 +890,6 @@ switch_bool_t force = SWITCH_FALSE; const char *p = cmd; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (switch_strlen_zero(cmd)) { stream->write_function(stream, "-USAGE: %s\n", UNLOAD_SYNTAX); return SWITCH_STATUS_SUCCESS; @@ -950,10 +934,6 @@ switch_bool_t force = SWITCH_FALSE; const char *p = cmd; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (switch_strlen_zero(cmd)) { stream->write_function(stream, "-USAGE: %s\n", UNLOAD_SYNTAX); return SWITCH_STATUS_SUCCESS; @@ -1003,10 +983,6 @@ const char *err; switch_xml_t xml_root; - if (session) { - return SWITCH_STATUS_FALSE; - } - if ((xml_root = switch_xml_open_root(1, &err))) { switch_xml_free(xml_root); } @@ -1023,10 +999,6 @@ char *mycmd = NULL, *kcause = NULL; switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (switch_strlen_zero(cmd) || !(mycmd = strdup(cmd))) { stream->write_function(stream, "-USAGE: %s\n", KILL_SYNTAX); return SWITCH_STATUS_SUCCESS; @@ -1057,10 +1029,6 @@ { switch_core_session_t *ksession = NULL; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (!cmd) { stream->write_function(stream, "-USAGE: %s\n", PARK_SYNTAX); } else if ((ksession = switch_core_session_locate(cmd))) { @@ -1082,10 +1050,6 @@ int argc = 0; char *tuuid, *dest, *dp, *context, *arg = NULL; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (switch_strlen_zero(cmd) || !(mycmd = strdup(cmd))) { stream->write_function(stream, "-USAGE: %s\n", TRANSFER_SYNTAX); return SWITCH_STATUS_SUCCESS; @@ -1303,10 +1267,6 @@ char *mycmd = NULL, *argv[6] = { 0 }; int argc = 0; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); } @@ -1346,10 +1306,6 @@ char *mycmd = NULL, *argv[4] = { 0 }; int argc = 0; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); } @@ -1392,10 +1348,6 @@ int argc = 0; switch_status_t status = SWITCH_STATUS_FALSE; - if (session) { - return status; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); } @@ -1427,10 +1379,6 @@ int argc = 0; switch_status_t status = SWITCH_STATUS_FALSE; - if (session) { - return status; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); } @@ -1467,10 +1415,6 @@ int argc = 0; switch_status_t status = SWITCH_STATUS_FALSE; - if (session) { - return status; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); } @@ -1514,10 +1458,6 @@ int argc = 0; switch_status_t status = SWITCH_STATUS_FALSE; - if (session) { - return status; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); } @@ -1549,10 +1489,6 @@ int argc = 0; switch_status_t status = SWITCH_STATUS_FALSE; - if (session) { - return status; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); } @@ -1589,10 +1525,6 @@ char *mycmd = NULL, *argv[4] = { 0 }; int argc = 0; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); } @@ -1633,10 +1565,6 @@ int argc = 0; uint32_t limit = 0; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (switch_strlen_zero(cmd)) { goto usage; } @@ -1704,10 +1632,6 @@ uint32_t limit = 0; char *flags = NULL; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (switch_strlen_zero(cmd) || !(mycmd = strdup(cmd))) { goto usage; } @@ -1769,10 +1693,6 @@ char *mycmd, *flag; switch_channel_t *channel = NULL; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (switch_strlen_zero(cmd)) { stream->write_function(stream, "-USAGE: %s\n", BREAK_SYNTAX); return SWITCH_STATUS_SUCCESS; @@ -1812,10 +1732,6 @@ char *mycmd = NULL, *argv[4] = { 0 }; int argc = 0; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); } @@ -2368,10 +2284,6 @@ switch_core_flag_t cflags = switch_core_flags(); switch_status_t status = SWITCH_STATUS_SUCCESS; - if (session) { - return SWITCH_STATUS_FALSE; - } - db = switch_core_db_handle(); holder.justcount = 0; @@ -2657,10 +2569,6 @@ char *mycmd = NULL, *argv[3] = { 0 }; int argc = 0; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); if ((argc == 2 || argc == 3) && !switch_strlen_zero(argv[0])) { @@ -2709,10 +2617,6 @@ int argc = 0; char *var_name, *var_value = NULL; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { char *uuid = mycmd; if (!(vars = strchr(uuid, ' '))) { @@ -2763,10 +2667,6 @@ char *mycmd = NULL, *argv[4] = { 0 }; int argc = 0; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); if (argc >= 2 && !switch_strlen_zero(argv[0])) { @@ -2814,10 +2714,6 @@ char *uuid = NULL, *dtmf_data = NULL; int argc = 0; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (switch_strlen_zero(cmd)) { goto usage; } @@ -2864,10 +2760,6 @@ char *mycmd = NULL, *argv[4] = { 0 }; int argc = 0; - if (session) { - return SWITCH_STATUS_FALSE; - } - if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); if (argc >= 0 && !switch_strlen_zero(argv[0])) { From stkn at freeswitch.org Tue Dec 16 06:31:18 2008 From: stkn at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 09:31:18 -0500 Subject: [Freeswitch-trunk] [commit] r10792 - freeswitch/trunk Message-ID: Author: stkn Date: Tue Dec 16 09:31:17 2008 New Revision: 10792 Log: check aclocal availability and version too Modified: freeswitch/trunk/bootstrap.sh Modified: freeswitch/trunk/bootstrap.sh ============================================================================== --- freeswitch/trunk/bootstrap.sh (original) +++ freeswitch/trunk/bootstrap.sh Tue Dec 16 09:31:17 2008 @@ -60,6 +60,27 @@ echo "bootstrap: automake version $am_version (ok)" fi +# aclocal 1.7 or newer + +acl_version=`${ACLOCAL:-aclocal} --version 2>/dev/null|sed -e 's/^[^0-9]*//;s/[a-z]* *$//;s/[- ].*//g;q'` +if test -z "$acl_version"; then +echo "bootstrap: aclocal not found." +echo " You need aclocal version 1.7 or newer installed" +echo " to build FreeSWITCH from SVN." +exit 1 +fi +IFS=_; set $acl_version; IFS=' ' +acl_version=$1 +IFS=.; set $acl_version; IFS=' ' +if test "$1" = "1" -a "$2" -lt "7"; then +echo "bootstrap: aclocal version $acl_version found." +echo " You need aclocal version 1.7 or newer installed" +echo " to build FreeSWITCH from SVN." +exit 1 +else +echo "bootstrap: aclocal version $acl_version (ok)" +fi + # Sample libtool --version outputs: # ltmain.sh (GNU libtool) 1.3.3 (1.385.2.181 1999/07/02 15:49:11) # ltmain.sh (GNU libtool 1.1361 2004/01/02 23:10:52) 1.5a From cparker at freeswitch.org Tue Dec 16 06:32:18 2008 From: cparker at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 09:32:18 -0500 Subject: [Freeswitch-trunk] [commit] r10793 - freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr Message-ID: Author: cparker Date: Tue Dec 16 09:32:17 2008 New Revision: 10793 Log: Use const char, instead of passing func to switch_true Modified: freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c Tue Dec 16 09:32:17 2008 @@ -156,7 +156,8 @@ } if(channel) { - if(switch_true(switch_channel_get_variable(channel, "disable_radius_start"))) { + const char *disable_flag = switch_channel_get_variable(channel, "disable_radius_start"); + if(switch_true(disable_flag)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "[mod_radius_cdr] Not Sending RADIUS Start\n"); return SWITCH_STATUS_SUCCESS; } @@ -393,12 +394,13 @@ } - if(channel) { - if(switch_true(switch_channel_get_variable(channel, "disable_radius_stop"))) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "[mod_radius_cdr] Not Sending RADIUS Stop\n"); - return SWITCH_STATUS_SUCCESS; - } - } + if(channel) { + const char *disable_flag = switch_channel_get_variable(channel, "disable_radius_stop"); + if(switch_true(disable_flag)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "[mod_radius_cdr] Not Sending RADIUS Stop\n"); + return SWITCH_STATUS_SUCCESS; + } + } switch_thread_rwlock_rdlock(globals.rwlock); From stkn at freeswitch.org Tue Dec 16 08:03:46 2008 From: stkn at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 11:03:46 -0500 Subject: [Freeswitch-trunk] [commit] r10796 - freeswitch/trunk/libs/js/nsprpub Message-ID: Author: stkn Date: Tue Dec 16 11:03:46 2008 New Revision: 10796 Log: Fix FSBUILD-97 Modified: freeswitch/trunk/libs/js/nsprpub/configure.in Modified: freeswitch/trunk/libs/js/nsprpub/configure.in ============================================================================== --- freeswitch/trunk/libs/js/nsprpub/configure.in (original) +++ freeswitch/trunk/libs/js/nsprpub/configure.in Tue Dec 16 11:03:46 2008 @@ -2825,4 +2825,7 @@ MAKEFILES="$MAKEFILES pr/src/cplus/Makefile pr/src/cplus/tests/Makefile" fi +# mmkay, this fixes things on FreeBSD-7.1(-rc1)... +MAKEFILES="`echo $MAKEFILES | tr -d '\n'`" + AC_OUTPUT([$MAKEFILES], [chmod +x config/nspr-config]) From anthm at freeswitch.org Tue Dec 16 08:40:40 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 11:40:40 -0500 Subject: [Freeswitch-trunk] [commit] r10797 - freeswitch/trunk/src Message-ID: Author: anthm Date: Tue Dec 16 11:40:38 2008 New Revision: 10797 Log: tweak codec lookup func Modified: freeswitch/trunk/src/switch_loadable_module.c Modified: freeswitch/trunk/src/switch_loadable_module.c ============================================================================== --- freeswitch/trunk/src/switch_loadable_module.c (original) +++ freeswitch/trunk/src/switch_loadable_module.c Tue Dec 16 11:40:38 2008 @@ -1415,7 +1415,7 @@ for (x = 0; x < preflen; x++) { char *cur, *last = NULL, *next = NULL, *name, *p, buf[256]; - uint32_t interval = 0, rate = 8000; + uint32_t interval = 0, rate = 0; switch_copy_string(buf, prefs[x], sizeof(buf)); last = name = next = cur = buf; @@ -1442,25 +1442,25 @@ if ((codec_interface = switch_loadable_module_get_codec_interface(name)) != 0) { /* If no specific codec interval is requested opt for 20ms above all else because lots of stuff assumes it */ - if (!interval) { - for (imp = codec_interface->implementations; imp; imp = imp->next) { - uint8_t match = 1; - - if (imp->codec_type != SWITCH_CODEC_TYPE_VIDEO) { - if ((uint32_t) (imp->microseconds_per_packet / 1000) != 20) { - match = 0; - } - - if (match && rate && (uint32_t) imp->samples_per_second != rate) { - match = 0; - } + for (imp = codec_interface->implementations; imp; imp = imp->next) { + uint8_t match = 1; + + if (imp->codec_type != SWITCH_CODEC_TYPE_VIDEO) { + + if ((!interval && (uint32_t) (imp->microseconds_per_packet / 1000) != 20) || + (interval && (uint32_t) (imp->microseconds_per_packet / 1000) != interval)) { + match = 0; } - if (match) { - array[i++] = imp; - goto found; + if (match && ((!rate && (uint32_t) imp->samples_per_second != 8000) || (rate && (uint32_t) imp->samples_per_second != rate))) { + match = 0; } } + + if (match) { + array[i++] = imp; + goto found; + } } /* Either looking for a specific interval or there was no interval specified and there wasn't one @20ms available */ @@ -1468,10 +1468,11 @@ uint8_t match = 1; if (imp->codec_type != SWITCH_CODEC_TYPE_VIDEO) { + if (interval && (uint32_t) (imp->microseconds_per_packet / 1000) != interval) { match = 0; } - + if (match && rate && (uint32_t) imp->samples_per_second != rate) { match = 0; } From mikej at freeswitch.org Tue Dec 16 08:59:27 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 11:59:27 -0500 Subject: [Freeswitch-trunk] [commit] r10799 - freeswitch/trunk/src/mod/applications/mod_expr Message-ID: Author: mikej Date: Tue Dec 16 11:59:27 2008 New Revision: 10799 Log: tweak for solaris Modified: freeswitch/trunk/src/mod/applications/mod_expr/exprpars.c freeswitch/trunk/src/mod/applications/mod_expr/exprpriv.h freeswitch/trunk/src/mod/applications/mod_expr/exprutil.c Modified: freeswitch/trunk/src/mod/applications/mod_expr/exprpars.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_expr/exprpars.c (original) +++ freeswitch/trunk/src/mod/applications/mod_expr/exprpars.c Tue Dec 16 11:59:27 2008 @@ -12,7 +12,6 @@ #include "exprpriv.h" #include "exprmem.h" -#include "switch_utils.h" /* Data structure used by parser */ typedef struct _exprToken { Modified: freeswitch/trunk/src/mod/applications/mod_expr/exprpriv.h ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_expr/exprpriv.h (original) +++ freeswitch/trunk/src/mod/applications/mod_expr/exprpriv.h Tue Dec 16 11:59:27 2008 @@ -206,6 +206,16 @@ int exprFuncListAddType(exprFuncList *flist, char *name, int type, int min, int max, int refmin, int refmax); int exprFuncListGet(exprFuncList *flist, char *name, exprFuncType *ptr, int *type, int *min, int *max, int *refmin, int *refmax); +#ifdef WIN32 +#define SWITCH_DECLARE(type) __declspec(dllimport) type __stdcall +#else +#define SWITCH_DECLARE(type) type +#endif + +SWITCH_DECLARE(int) switch_isalnum(int c); +SWITCH_DECLARE(int) switch_isalpha(int c); +SWITCH_DECLARE(int) switch_isdigit(int c); +SWITCH_DECLARE(int) switch_isspace(int c); #ifdef __cplusplus } Modified: freeswitch/trunk/src/mod/applications/mod_expr/exprutil.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_expr/exprutil.c (original) +++ freeswitch/trunk/src/mod/applications/mod_expr/exprutil.c Tue Dec 16 11:59:27 2008 @@ -11,8 +11,6 @@ #include "exprincl.h" #include "exprpriv.h" -#include "switch_utils.h" - /* Return the version number */ void exprGetVersion(int *major, int *minor) From mikej at freeswitch.org Tue Dec 16 09:01:22 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 12:01:22 -0500 Subject: [Freeswitch-trunk] [commit] r10800 - in freeswitch/trunk: libs/win32/libshout libs/win32/mpg123 src/mod/applications/mod_vmd Message-ID: Author: mikej Date: Tue Dec 16 12:01:21 2008 New Revision: 10800 Log: svn:ignore Modified: freeswitch/trunk/libs/win32/libshout/ (props changed) freeswitch/trunk/libs/win32/mpg123/ (props changed) freeswitch/trunk/src/mod/applications/mod_vmd/ (props changed) From mikej at freeswitch.org Tue Dec 16 10:05:38 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 13:05:38 -0500 Subject: [Freeswitch-trunk] [commit] r10802 - in freeswitch/trunk/libs/sofia-sip: . docs libsofia-sip-ua libsofia-sip-ua-glib libsofia-sip-ua-glib/su-glib libsofia-sip-ua-glib/su-glib/sofia-sip libsofia-sip-ua/bnf libsofia-sip-ua/bnf/sofia-sip libsofia-sip-ua/docs libsofia-sip-ua/features libsofia-sip-ua/http libsofia-sip-ua/http/sofia-sip libsofia-sip-ua/ipt libsofia-sip-ua/ipt/sofia-sip libsofia-sip-ua/iptsec libsofia-sip-ua/iptsec/sofia-sip libsofia-sip-ua/msg libsofia-sip-ua/msg/sofia-sip libsofia-sip-ua/nea libsofia-sip-ua/nea/sofia-sip libsofia-sip-ua/nta libsofia-sip-ua/nta/sofia-sip libsofia-sip-ua/nth libsofia-sip-ua/nth/sofia-sip libsofia-sip-ua/nua libsofia-sip-ua/nua/sofia-sip libsofia-sip-ua/sdp libsofia-sip-ua/sdp/sofia-sip libsofia-sip-ua/sip libsofia-sip-ua/sip/sofia-sip libsofia-sip-ua/soa libsofia-sip-ua/soa/sofia-sip libsofia-sip-ua/sresolv libsofia-sip-ua/sresolv/sofia-resolv libsofia-sip-ua/sresolv/sofia-sip libsofia-sip-ua/stun libsofia-sip-ua/stun/sofia-sip libsofia-sip-ua/su libsofia-sip-ua/su/sofia-sip libsofia-sip-ua/tport libsofia-sip-ua/tport/sofia-sip libsofia-sip-ua/url libsofia-sip-ua/url/sofia-sip m4 open_c packages rules scripts tests utils win32 win32/libsofia-sip-ua win32/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 13:05:22 2008 New Revision: 10802 Log: merge whitespace fixes from sofia-sip tree Modified: freeswitch/trunk/libs/sofia-sip/AUTHORS freeswitch/trunk/libs/sofia-sip/COPYING freeswitch/trunk/libs/sofia-sip/COPYRIGHTS freeswitch/trunk/libs/sofia-sip/ChangeLog freeswitch/trunk/libs/sofia-sip/ChangeLog.ext-trees freeswitch/trunk/libs/sofia-sip/Makefile.am freeswitch/trunk/libs/sofia-sip/README freeswitch/trunk/libs/sofia-sip/README.developers freeswitch/trunk/libs/sofia-sip/RELEASE freeswitch/trunk/libs/sofia-sip/RELEASE.template freeswitch/trunk/libs/sofia-sip/TODO freeswitch/trunk/libs/sofia-sip/autogen.sh freeswitch/trunk/libs/sofia-sip/configure.ac freeswitch/trunk/libs/sofia-sip/docs/build_system.txt freeswitch/trunk/libs/sofia-sip/docs/devel_platform_notes.txt freeswitch/trunk/libs/sofia-sip/docs/release_management.txt freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/sofia-sip/su_glib.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/sofia-sip/su_source.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_glib.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source_test.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/torture_su_glib_timer.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ChangeLog freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/bnf.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/bnf.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/sofia-sip/bnf.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/sofia-sip/hostdomain.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/torture_bnf.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/ChangeLog freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.conf freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/conformance.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/docguide.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/mainpage.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/features/features.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/features/features.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Doxyfile.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_basic.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_extra.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_header.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_parser.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_parser_table.c.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_status.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_tag.c.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_tag_class.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_hclasses.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_header.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_parser.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_protos.h.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_status.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_tag.h.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_tag_class.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/test_http.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/base64.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ipt.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/rc4.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/base64.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/rc4.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/uniqueid.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/utf8.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/token64.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ucs2.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ucs4.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8internal.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8test.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/Doxyfile.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client_ntlm.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_common.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_digest.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module_http.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module_sip.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_ntlm.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin_delayed.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin_ntlm.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec_debug.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec_debug.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client_plugin.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_common.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_digest.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_module.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_ntlm.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_plugin.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/test_auth_digest.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/ChangeLog freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_auth.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_basic.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_date.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_generic.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_header_copy.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_header_make.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_internal.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mclass.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mime.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mime_table.c.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_name_hash.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.awk freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser_util.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_addr.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_buffer.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_date.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_header.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mclass.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mclass_hash.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mime.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mime_protos.h.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_parser.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_protos.h.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_tag_class.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_types.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_class.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_class.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_msg.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_protos.h.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_table.c.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/Doxyfile.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_debug.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_event.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_server.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/sofia-sip/nea.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/Doxyfile.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/invite.msc freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/portbind.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/run_test_nta freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_read_payload.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils_log.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils_print.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_stateless.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tag.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tport.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/sl_utils.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/Doxyfile.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/http-client.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_client.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_server.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/sofia-sip/nth.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/sofia-sip/nth_tag.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/test_nth.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/ChangeLog freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_common.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_event_server.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_extension.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_message.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_options.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_registrar.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_types.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/ChangeLog freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/errata freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/run_test_sdp freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_parse.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sofia-sip/sdp.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sofia-sip/sdp_tag.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/test_sdp.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/torture_sdp.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/ADD-A-HEADER freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/ChangeLog freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/Doxyfile.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/GRAMMAR freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/run-tests freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/run_test_sip_msg freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip.doxyaliases freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_bad_mask freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_basic.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_caller_prefs.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_event.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_extra.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_extra_headers.txt freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_feature.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_header.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_mime.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser_table.c.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_prack.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_pref_util.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_reason.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_refer.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_security.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_session.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_status.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_tag.c.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_tag_class.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_time.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_hclasses.h.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_header.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_parser.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_protos.h.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_status.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_tag.h.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_tag_class.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_util.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/test_date.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/test_sip_msg.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/torture_sip.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/validator.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/ChangeLog freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/Doxyfile.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa_static.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/sofia-sip/soa.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/sofia-sip/soa_session.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/sofia-sip/soa_tag.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/test_soa.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/127.zone freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/194.2.188 freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/3.f.f.e.1.2.0.0.3.0.1.2.c.0.0.0 freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/3.f.f.e.1.2.0.0.3.0.1.2.c.0.0.0.arpa freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/example.com freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/resolve_sip.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/root.zone freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/run_test_sresolv freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sofia-resolv/sres.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sofia-resolv/sres_async.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sofia-resolv/sres_cache.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sofia-resolv/sres_config.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sofia-resolv/sres_record.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sofia-sip/sresolv.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres_blocking.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres_cache.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sresolv.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sresolv.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/test_sresolv.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/torture_sresolv.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/ChangeLog freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/lookup_stun_server.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/sofia-sip/stun.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/sofia-sip/stun_common.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/stun.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/stun_common.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/stun_dns.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/stun_internal.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/stun_mini.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/stun_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/stun/stunc.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/ChangeLog freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/addrinfo.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/foo.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/getopt.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/localinfo.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/memccpy.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/memcspn.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/memmem.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/memspn.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/poll.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/smoothsort.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/heap.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/htable.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/htable2.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/rbtree.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_addrinfo.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_alloc.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_alloc_stat.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_bm.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_config.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_configure.h.in freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_debug.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_errno.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_localinfo.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_log.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_md5.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_os_nw.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_osx_runloop.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_strlst.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_tag.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_tag_class.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_tag_inline.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_tag_io.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_tagarg.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_time.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_types.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_uniqueid.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_vector.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_wait.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/tstdef.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/strcasestr.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/strtoull.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_addrinfo.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_alloc_lock.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_base_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_bm.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_default_log.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_devpoll_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_epoll_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_errno.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_global_log.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_kqueue_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_localinfo.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_log.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_md5.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_module_debug.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_open_c_localinfo.cpp freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_os_nw.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_osx_runloop.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_perf.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_poll_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_port.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_proxy.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_pthread_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_root.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_select_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_socket_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_sprintf.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_strdup.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_strlst.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_tag_io.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_taglist.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_time.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_time0.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_timer.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_uniqueid.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_vector.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_wait.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_win32_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/tag_dll.awk freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/test_htable.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/test_htable2.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/test_memmem.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/test_poll.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/test_su.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/test_su_osx.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_heap.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_rbtree.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su_alloc.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su_bm.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su_root.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su_root_osx.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su_time.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su_timer.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/ChangeLog freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/Makefile.am freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/sofia-sip/tport.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/sofia-sip/tport_plugins.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/sofia-sip/tport_tag.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/test_tport.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tls_test_client.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tls_test_server.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_internal.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_logging.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_sigcomp.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_stub_sigcomp.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_stub_stun.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_threadpool.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_connect.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_sctp.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_stun.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_tcp.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_tls.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_udp.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/url/sofia-sip/url.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/url/sofia-sip/url_tag.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/url/sofia-sip/url_tag_class.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/url/torture_url.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/url/url.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/url/url.docs freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/url/url_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/url/urlmap.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/url/urlmap.h freeswitch/trunk/libs/sofia-sip/m4/sac-coverage.m4 freeswitch/trunk/libs/sofia-sip/m4/sac-general.m4 freeswitch/trunk/libs/sofia-sip/m4/sac-openssl.m4 freeswitch/trunk/libs/sofia-sip/m4/sac-su2.m4 freeswitch/trunk/libs/sofia-sip/m4/sac-tport.m4 freeswitch/trunk/libs/sofia-sip/open_c/build_sources.cmd freeswitch/trunk/libs/sofia-sip/open_c/version.awk freeswitch/trunk/libs/sofia-sip/packages/ChangeLog freeswitch/trunk/libs/sofia-sip/packages/Makefile.am freeswitch/trunk/libs/sofia-sip/packages/sofia-sip.spec.in freeswitch/trunk/libs/sofia-sip/rules/lcov.am freeswitch/trunk/libs/sofia-sip/rules/recursive.am freeswitch/trunk/libs/sofia-sip/rules/valcheck.am freeswitch/trunk/libs/sofia-sip/scripts/coverage freeswitch/trunk/libs/sofia-sip/scripts/fix-include-sofia-sip freeswitch/trunk/libs/sofia-sip/scripts/hide_emails.sh freeswitch/trunk/libs/sofia-sip/scripts/lcov-report freeswitch/trunk/libs/sofia-sip/scripts/rpmbuild-snaphot freeswitch/trunk/libs/sofia-sip/scripts/uncovered freeswitch/trunk/libs/sofia-sip/tests/check_sofia.c freeswitch/trunk/libs/sofia-sip/tests/test_100rel.c freeswitch/trunk/libs/sofia-sip/tests/test_basic_call.c freeswitch/trunk/libs/sofia-sip/tests/test_call_hold.c freeswitch/trunk/libs/sofia-sip/tests/test_call_reject.c freeswitch/trunk/libs/sofia-sip/tests/test_cancel_bye.c freeswitch/trunk/libs/sofia-sip/tests/test_extension.c freeswitch/trunk/libs/sofia-sip/tests/test_init.c freeswitch/trunk/libs/sofia-sip/tests/test_nat.c freeswitch/trunk/libs/sofia-sip/tests/test_nat.h freeswitch/trunk/libs/sofia-sip/tests/test_nua.c freeswitch/trunk/libs/sofia-sip/tests/test_nua.h freeswitch/trunk/libs/sofia-sip/tests/test_nua_api.c freeswitch/trunk/libs/sofia-sip/tests/test_nua_params.c freeswitch/trunk/libs/sofia-sip/tests/test_offer_answer.c freeswitch/trunk/libs/sofia-sip/tests/test_ops.c freeswitch/trunk/libs/sofia-sip/tests/test_proxy.c freeswitch/trunk/libs/sofia-sip/tests/test_proxy.h freeswitch/trunk/libs/sofia-sip/tests/test_refer.c freeswitch/trunk/libs/sofia-sip/tests/test_register.c freeswitch/trunk/libs/sofia-sip/tests/test_session_timer.c freeswitch/trunk/libs/sofia-sip/tests/test_simple.c freeswitch/trunk/libs/sofia-sip/tests/test_sip_events.c freeswitch/trunk/libs/sofia-sip/utils/ChangeLog freeswitch/trunk/libs/sofia-sip/utils/Doxyfile.in freeswitch/trunk/libs/sofia-sip/utils/apps_utils.h freeswitch/trunk/libs/sofia-sip/utils/sip-date.c freeswitch/trunk/libs/sofia-sip/utils/sip-dig.c freeswitch/trunk/libs/sofia-sip/utils/sip-options.c freeswitch/trunk/libs/sofia-sip/utils/utils.docs freeswitch/trunk/libs/sofia-sip/win32/ChangeLog freeswitch/trunk/libs/sofia-sip/win32/README.txt freeswitch/trunk/libs/sofia-sip/win32/build_sources.cmd freeswitch/trunk/libs/sofia-sip/win32/config.h.in freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua/sofia-sip-ua.def freeswitch/trunk/libs/sofia-sip/win32/sofia-sip/su_configure.h freeswitch/trunk/libs/sofia-sip/win32/version.awk Modified: freeswitch/trunk/libs/sofia-sip/AUTHORS ============================================================================== --- freeswitch/trunk/libs/sofia-sip/AUTHORS (original) +++ freeswitch/trunk/libs/sofia-sip/AUTHORS Tue Dec 16 13:05:22 2008 @@ -31,7 +31,6 @@ Whittaker, Colin Zabaluev, Mikhail -Note: for details on who did what, see the version control +Note: for details on who did what, see the version control system change history, and release notes for past releases at http://sofia-sip.sourceforge.net/relnotes/ - \ No newline at end of file Modified: freeswitch/trunk/libs/sofia-sip/COPYING ============================================================================== --- freeswitch/trunk/libs/sofia-sip/COPYING (original) +++ freeswitch/trunk/libs/sofia-sip/COPYING Tue Dec 16 13:05:22 2008 @@ -146,7 +146,7 @@ on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. - + 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an Modified: freeswitch/trunk/libs/sofia-sip/COPYRIGHTS ============================================================================== --- freeswitch/trunk/libs/sofia-sip/COPYRIGHTS (original) +++ freeswitch/trunk/libs/sofia-sip/COPYRIGHTS Tue Dec 16 13:05:22 2008 @@ -1,6 +1,6 @@ This package contains the Sofia-SIP library. -Copyright (C) 2005-2006 Nokia Corporation and others (see the +Copyright (C) 2005-2006 Nokia Corporation and others (see the in individual files for a detailed list of copyright holders). Contact: Pekka Pessi @@ -102,23 +102,23 @@ The package also contains files licensed by IBM Corporation. These files are distributed with the following copyright notice: - This module contains code made available by IBM - Corporation on an AS IS basis. Any one receiving the - module is considered to be licensed under IBM copyrights - to use the IBM-provided source code in any way he or she - deems fit, including copying it, compiling it, modifying - it, and redistributing it, with or without - modifications. No license under any IBM patents or - patent applications is to be implied from this copyright - license. - - A user of the module should understand that IBM cannot - provide technical support for the module and will not be - responsible for any consequences of use of the program. - - Any notices, including this one, are not to be removed - from the module without the prior written consent of - IBM. + This module contains code made available by IBM + Corporation on an AS IS basis. Any one receiving the + module is considered to be licensed under IBM copyrights + to use the IBM-provided source code in any way he or she + deems fit, including copying it, compiling it, modifying + it, and redistributing it, with or without + modifications. No license under any IBM patents or + patent applications is to be implied from this copyright + license. + + A user of the module should understand that IBM cannot + provide technical support for the module and will not be + responsible for any consequences of use of the program. + + Any notices, including this one, are not to be removed + from the module without the prior written consent of + IBM. ---------------------------------------------------------------------------- @@ -149,7 +149,7 @@ The following license.terms for information on usage and redistribution of this individual file, and for a DISCLAIMER OF ALL WARRANTIES. - + This software is copyrighted by the Regents of the University of California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState Corporation and other parties. The following terms apply to all files @@ -181,7 +181,7 @@ GOVERNMENT USE: If you are acquiring this software on behalf of the U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal +in the software and related documentation as defined in the Federal Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you are acquiring the software on behalf of the Department of Defense, the software shall be classified as "Commercial Computer Software" and the @@ -189,7 +189,7 @@ 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the authors grant the U.S. Government and others acting in its behalf permission to use and distribute the software in accordance with the -terms specified in this license. +terms specified in this license. ---------------------------------------------------------------------------- Modified: freeswitch/trunk/libs/sofia-sip/ChangeLog ============================================================================== --- freeswitch/trunk/libs/sofia-sip/ChangeLog (original) +++ freeswitch/trunk/libs/sofia-sip/ChangeLog Tue Dec 16 13:05:22 2008 @@ -2,11 +2,11 @@ ChangeLog / Sofia-SIP - SIP User-Agent library =============================================================== -Sofia-SIP library ChangeLog files are available in the +Sofia-SIP library ChangeLog files are available in the following places: -- per subdirectory ChangeLog files - - all non-trivial changes to files (unless documented +- per subdirectory ChangeLog files + - all non-trivial changes to files (unless documented elsewhere) - version control system changelogs - darcs and CVS tree repositories (see README.developers Modified: freeswitch/trunk/libs/sofia-sip/ChangeLog.ext-trees ============================================================================== --- freeswitch/trunk/libs/sofia-sip/ChangeLog.ext-trees (original) +++ freeswitch/trunk/libs/sofia-sip/ChangeLog.ext-trees Tue Dec 16 13:05:22 2008 @@ -20,18 +20,18 @@ * Fixed binding problems in nua and nta.c. Returning more appropriate error code from tport_tbind(), too. - This patch fixes tracked bugs - #1485624 (nua not binding to 5060), - #1485625 (nua_create() fails if STUN init fails) and + This patch fixes tracked bugs + #1485624 (nua not binding to 5060), + #1485625 (nua_create() fails if STUN init fails) and #1485632 (ncorrect error message for nua bind error). Nua now also binds both to NUTAG_URL and NUTAG_SIPS_URL() URIs, nua_create() fails if binding either of them fails. * Fixed msg_addrlen() usage. - + msg_addrlen() returns a pointer to ai_addrlen field of struct addrinfo inside the msg_t object. ai_addrlen has type size_t. However, system calls - taking a return valur pointer to address length, use type socklen_t. + taking a return valur pointer to address length, use type socklen_t. Typically size_t is unsigned long, socklen_t is int, so casting msg_addrlen() return value to (socklen_t *) will break on (high-endian) 64-bit platforms. svsp. @@ -74,22 +74,22 @@ - win32/tests/test_nua/test_nat_tags.cpp * Now building libsofia_sip_ua.dll on win32. - + We define both IN_LIBSOFIA_SIP_UA and IN_LIBSOFIA_SRES in libsofia_sip_ua.dsp. - + Because of DLL linkage, we compile tags typedefs as C++ (see win32/tests/test_nua/test_nat_tags.cpp). - + Removed LIBSOFIA_SIP_UA_STATIC from win32/sofia-sip/su_configure.h. - + Added libsofia_sip_ua_static.lib, too. If you want to compile against - that, you need define LIBSOFIA_SIP_UA_STATIC by yourself. - + that, you need define LIBSOFIA_SIP_UA_STATIC by yourself. + Added libsofia-sip-ua-static/libsofia_sip_ua_static.dsp. - + Using multithreaded DLL runtime for all projects. - + * Added SOFIAPUBFUN/SOFIAPUBVAR to stun module, too. * Added test_nat_tags.c to nua module. @@ -99,11 +99,11 @@ * Added SRESPUBFUN and sres_config.h to sresolv module. * Updated headers. - + Added sofia-sip/ prefix to documentation entries referring to include files. - + Added SOFIAPUBFUN and SOFIAPUBVAR to files that missed them. - + Removed some deprecated functions and macros. * Avoid #include ordering problem with sip_parser.h in sip_test_msg.c, too. @@ -118,7 +118,7 @@ Avoid #include ordering problem with . * Removed utf8 and unicode-related stuff from library. - + Source files are still included in source tar. * Reordered #includes in sip module. @@ -137,9 +137,9 @@ * Fixed includes in outbound.[hc]. - * Added Doxyfiles to libsofia-sip-ua-glib. - - Note that the files are not actually commented. + * Added Doxyfiles to libsofia-sip-ua-glib. + + Note that the files are not actually commented. * nua, soa: Adding Warnings to the response if appropriate. @@ -166,18 +166,18 @@ * nua_register.c: use nua-generated contact for refresh interval calculation. Allow SIPS uris in contacts, too. - * nua_register.c: ignoring bad received parameters in Via header. + * nua_register.c: ignoring bad received parameters in Via header. + + * Updated config file handling in sresolv/sres.c. - * Updated config file handling in sresolv/sres.c. - Using reference counting with config structure when copying resolver objects. - + Trying harder to avoid re-parsing resolv.conf and checking for updated servers. - + Changed SRES_UPDATE_INTERVAL_SECS to 5 for non-WIN32 platforms. - + * su/su_alloc.c, su/sofia-sip/su_alloc.h: su_home_ref() takes const pointer. 2006-05-08 kai.vehmanen at nokia.com @@ -252,10 +252,10 @@ * test_sresolv.v: added more tests for A6 record parsing. * sres.c, sres_cache.c: records are now allocated in a single chunk. - + Bug hunted down by Thomas Rosenblatt: strings and domains belonging to record were allocated from resolver home, not from cache home. - + * Fixed problem with config without search domains in sresolv/sres.c. * Added information for COPYRIGHTS file to README.developers. @@ -277,7 +277,7 @@ * Added sofia-sip/auth_ntlm.h auth_ntlm.c to dist in iptsec module. * Added license to Makefiles (kv) - + Added copyright lines and reference to LGPL license to the Makefile.am and configure.ac files. @@ -286,7 +286,7 @@ * Added libsofia-sip-ua-glib/ChangeLog to darcs (kv) * Added win32 registry name server discovery (kv) - + Based on a patch from Dimitri E. Prado. Decreased update interval to 180secs (SRES_UPDATE_INTERVAL_SECS). @@ -371,7 +371,7 @@ const *, too. * Added SOFIAPUBFUN to auth_struct_copy(), too. - + * iptsec module (by Martti Mela): * ntlm support now compiles, not working. @@ -393,7 +393,7 @@ * iptsec module: * Updated headers in iptsec module. - Added SOFIAPUBFUN and SOFIAPUBVAR where needed. + Added SOFIAPUBFUN and SOFIAPUBVAR where needed. Removed auc_with_uicc(). * Fixed memory management problems in iptsec module. @@ -403,7 +403,7 @@ freed. Now we are actually running the tests in test_auth_digest.c, too. The problem was reported and patch submitted by Colin Whittaker. - + * sresolv module: * Updated sresolv API. @@ -743,7 +743,7 @@ M ./libsofia-sip-ua/nua/test_nua.c +138 - * Fixed NTA API test for SigComp options (they are now always processed). + * Fixed NTA API test for SigComp options (they are now always processed). M ./libsofia-sip-ua/nta/test_nta_api.c -8 +4 @@ -800,7 +800,7 @@ 2006-04-11 Kai Vehmanen - Synchronizing CVS with darcs (other contributors pp = Pekka Pessi, + Synchronizing CVS with darcs (other contributors pp = Pekka Pessi, mm = Martti Mela). * NDEBUG oops. (pp) @@ -897,7 +897,7 @@ M ./libsofia-sip-ua/nua/nua_tag.c -2 M ./libsofia-sip-ua/nua/sofia-sip/nua_tag.h -7 +6 - * Fixed su_root_run() usage in docs. (pp) + * Fixed su_root_run() usage in docs. (pp) Thanks for hint by Julio Auto. M ./libsofia-sip-ua/nua/nua.docs -1 +1 @@ -915,7 +915,7 @@ M ./libsofia-sip-ua/nua/nua_register.c -7 +11 * Removed obsoleted nua events. (pp) - + Removed nua events nua_i_media_event, nua_r_set_media_param, nua_r_get_media_param, nua_r_media_setup, nua_r_media_describe, nua_r_media_event, nua_i_announce, nua_i_describe, nua_i_get_parameter, @@ -923,7 +923,7 @@ nua_i_setup, nua_i_teardown, nua_r_setup, nua_r_play, nua_r_record, nua_r_pause, nua_r_describe, nua_r_teardown, nua_r_options2, nua_r_announce, nua_r_get_parameter, and nua_r_set_parameter. - + Removed nua functions nua_announce(), nua_describe(), nua_get_media_param(), nua_get_parameter(), nua_media_describe(), nua_media_event(), nua_media_setup(), nua_options2(), nua_pause(), nua_play(), nua_record(), @@ -1330,7 +1330,7 @@ A ./libsofia-sip-ua/tport/tport_type_connect.c * Split tport.c into multiple modules. (pp) - STUN, UPnP and SigComp still need some polishing. + STUN, UPnP and SigComp still need some polishing. M ./libsofia-sip-ua/tport/Makefile.am -3 +7 M ./libsofia-sip-ua/tport/test_tport.c -13 +11 @@ -1574,12 +1574,12 @@ M ./libsofia-sip-ua/nta/nta.c -3 +9 * Using SOFIAPUBFUN in msg_header.h. Avoiding use of msg_param_t where possible. (pp) - + API CHANGE: Allowing NULL as message public pointer (using default) in calls to msg_serialize(), msg_header_add(), msg_header_prepend(), msg_header_add_dup(), msg_header_add_dup_as(), msg_header_add_make(), - msg_header_add_str(), msg_header_insert(), msg_header_remove(), + msg_header_add_str(), msg_header_insert(), msg_header_remove(), msg_header_remove_all(), and msg_header_replace(). M ./libsofia-sip-ua/msg/msg_parser.c -155 +182 @@ -1613,7 +1613,7 @@ * nua_dialog_store_peer_info() now optionally removes peer info. (pp) If the SIP message given to nua_dialog_store_peer_info() is redirection response, reset peer info. - + M ./libsofia-sip-ua/nua/nua_dialog.c +14 @@ -1645,7 +1645,7 @@ 2006-03-16 Pekka Pessi Synchronizing CVS with darcs. - + * Fixed lib-sofia-sip-ua-glib Makefile.ams. Tried to sanitize glib-less compilation. @@ -1718,7 +1718,7 @@ * Using alarm() with su_test.c. * Fixed hc_print usage in msg_header_prepare(). - Some headers use snprintf() which may return -1 on some platforms if + Some headers use snprintf() which may return -1 on some platforms if buffer is too small. * Fixed problems in test_nua on win32. @@ -1753,13 +1753,13 @@ M ./libsofia-sip-ua/nua/nua_stack.c -1 +1 2006-03-13 Martti Mela - + * win32 defs, compiles and installs in mingw environment 2006-03-09 Kai Vehmanen - * Synchronized darcs and CVS. - + * Synchronized darcs and CVS. + * Added missing su_source_test.c file. A ./libsofia-sip-ua-glib/su-glib/su_source_test.c @@ -1978,8 +1978,8 @@ 2006-03-01 Pekka Pessi - * Synchronized darcs and CVS. - + * Synchronized darcs and CVS. + * Added utils/Doxyfile A ./utils/Doxyfile @@ -2122,7 +2122,7 @@ 2006-02-15 Pekka Pessi * Release 1.11.6. - + * Fixed problems in doxygen documentation and dist. * Updated PRACK and nta_outgoing_prack(). @@ -2173,19 +2173,19 @@ . You can either fix your applications to use the new include file names - with the fix-include-sofia-sip sed script found in scripts/ directory, or - add both ${sofiadir} and ${sofiadir}/sofia-sip into your include path, + with the fix-include-sofia-sip sed script found in scripts/ directory, or + add both ${sofiadir} and ${sofiadir}/sofia-sip into your include path, e.g., - INCLUDES = -I/usr/include/sofia-1.11 -I/usr/include/sofia-1.11/sofia-sip + INCLUDES = -I/usr/include/sofia-1.11 -I/usr/include/sofia-1.11/sofia-sip At the same time, I took the liberty to rename two include files sofia_sip_features.h => sofia-sip/features.h - su_memmem.h => sofia-sip/su_bm.h + su_memmem.h => sofia-sip/su_bm.h The fix-include-sofia-sip sed script takes care of both of them. - + * Improved 100rel handling in nua. Added test_100rel to test_nua.c. @@ -2193,7 +2193,7 @@ * Improving getaddrinfo replacements. Testing functions getaddrinfo()/freeaddrinfo(), getnameinfo() and - gai_strerror() separately. + gai_strerror() separately. There is no gai_strerror() in windows, I think. 2006-02-03 Pekka Pessi @@ -2286,12 +2286,12 @@ M ./libsofia-sip-ua/nea/nea_server.c -1 +1 * Added functions for scanning domain names and IP addresses. - Added span_ip4_address()/scan_ip4_address(), - span_ip6_address()/scan_ip6_address(), + Added span_ip4_address()/scan_ip4_address(), + span_ip6_address()/scan_ip6_address(), span_ip6_reference()/scan_ip6_reference(), - span_ip_address()/scan_ip_address(), + span_ip_address()/scan_ip_address(), span_domain()/scan_domain(), and - span_host()/scan_host(). + span_host()/scan_host(). M ./libsofia-sip-ua/bnf/bnf.c -2 +588 M ./libsofia-sip-ua/bnf/bnf.h -2 +18 @@ -2393,7 +2393,7 @@ 2006-01-03 Pekka Pessi Syncinc darcs and CVS. - + * Added more tests for call hold. * Using msg_header_replace_param() in nua_stack.c. @@ -2410,7 +2410,7 @@ * Removed msg_bnf.h - * Added NTATAG_TCP_RPORT(). + * Added NTATAG_TCP_RPORT(). Do not use rport with TCP by default. * Added test for comp=sigcomp. @@ -2420,7 +2420,7 @@ * Documented TP_AI_ flags. Test our TP_AI_ assumptions. - Added a test for asymmetric SigComp on TCP. + Added a test for asymmetric SigComp on TCP. We use TP_AI_COMPRESSED flag in this test. * Added TPTAG_FRESH() and a test for it. @@ -2429,7 +2429,7 @@ * Use #include for FILE. - * Fixed include_sofiadir handling in pkg-config and rpm files. + * Fixed include_sofiadir handling in pkg-config and rpm files. 2005-12-27 Martti Mela Again, syncing darcs and CVS. @@ -3025,11 +3025,11 @@ * Cleaned up su_addrinfo.c. [pp] Cleaned up comments. - Using SU_HAVE_ flags. + Using SU_HAVE_ flags. Added support for SCTP in getaddrinfo() replacement. M ./libsofia-sip-ua/su/su_addrinfo.c -10 +38 - + * Declaring sockaddr_storage in su.h if it is not provided in environment. M ./libsofia-sip-ua/su/su.h +23 @@ -3052,7 +3052,7 @@ 2005-11-30 Pekka Pessi Syncing darcs with CVS. - + * Silenced warning in su_addrinfo.c. M ./libsofia-sip-ua/su/su_addrinfo.c -1 +2 @@ -3158,16 +3158,16 @@ M ./libsofia-sip-ua/nua/nua_stack.c -10 +18 - * Rewrote uas_check_session_content(). + * Rewrote uas_check_session_content(). Returning empty Accept-Encoding header in 415/406 responses. M ./libsofia-sip-ua/nua/nua_stack.c -21 +41 * Do not throttle at termination. [FIX] - - nea_server now sends NOTIFYs that terminate subscription even if the + + nea_server now sends NOTIFYs that terminate subscription even if the previous NOTIFY transaction has not completed yet. - + This fixes the race condition in nua_terminate() (where terminating NOTIFY was is never sent). @@ -3203,7 +3203,7 @@ M ./RELEASE -3 +16 * Fixed installing and distributing m4 files. - Not installing m4/sac-su2.m4. + Not installing m4/sac-su2.m4. Including m4/sac-tport.m4 and m4/sac-openssl.m4 in distribution. M ./Makefile.am -1 +2 @@ -3219,7 +3219,7 @@ M ./libsofia-sip-ua/docs/mainpage.docs -5 +7 * Updated subscriptuion authorization and nua_terminate() semantics. - Subscription authorization now rejects SUBSCRIBE if + Subscription authorization now rejects SUBSCRIBE if NUTAG_SUBSTATE(nua_substate_terminated) parameter is set. Correct status code is relayed to application, too. nua_terminate() now always terminates whole notifier. @@ -3253,7 +3253,7 @@ M ./libsofia-sip-ua/docs/Doxyfile -1 +1 M ./libsofia-sip-ua/features/Doxyfile -1 +1 - + M ./libsofia-sip-ua/nea/Doxyfile -1 +1 * Moved typedefs nua_t and nua_handle_t into @@ -3409,9 +3409,9 @@ 2005-11-28 Martti Mela * nua.h: added event nua_i_subscription - + * nua_commmon.c: added event nua_i_subscription - + * nua_stack.c: ua_event for nua_i_subscription (nea subscribers) * nea.h, nea_tag.c, nea_tag_ref.c, nea_server.c: support for a new @@ -3419,7 +3419,7 @@ 2005-11-15 Kai Vehmanen - * configure.ac: Added VER_LIBSOFIA_SIP_UA variables. + * configure.ac: Added VER_LIBSOFIA_SIP_UA variables. 2005-11-14 Pekka Pessi @@ -3469,7 +3469,7 @@ M ./libsofia-sip-ua/soa/test_soa.c -19 +382 * Added funtions for rtp payload type management. - + Added sdp_media_uses_rtp(), sdp_rtpmap_match(), sdp_rtpmap_find_matching() and sdp_rtpmap_well_known[]. Fixed RTP timestamp rate for G722: it was 16000 but it should be 8000. @@ -3510,8 +3510,8 @@ M ./libsofia-sip-ua/su/su_wait.h +3 * Fixed tport.c on Win32 port. - Added a separate "connecting" phase. - Checking EWOULDBLOCK in addition to EAGAIN. + Added a separate "connecting" phase. + Checking EWOULDBLOCK in addition to EAGAIN. Fixed TP_AI_CLOSE and TP_AI_SHUTDOWN flags. Improved logging. @@ -3757,7 +3757,7 @@ * Cleaned up nta module interfaces. Use uint32_t instead of sip_u32_t. Removed old funtions not using reference counting with messages: - Replaced nta_outgoing_getresponse() with nta_outgoing_getresponse_ref(), + Replaced nta_outgoing_getresponse() with nta_outgoing_getresponse_ref(), and nta_outgoing_getrequest() with nta_outgoing_getrequest_ref(). Removed nta_incoming_getresponse(), nta_leg_stateful(). Removed nta_outgoing_tmcreate(): use nta_outgoing_mcreate() instead. @@ -3795,7 +3795,7 @@ M ./libsofia-sip-ua/sip/sip_protos.h.in -1 +1 - * Cleaned up sip types. + * Cleaned up sip types. Not using special typedefs sip_u32_t or sip_u16_t. M ./libsofia-sip-ua/sip/sip.h -15 +11 @@ -3816,7 +3816,7 @@ * Removed annoying Last modified from iptsec. 2005-11-04 Pekka Pessi - + * Removed annoying Last modified from msg module. * Removed Last modified things from sip module. @@ -3852,7 +3852,7 @@ M ./libsofia-sip-ua/nua/test_nua.c +409 - * Added nua_unpublish(). + * Added nua_unpublish(). Some cosmetic changes, too. M ./libsofia-sip-ua/nua/nua.h -1 +4 @@ -3899,14 +3899,14 @@ * Moved deprecated functions to nta/nta_compat.c. nta_msg_vsend() and msg_msg_send() should not be used anymore. - + nta_msg_discard() is also deprecated, but getting rid of references to it takes time. M ./libsofia-sip-ua/nta/nta.c -43 +42 M ./libsofia-sip-ua/nta/nta_compat.c -1 +31 - * Plugged memory leak in nth_engine_create() in nth/nth_client.c + * Plugged memory leak in nth_engine_create() in nth/nth_client.c Use su_home_new() instead of su_salloc(). M ./libsofia-sip-ua/nth/nth_client.c -3 +2 @@ -4297,7 +4297,7 @@ * Importing darcs-to-cvs-2005-10-04. - * Using DIST_SUBDIRS when including dist-only dirs + * Using DIST_SUBDIRS when including dist-only dirs M ./Makefile.am -1 +2 M ./libsofia-sip-ua/Makefile.am -1 +4 @@ -4308,7 +4308,7 @@ 2005-10-03 Pekka Pessi * Importing darcs-to-cvs-2005-10-03. - + * Removed old .def files. R ./libsofia-sip-ua/ipt/ipt.def @@ -4337,7 +4337,7 @@ 2005-09-29 Pekka Pessi * Importing darcs-to-cvs-2005-09-29. - + 2005-09-28 Pekka Pessi * Added nua improvements. @@ -4347,7 +4347,7 @@ 2005-09-23 Pekka Pessi * darcs changes: - + Fri Sep 23 18:58:29 EEST 2005 Pekka.Pessi at nokia.com * Building msg_test class into msg_test library, use that in tport. @@ -4460,7 +4460,7 @@ M ./libsofia-sip-ua/sip/sip_header.h +3 Mon Sep 19 20:12:33 EEST 2005 Pekka.Pessi at nokia.com - * Updated. Added rules for ignoring SDP. corrected some + * Updated. Added rules for ignoring SDP. corrected some M ./libsofia-sip-ua/soa/soa.docs -8 +18 @@ -4567,7 +4567,7 @@ * Makefile.am: Added requirement for automake-1.6.1 or newer. - * autogen.sh: Fixed interop problem with older automake + * autogen.sh: Fixed interop problem with older automake versions. * configure.ac: Do not compile STUN if OpenSSL is not Modified: freeswitch/trunk/libs/sofia-sip/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/Makefile.am Tue Dec 16 13:05:22 2008 @@ -21,12 +21,12 @@ VERSION = @VERSION@ EXTRA_DIST = AUTHORS COPYING COPYRIGHTS ChangeLog.ext-trees \ - README README.developers RELEASE TODO + README README.developers RELEASE TODO ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST += m4/sac-general.m4 m4/sac-coverage.m4 \ - m4/sac-su2.m4 m4/sac-tport.m4 m4/sac-openssl.m4 + m4/sac-su2.m4 m4/sac-tport.m4 m4/sac-openssl.m4 EXTRA_DIST += docs/build_system.txt \ docs/devel_platform_notes.txt \ Modified: freeswitch/trunk/libs/sofia-sip/README ============================================================================== --- freeswitch/trunk/libs/sofia-sip/README (original) +++ freeswitch/trunk/libs/sofia-sip/README Tue Dec 16 13:05:22 2008 @@ -5,12 +5,12 @@ Introduction ------------ -Sofia-SIP is an open-source SIP User-Agent library, compliant -with the IETF RFC3261 specification. It can be used as -a building block for SIP client software for uses such as VoIP, -IM, and many other real-time and person-to-person communication -services. The primary target platform for Sofia-SIP is -GNU/Linux. Sofia-SIP is based on a SIP stack developed at +Sofia-SIP is an open-source SIP User-Agent library, compliant +with the IETF RFC3261 specification. It can be used as +a building block for SIP client software for uses such as VoIP, +IM, and many other real-time and person-to-person communication +services. The primary target platform for Sofia-SIP is +GNU/Linux. Sofia-SIP is based on a SIP stack developed at the Nokia Research Center. Sofia-SIP is licensed under the LGPL. @@ -42,9 +42,9 @@ The Sofia-SIP su submodule also provides some small utilities: -- addrinfo (libsofia-sip-ua/su), resolve host names +- addrinfo (libsofia-sip-ua/su), resolve host names - localinfo (libsofia-sip-ua/su), prints information about - local network interfaces + local network interfaces References ---------- Modified: freeswitch/trunk/libs/sofia-sip/README.developers ============================================================================== --- freeswitch/trunk/libs/sofia-sip/README.developers (original) +++ freeswitch/trunk/libs/sofia-sip/README.developers Tue Dec 16 13:05:22 2008 @@ -6,8 +6,8 @@ ============ This file is a collection of practices and rules for Sofia-SIP -development. If you have questions, or would like to make -changes, raise the issue on sofia-sip-devel (see +development. If you have questions, or would like to make +changes, raise the issue on sofia-sip-devel (see http://lists.sourceforge.net/lists/listinfo/sofia-sip-devel ). @@ -15,17 +15,17 @@ ============================== AUTHORS - List of contributors. When contributing new code, add + List of contributors. When contributing new code, add yourself to AUTHORS, and also remember to update the per source file copyright statements. COPYRIGHTS - List of licenses and related copyright statements. While + List of licenses and related copyright statements. While majority of Sofia-SIP is licensed under LGPL, there are - a few files with different, but LGPL compatible, licensing + a few files with different, but LGPL compatible, licensing terms. - -README.developers + +README.developers This file. TODO @@ -33,11 +33,11 @@ /ChangeLog files All non-trivial changes to the source code should - be documented in the ChangeLog files. See also the + be documented in the ChangeLog files. See also the top-level ChangeLog. -Version numbering +Version numbering ================= Package version @@ -50,8 +50,8 @@ vMAJOR.MINOR.REVISION, where minor is odd vMAJOR.MINOR.REVISION.YEAR.MONTH.DAY, where minor is odd -For all releases, the version should be changed in configure.ac -and committed to Darcs/CVS before making the release package. The person +For all releases, the version should be changed in configure.ac +and committed to Darcs/CVS before making the release package. The person doing the release is responsible for updating the version number. Library interface versions @@ -64,14 +64,14 @@ The interface versions are set in top-level 'configure.ac' file. Additionally, the SONAME version (CURRENT-AGE) is set in the -same place. These version numbers are available for use as autoconf -variables (see the library 'Makefile.am' files and +same place. These version numbers are available for use as autoconf +variables (see the library 'Makefile.am' files and 'packages/sofia-sip.spec.in'). All changes to the library versions should be marked to the appropriate library 'ChangeLog' file. The library version should -be changed at the same time as the first interface change is -committed since the previous release. The interface version is +be changed at the same time as the first interface change is +committed since the previous release. The interface version is frozen (should be marked to the 'ChangeLog' file) at the time the next release is tagged (in other words, intra-release changes need not be tracked with libtool versions). @@ -95,7 +95,7 @@ - CVS tree (only used to track major releases) at: http://sourceforge.net/cvs/?group_id=143636 - tags: rel-sofia-sip-x_y_z - - stable and development releases (matches release + - stable and development releases (matches release version sofia-sip-x.y.z) - tags: snapshot_rel_YEARMMDD - snapshot releases at @@ -113,13 +113,13 @@ People without Darcs access --------------------------- -Send your patches to sofia-sip-devel. Someone from the +Send your patches to sofia-sip-devel. Someone from the development team (see AUTHORS) will handle the patch. People with Darcs access ------------------------ -Trivial changes can be committed without review. For non-trivial +Trivial changes can be committed without review. For non-trivial changes, you should first send a proposal to sofia-sip-devel and wait for comments. There are no strict approval rules so use of common sense is recommended. ;) Modified: freeswitch/trunk/libs/sofia-sip/RELEASE ============================================================================== --- freeswitch/trunk/libs/sofia-sip/RELEASE (original) +++ freeswitch/trunk/libs/sofia-sip/RELEASE Tue Dec 16 13:05:22 2008 @@ -17,17 +17,17 @@ **template**: New features in API are marked with Doxytag macro @VERSION_1_XX_X. libsofia-sip-ua: - **template**: Added foobar() function (sofia-sip/foobar.h). -- This release is ABI/API compatible with applications linked against - any 1.12.x release. However, applications built against this release won't - work against an older library. The ABI has been tested with the nua module +- This release is ABI/API compatible with applications linked against + any 1.12.x release. However, applications built against this release won't + work against an older library. The ABI has been tested with the nua module unit test (test_nua) built against original 1.12.0 release. libsofia-sip-ua-glib: @@ -41,12 +41,12 @@ +/> - **template**: First Surname (patch to nua/soa/msg) @@ -59,7 +59,7 @@ - new/changed/removed functionality - links to further documentation - section may be omitted for minor releases -/> +/> Bugs fixed in this release -------------------------- Modified: freeswitch/trunk/libs/sofia-sip/RELEASE.template ============================================================================== --- freeswitch/trunk/libs/sofia-sip/RELEASE.template (original) +++ freeswitch/trunk/libs/sofia-sip/RELEASE.template Tue Dec 16 13:05:22 2008 @@ -17,17 +17,17 @@ **template**: New features in API are marked with Doxytag macro @VERSION_1_XX_X. libsofia-sip-ua: - **template**: Added foobar() function (sofia-sip/foobar.h). -- This release is ABI/API compatible with applications linked against - any 1.12.x release. However, applications built against this release won't - work against an older library. The ABI has been tested with the nua module +- This release is ABI/API compatible with applications linked against + any 1.12.x release. However, applications built against this release won't + work against an older library. The ABI has been tested with the nua module unit test (test_nua) built against original 1.12.0 release. libsofia-sip-ua-glib: @@ -41,12 +41,12 @@ +/> - **template**: First Surname (patch to nua/soa/msg) @@ -59,7 +59,7 @@ - new/changed/removed functionality - links to further documentation - section may be omitted for minor releases -/> +/> Bugs fixed in this release -------------------------- Modified: freeswitch/trunk/libs/sofia-sip/TODO ============================================================================== --- freeswitch/trunk/libs/sofia-sip/TODO (original) +++ freeswitch/trunk/libs/sofia-sip/TODO Tue Dec 16 13:05:22 2008 @@ -8,11 +8,11 @@ --------------- 1.11/1.12 series - - first version of the new nua+soa API + - first version of the new nua+soa API - nua_respond_nit() (non-INVITEs) - nua_set_hparams()/nua_get_hparams() [DONE] - session object ownership changes [DONE] - - allow multiple registrations (lines) and selecting + - allow multiple registrations (lines) and selecting service route, outbound proxy, and transport independently for each handle; NUTAG_IDENTITY - doxygen documentation updates [DONE] Modified: freeswitch/trunk/libs/sofia-sip/autogen.sh ============================================================================== --- freeswitch/trunk/libs/sofia-sip/autogen.sh (original) +++ freeswitch/trunk/libs/sofia-sip/autogen.sh Tue Dec 16 13:05:22 2008 @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/sh set -x AUTOMAKE=${AUTOMAKE:-automake-1.9} ACLOCAL=${ACLOCAL:-aclocal-1.9} Modified: freeswitch/trunk/libs/sofia-sip/configure.ac ============================================================================== --- freeswitch/trunk/libs/sofia-sip/configure.ac (original) +++ freeswitch/trunk/libs/sofia-sip/configure.ac Tue Dec 16 13:05:22 2008 @@ -2,7 +2,7 @@ dnl Contact: Pekka Pessi dnl Licensed under LGPL. See file COPYING. -dnl +dnl dnl ref: http://www.gnu.org/software/autoconf/manual/autoconf.info.gz dnl AC_PREREQ(2.57) @@ -24,7 +24,7 @@ AC_SUBST(LIBVER_SOFIA_SIP_UA_GLIB_REV, [0]) AC_SUBST(LIBVER_SOFIA_SIP_UA_GLIB_AGE, [0]) AC_SUBST(LIBVER_SOFIA_SIP_UA_GLIB_SOVER, [3]) # CUR-AGE - + # dnl calls AC_CANONICAL_ macros that are required by AM_INIT_AUTOMAKE SAC_CANONICAL_SYSTEM_CACHE_CHECK @@ -56,7 +56,7 @@ AC_ARG_WITH(doxygen, [ --with-doxygen[[=CMD]] use doxygen command CMD [[doxygen]]],[ -case $enable_doxygen in +case $enable_doxygen in yes ) doxygen=doxygen ;; no ) doxygen=echo ;; esac], doxygen=doxygen) @@ -249,12 +249,12 @@ if test $ac_cv_c_z_format = yes; then AC_DEFINE([MOD_ZD], ["%ld"], [Define printf() modifier for ssize_t])dnl AC_DEFINE([MOD_ZU], ["%lu"], [Define printf() modifier for size_t])dnl -else +else dnl Cross fingers AC_MSG_WARN("printf cannot handle size_t, using long instead") AC_DEFINE([MOD_ZD], ["%ld"], [Define printf() modifier for ssize_t])dnl AC_DEFINE([MOD_ZU], ["%lu"], [Define printf() modifier for size_t])dnl -fi +fi fi @@ -327,7 +327,7 @@ libsofia-sip-ua/soa/Doxyfile libsofia-sip-ua/soa/Makefile libsofia-sip-ua/sresolv/Doxyfile -libsofia-sip-ua/sresolv/Makefile +libsofia-sip-ua/sresolv/Makefile libsofia-sip-ua/stun/Doxyfile libsofia-sip-ua/stun/Makefile libsofia-sip-ua/su/Doxyfile Modified: freeswitch/trunk/libs/sofia-sip/docs/build_system.txt ============================================================================== --- freeswitch/trunk/libs/sofia-sip/docs/build_system.txt (original) +++ freeswitch/trunk/libs/sofia-sip/docs/build_system.txt Tue Dec 16 13:05:22 2008 @@ -73,8 +73,8 @@ ================ Most of the code resides in the libsofia-sip-ua directory. -The main library, libsofia-sip-ua.so, is created by -collecting object files (for example bnf/bnf_objs.o) from +The main library, libsofia-sip-ua.so, is created by +collecting object files (for example bnf/bnf_objs.o) from individual modules. There are some portability issues with the way the @@ -89,13 +89,13 @@ Developer documentation ======================= -Generating reference documentation from source code +Generating reference documentation from source code --------------------------------------------------- The libsofia-sip-ua library has a top-level make target "doxygen" for generating the HTML reference documentation. -The pages will be created to libsofia-sip-ua/docs -subdirectory. +The pages will be created to libsofia-sip-ua/docs +subdirectory. This special target is primarily meant for use by the Sofia-SIP website admins, but can be used by anyone Modified: freeswitch/trunk/libs/sofia-sip/docs/devel_platform_notes.txt ============================================================================== --- freeswitch/trunk/libs/sofia-sip/docs/devel_platform_notes.txt (original) +++ freeswitch/trunk/libs/sofia-sip/docs/devel_platform_notes.txt Tue Dec 16 13:05:22 2008 @@ -14,16 +14,16 @@ Notes to distributors ---------------------- -Build options such as "--disable-stun" (HAVE_SOFIA_STUN) and +Build options such as "--disable-stun" (HAVE_SOFIA_STUN) and "--disable-nth" (HAVE_SOFIA_NTH) modify the public library API/ABI, by omitting certain interfaces from the resulting library and installed header files. Options such as '--disable-size-compat' modify the library -ABI by changing the types used in public library function +ABI by changing the types used in public library function signatures. -Generic POSIX (GNU/Linux, BSD, ...) +Generic POSIX (GNU/Linux, BSD, ...) ----------------------------------- Sofia-SIP should compile out-of-the-box on generic POSIX @@ -35,17 +35,17 @@ for the full list. -Mac OS X +Mac OS X -------- TBD -Win32 / Mingw +Win32 / Mingw ------------- -TBD +TBD -Win32 / Cygwin +Win32 / Cygwin -------------- TBD Modified: freeswitch/trunk/libs/sofia-sip/docs/release_management.txt ============================================================================== --- freeswitch/trunk/libs/sofia-sip/docs/release_management.txt (original) +++ freeswitch/trunk/libs/sofia-sip/docs/release_management.txt Tue Dec 16 13:05:22 2008 @@ -27,8 +27,8 @@ - maintained in sofia-sip/RELEASE - see diff between cvs/darcs between previous and this version - - written in freshmeat.net "Changes:" style -- notes on API/ABI interface changes + - written in freshmeat.net "Changes:" style +- notes on API/ABI interface changes - maintained in sofia-sip/RELEASE - all changes in public interfaces, plus other notes that developers should be aware of @@ -41,7 +41,7 @@ See the RELEASE.template file for a full list of release note sections. -Making the release tarball +Making the release tarball ========================== - basics: check system clock of the build host ;) @@ -71,15 +71,15 @@ - combine the sofia-sip/RELEASE contents with the template found from sfnet_www/templates/relnotes.txt -- store the resulting release notes to +- store the resulting release notes to sfnet_www/relnotes/relnotes-sofia-sip-x.y.z.txt -- add explicit link to the release notes to +- add explicit link to the release notes to sfnet_www/download.html (three most recent releases, see guidelines in the html comments) - update sfnet_www/index.html to mention the latest release -- commit the change to sf.net website CVS, and run the - sfnet_www/put_online.sh script +- commit the change to sf.net website CVS, and run the + sfnet_www/put_online.sh script Uploading the release to sourceforge.net ======================================== @@ -104,8 +104,8 @@ - replace the RELEASE file with RELEASE.template, and commit it to master source repository (see sofia-sip/README.developers) -- change version in configure.ac from "X.Y.Z" to - "X.Y.Zdevel" (as it is in many cases unknown what the +- change version in configure.ac from "X.Y.Z" to + "X.Y.Zdevel" (as it is in many cases unknown what the next version will be) - make a "tree open for development" commit @@ -122,15 +122,15 @@ - Always tag the src-tree with "syncuser-fromvcs-to-tovcs-yearmmdd". -- Add a top-level ChangeLog entry that documents all the +- Add a top-level ChangeLog entry that documents all the changes made outside the target tree (what, who and when - - for example produced with the "darcs changes --summary" + for example produced with the "darcs changes --summary" command). Checking API/ABI compatibility ============================== -- Use a unit test binary built against an old library, +- Use a unit test binary built against an old library, to verify a new library version (forwards-compatibility). - Use the 'icheck' tool (in Debian) to make comparison between two released versions. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/Makefile.am Tue Dec 16 13:05:22 2008 @@ -17,7 +17,7 @@ lib_LTLIBRARIES += libsofia-sip-ua-glib.la endif -libsofia_sip_ua_glib_la_SOURCES = +libsofia_sip_ua_glib_la_SOURCES = libsofia_sip_ua_glib_la_LIBADD = $(GLIB_TARGETS) $(GLIB_LIBS) # set the libtool version info version:revision:age for libsofia-sip-ua-glib @@ -42,7 +42,7 @@ done ${top_srcdir}/scripts/hide_emails.sh docs/html -PHONY = doxygen +PHONY = doxygen include $(top_srcdir)/rules/recursive.am Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/sofia-sip/su_glib.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/sofia-sip/su_glib.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/sofia-sip/su_glib.h Tue Dec 16 13:05:22 2008 @@ -27,7 +27,7 @@ /** * @file su_glib.h - * + * * @author Pekka Pessi * @author Kai Vehmanen */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/sofia-sip/su_source.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/sofia-sip/su_source.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/sofia-sip/su_source.h Tue Dec 16 13:05:22 2008 @@ -27,16 +27,16 @@ /** * @file su_source.h - * @brief + * @brief * - * NOTE: This file (su_source.h) is DEPRECATED as of 1.12.2 release. + * NOTE: This file (su_source.h) is DEPRECATED as of 1.12.2 release. * Please use su_glib.h instead. - * + * * @author Pekka Pessi * @author Kai Vehmanen - * + * * @date Created: Thu Mar 4 19:58:50 2004 ppessi - * + * */ #ifndef SU_WAIT_H Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_glib.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_glib.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_glib.docs Tue Dec 16 13:05:22 2008 @@ -4,7 +4,7 @@ @section su_glib_meta Module Meta Information -The su-glib module provides an interface to connect Sofia-SIP event loop +The su-glib module provides an interface to connect Sofia-SIP event loop to an existing glib main loop. Without this interface, a glib based application would have to create a separate thread for running the Sofia-SIP event loop. @@ -29,14 +29,14 @@ #include /* ... */ - + GMainLoop *ptr = g_main_loop_new(NULL, FALSE); GSource *gsource; su_root_t *sofia_event_loop; su_timer_t *timer; /* create a sofia event loop using su-glib function su_glib_root_source_create() */ - sofia_event_loop = su_glib_root_create(NULL); + sofia_event_loop = su_glib_root_create(NULL); /* attach the created GSource to glib event loop */ gsource = su_glib_root_gsource(sofia_event_loop); @@ -48,12 +48,12 @@ /* ... initialize other Sofia-SIP modules/functrions */ /* run the glib mainloop */ - g_main_loop_run(ptr); - at endcode + g_main_loop_run(ptr); + at endcode @section su_glib_todo Todo -- see sourceforge.net issue tracker for sofia-sip +- see sourceforge.net issue tracker for sofia-sip (-> http://sofia-sip.sourceforge.net/development.html ) */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source.c Tue Dec 16 13:05:22 2008 @@ -25,15 +25,15 @@ /** * @file su_source.c * @brief Wrapper for glib GSource. - * - * Refs: + * + * Refs: * - http://sofia-sip.sourceforge.net/refdocs/su/group__su__wait.html * - http://developer.gnome.org/doc/API/glib/glib-the-main-event-loop.html * * @author Pekka Pessi . - * + * * @date Created: Thu Mar 4 15:15:15 2004 ppessi - * + * */ #include "config.h" @@ -100,28 +100,28 @@ static int su_source_send(su_port_t *self, su_msg_r rmsg); static int su_source_register(su_port_t *self, - su_root_t *root, - su_wait_t *wait, + su_root_t *root, + su_wait_t *wait, su_wakeup_f callback, su_wakeup_arg_t *arg, int priority); static int su_source_unregister(su_port_t *port, - su_root_t *root, - su_wait_t *wait, - su_wakeup_f callback, + su_root_t *root, + su_wait_t *wait, + su_wakeup_f callback, su_wakeup_arg_t *arg); static int su_source_deregister(su_port_t *self, int i); static int su_source_unregister_all(su_port_t *self, su_root_t *root); -static int su_source_eventmask(su_port_t *self, +static int su_source_eventmask(su_port_t *self, int index, int socket, int events); static void su_source_run(su_port_t *self); static void su_source_break(su_port_t *self); static su_duration_t su_source_step(su_port_t *self, su_duration_t tout); static int su_source_thread(su_port_t *self, enum su_port_thread_op op); static int su_source_add_prepoll(su_port_t *port, - su_root_t *root, - su_prepoll_f *, + su_root_t *root, + su_prepoll_f *, su_prepoll_magic_t *); static int su_source_remove_prepoll(su_port_t *port, su_root_t *root); @@ -129,7 +129,7 @@ static char const *su_source_name(su_port_t const *self); -static +static su_port_vtable_t const su_source_port_vtable[1] = {{ /* su_vtable_size: */ sizeof su_source_port_vtable, @@ -169,14 +169,14 @@ return "GSource"; } -/** - * Port is a per-thread reactor. +/** + * Port is a per-thread reactor. * - * Multiple root objects executed by single thread share a su_port_t object. + * Multiple root objects executed by single thread share a su_port_t object. */ struct su_source_s { su_base_port_t sup_base[1]; - + GThread *sup_tid; GStaticMutex sup_obtained[1]; @@ -184,20 +184,20 @@ GSource *sup_source; /**< Backpointer to source */ GMainLoop *sup_main_loop; /**< Reference to mainloop while running */ - + /* Waits */ - unsigned sup_registers; /** Counter incremented by - su_port_register() or + unsigned sup_registers; /** Counter incremented by + su_port_register() or su_port_unregister() */ - unsigned sup_n_waits; - unsigned sup_size_waits; + unsigned sup_n_waits; + unsigned sup_size_waits; unsigned sup_max_index; - unsigned *sup_indices; - su_wait_t *sup_waits; - su_wakeup_f *sup_wait_cbs; - su_wakeup_arg_t**sup_wait_args; - su_root_t **sup_wait_roots; + unsigned *sup_indices; + su_wait_t *sup_waits; + su_wakeup_f *sup_wait_cbs; + su_wakeup_arg_t**sup_wait_args; + su_root_t **sup_wait_roots; }; typedef struct _SuSource @@ -243,13 +243,13 @@ return su_glib_root_create(magic); } -/** - * Returns a GSource object for the root +/** + * Returns a GSource object for the root * - * Note that you need to unref the GSource with g_source_unref() + * Note that you need to unref the GSource with g_source_unref() * before destroying the root object. * - * @return NULL on error (for instance if root was not created with + * @return NULL on error (for instance if root was not created with * su_glib_root_create()) */ GSource *su_glib_root_gsource(su_root_t *root) @@ -299,7 +299,7 @@ /** @internal Destroy a port. */ -static +static void su_source_finalize(GSource *gs) { SuSource *ss = (SuSource *)gs; @@ -315,7 +315,7 @@ g_static_mutex_lock(self->sup_mutex); - PORT_LOCK_DEBUG((" ...%p at %s locked(%p)...", + PORT_LOCK_DEBUG((" ...%p at %s locked(%p)...", (void *)g_thread_self(), who, self)); } @@ -323,7 +323,7 @@ { g_static_mutex_unlock(self->sup_mutex); - PORT_LOCK_DEBUG((" ...%p at %s unlocked(%p)\n", + PORT_LOCK_DEBUG((" ...%p at %s unlocked(%p)\n", (void *)g_thread_self(), who, self)); } @@ -351,7 +351,7 @@ * Change or query ownership of the port object. * * @param self pointer to a port object - * @param op operation + * @param op operation * * @ERRORS * @ERROR EALREADY port already has an owner (or has no owner) @@ -392,7 +392,7 @@ /* -- Registering and unregistering ------------------------------------- */ /* Seconds from 1.1.1900 to 1.1.1970 */ -#define NTP_EPOCH 2208988800UL +#define NTP_EPOCH 2208988800UL /** Prepare to wait - calculate time to next timer */ static @@ -402,7 +402,7 @@ su_port_t *self = ss->ss_port; enter; - + if (self->sup_base->sup_head) { *return_tout = 0; return TRUE; @@ -450,7 +450,7 @@ return su_source_prepare(gs, &tout); } -static +static gboolean su_source_dispatch(GSource *gs, GSourceFunc callback, gpointer user_data) @@ -489,8 +489,8 @@ for (i = 0; i < n; i++) { if (waits[i].revents) { root = self->sup_wait_roots[i]; - self->sup_wait_cbs[i](root ? su_root_magic(root) : NULL, - &waits[i], + self->sup_wait_cbs[i](root ? su_root_magic(root) : NULL, + &waits[i], self->sup_wait_args[i]); /* Callback used su_register()/su_unregister() */ if (version != self->sup_registers) @@ -512,7 +512,7 @@ (void *)g_thread_self(), who, self)); g_static_mutex_lock(self->sup_mutex); - PORT_LOCK_DEBUG((" ...%p at %s locked(%p)...", + PORT_LOCK_DEBUG((" ...%p at %s locked(%p)...", (void *)g_thread_self(), who, self)); } @@ -520,7 +520,7 @@ { g_static_mutex_unlock(self->sup_mutex); - PORT_LOCK_DEBUG((" ...%p at %s unlocked(%p)\n", + PORT_LOCK_DEBUG((" ...%p at %s unlocked(%p)\n", (void *)g_thread_self(), who, self)); } @@ -548,21 +548,21 @@ * * Please note if identical wait objects are inserted, only first one is * ever signalled. - * + * * @param self pointer to port * @param root pointer to root object * @param waits pointer to wait object * @param callback callback function pointer * @param arg argument given to callback function when it is invoked - * @param priority relative priority of the wait object + * @param priority relative priority of the wait object * (0 is normal, 1 important, 2 realtime) - * + * * @return - * The function @su_source_register returns nonzero index of the wait object, + * The function @su_source_register returns nonzero index of the wait object, * or -1 upon an error. */ int su_source_register(su_port_t *self, - su_root_t *root, - su_wait_t *wait, + su_root_t *root, + su_wait_t *wait, su_wakeup_f callback, su_wakeup_arg_t *arg, int priority) @@ -571,7 +571,7 @@ unsigned n; enter; - + assert(SU_SOURCE_OWN_THREAD(self)); n = self->sup_n_waits; @@ -587,7 +587,7 @@ if (self->sup_size_waits == 0) size = SU_WAIT_MIN; - else + else size = 2 * self->sup_size_waits; indices = realloc(self->sup_indices, size * sizeof(*indices)); @@ -600,14 +600,14 @@ for (i = 0; i < self->sup_n_waits; i++) g_source_remove_poll(self->sup_source, (GPollFD*)&self->sup_waits[i]); - + waits = realloc(self->sup_waits, size * sizeof(*waits)); if (waits) self->sup_waits = waits; for (i = 0; i < self->sup_n_waits; i++) g_source_add_poll(self->sup_source, (GPollFD*)&waits[i]); - + wait_cbs = realloc(self->sup_wait_cbs, size * sizeof(*wait_cbs)); if (wait_cbs) self->sup_wait_cbs = wait_cbs; @@ -618,7 +618,7 @@ /* Add sup_wait_roots array, if needed */ wait_tasks = realloc(self->sup_wait_roots, size * sizeof(*wait_tasks)); - if (wait_tasks) + if (wait_tasks) self->sup_wait_roots = wait_tasks; if (!(indices && waits && wait_cbs && wait_args && wait_tasks)) { @@ -638,7 +638,7 @@ g_source_add_poll(self->sup_source, (GPollFD*)&self->sup_waits[n]); self->sup_wait_cbs[n] = self->sup_wait_cbs[n-1]; self->sup_wait_args[n] = self->sup_wait_args[n-1]; - self->sup_wait_roots[n] = self->sup_wait_roots[n-1]; + self->sup_wait_roots[n] = self->sup_wait_roots[n-1]; } } else { @@ -653,13 +653,13 @@ I = self->sup_max_index; - for (i = 0; i < I; i++) + for (i = 0; i < I; i++) if (self->sup_indices[i] == UINT_MAX) break; else if (self->sup_indices[i] >= n) self->sup_indices[i]++; - if (i == I) + if (i == I) self->sup_max_index++; if (n + 1 < self->sup_n_waits) @@ -676,23 +676,23 @@ } /** Unregister a su_wait_t object. - * + * * The function su_source_unregister() unregisters a su_wait_t object. The * wait object, a callback function and a argument are removed from the * port object. - * + * * @param self - pointer to port object * @param root - pointer to root object * @param wait - pointer to wait object * @param callback - callback function pointer (may be NULL) - * @param arg - argument given to callback function when it is invoked + * @param arg - argument given to callback function when it is invoked * (may be NULL) - * + * * @return Nonzero index of the wait object, or -1 upon an error. */ int su_source_unregister(su_port_t *self, - su_root_t *root, - su_wait_t *wait, + su_root_t *root, + su_wait_t *wait, su_wakeup_f callback, /* XXX - ignored */ su_wakeup_arg_t *arg) { @@ -700,7 +700,7 @@ unsigned i, I, j, *indices; enter; - + assert(self); assert(SU_SOURCE_OWN_THREAD(self)); @@ -733,14 +733,14 @@ if (self->sup_indices[j] != UINT_MAX && self->sup_indices[j] > n) self->sup_indices[j]--; - + for (; n < N; n++) { g_source_remove_poll(self->sup_source, (GPollFD*)&self->sup_waits[n+1]); self->sup_waits[n] = self->sup_waits[n+1]; g_source_add_poll(self->sup_source, (GPollFD*)&self->sup_waits[n]); self->sup_wait_cbs[n] = self->sup_wait_cbs[n+1]; self->sup_wait_args[n] = self->sup_wait_args[n+1]; - self->sup_wait_roots[n] = self->sup_wait_roots[n+1]; + self->sup_wait_roots[n] = self->sup_wait_roots[n+1]; } i += 1; /* 0 is failure */ @@ -757,14 +757,14 @@ } /** Deregister a su_wait_t object. - * - * The function su_source_deregister() deregisters a su_wait_t registrattion. + * + * The function su_source_deregister() deregisters a su_wait_t registrattion. * The wait object, a callback function and a argument are removed from the * port object. - * + * * @param self - pointer to port object * @param i - registration index - * + * * @return Index of the wait object, or -1 upon an error. */ int su_source_deregister(su_port_t *self, int i) @@ -774,7 +774,7 @@ su_wait_t wait[1]; enter; - + assert(self); assert(SU_SOURCE_OWN_THREAD(self)); @@ -810,7 +810,7 @@ g_source_add_poll(self->sup_source, (GPollFD*)&self->sup_waits[n]); self->sup_wait_cbs[n] = self->sup_wait_cbs[n+1]; self->sup_wait_args[n] = self->sup_wait_args[n+1]; - self->sup_wait_roots[n] = self->sup_wait_roots[n+1]; + self->sup_wait_roots[n] = self->sup_wait_roots[n+1]; } indices[i - 1] = UINT_MAX; @@ -830,13 +830,13 @@ * * The function su_source_unregister_all() unregisters all su_wait_t objects * associated with given root object destroys all queued timers. - * + * * @param self - pointer to port object * @param root - pointer to root object - * + * * @return Number of wait objects removed. */ -int su_source_unregister_all(su_port_t *self, +int su_source_unregister_all(su_port_t *self, su_root_t *root) { unsigned i, j; @@ -847,15 +847,15 @@ su_root_t **wait_roots; enter; - + assert(SU_SOURCE_OWN_THREAD(self)); n_waits = self->sup_n_waits; - waits = self->sup_waits; - wait_cbs = self->sup_wait_cbs; + waits = self->sup_waits; + wait_cbs = self->sup_wait_cbs; wait_args = self->sup_wait_args; - wait_roots = self->sup_wait_roots; - + wait_roots = self->sup_wait_roots; + for (i = j = 0; (unsigned)i < n_waits; i++) { if (wait_roots[i] == root) { /* XXX - we should free all resources associated with this */ @@ -872,7 +872,7 @@ } j++; } - + self->sup_n_waits = j; self->sup_registers++; @@ -898,7 +898,7 @@ int retval; enter; - + assert(self); assert(SU_SOURCE_OWN_THREAD(self)); assert(0 < index && (unsigned)index <= self->sup_max_index); @@ -927,18 +927,18 @@ return 1; else if (multishot == 0 || multishot == 1) return 1; /* Always enabled */ - else + else return (errno = EINVAL), -1; } /** @internal Main loop. - * + * * The function @c su_source_run() runs the main loop - * + * * The function @c su_source_run() runs until @c su_source_break() is called * from a callback. - * + * * @param self pointer to root object * */ void su_source_run(su_port_t *self) @@ -947,7 +947,7 @@ GMainLoop *gml; enter; - + gmc = g_source_get_context(self->sup_source); if (gmc && g_main_context_acquire(gmc)) { gml = g_main_loop_new(gmc, TRUE); @@ -962,30 +962,30 @@ /** @internal * The function @c su_source_break() is used to terminate execution of @c * su_source_run(). It can be called from a callback function. - * + * * @param self pointer to port - * + * */ void su_source_break(su_port_t *self) { enter; - + if (self->sup_main_loop) g_main_loop_quit(self->sup_main_loop); } /** @internal Block until wait object is signaled or timeout. * - * This function waits for wait objects and the timers associated with + * This function waits for wait objects and the timers associated with * the root object. When any wait object is signaled or timer is - * expired, it invokes the callbacks. - * + * expired, it invokes the callbacks. + * * This function returns when a callback has been invoked or @c tout - * milliseconds is elapsed. + * milliseconds is elapsed. * * @param self pointer to port * @param tout timeout in milliseconds - * + * * @Return * Milliseconds to the next invocation of timer, or @c SU_WAIT_FOREVER if * there are no active timers. @@ -995,7 +995,7 @@ GMainContext *gmc; enter; - + gmc = g_source_get_context(self->sup_source); if (gmc && g_main_context_acquire(gmc)) { @@ -1030,8 +1030,8 @@ } static int su_source_add_prepoll(su_port_t *port, - su_root_t *root, - su_prepoll_f *prepoll, + su_root_t *root, + su_prepoll_f *prepoll, su_prepoll_magic_t *magic) { /* We could call prepoll in su_source_prepare()?? */ @@ -1066,7 +1066,7 @@ fprintf(f, "\tport tid %p\n", (void *)self->sup_tid); fprintf(f, "\t%d wait objects\n", self->sup_n_waits); for (i = 0; i < self->sup_n_waits; i++) { - + } } @@ -1078,7 +1078,7 @@ * * @return * If successful a pointer to the new message port is returned, otherwise - * NULL is returned. + * NULL is returned. */ static su_port_t *su_source_port_create(void) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source_test.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source_test.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source_test.c Tue Dec 16 13:05:22 2008 @@ -28,7 +28,7 @@ * @brief Test program for glib and su root event loop integration. * * @author Pekka Pessi - * + * * @date Created: Thu Mar 18 19:40:51 1999 pessi */ @@ -74,7 +74,7 @@ short opt_singlethread = 0; GMainLoop *global_gmainloop = NULL; -static su_socket_t udpsocket(void) +static su_socket_t udpsocket(void) { su_socket_t s; su_sockaddr_t su = { 0 }; @@ -98,7 +98,7 @@ if (getsockname(s, &su.su_sa, &sulen) == SOCKET_ERROR) { su_perror("udpsocket: getsockname"); - exit(1); + exit(1); } if (opt_verbatim) @@ -118,7 +118,7 @@ return buf; } -void +void do_ping(struct pinger *p, su_timer_t *t, void *p0) { char buf[1024]; @@ -129,7 +129,7 @@ p->when = su_now(); snprintf(buf, sizeof(buf), "Ping %d at %s", p->id++, snow(p->when)); - if (sendto(p->s, buf, strlen(buf), 0, + if (sendto(p->s, buf, strlen(buf), 0, &p->addr.su_sa, su_sockaddr_size(&p->addr)) == -1) { su_perror("do_ping: send"); } @@ -189,7 +189,7 @@ p->id = 0; snprintf(buf, sizeof(buf), "Pong at %s", snow(su_now())); - if (sendto(p->s, buf, strlen(buf), 0, + if (sendto(p->s, buf, strlen(buf), 0, &p->addr.su_sa, su_sockaddr_size(&p->addr)) == -1) { su_perror("do_pong: send"); } @@ -412,7 +412,7 @@ /* * test su_wait functionality: * - * Create a ponger, waking up do_recv() when data arrives, + * Create a ponger, waking up do_recv() when data arrives, * then scheduling do_pong() by timer * * Create a pinger, executed from timer, scheduling do_ping(), @@ -428,8 +428,8 @@ su_timer_t *t; unsigned long sleeppid = 0; - struct pinger - pinger = { PINGER, "ping", 1 }, + struct pinger + pinger = { PINGER, "ping", 1 }, ponger = { PONGER, "pong", 1 }; char *argv0 = argv[0]; @@ -437,7 +437,7 @@ #if HAVE_OPEN_C dup2(1, 2); #endif - + while (argv[1]) { if (strcmp(argv[1], "-v") == 0) { opt_verbatim = 1; @@ -465,9 +465,9 @@ #if HAVE_OPEN_C opt_verbatim = 1; opt_singlethread = 1; - su_log_soft_set_level(su_log_default, 9); + su_log_soft_set_level(su_log_default, 9); #endif - + #if HAVE_SIGNAL signal(SIGTERM, term); #endif @@ -478,20 +478,20 @@ global_gmainloop = g_main_loop_new(NULL, FALSE); g_assert(global_gmainloop); - - root = su_glib_root_create(NULL); + + root = su_glib_root_create(NULL); if (!root) perror("su_root_glib_create"), exit(1); - - if (!g_source_attach(su_glib_root_gsource(root), g_main_loop_get_context(global_gmainloop))) + + if (!g_source_attach(su_glib_root_gsource(root), g_main_loop_get_context(global_gmainloop))) perror("g_source_attach"), exit(1); - + su_root_threading(root, 0 && !opt_singlethread); if (su_clone_start(root, ping, &pinger, do_init, do_destroy) != 0) perror("su_clone_start"), exit(1); if (su_clone_start(root, pong, &ponger, do_init, do_destroy) != 0) - perror("su_clone_start"), exit(1); + perror("su_clone_start"), exit(1); /* Test timer, exiting after 200 milliseconds */ t = su_timer_create(su_root_task(root), 200L); @@ -499,7 +499,7 @@ su_perror("su_timer_create"), exit(1); su_timer_set(t, (su_timer_f)do_exit, NULL); - su_msg_create(start_msg, su_clone_task(ping), su_clone_task(pong), + su_msg_create(start_msg, su_clone_task(ping), su_clone_task(pong), init_ping, 0); su_msg_send(start_msg); @@ -511,7 +511,7 @@ su_timer_destroy(t); if (pinger.rtt_n) { - printf("%s executed %u pings in %g, mean rtt=%g sec\n", name, + printf("%s executed %u pings in %g, mean rtt=%g sec\n", name, pinger.rtt_n, pinger.rtt_total, pinger.rtt_total / pinger.rtt_n); } su_root_destroy(root); @@ -519,7 +519,7 @@ g_main_loop_unref(global_gmainloop), global_gmainloop = NULL; if (opt_verbatim) - printf("%s exiting\n", argv0); + printf("%s exiting\n", argv0); #ifndef HAVE_WIN32 #if HAVE_SIGNAL @@ -531,6 +531,6 @@ #if HAVE_OPEN_C sleep(7); #endif - + return 0; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/torture_su_glib_timer.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/torture_su_glib_timer.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/torture_su_glib_timer.c Tue Dec 16 13:05:22 2008 @@ -23,7 +23,7 @@ */ /** - * @brief Test program for su-glib timers + * @brief Test program for su-glib timers * * Based on torture_su_timer.c of libsofia-sip-ua. * @@ -186,7 +186,7 @@ su_init(); atexit(su_deinit); tester->root = root = su_glib_root_create(tester); - + source = su_root_gsource(tester->root); g_source_attach(source, NULL /*g_main_context_default ()*/); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ChangeLog ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ChangeLog (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ChangeLog Tue Dec 16 13:05:22 2008 @@ -9,7 +9,7 @@ 2006-10-12 Kai Vehmanen * libsofia-sip-ua interface v3 frozen (3:0:3) for the 1.12.3 release - + 2006-09-26 Kai Vehmanen * libsofia-sip-ua interface v2 frozen (2:0:2) for the 1.12.2 release @@ -27,9 +27,9 @@ * Added urltag_scan(). 2006-08-23 Pekka Pessi - + * nta.c, nta.h: added nta_leg_make_replaces(), nta_leg_by_replaces(). - + * nua: event watcher (nua_subscribe, nua_watcher) now tries to re-establish subscription if the subscription was terminated with reason "deactivated" or "probation". Likewise, if SUBSCRIBE was returned a suitable error response @@ -49,13 +49,13 @@ * /Doxyfile: Fixed the use of doxytags. Now a separate 'doxytags_MODNAME' file is created for each module. - + 2005-11-15 Kai Vehmanen - * /Makefile.am: Changed to use the 'include_sofia_HEADERS' + * /Makefile.am: Changed to use the 'include_sofia_HEADERS' variable for listing public library headers. The variable is defined in the top-level configure.ac. - + 2005-10-27 Pekka Pessi * Always including stun library. @@ -84,7 +84,7 @@ 2005-10-14 Pekka Pessi - * Shell syntax exercise. + * Shell syntax exercise. M ./autogen.sh -4 +4 @@ -94,7 +94,7 @@ 2005-10-13 Kai Vehmanen - * /Makefile.am: Build all submodules as proper shared + * /Makefile.am: Build all submodules as proper shared libraries (noinst_LTLIBRARIES). Fixes sf.net:#1264030. 2005-09-09 Pekka Pessi @@ -179,7 +179,7 @@ M ./iptsec/auth_module.c -5 +5 Thu Sep 8 21:10:23 EEST 2005 Pekka.Pessi at nokia.com - * Added auth_digest_credentials(). + * Added auth_digest_credentials(). Use opaque to match Authorization header. M ./iptsec/auth_digest_test.c -2 +3 @@ -319,7 +319,7 @@ M ./url/url.c -1 +6 Thu Sep 8 18:01:17 EEST 2005 Pekka.Pessi at nokia.com - * Explicitly using + * Explicitly using M ./msg/msg.c +2 M ./msg/msg_mclass.c +1 @@ -369,10 +369,10 @@ Thu Sep 8 03:11:35 EEST 2005 Pekka.Pessi at nokia.com * su_home_new and su_home_unref - Added su_home_new() and su_home_unref(). - + Added su_home_new() and su_home_unref(). + Fixed su_home_mutex_lock() and su_home_mutex_unlock(). - + Slightly changed semantics of su_home_clone() versus su_home_threadsafe(). @@ -386,7 +386,7 @@ Thu Sep 8 03:07:17 EEST 2005 Pekka.Pessi at nokia.com * More liberal sdp parsing for config files. - Be more liberal when parsing config files + Be more liberal when parsing config files (do not require v=, accept -1 as len argument). M ./sdp/sdp_parse.c -9 +25 @@ -403,7 +403,7 @@ M ./sdp/sdp.h +2 M ./sdp/sdp_parse.c +10 - + 2005-09-08 Kai Vehmanen * Makefile.am: Workaround for automake bug related to adding @@ -416,7 +416,7 @@ 2005-08-17 Pekka Pessi - * Fixed BEGIN()/END() pairs in test programs. + * Fixed BEGIN()/END() pairs in test programs. 2005-08-04 Pekka Pessi Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/Makefile.am Tue Dec 16 13:05:22 2008 @@ -16,13 +16,13 @@ OPT_SUBDIRS_HTTP = OPT_SUBDIRS_NTH = if HAVE_STUN -OPT_LIBADD += stun/libstun.la +OPT_LIBADD += stun/libstun.la OPT_SUBDIRS_STUN += stun endif if HAVE_NTH -OPT_LIBADD += http/libhttp.la nth/libnth.la +OPT_LIBADD += http/libhttp.la nth/libnth.la OPT_SUBDIRS_HTTP += http -OPT_SUBDIRS_NTH += nth +OPT_SUBDIRS_NTH += nth endif # note: order does matter in the subdir list @@ -37,7 +37,7 @@ noinst_LTLIBRARIES = libsofia-sip-ua.la -libsofia_sip_ua_la_SOURCES = +libsofia_sip_ua_la_SOURCES = libsofia_sip_ua_la_LIBADD = bnf/libbnf.la \ features/libfeatures.la \ ipt/libipt.la \ @@ -90,7 +90,7 @@ sed '2,10s!index!'$$d'_index!' \ docs/$$d.doxytags > docs/$$d.doxytags.tmp && \ mv -f docs/$$d.doxytags.tmp docs/$$d.doxytags ; \ - done + done for d in $(DIST_SUBDIRS); do \ test -r $$d/Doxyfile \ && pushd $$d > /dev/null \ @@ -102,7 +102,7 @@ sed '2,10s!index!'$$d'_index!' \ docs/$$d.doxytags > docs/$$d.doxytags.tmp && \ mv -f docs/$$d.doxytags.tmp docs/$$d.doxytags ; \ - done + done ${top_srcdir}/scripts/hide_emails.sh docs/html if HAVE_LCOV Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/bnf.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/bnf.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/bnf.c Tue Dec 16 13:05:22 2008 @@ -96,10 +96,10 @@ /** Span of a token */ size_t bnf_span_token4(char const *s) { - char const *e = s; + char const *e = s; while (_bnf_table[(unsigned char)(*e)] & bnf_token) - e++; - return e - s; + e++; + return e - s; } char * bnf_span_token_end(char const *s) @@ -192,9 +192,9 @@ /** Return length of valid IP4 address. * - * Note that we accept here up to two leading zeroes + * Note that we accept here up to two leading zeroes * which makes "dotted decimal" notation ambiguous: - * 127.000.000.001 is interpreted same as 127.0.0.1 + * 127.000.000.001 is interpreted same as 127.0.0.1 * * Note that traditionally IP address octets starting * with zero have been interpreted as octal: @@ -711,7 +711,7 @@ /** Return true if @a string is valid IP6 address in hex notation. * - * E.g., fe80::1 is a valid IP6 address. + * E.g., fe80::1 is a valid IP6 address. */ int host_is_ip6_address(char const *string) { @@ -724,7 +724,7 @@ return host_is_ip6_reference(string); } -/** Return true if @a string is valid IP6 reference, +/** Return true if @a string is valid IP6 reference, * i.e. hex notation in square brackets. * * E.g., [::1] is a valid IP6 reference. @@ -737,7 +737,7 @@ /** Return true if @a string is valid IP address. * - * Valid IP address is either a IP4 adddress in quad-octet notation, + * Valid IP address is either a IP4 adddress in quad-octet notation, * IP6 hex address or IP6 reference in square brackets ([]). */ int host_is_ip_address(char const *string) @@ -748,7 +748,7 @@ /** Return true if @a string is valid a domain name. * - * Valid domain name consists of alphanumeric labels separated with + * Valid domain name consists of alphanumeric labels separated with * dot ("."). There can be a "-" in the middle of label. * The last label must start with a letter. * @@ -777,8 +777,8 @@ /** Returns true if @a string is describing a local address. * - * Uses the definitions of local addresses found in RFC1700 and - * RFC4291. + * Uses the definitions of local addresses found in RFC1700 and + * RFC4291. */ int host_is_local(char const *host) { @@ -793,10 +793,10 @@ n = span_domain(host); - return + return n >= 9 /* strlen("localhost") */ && strncasecmp(host, "localhost", 9) == 0 && - (n == 9 || + (n == 9 || ((n == 10 || /* localhost. */ n == 21 || /* strlen("localhost.localdomain") */ n == 22) && /* strlen("localhost.localdomain.") */ @@ -866,7 +866,7 @@ if (canonize) { char *tmp = buf; s = memcpy(tmp, s, len + 1); - scan_ip4_address(&tmp); + scan_ip4_address(&tmp); } if (s[len] == '\0' && su_inet_pton(AF_INET, s, addr) == 1) return (void)(*return_addrlen = 4), len; @@ -877,14 +877,14 @@ /** Compare two host names or IP addresses * - * Converts valid IP addresses to the binary format before comparing them. + * Converts valid IP addresses to the binary format before comparing them. * Note that IP6-mapped IP4 addresses and IP6-compatible IP4 addresses are * compared as IP4 addresses; that is, ::ffff:127.0.0.1, ::127.0.0.1 and * 127.0.0.1 all are all equal. * * @param a IP address or domain name * @param b IP address or domain name - * + * * @retval -1 if a < b * @retval 0 if a == b * @retval 1 if a > b Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/bnf.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/bnf.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/bnf.docs Tue Dec 16 13:05:22 2008 @@ -10,9 +10,9 @@ * * The interface used for validating hostnames and IP addresses is in * . - * + * * @CONTACT Pekka Pessi - * + * * @STATUS @SofiaSIP Core library * * @LICENSE LGPL Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/sofia-sip/bnf.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/sofia-sip/bnf.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/sofia-sip/bnf.h Tue Dec 16 13:05:22 2008 @@ -26,11 +26,11 @@ #define BNF_H /**@file sofia-sip/bnf.h - * + * * Parsing macros and prototypes for HTTP-like protocols. - * + * * @author Pekka Pessi - * + * * @date Created: Tue Jun 06 10:59:34 2000 ppessi * */ @@ -58,7 +58,7 @@ /** Line-ending characters */ #define CRLF CR LF /** Whitespace */ -#define WS SP HT +#define WS SP HT /** Linear whitespace */ #define LWS SP HT CR LF /** Lower-case alphabetic characters */ @@ -71,11 +71,11 @@ #define DIGIT "0123456789" /** RTSP safe characters */ #define SAFE "$-_." /* RTSP stuff */ -#define ALPHANUM DIGIT ALPHA +#define ALPHANUM DIGIT ALPHA #define HEX DIGIT "ABCDEF" "abcdef" /** SIP token characters. - * @note $|&^# were token chars in RFC 2543, but no more in RFC 3261. + * @note $|&^# were token chars in RFC 2543, but no more in RFC 3261. */ #define SIP_TOKEN ALPHANUM "-.!%*_+`'~" /** SIP separator characters */ @@ -109,7 +109,7 @@ #define skip_word(ss) (*(ss) += span_word(*(ss))) /** Test if @c is CR or LF */ -#define IS_CRLF(c) ((c) == '\r' || (c) == '\n') +#define IS_CRLF(c) ((c) == '\r' || (c) == '\n') /** Test if @c is linear whitespace */ #define IS_LWS(c) ((c) == ' ' || (c) == '\t' || (c) == '\r' || (c) == '\n') /*#define IS_LWS(c) ((_bnf_table[(unsigned char)(c)] & bnf_lws))*/ @@ -150,7 +150,7 @@ bnf_unreserved = bnf_alpha | bnf_mark, /**< URL unreserved */ bnf_separator = 32, /**< SIP separator */ /** SIP token, not alphabetic (0123456789-.!%*_+`'~) */ - bnf_token0 = 64 | bnf_safe, + bnf_token0 = 64 | bnf_safe, bnf_token = bnf_token0 | bnf_alpha, /**< SIP token */ bnf_param0 = 128, /**< SIP parameter, not token */ bnf_param = bnf_token | bnf_param0 /**< SIP/HTTP parameter */ @@ -171,7 +171,7 @@ /** Get number of characters before linear whitespace */ #define span_non_lws(s) strcspn(s, LWS) -/** Calculate span of a linear whitespace. +/** Calculate span of a linear whitespace. * LWS = [*WSP CRLF] 1*WSP */ su_inline isize_t span_lws(char const *s) @@ -189,73 +189,73 @@ /** Calculate span of a token or linear whitespace characters. */ su_inline isize_t span_token_lws(char const *s) { - char const *e = s; + char const *e = s; while (_bnf_table[(unsigned char)(*e)] & (bnf_token | bnf_lws)) - e++; - return e - s; + e++; + return e - s; } /** Calculate span of a token characters. */ su_inline isize_t span_token(char const *s) { - char const *e = s; + char const *e = s; while (_bnf_table[(unsigned char)(*e)] & bnf_token) - e++; - return e - s; + e++; + return e - s; } /** Calculate span of a alphabetic characters. */ su_inline isize_t span_alpha(char const *s) { - char const *e = s; + char const *e = s; while (_bnf_table[(unsigned char)(*e)] & bnf_alpha) - e++; - return e - s; + e++; + return e - s; } /** Calculate span of a digits. */ su_inline isize_t span_digit(char const *s) { - char const *e = s; + char const *e = s; while (*e >= '0' && *e <= '9') - e++; - return e - s; + e++; + return e - s; } /** Calculate span of a hex. */ su_inline isize_t span_hexdigit(char const *s) { - char const *e = s; + char const *e = s; while (IS_HEX(*e)) - e++; - return e - s; + e++; + return e - s; } /** Calculate span of characters belonging to an RTSP token */ su_inline isize_t span_alpha_digit_safe(char const *s) { - char const *e = s; + char const *e = s; while (_bnf_table[(unsigned char)(*e)] & (bnf_alpha | bnf_safe)) - e++; - return e - s; + e++; + return e - s; } /** Calculate span of a characters valid in parameters. */ su_inline isize_t span_param(char const *s) { - char const *e = s; + char const *e = s; while (IS_PARAM(*e)) - e++; - return e - s; + e++; + return e - s; } /** Calculate span of a SIP word. */ su_inline isize_t span_word(char const *s) { - char const *e = s; + char const *e = s; while (*e && (IS_TOKEN(*e) || strchr(SIP_WORD, *e))) - e++; - return e - s; + e++; + return e - s; } /** Calculate span of a unreserved characters. */ @@ -290,13 +290,13 @@ /** Reserved in URLs */ #define URL_RESERVED ";/?:=+$," -/** Non-alphanumeric characters without syntactical meaning. */ +/** Non-alphanumeric characters without syntactical meaning. */ #define URL_MARK "-_.!~*'()" -/** Unreserved characters. */ +/** Unreserved characters. */ #define URL_UNRESERVED ALPHANUM URL_MARK -/** URL hex escape. */ +/** URL hex escape. */ #define URL_ESCAPED "%" #define URL_DELIMS "<>#%\"" #define URL_UNWISE "{}|\\^[]`" Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/sofia-sip/hostdomain.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/sofia-sip/hostdomain.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/sofia-sip/hostdomain.h Tue Dec 16 13:05:22 2008 @@ -27,11 +27,11 @@ #define SOFIA_SIP_HOSTDOMAIN_H /**@file sofia-sip/hostdomain.h - * + * * Predicates for handling host names: IP addresses or domain names. - * + * * @author Pekka Pessi - * + * * @date Created: Thu Mar 9 16:15:22 EET 2006 ppessi */ @@ -51,7 +51,7 @@ SOFIAPUBFUN int host_has_domain_invalid(char const *string); SOFIAPUBFUN int host_cmp(char const *a, char const *b); -/** This is typo. @deprecated Use host_is_ip6_reference() instead. */ +/** This is typo. @deprecated Use host_is_ip6_reference() instead. */ SOFIAPUBFUN int host_ip6_reference(char const *string); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/torture_bnf.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/torture_bnf.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/bnf/torture_bnf.c Tue Dec 16 13:05:22 2008 @@ -281,7 +281,7 @@ TEST_SCAN(scan_host, "127.255.249.000.a,", "127.255.249.000.a,", ","); TEST_SCAN(scan_host, "0.00.000.000:,", "0.0.0.0", ":,"); TEST_SCAN(scan_host, "127.255.249.000,", "127.255.249.0", ","); - TEST_SCAN(scan_host, "[dead:beef:feed:ded:0:1:2:3]:1", + TEST_SCAN(scan_host, "[dead:beef:feed:ded:0:1:2:3]:1", "[dead:beef:feed:ded::1:2:3]", ":1"); TEST_SCAN(scan_host, "[::127.0.0.1]:1", "[::127.0.0.1]:1", ":1"); @@ -323,10 +323,10 @@ /* Invalid IP4 address (extra leading zeros) */ TEST_1(!host_cmp("127.0.0.1", "127.0.0.01")); /* Invalid reference (extra leading zeros) */ - TEST_1(host_cmp("[0ffff:0ffff:0ffff:0ffff:0ffff:0ffff:255.255.255.255]", + TEST_1(host_cmp("[0ffff:0ffff:0ffff:0ffff:0ffff:0ffff:255.255.255.255]", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")); #if SU_HAVE_IN6 - TEST_1(!host_cmp("[ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255]", + TEST_1(!host_cmp("[ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255]", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")); TEST_1(!host_cmp("::1", "::001")); TEST_1(!host_cmp("[::1]", "::1")); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/ChangeLog ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/ChangeLog (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/ChangeLog Tue Dec 16 13:05:22 2008 @@ -13,7 +13,7 @@ 2005-09-08 Kai Vehmanen * hide_emails.sh: Fixed bug in hiding addresses of - form foo.bar-bar at something.org. Fixed sf.net + form foo.bar-bar at something.org. Fixed sf.net bug #1277167. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.conf ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.conf (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.conf Tue Dec 16 13:05:22 2008 @@ -55,10 +55,10 @@ PDF_HYPERLINKS = YES COMPACT_LATEX = YES PAPER_TYPE = a4wide -EXTRA_PACKAGES = +EXTRA_PACKAGES = LATEX_BATCHMODE = YES -FILE_PATTERNS = *.h *.c +FILE_PATTERNS = *.h *.c EXCLUDE_PATTERNS = acconfig.h config.h confdefs.h \ test*.h test*.c torture*.c *test.c *torture.c \ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.in Tue Dec 16 13:05:22 2008 @@ -11,7 +11,7 @@ GENERATE_TAGFILE = docs.doxytags -TAGFILES = +TAGFILES = TAGFILES += su.doxytags=su TAGFILES += ipt.doxytags=ipt TAGFILES += bnf.doxytags=bnf Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Makefile.am Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ pictures/autotools.gif \ pictures/autotools.vsd \ pictures/nta-receiving-message.eps \ - pictures/nta-receiving-message.gif + pictures/nta-receiving-message.gif BUILT_SOURCES = Doxyfile.rfc Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/conformance.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/conformance.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/conformance.docs Tue Dec 16 13:05:22 2008 @@ -145,9 +145,9 @@ @ref sip_min_expires "Min-Expires", @ref sip_mime_version "MIME-Version", @ref sip_organization "Organization", - @ref sip_p_asserted_identity "P-Asserted-Identity" + @ref sip_p_asserted_identity "P-Asserted-Identity" (extension in @VERSION_1_12_7), - @ref sip_p_preferred_identity "P-Preferred-Identity" + @ref sip_p_preferred_identity "P-Preferred-Identity" (extension in @VERSION_1_12_7), @ref sip_priority "Priority", @ref sip_proxy_authenticate "Proxy-Authenticate", @@ -479,7 +479,7 @@ @RFC3325: Asserted Identity - Sofia-SIP supports + Sofia-SIP supports @ref sip_p_asserted_identity "P-Asserted-Identity" and @ref sip_p_preferred_identity "P-Preferred-Identity" headers (generating, parsing and syntax checking). Also the non-standard @@ -952,7 +952,7 @@ (generating, parsing and syntax checking). The implicit subscription is suppressed by @nua, if the @ReferSub: - true header is included in the REFER + true header is included in the REFER request (@ref nua_refer "on server side") or response (@ref nua_i_refer "on client side"). @@ -972,7 +972,7 @@ Sofia-SIP provides function sip_response_terminates_dialog() that can be used to determine the effect of error response with dialog. - + The nua UA engine uses sip_response_terminates_dialog(). @@ -1131,7 +1131,7 @@ Application must take care of: - Audio or video processing - - Generating a=rtpmap or a=fmtp lines when needed + - Generating a=rtpmap or a=fmtp lines when needed Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/docguide.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/docguide.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/docguide.docs Tue Dec 16 13:05:22 2008 @@ -1,33 +1,33 @@ /*! @page docguide Documentation Guidelines - + @section doxygen Using Doxygen Doxygen is a document generation program, used by many C/C++ projects. Its -home page is at http://www.doxygen.org. +home page is at http://www.doxygen.org. The Sofia documentation is written using Doxygen. Doxygen works by extracting the documentation data both from the actual -C/C++ source code and from the specially formatted comments. -The comments can contain some Javadoc-like - at ref doxycommands "special commands". +C/C++ source code and from the specially formatted comments. +The comments can contain some Javadoc-like + at ref doxycommands "special commands". In general the the style of the comments and documentation should follow the javadoc style guide. A Doxygen comment must either contain reference about the entity -it is describing, e.g., command +it is describing, e.g., command \@file when describing files: @verbatim /** - * @file foo.c - * + * @file foo.c + * * Implementation of foo. The foo takes care of grokking xyzzy. - * + * * @author Jaska Jokunen \n - * + * * @date Created: Wed Oct 20 15:06:51 EEST 2004 jasjoku */ @endverbatim @@ -40,7 +40,7 @@ /** * Orches a candometer. If orching candometer is not possible, it * tries to schadule hearping. - * + * * @param[in] k pointer to a candometer * @param[in] level orching level * @param[out] return_hearping return value for schaduled hearping @@ -59,15 +59,15 @@ @subsection doxyfile Doxyfile and Doxyfile.conf The doxygen options are specified through a configuration file, -Doxyfile. As a convention, a module-specific Doxyfile includes -a common file libsofia-sip-ua/docs/Doxyfile.conf. This makes it possible +Doxyfile. As a convention, a module-specific Doxyfile includes +a common file libsofia-sip-ua/docs/Doxyfile.conf. This makes it possible to keep the module-specific Doxyfiles as clean as possible: @code PROJECT_NAME = "ipt" OUTPUT_DIRECTORY = ../docs/ipt -INPUT = ipt.docs . +INPUT = ipt.docs . @INCLUDE = ../Doxyfile.conf @@ -80,7 +80,7 @@ Doxygen-generated HTML documentation is collected in @b docs subdirectory at top level. A separate output directory is created for each submodule under it. Doxytags for the module are generated in the @e -doxytags file in the output directory. +doxytags file in the output directory. @subsection module_docs Module documentation in \.docs @@ -105,7 +105,7 @@ @section ipt_overview Overview -This module contain some routines useful for IPT applications, like +This module contain some routines useful for IPT applications, like - ... - ... */ @@ -115,7 +115,7 @@ In this section we go through the most common Doxygen commands. All the commands are explained in the manual. -The commands include +The commands include - @ref doxystyle "style commands (@@a, @@b, @@c, @@e, @@em, @@p)" - @ref doxyfuncs "function parameters and return values (@@param, @@return, @@retval)" @@ -123,17 +123,17 @@ The text style can be changed with @@b @b (bold), @@c @c (code), or @@e @e (italic) commands. Function argument names use style command -@@a. +@@a. For example, a sentence "The @b Content-Type header @a ct specifies the @e media-type of the message body, e.g., @c audio/amr would be AMR-encoded audio." is produced with commands like @code -The @b Content-Type header @a ct specifies the @e media-type of +The @b Content-Type header @a ct specifies the @e media-type of the message body, e.g., @c audio/amr would be AMR-encoded audio. - at endcode + at endcode -The style commands have synonyms, e.g., @@em and @@e mean same, as +The style commands have synonyms, e.g., @@em and @@e mean same, as well as @@c and @@p. @subsection doxyfuncs Function Parameters and Return Values - @param, @return, @retval @@ -150,11 +150,11 @@ @verbatim /**Schadule hearping. - * + * * The function schadule() schadules a hearping. - * + * * @param[in] h pointer to hearping - * + * * @retval 0 hearping was successful * @retval -1 an error occurred */ @@ -170,12 +170,12 @@ commands. @verbatim /**Destroy a hearping. - * + * * The function hearping_destroy() deinitializes a hearping and - * reclaims the memory allocated for it. - * + * reclaims the memory allocated for it. + * * @param[in,out] h pointer to pointer to hearping - * + * * The function clears the pointer to hearping, so it must be called * with a pointer to pointer: * @code @@ -204,7 +204,7 @@ When the structure of the documentation does not follow directory or file structure, it is possible to use grouping commands @@defgroup and @@ingroup. The command @@defgroup creates a group, and @@ingroup adds an entry to an -group. +group. @subsection doclinking Creating Links @@ -215,7 +215,7 @@ variable is prefixed with hash @#, Doxygen creates a link to it. It is also possible to create links with freely selected link to -documentation entries with @@link and @@endlink commands. +documentation entries with @@link and @@endlink commands. When the link target is a named page, section, or subsection, it is possible to use the @@ref command. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/mainpage.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/mainpage.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/mainpage.docs Tue Dec 16 13:05:22 2008 @@ -8,39 +8,39 @@ for Sofia-SIP components. Some introductory material and pointers to the example code are also included. -For a list of module specific pages, see @ref subdirs +For a list of module specific pages, see @ref subdirs "source tree structure" or direct links to submodules:
-nua -su -features -soa -sdp -nta -tport -sresolv -sip -msg -url -stun -iptsec -nea -nth -http -bnf -ipt +nua +su +features +soa +sdp +nta +tport +sresolv +sip +msg +url +stun +iptsec +nea +nth +http +bnf +ipt @section who Contact Information -You can download latest Sofia SIP from the project -home page at +You can download latest Sofia SIP from the project +home page at Sourceforge.net. Please contact us if you have questions regarding this software: -
    +
    • Pekka Pessi
    • Kai Vehmanen
    • -
    +
Or post to the Sofia-SIP mailing list: @@ -68,7 +68,7 @@ SIP Signaling: - "nua" - SIP User Agent library - "nea" - SIP Event API - - "iptsec" - + - "iptsec" - Digest authentication for HTTP and SIP - "nta" - SIP transaction engine - "tport" - Message transport @@ -103,7 +103,7 @@ formatting within Sofia-SIP. The guidelines include identifier naming conventions, indenting convention, and tool usage directions. -Please note that C style is always a matter of taste. +Please note that C style is always a matter of taste. @section naming Naming Conventions @@ -177,7 +177,7 @@ -saw -nsc -nsob -nss @endcode -Loops without condition use @c for @c (;;) instead of @c while @c (1). +Loops without condition use @c for @c (;;) instead of @c while @c (1). @code for (;;) { @@ -220,7 +220,7 @@ wrapper interface. SU module handles abstraction to OS specific functionality such as -memory management, sockets, threads and time functions. +memory management, sockets, threads and time functions. @subsection ansi_99 ANSI C 99 features @@ -322,7 +322,7 @@ If compiler decides to pack this structure, this code generates a structure that has @a bar and @a foo in the first seven bits, and then - at a something beginning from the next 32 bit boundary. + at a something beginning from the next 32 bit boundary. One problem arises when using packed bit-fields: on ARM it is generally not possible to access a 32 bit field that does not start from @@ -348,9 +348,9 @@ @section file_organization File and Directory Structure A Sofia-SIP library module can be defined as a subdirectory under the -libsofia-sip-ua directory hierarchy that contains a file \.docs -(where the \ of course referes to the actual name of -the module). +libsofia-sip-ua directory hierarchy that contains a file \.docs +(where the \ of course referes to the actual name of +the module). In case you like to start developing a new module, please contact Sofia-SIP development team so that they can help you to set up @@ -364,16 +364,16 @@ Contains any pictures/images that are needed by the module documentation. The file formats to use are GIF (for html pages) and - EPS (for latex). If some program (e.g. MS Visio) is + EPS (for latex). If some program (e.g. MS Visio) is used to create the pictures, also the original files must be stored here.\n (Note that old modules may have "images" subdirectory instead of "pictures") - files Makefile.am \n See section @ref build "dealing with GNU Autotools" below. - - (optionally) source code file(s) of the module and module tests. + - (optionally) source code file(s) of the module and module tests. The source code file(s) can also be located in subdirectories if necesary. - + @section oo_with_c Writing Object-Oriented Code @@ -423,17 +423,17 @@ @subsection oo_derived Inheritance and Derived Objects -Inheritance is a object-oriented practice that has limited use in Sofia. +Inheritance is a object-oriented practice that has limited use in Sofia. Most common example of inheritance is use of #su_home_t. Many objects are derived from #su_home_t, which means that they can use the various -home-based memory management functions from . +home-based memory management functions from . In this sence, inheritance means that a pointer to a derived object can be casted as a pointer to a base object. In other words, the derived object must have the base object at the beginning of its memory area: @code -struct derived +struct derived { struct base base[1]; int extra; @@ -452,19 +452,19 @@ @subsection oo_templates Templates -There are a few template types implemented as macros in Sofia libraries. +There are a few template types implemented as macros in Sofia libraries. They include hash table, defined in , which can be used to define hash tables types and accessor functions for different object, and red-black tree, defined in . @section memory Memory Management -The home-based memory management is useful when a lot of memory blocks are -allocated for given task. The allocations are done via the memory home, -which keeps a reference to each allocated memory block. When the memory -home is then freed, it will free all memory blocks to which it has -reference. This simplifies application logic because application code does -not need to keep track of the allocated memory and free every allocated block +The home-based memory management is useful when a lot of memory blocks are +allocated for given task. The allocations are done via the memory home, +which keeps a reference to each allocated memory block. When the memory +home is then freed, it will free all memory blocks to which it has +reference. This simplifies application logic because application code does +not need to keep track of the allocated memory and free every allocated block separately. See documentation of and @ref su_alloc "memory managment tutorial" @@ -502,8 +502,8 @@ @subsection combining Combining allocations Another place where home-based memory management makes programmers -life easier is case where a sub-procedure makes multiple memory allocations -and, in case the sub-procedure fails, all the allocations must be released +life easier is case where a sub-procedure makes multiple memory allocations +and, in case the sub-procedure fails, all the allocations must be released and, in case the sub-procedure is succesfull, all allocations must be controlled by upper level memory management. @@ -522,7 +522,7 @@ } /* destroy temporary memory home (and registered allocations) */ /* Note than in case processing was succesfull the memory */ - /* registrations were already moved to upper level home. */ + /* registrations were already moved to upper level home. */ su_home_deinit(temphome); /* return ok/not-ok */ @@ -542,9 +542,9 @@ - valid args - not valid args - Aim for 100% line coverage\n - (If there is a line of code that you have not tested, you don't know + (If there is a line of code that you have not tested, you don't know if its working.) \n - For selected part of code you should also aim for + For selected part of code you should also aim for 100% branch/path coverage.\n But be anyway reasonable with these because in practise complete coverage is next to impossible to achive (so 80% is ok in practise). @@ -573,13 +573,13 @@ Each test program should either return zero for success or a non-zero error code in its main function. Now when you run "make check", - at b my_test_foo and @b my_test_bar will be built and then run. + at b my_test_foo and @b my_test_bar will be built and then run. Make will print a -summary of how the tests went. As these tests are run from the build -system, the tests must be non-interactive (no questions asked) and not +summary of how the tests went. As these tests are run from the build +system, the tests must be non-interactive (no questions asked) and not rely on any files that are not in version control system. -Sofia SIP's top-level makefile contains a recursive check target, so +Sofia SIP's top-level makefile contains a recursive check target, so you can use "cd sofia-sip ; make check" to run all the existing tests with a single command. @@ -594,7 +594,7 @@ developer.gnome.org. Autobook provides more detailed documentation for autoconf and automake. -The GNU make manual +The GNU make manual is also a good source of information. @subsection autogen_sh autogen.sh @@ -629,14 +629,14 @@ @subsection aclocal_m4 aclocal.m4 -The aclocal.m4 contains the definitions of the autoconf macros used in +The aclocal.m4 contains the definitions of the autoconf macros used in @b configure.ac. This file is generated by aclocal command. @subsection Makefile_am Makefile.am -Makefile.am is where you define what programs and libraries should +Makefile.am is where you define what programs and libraries should be built, and also what source files are needed to create them. When you run automake, it creates the file Makefile.in. @@ -644,12 +644,12 @@ @subsection configure configure -When you run configure script, it performs all the checks defined in - at b configure.ac and then replaces all @b xxx.in files with equivalent - at b xxx files. All @c @@FOO@@ variables in the source @b *.in files are +When you run configure script, it performs all the checks defined in + at b configure.ac and then replaces all @b xxx.in files with equivalent + at b xxx files. All @c @@FOO@@ variables in the source @b *.in files are replaced with values found during the configuration process. For instance -the variable @c @@srcdir@@ in @b Makefile.in is replaced in @b Makefile -with the source directory path (useful when compiling outside the main +the variable @c @@srcdir@@ in @b Makefile.in is replaced in @b Makefile +with the source directory path (useful when compiling outside the main source tree). This file is generated by autoconf command. @@ -658,14 +658,14 @@ This script stores the last parameters given to configre command. If necessary you can rerun the last given configure script (with given -parameters) by using command "./config.status -r" or +parameters) by using command "./config.status -r" or "./config.status --recheck". This file is generated by configure script. @subsection config_cache config.cache -This file contains results of the various checks that configure script +This file contains results of the various checks that configure script performed. In case the configure script failed, you might try to delete this file and run the configure script again. @@ -673,8 +673,8 @@ @subsection Makefile Makefile -The @b Makefile contains the actual rules how to build the target -libraries and program. It is used by the @c make program. @b Makefile +The @b Makefile contains the actual rules how to build the target +libraries and program. It is used by the @c make program. @b Makefile is generated from @b Makefile.in when you run @c autoconf command. Ensure that "make dist" and "make install" targets work. @@ -726,7 +726,7 @@ - 7 SU_DEBUG_7() - media protocol actions (incoming packets, ...) - 9 SU_DEBUG_9() - entering/exiting functions, very verbatim progress -In addition to the macros mentioned above, there is also functions for +In addition to the macros mentioned above, there is also functions for printing logging messages: - su_llog(), su_vllog() - su_perror(), su_perror2() Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/features/features.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/features/features.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/features/features.c Tue Dec 16 13:05:22 2008 @@ -43,15 +43,15 @@ */ char const * const sofia_sip_name_version = SOFIA_SIP_NAME_VERSION; -/** The name and version of software package providing S/MIME functionality, +/** The name and version of software package providing S/MIME functionality, * NULL if none. */ char const * sofia_sip_has_smime; -/** The name and version of software package providing TLS functionality, - * NULL if none. - * +/** The name and version of software package providing TLS functionality, + * NULL if none. + * * TLS over TCP is used as transport for SIP messages when using SIPS * scheme. Using TLS over TCP with SIP is described in @RFC3261. */ @@ -61,16 +61,16 @@ char const * sofia_sip_has_tls; #endif -/** The name and version of software package providing DTLS functionality, - * NULL if none. +/** The name and version of software package providing DTLS functionality, + * NULL if none. * * DTLS or TLS over datagram transport (UDP) can be used as transport for * SIP messages. */ char const * sofia_sip_has_dtls; -/** The name and version of software package providing TLS over SCTP functionality, - * NULL if none. +/** The name and version of software package providing TLS over SCTP functionality, + * NULL if none. * * TLS over SCTP can be used as transport for SIP messages. */ @@ -80,8 +80,8 @@ #include #endif -/** The name and version of software package providing SigComp functionality, - * NULL if none. +/** The name and version of software package providing SigComp functionality, + * NULL if none. * * SigComp can be used to compress SIP messages. */ @@ -91,8 +91,8 @@ char const * sofia_sip_has_sigcomp; #endif -/** The name and version of software package providing STUN functionality, - * NULL if none. +/** The name and version of software package providing STUN functionality, + * NULL if none. * * STUN is a protocol used to traverse NATs with UDP. */ @@ -103,21 +103,21 @@ char const * sofia_sip_has_stun; #endif -/** The name and version of software package providing TURN functionality, - * NULL if none. +/** The name and version of software package providing TURN functionality, + * NULL if none. * * TURN is a protocol used to traverse NATs or firewalls with TCP or UDP. */ char const * sofia_sip_has_turn; -/** The name and version of software package providing UPnP functionality, - * NULL if none. +/** The name and version of software package providing UPnP functionality, + * NULL if none. * * UPnP (Universal Plug and Play) can be used to traverse NATs or firewalls. */ char const * sofia_sip_has_upnp; -/** The name and version of software package providing SCTP functionality, +/** The name and version of software package providing SCTP functionality, * NULL if none. * * SCTP can be used as transport for SIP messages. The software providing it @@ -126,7 +126,7 @@ char const * sofia_sip_has_sctp; /* We don't have viable SCTP transport interface */ -/** The name and version of software package providing IPv6 functionality, +/** The name and version of software package providing IPv6 functionality, * NULL if none. * * IPv6 can be used to send SIP messages. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/features/features.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/features/features.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/features/features.docs Tue Dec 16 13:05:22 2008 @@ -22,8 +22,8 @@ installed @a libsofia-sip-ua.so library. The macro #SOFIA_SIP_NAME_VERSION contains the name and release of currently available include files. -The Sofia SIP binary API hides some protocols used under the SIP stack. -While the binary API stays the same, the features are not necessarily there. +The Sofia SIP binary API hides some protocols used under the SIP stack. +While the binary API stays the same, the features are not necessarily there. These features are mainly related to encryption, compression and underlying transports. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Doxyfile.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Doxyfile.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Doxyfile.in Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ PROJECT_NAME = "http" OUTPUT_DIRECTORY = ../docs/html/http -INPUT = @srcdir@/http.docs @srcdir@/sofia-sip sofia-sip @srcdir@ . +INPUT = @srcdir@/http.docs @srcdir@/sofia-sip sofia-sip @srcdir@ . @INCLUDE_PATH = . @srcdir@ @INCLUDE = ../docs/Doxyfile.conf Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/Makefile.am Tue Dec 16 13:05:22 2008 @@ -29,12 +29,12 @@ sofia-sip/http_parser.h sofia-sip/http_tag_class.h \ sofia-sip/http_status.h sofia-sip/http_hclasses.h -BUILT_H = sofia-sip/http_protos.h sofia-sip/http_tag.h +BUILT_H = sofia-sip/http_protos.h sofia-sip/http_tag.h BUILT_C = http_tag.c http_parser_table.c BUILT_SOURCES = $(BUILT_H) $(BUILT_C) http_tag_ref.c -nobase_include_sofia_HEADERS = $(BUILT_H) $(PUBLIC_H) +nobase_include_sofia_HEADERS = $(BUILT_H) $(PUBLIC_H) libhttp_la_SOURCES = $(INTERNAL_H) \ http_parser.c http_header.c \ @@ -77,7 +77,7 @@ ${BUILT_H} ${BUILT_C}: ${srcdir}/sofia-sip/http.h ${MSG_PARSER_AWK} -sofia-sip/http_protos.h: ${srcdir}/sofia-sip/http_protos.h.in +sofia-sip/http_protos.h: ${srcdir}/sofia-sip/http_protos.h.in @-mkdir sofia-sip 2>/dev/null || true ${AWK_HTTP_AWK} PR=$@ TEMPLATE=${srcdir}/sofia-sip/http_protos.h.in ${SS_HTTP_H} Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http.docs Tue Dec 16 13:05:22 2008 @@ -26,13 +26,13 @@ * - @c http_X_t is the structure used to store parsed header, * - @c HTTP_X_INIT() initializes a static instance of http_X_t, * - @c http_X_p() tests if header object is instance of header X, - * - @c http_X_make() is a macro that creates a header X object by + * - @c http_X_make() is a macro that creates a header X object by decoding given string, - * - @c http_X_dup() duplicates (deeply copies) the header X (macro), + * - @c http_X_dup() duplicates (deeply copies) the header X (macro), * - @c http_X_copy() is a macro that copies the header X (macro), - * - @c #msg_hclass_t http_X_class[] contains the @em header @em class + * - @c #msg_hclass_t http_X_class[] contains the @em header @em class * for header X. - * + * * In addition to this interface, the parser provider interface is * documented in the SIP Parser module. * The parser provider interface makes it possible to extend HTTP parser with Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_basic.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_basic.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_basic.c Tue Dec 16 13:05:22 2008 @@ -197,7 +197,7 @@ if (msg_firstline_d(s, &status, &phrase) < 0 || http_version_d(&s, &st->st_version) < 0 || *s || - msg_uint32_d(&status, &code) == -1 || + msg_uint32_d(&status, &code) == -1 || status[0]) return -1; @@ -341,7 +341,7 @@ #define http_authentication_info_dup_one msg_list_dup_one msg_hclass_t http_authentication_info_class[] = -HTTP_HEADER_CLASS(authentication_info, "Authentication-Info", +HTTP_HEADER_CLASS(authentication_info, "Authentication-Info", ai_params, list, authentication_info); /* ====================================================================== */ @@ -427,7 +427,7 @@ /**@ingroup http_content_range * @typedef typedef struct http_content_range_s http_content_range_t; * - * The structure #http_content_range_t contains representation of + * The structure #http_content_range_t contains representation of * @b Content-Range header. * * The #http_content_range_t is defined as follows: @@ -652,7 +652,7 @@ HTTP_HEADER_CLASS(expires, "Expires", d_common, single, default); /* ====================================================================== */ -/**@HTTP_HEADER http_from From header. +/**@HTTP_HEADER http_from From header. * * @code * From = "From" ":" mailbox @@ -773,7 +773,7 @@ /**@ingroup http_if_modified_since * @typedef typedef struct http_if_modified_since_s http_if_modified_since_t; * - * The structure #http_if_modified_since_t contains representation of + * The structure #http_if_modified_since_t contains representation of * @b If-Modified-Since header. * * The #http_if_modified_since_t is defined as follows: @@ -790,7 +790,7 @@ #define http_if_modified_since_e http_date_e msg_hclass_t http_if_modified_since_class[] = -HTTP_HEADER_CLASS(if_modified_since, "If-Modified-Since", +HTTP_HEADER_CLASS(if_modified_since, "If-Modified-Since", d_common, single, default); /* ====================================================================== */ @@ -802,7 +802,7 @@ HTTP_HEADER_CLASS_LIST(if_none_match, "If-None-Match", list); /* ====================================================================== */ -/**@HTTP_HEADER http_if_range If-Range header. +/**@HTTP_HEADER http_if_range If-Range header. * * The @b If-Range header is used when a client has a partial copy of an * entity in its cache, and wishes to have an up-to-date copy of the entire @@ -813,7 +813,7 @@ * @code * If-Range = "If-Range" ":" ( entity-tag / HTTP-date ) * @endcode - */ + */ /** Parse If-Range header */ issize_t http_if_range_d(su_home_t *home, http_header_t *h, char *s, isize_t slen) @@ -892,7 +892,7 @@ /**@ingroup http_if_unmodified_since * @typedef typedef http_date_t http_if_unmodified_since_t; * - * The structure #http_if_unmodified_since_t contains representation of + * The structure #http_if_unmodified_since_t contains representation of * @b If-Unmodified-Since header. * * The #http_if_unmodified_since_t is defined as follows: @@ -909,7 +909,7 @@ #define http_if_unmodified_since_e http_date_e msg_hclass_t http_if_unmodified_since_class[] = -HTTP_HEADER_CLASS(if_unmodified_since, "If-Unmodified-Since", +HTTP_HEADER_CLASS(if_unmodified_since, "If-Unmodified-Since", d_common, single, default); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_extra.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_extra.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_extra.c Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ * */ -/**@CFILE http_extra.c +/**@CFILE http_extra.c * * Extra HTTP headers * @@ -162,7 +162,7 @@ } else { s += strcspn(s, ",;" LWS); - if (s == v) + if (s == v) return -1; } @@ -352,7 +352,7 @@ /* Special cases from Netscape spec */ if (LOOKING_AT(s, "expires=")) { - msg_time_t value; + msg_time_t value; msg_date_d((char const **)&rest, &value); } else if (LOOKING_AT(s, "path=/")) { for (;;) { @@ -366,8 +366,8 @@ } #undef LOOKING_AT - if (IS_LWS(*rest)) { - *rest++ = '\0'; skip_lws(&rest); + if (IS_LWS(*rest)) { + *rest++ = '\0'; skip_lws(&rest); } return rest - s; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_header.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_header.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_header.c Tue Dec 16 13:05:22 2008 @@ -88,7 +88,7 @@ msg_fragment_clear(http->http_content_length->l_common); } } - + if (!http->http_separator) http->http_separator = http_separator_create(home); @@ -118,13 +118,13 @@ /** Add a Content-Length and separator to a message */ int http_message_complete(msg_t *msg, http_t *http) -{ +{ #if 1 if (!http->http_content_length) { http_content_length_t *l; http_payload_t *pl; size_t len = 0; - + for (pl = http->http_payload; pl; pl = pl->pl_next) len += pl->pl_len; @@ -148,8 +148,8 @@ } /** Add headers from the request to the response message. */ -int http_complete_response(msg_t *msg, - int status, char const *phrase, +int http_complete_response(msg_t *msg, + int status, char const *phrase, http_t const *request) { su_home_t *home = msg_home(msg); @@ -210,7 +210,7 @@ return h->sh_class->hc_print(b, bsiz, h, flags); } -http_header_t *http_header_format(su_home_t *home, +http_header_t *http_header_format(su_home_t *home, msg_hclass_t *hc, char const *fmt, ...) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_parser.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_parser.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_parser.c Tue Dec 16 13:05:22 2008 @@ -75,7 +75,7 @@ #define CRLF_TEST(s) \ (((s)[0]) == '\r' ? (((s)[1]) == '\n') + 1 : ((s)[0])=='\n') -/** Extract the HTTP message body, including separator line. +/** Extract the HTTP message body, including separator line. * * @retval -1 error * @retval 0 cannot proceed @@ -98,7 +98,7 @@ if (!eos && (bsiz == 0 || (bsiz == 1 && b[0] == '\r'))) return 0; - m = CRLF_TEST(b); + m = CRLF_TEST(b); assert(m > 0 || eos); /* We should be looking at an empty line */ @@ -143,7 +143,7 @@ */ http->http_transfer_encoding->k_items && http->http_transfer_encoding->k_items[0] && - strcasecmp(http->http_transfer_encoding->k_items[0], + strcasecmp(http->http_transfer_encoding->k_items[0], "identity") != 0) { http->http_flags |= MSG_FLG_CHUNKS; @@ -162,16 +162,16 @@ body_len = http->http_content_length->l_length; /* We cannot parse multipart/byteranges ... */ else if (http->http_content_type && http->http_content_type->c_type && - strcasecmp(http->http_content_type->c_type, "multipart/byteranges") + strcasecmp(http->http_content_type->c_type, "multipart/byteranges") == 0) return -1; else if (MSG_IS_MAILBOX(flags)) /* message fragments */ body_len = 0; - else if (http->http_request) + else if (http->http_request) body_len = 0; else if (eos) body_len = bsiz; - else + else return 0; /* XXX */ if (body_len == 0) { @@ -198,7 +198,7 @@ return m; } -/** Extract a chunk. +/** Extract a chunk. * * @retval -1 error * @retval 0 cannot proceed @@ -210,7 +210,7 @@ unsigned crlf, chunk_len; char *b0 = b, *s; union { - msg_header_t *header; + msg_header_t *header; msg_payload_t *chunk; } h = { NULL }; size_t bsiz0 = bsiz; @@ -234,15 +234,15 @@ assert(crlf < bsiz); /* Skip crlf */ - b += crlf; bsiz -= crlf; + b += crlf; bsiz -= crlf; } /* Now, looking at the chunk header */ - n = strcspn(b, CRLF); - if (!eos && n == bsiz) + n = strcspn(b, CRLF); + if (!eos && n == bsiz) return 0; crlf = CRLF_TEST(b + n); - + if (n == 0) { if (crlf == bsiz && eos) { msg_mark_as_complete(msg, MSG_FLG_COMPLETE | MSG_FLG_FRAGS); @@ -267,7 +267,7 @@ crlf = bsiz > 0 ? CRLF_TEST(b) : 0; - if ((eos && bsiz == 0) || crlf == 2 || + if ((eos && bsiz == 0) || crlf == 2 || (crlf == 1 && (bsiz > 1 || b[0] == '\n'))) { /* Shortcut - We got empty trailers */ b += crlf; @@ -285,7 +285,7 @@ b += n + crlf, bsiz -= n + crlf; /* Extract chunk */ - chunk = msg_extract_payload(msg, http, + chunk = msg_extract_payload(msg, http, &h.header, chunk_len + (b - b0), b0, bsiz0, eos); @@ -294,7 +294,7 @@ h.chunk->pl_data += (b - b0); h.chunk->pl_len -= (b - b0); } - + return chunk; } } @@ -312,12 +312,12 @@ char const *result; int const version_size = sizeof(http_version_1_1) - 1; - if (strncasecmp(s, http_version_1_1, version_size) == 0 && + if (strncasecmp(s, http_version_1_1, version_size) == 0 && !IS_TOKEN(s[version_size])) { result = http_version_1_1; s += version_size; } - else if (strncasecmp(s, http_version_1_0, version_size) == 0 && + else if (strncasecmp(s, http_version_1_0, version_size) == 0 && !IS_TOKEN(s[version_size])) { result = http_version_1_0; s += version_size; @@ -348,7 +348,7 @@ memmove(s + l1 + 1, s + n - l2, l2); s[l1 + 1 + l2] = 0; - /* Compare again with compacted version */ + /* Compare again with compacted version */ if (strcasecmp(s, http_version_1_1) == 0) result = http_version_1_1; else if (strcasecmp(s, http_version_1_0) == 0) @@ -359,10 +359,10 @@ } while (IS_LWS(*s)) *s++ = '\0'; - + *ss = s; - if (ver) + if (ver) *ver = result; return 0; @@ -454,7 +454,7 @@ #define MATCH(s, m) (strncasecmp(s, m, n = sizeof(m) - 1) == 0) - if (c >= 'a' && c <= 'z') + if (c >= 'a' && c <= 'z') c += 'A' - 'a'; switch (c) { @@ -463,7 +463,7 @@ case 'G': if (MATCH(s, "GET")) code = http_method_get; break; case 'H': if (MATCH(s, "HEAD")) code = http_method_head; break; case 'O': if (MATCH(s, "OPTIONS")) code = http_method_options; break; - case 'P': if (MATCH(s, "POST")) code = http_method_post; + case 'P': if (MATCH(s, "POST")) code = http_method_post; else if (MATCH(s, "PUT")) code = http_method_put; break; case 'T': if (MATCH(s, "TRACE")) code = http_method_trace; break; @@ -510,7 +510,7 @@ * query. For each key, a query element (in the form name=value) is searched * from the query string. If a query element has a beginning matching with * the key, a copy of the rest of the element is returned in corresponding - * return_value argument. + * return_value argument. * * @note The @a query string will be modified. * @@ -538,15 +538,15 @@ valuelen = namelen + strcspn(q + namelen, "&"); q_next = q + valuelen; - if (*q_next) + if (*q_next) *q_next++ = '\0'; - value = q + namelen; + value = q + namelen; has_value = (*value) != '\0'; /* is the part in form of name=value? */ if (has_value) *value++ = '\0'; - name = url_unescape(q, q); + name = url_unescape(q, q); if (has_value) { namelen = strlen(name); @@ -570,4 +570,4 @@ } return N; -} +} Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_parser_table.c.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_parser_table.c.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_parser_table.c.in Tue Dec 16 13:05:22 2008 @@ -31,7 +31,7 @@ */ /**@internal - * @CFILE http_parser_table.c + * @CFILE http_parser_table.c * @brief HTTP parser table * * #AUTO# Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_status.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_status.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_status.c Tue Dec 16 13:05:22 2008 @@ -79,7 +79,7 @@ char const *http_status_phrase(int status) { - if (status < 100 || status > 699) + if (status < 100 || status > 699) return NULL; switch (status) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_tag.c.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_tag.c.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_tag.c.in Tue Dec 16 13:05:22 2008 @@ -1,4 +1,4 @@ -/**@HTTP +/**@HTTP * @IFILE http_tag.c.in * * Template for . @@ -35,7 +35,7 @@ * This file is autogenerated from . * * #AUTO# - * + * * @author Pekka Pessi */ @@ -58,7 +58,7 @@ tag_typedef_t httptag_http = HTTPMSGTAG_TYPEDEF(http); tag_typedef_t httptag_version = STRTAG_TYPEDEF(version); -tag_typedef_t httptag_header = +tag_typedef_t httptag_header = {{ TAG_NAMESPACE, "header", httphdrtag_class, 0 }}; tag_typedef_t httptag_header_str = STRTAG_TYPEDEF(header_str); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_tag_class.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_tag_class.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/http_tag_class.c Tue Dec 16 13:05:22 2008 @@ -49,7 +49,7 @@ #include #include -tag_class_t httphdrtag_class[1] = +tag_class_t httphdrtag_class[1] = {{ sizeof(httphdrtag_class), /* tc_next */ NULL, @@ -65,7 +65,7 @@ /* tc_scan */ msghdrtag_scan, }}; -tag_class_t httpstrtag_class[1] = +tag_class_t httpstrtag_class[1] = {{ sizeof(httpstrtag_class), /* tc_next */ NULL, @@ -81,7 +81,7 @@ /* tc_scan */ msghdrtag_scan, }}; -tag_class_t httpmsgtag_class[1] = +tag_class_t httpmsgtag_class[1] = {{ sizeof(httpmsgtag_class), /* tc_next */ NULL, @@ -100,7 +100,7 @@ /** Filter a HTTP header structure. */ tagi_t *httptag_filter(tagi_t *dst, tagi_t const f[], - tagi_t const *src, + tagi_t const *src, void **bb) { tagi_t stub[2] = {{ NULL }}; @@ -152,7 +152,7 @@ } } -/** Duplicate headers from taglist and add them to the HTTP message. +/** Duplicate headers from taglist and add them to the HTTP message. * * Return the number of headers added to the HTTP message. */ @@ -209,8 +209,8 @@ else if (tag == httptag_header_str) { if (msg_header_add_str(msg, http, (char const *)value) < 0) break; - } - else + } + else continue; retval++; @@ -218,7 +218,7 @@ ta_end(ta); - if (t) + if (t) return -1; return retval; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http.h Tue Dec 16 13:05:22 2008 @@ -26,10 +26,10 @@ /** Defined when has been included. */ #define HTTP_H -/**@file sofia-sip/http.h - * +/**@file sofia-sip/http.h + * * HTTP message, methods, headers. - * + * * @sa RFC 2616 * * @author Pekka Pessi . @@ -50,7 +50,7 @@ SOFIA_BEGIN_DECLS /* ---------------------------------------------------------------------- - * 1) Constants + * 1) Constants */ #define HTTP_NONE ((http_header_t *)MSG_HEADER_NONE) @@ -161,9 +161,9 @@ typedef msg_error_t http_error_t; /** Unknown header. */ typedef msg_generic_t http_unknown_t; -/** Separator line between headers and message contents */ +/** Separator line between headers and message contents */ typedef msg_separator_t http_separator_t; -/** Entity-body */ +/** Entity-body */ typedef msg_payload_t http_payload_t; /** Time in seconds since 01-Jan-1900. */ typedef unsigned long http_time_t; @@ -327,7 +327,7 @@ unsigned http_size; /**< Size of this structure */ int http_flags; /**< Flags */ http_error_t *http_error; /**< Erroneous headers */ - + http_request_t *http_request; /**< Request line */ http_status_t *http_status; /**< Status line */ @@ -389,19 +389,19 @@ /* === Headers end here */ http_header_t *http_unknown; /**< Unknown headers. */ - http_separator_t *http_separator; + http_separator_t *http_separator; /**< Separator between message and payload */ http_payload_t *http_payload; /**< Message entity-body */ }; /**Union representing any HTTP header. - * + * * Each different header is an array of size 1. - * + * * @deprecated */ union http_header_u { - msg_common_t sh_common[1]; + msg_common_t sh_common[1]; struct { msg_common_t shn_common; http_header_t *shn_next; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_hclasses.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_hclasses.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_hclasses.h Tue Dec 16 13:05:22 2008 @@ -28,9 +28,9 @@ /**@file sofia-sip/http_hclasses.h * @brief HTTP header classes. - * + * * @author Pekka Pessi - * + * */ #ifndef MSG_TYPES_H Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_header.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_header.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_header.h Tue Dec 16 13:05:22 2008 @@ -26,7 +26,7 @@ /** Defined when has been included.*/ #define HTTP_HEADER_H -/**@file sofia-sip/http_header.h +/**@file sofia-sip/http_header.h * * HTTP library prototypes. * @@ -85,13 +85,13 @@ /** HTTP 1.0 */ SOFIAPUBVAR char const http_version_1_0[]; -/** HTTP 1.1 version. */ +/** HTTP 1.1 version. */ SOFIAPUBVAR char const http_version_1_1[]; #define HTTP_VERSION_CURRENT http_version_1_1 /* ---------------------------------------------------------------------- - * 3) Prototypes + * 3) Prototypes */ /** HTTP parser description. */ @@ -123,7 +123,7 @@ /** Add required headers to the response message */ SOFIAPUBFUN int http_complete_response(msg_t *msg, - int status, char const *phrase, + int status, char const *phrase, http_t const *request); /** Return string corresponding to the method. */ @@ -139,9 +139,9 @@ SOFIAPUBFUN int http_header_remove(msg_t *msg, http_t *http, http_header_t *h); SOFIAPUBFUN char const *http_header_name(http_header_t const *h, int compact); SOFIAPUBFUN void *http_header_data(http_header_t *h); -SOFIAPUBFUN http_content_length_t *http_content_length_create(su_home_t *home, +SOFIAPUBFUN http_content_length_t *http_content_length_create(su_home_t *home, uint32_t n); -SOFIAPUBFUN http_payload_t *http_payload_create(su_home_t *home, +SOFIAPUBFUN http_payload_t *http_payload_create(su_home_t *home, void const *data, usize_t len); SOFIAPUBFUN http_separator_t *http_separator_create(su_home_t *home); #endif @@ -164,7 +164,7 @@ char const *version); /** Create an @b Host header object. */ -SOFIAPUBFUN http_host_t *http_host_create(su_home_t *home, +SOFIAPUBFUN http_host_t *http_host_create(su_home_t *home, char const *host, char const *port); @@ -184,7 +184,7 @@ ...); /* ---------------------------------------------------------------------- - * 4) Inlined functions + * 4) Inlined functions */ #if SU_HAVE_INLINE @@ -213,13 +213,13 @@ * @param http HTTP message structure to which header is added * @param h list of header(s) to be added */ -su_inline +su_inline int http_header_insert(msg_t *msg, http_t *http, http_header_t *h) { return msg_header_insert(msg, (msg_pub_t *)http, (msg_header_t *)h); } -/** Remove a header from a HTTP message. */ +/** Remove a header from a HTTP message. */ su_inline int http_header_remove(msg_t *msg, http_t *http, http_header_t *h) { @@ -243,19 +243,19 @@ return h && h != HTTP_NONE ? h->sh_class->hc_size + (char *)h : NULL; } -su_inline +su_inline http_content_length_t *http_content_length_create(su_home_t *home, uint32_t n) { return msg_content_length_create(home, n); } -su_inline +su_inline http_payload_t *http_payload_create(su_home_t *home, void const *data, isize_t len) { return msg_payload_create(home, data, len); } -su_inline +su_inline http_separator_t *http_separator_create(su_home_t *home) { return msg_separator_create(home); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_parser.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_parser.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_parser.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef HTTP_PARSER_H /**Defined when has been included.*/ -#define HTTP_PARSER_H +#define HTTP_PARSER_H /**@file sofia-sip/http_parser.h * @brief Typedefs and prototypes used by HTTP parser. * @@ -102,7 +102,7 @@ char const *name); /** Extract HTTP message body */ -SOFIAPUBFUN issize_t http_extract_body(msg_t *, http_t *, +SOFIAPUBFUN issize_t http_extract_body(msg_t *, http_t *, char b[], isize_t bsiz, int eos); SOFIA_END_DECLS Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_protos.h.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_protos.h.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_protos.h.in Tue Dec 16 13:05:22 2008 @@ -32,12 +32,12 @@ /** Defined when has been included. */ #define HTTP_PROTOS_H -/**@file sofia-sip/http_protos.h +/**@file sofia-sip/http_protos.h * * Macros for each HTTP header. * * #AUTO# - * + * * @author Pekka Pessi */ @@ -61,18 +61,18 @@ /**@addtogroup http_#xxxxxx#*/ /** @{ */ -enum { +enum { /** Hash of #xxxxxxx_xxxxxxx#. @internal*/ - http_#xxxxxx#_hash = #hash# + http_#xxxxxx#_hash = #hash# }; /**Header class for HTTP #xxxxxxx_xxxxxxx#. - * + * * The header class http_#xxxxxx#_class defines how a HTTP * #xxxxxxx_xxxxxxx# is parsed and printed. It also * contains methods used by HTTP parser and other functions * to manipulate the http_#xxxxxx#_t header structure. - * + * */ SOFIAPUBVAR msg_hclass_t http_#xxxxxx#_class[]; @@ -85,28 +85,28 @@ SOFIAPUBFUN msg_print_f http_#xxxxxx#_e; /**Initializer for structure http_#xxxxxx#_t. - * + * * A static http_#xxxxxx#_t structure must be initialized * with the HTTP_#XXXXXX#_INIT() macro. For instance, - * @code - * + * @code + * * http_#xxxxxx#_t http_#xxxxxx# = HTTP_#XXXXXX#_INIT; - * + * * @endcode * @HI */ #define HTTP_#XXXXXX#_INIT() HTTP_HDR_INIT(#xxxxxx#) /**Initialize a structure http_#xxxxxx#_t. - * + * * An http_#xxxxxx#_t structure can be initialized with the * http_#xxxxxx#_init() function/macro. For instance, * @code - * + * * http_#xxxxxx#_t http_#xxxxxx#; - * + * * http_#xxxxxx#_init(&http_#xxxxxx#); - * + * * @endcode * @HI */ @@ -121,20 +121,20 @@ #endif /**Test if header object is instance of http_#xxxxxx#_t. - * + * * The function http_is_#xxxxxx#() returns true (nonzero) if * the header class is an instance of #xxxxxxx_xxxxxxx# * object and false (zero) otherwise. - * + * * @param header pointer to the header structure to be tested - * + * * @return * The function http_is_x#xxxxxx#() returns true (nonzero) if * the header object is an instance of header #xxxxxx# and * false (zero) otherwise. */ #if SU_HAVE_INLINE -su_inline +su_inline int http_is_#xxxxxx#(http_header_t const *header) { return header && header->sh_class->hc_hash == http_#xxxxxx#_hash; @@ -145,27 +145,27 @@ #endif /**Duplicate (deep copy) @c http_#xxxxxx#_t. - * + * * The function http_#xxxxxx#_dup() duplicates a header * structure @a hdr. If the header structure @a hdr * contains a reference (@c hdr->x_next) to a list of * headers, all the headers in the list are duplicated, too. - * + * * @param home memory home used to allocate new structure * @param hdr header structure to be duplicated - * + * * When duplicating, all parameter lists and non-constant * strings attached to the header are copied, too. The * function uses given memory @a home to allocate all the * memory areas used to copy the header. - * + * * @par Example * @code - * + * * #xxxxxx# = http_#xxxxxx#_dup(home, http->http_#xxxxxx#); - * + * * @endcode - * + * * @return * The function http_#xxxxxx#_dup() returns a pointer to the * newly duplicated http_#xxxxxx#_t header structure, or NULL @@ -174,34 +174,34 @@ #if SU_HAVE_INLINE su_inline #endif -http_#xxxxxx#_t *http_#xxxxxx#_dup(su_home_t *home, +http_#xxxxxx#_t *http_#xxxxxx#_dup(su_home_t *home, http_#xxxxxx#_t const *hdr) __attribute__((__malloc__)); /**Copy a http_#xxxxxx#_t header structure. - * + * * The function http_#xxxxxx#_copy() copies a header structure @a * hdr. If the header structure @a hdr contains a reference (@c * hdr->h_next) to a list of headers, all the headers in that * list are copied, too. The function uses given memory @a home * to allocate all the memory areas used to copy the header * structure @a hdr. - * + * * @param home memory home used to allocate new structure * @param hdr pointer to the header structure to be duplicated - * + * * When copying, only the header structure and parameter lists * attached to it are duplicated. The new header structure * retains all the references to the strings within the old @a * header, including the encoding of the old header, if present. - * + * * @par Example * @code - * + * * #xxxxxx# = http_#xxxxxx#_copy(home, http->http_#xxxxxx#); - * + * * @endcode - * + * * @return * The function http_#xxxxxx#_copy() returns a pointer to * newly copied header structure, or NULL upon an error. @@ -209,23 +209,23 @@ #if SU_HAVE_INLINE su_inline #endif -http_#xxxxxx#_t *http_#xxxxxx#_copy(su_home_t *home, +http_#xxxxxx#_t *http_#xxxxxx#_copy(su_home_t *home, http_#xxxxxx#_t const *hdr) __attribute__((__malloc__)); /**Make a header structure http_#xxxxxx#_t. - * + * * The function http_#xxxxxx#_make() makes a new * http_#xxxxxx#_t header structure. It allocates a new * header structure, and decodes the string @a s as the * value of the structure. - * + * * @param home memory home used to allocate new header structure. * @param s string to be decoded as value of the new header structure - * + * * @note This function is usually implemented as a macro calling * http_header_make(). - * + * * @return * The function http_#xxxxxx#_make() returns a pointer to * newly maked http_#xxxxxx#_t header structure, or NULL upon @@ -238,25 +238,25 @@ __attribute__((__malloc__)); /**Make a #xxxxxxx_xxxxxxx# from formatting result. - * + * * The function http_#xxxxxx#_format() makes a new * #xxxxxxx_xxxxxxx# object using formatting result as its * value. The function first prints the arguments according to * the format @a fmt specified. Then it allocates a new header * structure, and uses the formatting result as the header * value. - * + * * @param home memory home used to allocate new header structure. * @param fmt string used as a printf()-style format * @param ... argument list for format - * + * * @note This function is usually implemented as a macro calling * msg_header_format(). - * + * * @return * The function http_#xxxxxx#_format() returns a pointer to newly * makes header structure, or NULL upon an error. - * + * * @HIDE */ #if SU_HAVE_INLINE @@ -273,29 +273,29 @@ { http_header_t *h; va_list ap; - + va_start(ap, fmt); h = http_header_vformat(home, http_#xxxxxx#_class, fmt, ap); va_end(ap); - + return (http_#xxxxxx#_t *)h; } su_inline -http_#xxxxxx#_t *http_#xxxxxx#_dup(su_home_t *home, http_#xxxxxx#_t const *o) -{ +http_#xxxxxx#_t *http_#xxxxxx#_dup(su_home_t *home, http_#xxxxxx#_t const *o) +{ return (http_#xxxxxx#_t *) msg_header_dup_as(home, http_#xxxxxx#_class, (msg_header_t const *)o); } su_inline -http_#xxxxxx#_t *http_#xxxxxx#_copy(su_home_t *home, http_#xxxxxx#_t const *o) -{ +http_#xxxxxx#_t *http_#xxxxxx#_copy(su_home_t *home, http_#xxxxxx#_t const *o) +{ return (http_#xxxxxx#_t *) - msg_header_copy_as(home, http_#xxxxxx#_class, (msg_header_t const *)o); + msg_header_copy_as(home, http_#xxxxxx#_class, (msg_header_t const *)o); } -su_inline +su_inline http_#xxxxxx#_t *http_#xxxxxx#_make(su_home_t *home, char const *s) { return (http_#xxxxxx#_t *)http_header_make(home, http_#xxxxxx#_class, s); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_status.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_status.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_status.h Tue Dec 16 13:05:22 2008 @@ -22,10 +22,10 @@ * */ -#ifndef HTTP_STATUS_H -#define HTTP_STATUS_H +#ifndef HTTP_STATUS_H +#define HTTP_STATUS_H -/**@file sofia-sip/http_status.h +/**@file sofia-sip/http_status.h * * HTTP status codes. * Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_tag.h.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_tag.h.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_tag.h.in Tue Dec 16 13:05:22 2008 @@ -105,7 +105,7 @@ #if SU_INLINE_TAG_CAST su_inline tag_value_t httptag_http_v(http_t const *v) { return (tag_value_t)v; } -su_inline +su_inline tag_value_t httptag_http_vr(http_t const **vp) { return (tag_value_t)vp; } #else #define httptag_http_v(v) (tag_value_t)(v) @@ -131,8 +131,8 @@ /**Tag list item for header string. * * The HTTPTAG_HEADER() macro is used to include a tag item containing an - * unknown HTTP header in the tag list, e.g., - * @code + * unknown HTTP header in the tag list, e.g., + * @code * http_header_t *hdr; * * HTTPTAG_HEADER(hdr). @@ -199,7 +199,7 @@ * * Tag list item for string with #xxxxxxx_xxxxxxx# value. * - * The HTTPTAG_#XXXXXX#_STR() macro is used to include a tag item with a + * The HTTPTAG_#XXXXXX#_STR() macro is used to include a tag item with a * string containing value of a http_#xxxxxx#_t header in a tag list. * * @param s pointer to a string containing http_#xxxxxx#_t value, or NULL. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_tag_class.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_tag_class.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/sofia-sip/http_tag_class.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef HTTP_TAG_CLASS_H /**Defined when http_tag_class.h have been included*/ -#define HTTP_TAG_CLASS_H +#define HTTP_TAG_CLASS_H /**@file sofia-sip/http_tag_class.h * @brief Tag classes for HTTP headers. @@ -62,9 +62,9 @@ {{ TAG_NAMESPACE, #t, httpmsgtag_class, \ (tag_value_t)HTTP_PROTOCOL_TAG }} -/**@internal Filter HTTP header tag items. */ +/**@internal Filter HTTP header tag items. */ SOFIAPUBFUN tagi_t *httptag_filter(tagi_t *dst, tagi_t const f[], - tagi_t const *src, + tagi_t const *src, void **bb); SOFIA_END_DECLS Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/test_http.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/test_http.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/http/test_http.c Tue Dec 16 13:05:22 2008 @@ -189,7 +189,7 @@ for (i = 0; i < n;) { /* This prevent msg_recv_iovec() from allocating extra slack */ int msg_buf_exact(msg_t *, int); - msg_buf_exact(msg, 10 + 1); + msg_buf_exact(msg, 10 + 1); if (msg_recv_iovec(msg, iovec, msg_n_fragments, 10, 0) < 0) { perror("msg_recv_iovec"); @@ -1008,7 +1008,7 @@ "CUSTOMER=WILE_E_COYOTE; " "path=/; " "expires=Wednesday, 09-Nov-99 23:12:40 GMT"); - + TEST_1(sc); TEST_1(sc->sc_params); TEST_S(sc->sc_name, "CUSTOMER=WILE_E_COYOTE"); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/base64.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/base64.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/base64.c Tue Dec 16 13:05:22 2008 @@ -36,7 +36,7 @@ #include #include "sofia-sip/base64.h" -static unsigned char const code[] = +static unsigned char const code[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; #define B64NOP 128 @@ -48,22 +48,22 @@ * stores the result in the buffer @a buf of @a bsiz bytes. * * If the @a buf is NULL, the function just returns the length of decoded - * data. In any case, no decoded data is stored in @a buf beyond @a bsiz. + * data. In any case, no decoded data is stored in @a buf beyond @a bsiz. * The function always returns the full length of decodable data. - * + * * @param buf Buffer to store decoded data * @param bsiz Size of @a buf * @param b64s Base64-encoded string. * - * @return Length of data that can be decoded in bytes. + * @return Length of data that can be decoded in bytes. * - * @sa RFC 2045, + * @sa RFC 2045, * "Multipurpose Internet Mail Extensions (MIME) Part One: * Format of Internet Message Bodies", * N. Freed, N. Borenstein, November 1996. * * @par Example - * The following example code decodes a string of BASE64 data into a + * The following example code decodes a string of BASE64 data into a * memory area allocated from heap: * @code * int decoder(char const *encoded, void **return_decoded) @@ -76,7 +76,7 @@ * } * @endcode */ -isize_t base64_d(char buf[], isize_t bsiz, char const *b64s) +isize_t base64_d(char buf[], isize_t bsiz, char const *b64s) { static unsigned char decode[256] = ""; unsigned char const *s = (unsigned char const *)b64s; @@ -90,7 +90,7 @@ if (decode['\0'] != B64EOF) { /* Prepare decoding table */ for (i = 1; i < 256; i++) - decode[i] = B64NOP; + decode[i] = B64NOP; for (i = 0; i < 64; i++) { decode[code[i]] = (unsigned char)i; @@ -104,17 +104,17 @@ if (c != B64NOP) len++; } - + total_len = len = len * 3 / 4; if (buf == NULL || bsiz == 0) return total_len; - if (len > bsiz) + if (len > bsiz) len = bsiz; - + for (i = 0, s = (unsigned char const *)b64s; i < len; ) { - + while ((b1 = decode[*s++]) == B64NOP) ; if (b1 != B64EOF) @@ -126,7 +126,7 @@ if (b3 != B64EOF) while ((b4 = decode[*s++]) == B64NOP) ; - + if (((b1 | b2 | b3 | b4) & (B64NOP|B64EOF)) == 0) { /* Normal case, 4 B64 chars to 3 data bytes */ w = (b1 << 18) | (b2 << 12) | (b3 << 6) | b4; @@ -163,8 +163,8 @@ } /**Encode data with BASE64. - * - * The function base64_e() encodes @a dsiz bytes of @a data into @a buf. + * + * The function base64_e() encodes @a dsiz bytes of @a data into @a buf. * * @note The function base64_e() uses at most @a bsiz bytes from @a buf. * @@ -183,13 +183,13 @@ * @return The function base64_e() return length of encoded string, * excluding the final NUL. * - * @sa RFC 2045, + * @sa RFC 2045, * "Multipurpose Internet Mail Extensions (MIME) Part One: * Format of Internet Message Bodies", * N. Freed, N. Borenstein, November 1996. * */ -isize_t base64_e(char buf[], isize_t bsiz, void *data, isize_t dsiz) +isize_t base64_e(char buf[], isize_t bsiz, void *data, isize_t dsiz) { unsigned char *s = (unsigned char *)buf; unsigned char *b = (unsigned char *)data; @@ -200,7 +200,7 @@ if (bsize == 0) s = NULL; - + for (i = 0, n = 0; i < dsize; i += 3, n += 4) { w = (b[i] << 16) | (b[i+1] << 8) | b[i+2]; @@ -211,9 +211,9 @@ s[n + 2] = code[(w >> 6) & 63]; s[n + 3] = code[(w) & 63]; } else { - if (n + 1 < bsize) + if (n + 1 < bsize) s[n + 0] = code[(w >> 18) & 63]; - if (n + 2 < bsize) + if (n + 2 < bsize) s[n + 1] = code[(w >> 12) & 63]; if (n + 3 < bsize) s[n + 2] = code[(w >> 6) & 63]; @@ -221,8 +221,8 @@ s = NULL; } } - } - + } + if (slack) { if (s) { if (slack == 2) @@ -230,7 +230,7 @@ else w = (b[i] << 16); - if (n + 1 < bsize) + if (n + 1 < bsize) s[n + 0] = code[(w >> 18) & 63]; if (n + 2 < bsize) s[n + 1] = code[(w >> 12) & 63]; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ipt.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ipt.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ipt.docs Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ /* -*- c -*- */ /**@MODULEPAGE "ipt" - Utility Module - * + * * @section ipt_meta Module Meta Information * * Utility library for IP Telephony applications. @@ -14,7 +14,7 @@ * * @section ipt_overview Overview * - * This module contain some routines useful for IPT applications, like + * This module contain some routines useful for IPT applications, like * - BASE64 encoding/decoding, and * - encoding/decoding binary as SIP/HTTP token. */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/rc4.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/rc4.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/rc4.c Tue Dec 16 13:05:22 2008 @@ -37,40 +37,40 @@ const rc4_u8 *seed = (const rc4_u8 *)vseed; rc4_u8 *array = state->rc4_array; - state->rc4_i = 0; - state->rc4_j = 0; + state->rc4_i = 0; + state->rc4_j = 0; - for (i = 0; i < 256; i++) - array[i] = (rc4_u8) i; + for (i = 0; i < 256; i++) + array[i] = (rc4_u8) i; - for (i = 0, j = 0, k = 0; - i < 256; + for (i = 0, j = 0, k = 0; + i < 256; i++, k++, k >= seed_len ? k = 0 : 0) { rc4_u8 a = array[i]; rc4_u8 b = array[j += a + seed[k]]; array[i] = b; array[j] = a; - } + } } -void rc4(void *buffer, isize_t len, rc4_t *state) { +void rc4(void *buffer, isize_t len, rc4_t *state) { rc4_u8 *buf = (rc4_u8 *)buffer; rc4_u8 *array = state->rc4_array; - rc4_u8 i = state->rc4_i; + rc4_u8 i = state->rc4_i; rc4_u8 j = state->rc4_j; - - while (len-- > 0) { - rc4_u8 a = array[++i]; + + while (len-- > 0) { + rc4_u8 a = array[++i]; rc4_u8 b = array[j += a]; array[i] = b; array[j] = a; - *buf++ ^= array[(a + b) & 255]; - } + *buf++ ^= array[(a + b) & 255]; + } - state->rc4_i = i; + state->rc4_i = i; state->rc4_j = j; } @@ -90,114 +90,114 @@ rc4_u8 key_3[] = { 0xef, 0x01, 0x23, 0x45, }; rc4_u8 input_3[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -rc4_u8 output_3[] = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf, 0xbd, 0x61, }; +rc4_u8 output_3[] = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf, 0xbd, 0x61, }; rc4_u8 key_4[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, }; -rc4_u8 input_4[] = { - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +rc4_u8 input_4[] = { + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, }; -rc4_u8 output_4[] = { - 0x75, 0x95, 0xc3, 0xe6, 0x11, 0x4a, 0x09, 0x78, 0x0c, 0x4a, 0xd4, - 0x52, 0x33, 0x8e, 0x1f, 0xfd, 0x9a, 0x1b, 0xe9, 0x49, 0x8f, - 0x81, 0x3d, 0x76, 0x53, 0x34, 0x49, 0xb6, 0x77, 0x8d, 0xca, - 0xd8, 0xc7, 0x8a, 0x8d, 0x2b, 0xa9, 0xac, 0x66, 0x08, 0x5d, - 0x0e, 0x53, 0xd5, 0x9c, 0x26, 0xc2, 0xd1, 0xc4, 0x90, 0xc1, - 0xeb, 0xbe, 0x0c, 0xe6, 0x6d, 0x1b, 0x6b, 0x1b, 0x13, 0xb6, - 0xb9, 0x19, 0xb8, 0x47, 0xc2, 0x5a, 0x91, 0x44, 0x7a, 0x95, - 0xe7, 0x5e, 0x4e, 0xf1, 0x67, 0x79, 0xcd, 0xe8, 0xbf, 0x0a, - 0x95, 0x85, 0x0e, 0x32, 0xaf, 0x96, 0x89, 0x44, 0x4f, 0xd3, - 0x77, 0x10, 0x8f, 0x98, 0xfd, 0xcb, 0xd4, 0xe7, 0x26, 0x56, - 0x75, 0x00, 0x99, 0x0b, 0xcc, 0x7e, 0x0c, 0xa3, 0xc4, 0xaa, - 0xa3, 0x04, 0xa3, 0x87, 0xd2, 0x0f, 0x3b, 0x8f, 0xbb, 0xcd, - 0x42, 0xa1, 0xbd, 0x31, 0x1d, 0x7a, 0x43, 0x03, 0xdd, 0xa5, - 0xab, 0x07, 0x88, 0x96, 0xae, 0x80, 0xc1, 0x8b, 0x0a, 0xf6, - 0x6d, 0xff, 0x31, 0x96, 0x16, 0xeb, 0x78, 0x4e, 0x49, 0x5a, - 0xd2, 0xce, 0x90, 0xd7, 0xf7, 0x72, 0xa8, 0x17, 0x47, 0xb6, - 0x5f, 0x62, 0x09, 0x3b, 0x1e, 0x0d, 0xb9, 0xe5, 0xba, 0x53, - 0x2f, 0xaf, 0xec, 0x47, 0x50, 0x83, 0x23, 0xe6, 0x71, 0x32, - 0x7d, 0xf9, 0x44, 0x44, 0x32, 0xcb, 0x73, 0x67, 0xce, 0xc8, - 0x2f, 0x5d, 0x44, 0xc0, 0xd0, 0x0b, 0x67, 0xd6, 0x50, 0xa0, - 0x75, 0xcd, 0x4b, 0x70, 0xde, 0xdd, 0x77, 0xeb, 0x9b, 0x10, - 0x23, 0x1b, 0x6b, 0x5b, 0x74, 0x13, 0x47, 0x39, 0x6d, 0x62, - 0x89, 0x74, 0x21, 0xd4, 0x3d, 0xf9, 0xb4, 0x2e, 0x44, 0x6e, - 0x35, 0x8e, 0x9c, 0x11, 0xa9, 0xb2, 0x18, 0x4e, 0xcb, 0xef, - 0x0c, 0xd8, 0xe7, 0xa8, 0x77, 0xef, 0x96, 0x8f, 0x13, 0x90, - 0xec, 0x9b, 0x3d, 0x35, 0xa5, 0x58, 0x5c, 0xb0, 0x09, 0x29, - 0x0e, 0x2f, 0xcd, 0xe7, 0xb5, 0xec, 0x66, 0xd9, 0x08, 0x4b, - 0xe4, 0x40, 0x55, 0xa6, 0x19, 0xd9, 0xdd, 0x7f, 0xc3, 0x16, - 0x6f, 0x94, 0x87, 0xf7, 0xcb, 0x27, 0x29, 0x12, 0x42, 0x64, - 0x45, 0x99, 0x85, 0x14, 0xc1, 0x5d, 0x53, 0xa1, 0x8c, 0x86, - 0x4c, 0xe3, 0xa2, 0xb7, 0x55, 0x57, 0x93, 0x98, 0x81, 0x26, - 0x52, 0x0e, 0xac, 0xf2, 0xe3, 0x06, 0x6e, 0x23, 0x0c, 0x91, - 0xbe, 0xe4, 0xdd, 0x53, 0x04, 0xf5, 0xfd, 0x04, 0x05, 0xb3, - 0x5b, 0xd9, 0x9c, 0x73, 0x13, 0x5d, 0x3d, 0x9b, 0xc3, 0x35, - 0xee, 0x04, 0x9e, 0xf6, 0x9b, 0x38, 0x67, 0xbf, 0x2d, 0x7b, - 0xd1, 0xea, 0xa5, 0x95, 0xd8, 0xbf, 0xc0, 0x06, 0x6f, 0xf8, - 0xd3, 0x15, 0x09, 0xeb, 0x0c, 0x6c, 0xaa, 0x00, 0x6c, 0x80, - 0x7a, 0x62, 0x3e, 0xf8, 0x4c, 0x3d, 0x33, 0xc1, 0x95, 0xd2, - 0x3e, 0xe3, 0x20, 0xc4, 0x0d, 0xe0, 0x55, 0x81, 0x57, 0xc8, - 0x22, 0xd4, 0xb8, 0xc5, 0x69, 0xd8, 0x49, 0xae, 0xd5, 0x9d, - 0x4e, 0x0f, 0xd7, 0xf3, 0x79, 0x58, 0x6b, 0x4b, 0x7f, 0xf6, - 0x84, 0xed, 0x6a, 0x18, 0x9f, 0x74, 0x86, 0xd4, 0x9b, 0x9c, - 0x4b, 0xad, 0x9b, 0xa2, 0x4b, 0x96, 0xab, 0xf9, 0x24, 0x37, - 0x2c, 0x8a, 0x8f, 0xff, 0xb1, 0x0d, 0x55, 0x35, 0x49, 0x00, - 0xa7, 0x7a, 0x3d, 0xb5, 0xf2, 0x05, 0xe1, 0xb9, 0x9f, 0xcd, - 0x86, 0x60, 0x86, 0x3a, 0x15, 0x9a, 0xd4, 0xab, 0xe4, 0x0f, - 0xa4, 0x89, 0x34, 0x16, 0x3d, 0xdd, 0xe5, 0x42, 0xa6, 0x58, - 0x55, 0x40, 0xfd, 0x68, 0x3c, 0xbf, 0xd8, 0xc0, 0x0f, 0x12, - 0x12, 0x9a, 0x28, 0x4d, 0xea, 0xcc, 0x4c, 0xde, 0xfe, 0x58, - 0xbe, 0x71, 0x37, 0x54, 0x1c, 0x04, 0x71, 0x26, 0xc8, 0xd4, - 0x9e, 0x27, 0x55, 0xab, 0x18, 0x1a, 0xb7, 0xe9, 0x40, 0xb0, +rc4_u8 output_4[] = { + 0x75, 0x95, 0xc3, 0xe6, 0x11, 0x4a, 0x09, 0x78, 0x0c, 0x4a, 0xd4, + 0x52, 0x33, 0x8e, 0x1f, 0xfd, 0x9a, 0x1b, 0xe9, 0x49, 0x8f, + 0x81, 0x3d, 0x76, 0x53, 0x34, 0x49, 0xb6, 0x77, 0x8d, 0xca, + 0xd8, 0xc7, 0x8a, 0x8d, 0x2b, 0xa9, 0xac, 0x66, 0x08, 0x5d, + 0x0e, 0x53, 0xd5, 0x9c, 0x26, 0xc2, 0xd1, 0xc4, 0x90, 0xc1, + 0xeb, 0xbe, 0x0c, 0xe6, 0x6d, 0x1b, 0x6b, 0x1b, 0x13, 0xb6, + 0xb9, 0x19, 0xb8, 0x47, 0xc2, 0x5a, 0x91, 0x44, 0x7a, 0x95, + 0xe7, 0x5e, 0x4e, 0xf1, 0x67, 0x79, 0xcd, 0xe8, 0xbf, 0x0a, + 0x95, 0x85, 0x0e, 0x32, 0xaf, 0x96, 0x89, 0x44, 0x4f, 0xd3, + 0x77, 0x10, 0x8f, 0x98, 0xfd, 0xcb, 0xd4, 0xe7, 0x26, 0x56, + 0x75, 0x00, 0x99, 0x0b, 0xcc, 0x7e, 0x0c, 0xa3, 0xc4, 0xaa, + 0xa3, 0x04, 0xa3, 0x87, 0xd2, 0x0f, 0x3b, 0x8f, 0xbb, 0xcd, + 0x42, 0xa1, 0xbd, 0x31, 0x1d, 0x7a, 0x43, 0x03, 0xdd, 0xa5, + 0xab, 0x07, 0x88, 0x96, 0xae, 0x80, 0xc1, 0x8b, 0x0a, 0xf6, + 0x6d, 0xff, 0x31, 0x96, 0x16, 0xeb, 0x78, 0x4e, 0x49, 0x5a, + 0xd2, 0xce, 0x90, 0xd7, 0xf7, 0x72, 0xa8, 0x17, 0x47, 0xb6, + 0x5f, 0x62, 0x09, 0x3b, 0x1e, 0x0d, 0xb9, 0xe5, 0xba, 0x53, + 0x2f, 0xaf, 0xec, 0x47, 0x50, 0x83, 0x23, 0xe6, 0x71, 0x32, + 0x7d, 0xf9, 0x44, 0x44, 0x32, 0xcb, 0x73, 0x67, 0xce, 0xc8, + 0x2f, 0x5d, 0x44, 0xc0, 0xd0, 0x0b, 0x67, 0xd6, 0x50, 0xa0, + 0x75, 0xcd, 0x4b, 0x70, 0xde, 0xdd, 0x77, 0xeb, 0x9b, 0x10, + 0x23, 0x1b, 0x6b, 0x5b, 0x74, 0x13, 0x47, 0x39, 0x6d, 0x62, + 0x89, 0x74, 0x21, 0xd4, 0x3d, 0xf9, 0xb4, 0x2e, 0x44, 0x6e, + 0x35, 0x8e, 0x9c, 0x11, 0xa9, 0xb2, 0x18, 0x4e, 0xcb, 0xef, + 0x0c, 0xd8, 0xe7, 0xa8, 0x77, 0xef, 0x96, 0x8f, 0x13, 0x90, + 0xec, 0x9b, 0x3d, 0x35, 0xa5, 0x58, 0x5c, 0xb0, 0x09, 0x29, + 0x0e, 0x2f, 0xcd, 0xe7, 0xb5, 0xec, 0x66, 0xd9, 0x08, 0x4b, + 0xe4, 0x40, 0x55, 0xa6, 0x19, 0xd9, 0xdd, 0x7f, 0xc3, 0x16, + 0x6f, 0x94, 0x87, 0xf7, 0xcb, 0x27, 0x29, 0x12, 0x42, 0x64, + 0x45, 0x99, 0x85, 0x14, 0xc1, 0x5d, 0x53, 0xa1, 0x8c, 0x86, + 0x4c, 0xe3, 0xa2, 0xb7, 0x55, 0x57, 0x93, 0x98, 0x81, 0x26, + 0x52, 0x0e, 0xac, 0xf2, 0xe3, 0x06, 0x6e, 0x23, 0x0c, 0x91, + 0xbe, 0xe4, 0xdd, 0x53, 0x04, 0xf5, 0xfd, 0x04, 0x05, 0xb3, + 0x5b, 0xd9, 0x9c, 0x73, 0x13, 0x5d, 0x3d, 0x9b, 0xc3, 0x35, + 0xee, 0x04, 0x9e, 0xf6, 0x9b, 0x38, 0x67, 0xbf, 0x2d, 0x7b, + 0xd1, 0xea, 0xa5, 0x95, 0xd8, 0xbf, 0xc0, 0x06, 0x6f, 0xf8, + 0xd3, 0x15, 0x09, 0xeb, 0x0c, 0x6c, 0xaa, 0x00, 0x6c, 0x80, + 0x7a, 0x62, 0x3e, 0xf8, 0x4c, 0x3d, 0x33, 0xc1, 0x95, 0xd2, + 0x3e, 0xe3, 0x20, 0xc4, 0x0d, 0xe0, 0x55, 0x81, 0x57, 0xc8, + 0x22, 0xd4, 0xb8, 0xc5, 0x69, 0xd8, 0x49, 0xae, 0xd5, 0x9d, + 0x4e, 0x0f, 0xd7, 0xf3, 0x79, 0x58, 0x6b, 0x4b, 0x7f, 0xf6, + 0x84, 0xed, 0x6a, 0x18, 0x9f, 0x74, 0x86, 0xd4, 0x9b, 0x9c, + 0x4b, 0xad, 0x9b, 0xa2, 0x4b, 0x96, 0xab, 0xf9, 0x24, 0x37, + 0x2c, 0x8a, 0x8f, 0xff, 0xb1, 0x0d, 0x55, 0x35, 0x49, 0x00, + 0xa7, 0x7a, 0x3d, 0xb5, 0xf2, 0x05, 0xe1, 0xb9, 0x9f, 0xcd, + 0x86, 0x60, 0x86, 0x3a, 0x15, 0x9a, 0xd4, 0xab, 0xe4, 0x0f, + 0xa4, 0x89, 0x34, 0x16, 0x3d, 0xdd, 0xe5, 0x42, 0xa6, 0x58, + 0x55, 0x40, 0xfd, 0x68, 0x3c, 0xbf, 0xd8, 0xc0, 0x0f, 0x12, + 0x12, 0x9a, 0x28, 0x4d, 0xea, 0xcc, 0x4c, 0xde, 0xfe, 0x58, + 0xbe, 0x71, 0x37, 0x54, 0x1c, 0x04, 0x71, 0x26, 0xc8, 0xd4, + 0x9e, 0x27, 0x55, 0xab, 0x18, 0x1a, 0xb7, 0xe9, 0x40, 0xb0, 0xc0, }; #include @@ -210,7 +210,7 @@ for (i = 0; i < len; i++) { printf("0x%02x ", data[i]); } - + putchar('\n'); } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/base64.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/base64.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/base64.h Tue Dec 16 13:05:22 2008 @@ -34,10 +34,10 @@ * [A-Za-z0-9+/=]. Base64 is defined as part of MIME mail format, but it is * used widely by other text-based protocols as well. * - * @sa RFC 2045, + * @sa RFC 2045, * "Multipurpose Internet Mail Extensions (MIME) Part One: * Format of Internet Message Bodies", - * N. Freed, N. Borenstein, + * N. Freed, N. Borenstein, * November 1996. * * @author Pekka Pessi Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/rc4.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/rc4.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/rc4.h Tue Dec 16 13:05:22 2008 @@ -28,9 +28,9 @@ /**@file sofia-sip/rc4.h * @brief Arcfour random number generator. - * + * * @author Pekka Pessi - * + * * @date Created: Sun Jun 9 14:32:58 1996 ppessi */ @@ -45,21 +45,21 @@ /** Byte. */ typedef uint8_t rc4_u8; -/** RC4 context. - * +/** RC4 context. + * * The RC4 context is accessed and modified through rc4_init() and rc4() * functions only. */ -typedef struct { - uint8_t rc4_i; +typedef struct { + uint8_t rc4_i; uint8_t rc4_j; - uint8_t rc4_array[256]; + uint8_t rc4_array[256]; } rc4_t; /** Key RC4 context. */ SOFIAPUBFUN void rc4_init(const void *seed, isize_t seed_len, rc4_t *state); -/** Generate RC4 stream. */ +/** Generate RC4 stream. */ SOFIAPUBFUN void rc4(void *buffer, isize_t len, rc4_t *state); #if defined(__cplusplus) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/uniqueid.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/uniqueid.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/uniqueid.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef UNIQUEID_H /** Defined when has been included. */ -#define UNIQUEID_H +#define UNIQUEID_H /**@file sofia-sip/uniqueid.h * @@ -38,7 +38,7 @@ */ /* Compatibility functionality */ -#define guid_t su_guid_t +#define guid_t su_guid_t #define guid_generate su_guid_generate #define guid_sprintf su_guid_sprintf #define guid_strlen su_guid_strlen Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/utf8.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/utf8.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/sofia-sip/utf8.h Tue Dec 16 13:05:22 2008 @@ -32,7 +32,7 @@ * * @date Created: Tue Apr 21 15:32:38 1998 pessi - * @sa RFC 2279, + * @sa RFC 2279, * "UTF-8, a transformation format of ISO 10646", * F. Yergeau. January 1998. * @@ -83,7 +83,7 @@ int ucs4ncmp(ucs4 const *s1, ucs4 const *s2, size_t n); /* - * IS_UCS4_n tests whether UCS4 character should be represented + * IS_UCS4_n tests whether UCS4 character should be represented * with 'n' byte utf8 string */ #define IS_UCS4_1(x) ((ucs4)(x) <= 0x7fu) @@ -172,7 +172,7 @@ (s)[3]=((c>>12)&63)|128,\ (s)[4]=((c>>6)&63)|128,\ (s)[5]=((c)&63)|128) - + SOFIA_END_DECLS #endif /* UTF8_H */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/token64.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/token64.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/token64.c Tue Dec 16 13:05:22 2008 @@ -22,13 +22,13 @@ * */ -/**@internal @file token64.c +/**@internal @file token64.c * * Token encoding. * * @author Pekka Pessi * - * @date Created: Wed Apr 3 10:45:47 2002 ppessi + * @date Created: Wed Apr 3 10:45:47 2002 ppessi */ #include "config.h" @@ -39,10 +39,10 @@ #include "sofia-sip/token64.h" -static const char code[65] = +static const char code[65] = "0123456789-abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -/** Encode data as a SIP/HTTP token. +/** Encode data as a SIP/HTTP token. * * @note * A token is case-independent, so this is really not a good idea. @@ -74,7 +74,7 @@ for (i = 0; i < dlen; i += 3, s += 4) { unsigned char h0 = h[i], h1 = h[i + 1], h2 = h[i + 2]; - + s[0] = code[h0 >> 2]; s[1] = code[((h0 << 4)|(h1 >> 4)) & 63]; s[2] = code[((h1 << 4)|(h2 >> 6)) & 63]; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ucs2.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ucs2.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ucs2.c Tue Dec 16 13:05:22 2008 @@ -36,7 +36,7 @@ #include "utf8internal.h" /* - * Decode utf8 string into ucs2 string, + * Decode utf8 string into ucs2 string, * return number of ucs2 characters decoded */ size_t ucs2decode(ucs2 *dst, size_t dst_size, const utf8 *s) @@ -70,9 +70,9 @@ * Encode ucs2 string into utf8 string, * return number of utf8 bytes encoded including final zero * - * 'quote' may contain an optional quoting table containing + * 'quote' may contain an optional quoting table containing * non-zero for all ASCII characters to quote - * + * */ size_t ucs2encode(utf8 *dst, const ucs2 *s, size_t n, const char quote[128]) { @@ -131,7 +131,7 @@ { size_t len = 1; ucs2 c; - + while (n-- > 0) { c = *s++; if (c < 0x80u) @@ -157,7 +157,7 @@ { size_t len = 0; - if (s) while (*s++) + if (s) while (*s++) len++; return len; @@ -170,7 +170,7 @@ { int retval = s1 - s2; - if (s1 && s2) + if (s1 && s2) while ((retval = (*s1 - *s2)) && (*s1++) && (*s2++)) ; @@ -184,7 +184,7 @@ { int retval = 0; - if (s1 && s2) + if (s1 && s2) while (n-- > 0 && (retval = (*s1 - *s2)) && (*s1++) && (*s2++)) ; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ucs4.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ucs4.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/ucs4.c Tue Dec 16 13:05:22 2008 @@ -35,7 +35,7 @@ #include "utf8internal.h" /* - * Decode utf8 string into ucs4 string, + * Decode utf8 string into ucs4 string, * return number of ucs4 characters decoded */ size_t ucs4decode(ucs4 *dst, size_t dst_size, const utf8 *s) @@ -75,9 +75,9 @@ * Encode ucs4 string into utf8 string, * return number of utf8 bytes encoded including final zero * - * 'quote' may contain an optional quoting table containing + * 'quote' may contain an optional quoting table containing * non-zero for all ASCII characters to quote - * + * */ size_t ucs4encode(utf8 *dst, const ucs4 *s, size_t n, const char quote[128]) { @@ -151,7 +151,7 @@ { size_t len = 1; ucs4 c; - + while (n-- > 0) { c = *s++; if (c < 0x80u) @@ -183,7 +183,7 @@ { size_t len = 0; - if (s) while (*s++) + if (s) while (*s++) len++; return len; @@ -203,7 +203,7 @@ } /* - * Compare UCS4 string prefix + * Compare UCS4 string prefix */ int ucs4ncmp(ucs4 const *s1, ucs4 const *s2, size_t n) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8.c Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ * */ -/**@CFILE utf8.c +/**@CFILE utf8.c * * utf8 string handling. * Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8internal.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8internal.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8internal.h Tue Dec 16 13:05:22 2008 @@ -23,9 +23,9 @@ */ #ifndef UTF8INTERNAL_H -#define UTF8INTERNAL_H +#define UTF8INTERNAL_H -/**@IFILE utf8internal.h +/**@IFILE utf8internal.h * UTF-8 macros. * * @author Pekka Pessi Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8test.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8test.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/ipt/utf8test.c Tue Dec 16 13:05:22 2008 @@ -38,27 +38,27 @@ int main(int argc, char *argv[]) { - static ucs4 ucs4test0[] = { + static ucs4 ucs4test0[] = { 0x41u, 0xC1u, 0x841u, 0x10041u, 0x200041u, 0x4000041u, 0 }; - static utf8 ucs4test1[] = - "A" + static utf8 ucs4test1[] = + "A" "\303\201" "\340\241\201" "\360\220\201\201" "\370\210\200\201\201" "\374\204\200\200\201\201"; - static ucs2 ucs2test0[] = { + static ucs2 ucs2test0[] = { 0x41u, 0xC1u, 0x841u, 0 }; - static utf8 ucs2test1[] = - "A" + static utf8 ucs2test1[] = + "A" "\303\201" "\340\241\201"; ucs4 ucs4s[1024] = { 0 }; - ucs2 ucs2s[1024] = { 0 }; + ucs2 ucs2s[1024] = { 0 }; utf8 utf8s[1024] = { 0 }; size_t len; @@ -124,7 +124,7 @@ else puts("OK"); /* UCS2 */ - + puts("testing ucs2len(ucs2test0)"); len = ucs2len(ucs2test0); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/Doxyfile.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/Doxyfile.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/Doxyfile.in Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ PROJECT_NAME = "iptsec" OUTPUT_DIRECTORY = ../docs/html/iptsec -INPUT = @srcdir@/iptsec.docs @srcdir@/sofia-sip @srcdir@ . +INPUT = @srcdir@/iptsec.docs @srcdir@/sofia-sip @srcdir@ . @INCLUDE_PATH = . @srcdir@ @INCLUDE = ../docs/Doxyfile.conf Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client.c Tue Dec 16 13:05:22 2008 @@ -57,14 +57,14 @@ #include -static auth_client_t *ca_create(su_home_t *home, +static auth_client_t *ca_create(su_home_t *home, char const *scheme, char const *realm); static void ca_destroy(su_home_t *home, auth_client_t *ca); static int ca_challenge(auth_client_t *ca, - msg_auth_t const *auth, + msg_auth_t const *auth, msg_hclass_t *credential_class, char const *scheme, char const *realm); @@ -73,9 +73,9 @@ msg_auth_info_t const *ai, msg_hclass_t *credential_class); -static int ca_credentials(auth_client_t *ca, +static int ca_credentials(auth_client_t *ca, char const *scheme, - char const *realm, + char const *realm, char const *user, char const *pass); @@ -85,19 +85,19 @@ /** Initialize authenticators. * * The function auc_challenge() merges the challenge @a ch to the list of - * authenticators @a auc_list. + * authenticators @a auc_list. * * @param[in,out] auc_list list of authenticators to be updated * @param[in,out] home memory home used for allocating authenticators * @param[in] ch challenge to be processed * @param[in] crcl credential class - * + * * @retval 1 when challenge was updated * @retval 0 when there was no new challenges * @retval -1 upon an error */ int auc_challenge(auth_client_t **auc_list, - su_home_t *home, + su_home_t *home, msg_auth_t const *ch, msg_hclass_t *crcl) { @@ -139,7 +139,7 @@ return retval; } -/** Update authentication client. +/** Update authentication client. * * @retval -1 upon an error * @retval 0 when challenge did not match @@ -147,10 +147,10 @@ * @retval 2 when challenge did match and updated client */ static -int ca_challenge(auth_client_t *ca, +int ca_challenge(auth_client_t *ca, msg_auth_t const *ch, msg_hclass_t *credential_class, - char const *scheme, + char const *scheme, char const *realm) { int stale = 0; @@ -165,7 +165,7 @@ if (strcmp(ca->ca_realm, realm)) return 0; - if (ca->ca_credential_class && + if (ca->ca_credential_class && ca->ca_credential_class != credential_class) return 0; @@ -205,7 +205,7 @@ * processed. * * @bug - * In principle, SIP allows more than one challenge for a single request. + * In principle, SIP allows more than one challenge for a single request. * For example, there can be multiple proxies that each challenge the * client. The result of storing authentication info can be quite unexpected * if there are more than one authenticator with the given type (specified @@ -238,7 +238,7 @@ return retval; } -/** Update authentication client with authentication info. +/** Update authentication client with authentication info. * * @retval -1 upon an error * @retval 0 when challenge did not match @@ -246,7 +246,7 @@ * @retval 2 when challenge did match and updated client */ static -int ca_info(auth_client_t *ca, +int ca_info(auth_client_t *ca, msg_auth_info_t const *info, msg_hclass_t *credential_class) { @@ -262,7 +262,7 @@ return 0; if (!ca->ca_auc - || (size_t)ca->ca_auc->auc_plugin_size <= + || (size_t)ca->ca_auc->auc_plugin_size <= offsetof(auth_client_plugin_t, auc_info) || !ca->ca_auc->auc_info) return 0; @@ -283,14 +283,14 @@ * * @todo The authentication data format sucks. * - * @param[in,out] auc_list list of authenticators + * @param[in,out] auc_list list of authenticators * @param[in,out] home memory home used for allocations * @param[in] data colon-separated authentication data - * + * * @retval 0 when successful * @retval -1 upon an error */ -int auc_credentials(auth_client_t **auc_list, su_home_t *home, +int auc_credentials(auth_client_t **auc_list, su_home_t *home, char const *data) { int retval = 0, match; @@ -317,7 +317,7 @@ retval = -1; break; } - if (match) + if (match) retval++; } } @@ -330,25 +330,25 @@ /**Feed authentication data to the authenticator. * * The function auc_credentials() is used to provide the authenticators in - * with authentication tuple (scheme, realm, user name, secret). + * with authentication tuple (scheme, realm, user name, secret). * * scheme:"realm":user:pass * * @todo The authentication data format sucks. * - * @param[in,out] auc_list list of authenticators + * @param[in,out] auc_list list of authenticators * @param[in] scheme scheme to use (NULL, if any) * @param[in] realm realm to use (NULL, if any) - * @param[in] user username + * @param[in] user username * @param[in] pass password - * + * * @retval number of updated clients * @retval 0 when no client was updated * @retval -1 upon an error */ -int auc_all_credentials(auth_client_t **auc_list, +int auc_all_credentials(auth_client_t **auc_list, char const *scheme, - char const *realm, + char const *realm, char const *user, char const *pass) { @@ -363,7 +363,7 @@ match = ca_credentials(*auc_list, scheme, realm, user, pass); if (match < 0) return -1; - if (match) + if (match) retval++; } } @@ -371,9 +371,9 @@ return retval; } -int ca_credentials(auth_client_t *ca, +int ca_credentials(auth_client_t *ca, char const *scheme, - char const *realm, + char const *realm, char const *user, char const *pass) { @@ -465,21 +465,21 @@ return retval; } - + /**Clear authentication data from the authenticator. * * The function auc_clear_credentials() is used to remove the credentials * from the authenticators. * - * @param[in,out] auc_list list of authenticators - * @param[in] scheme scheme (if non-null, remove only matching credentials) + * @param[in,out] auc_list list of authenticators + * @param[in] scheme scheme (if non-null, remove only matching credentials) * @param[in] realm realm (if non-null, remove only matching credentials) * * @retval 0 when successful * @retval -1 upon an error */ -int auc_clear_credentials(auth_client_t **auc_list, +int auc_clear_credentials(auth_client_t **auc_list, char const *scheme, char const *realm) { @@ -502,7 +502,7 @@ retval = -1; break; } - if (match) + if (match) retval++; } @@ -523,7 +523,7 @@ } /** Check if we have all required credentials. - * + * * @retval 1 when authorization can proceed * @retval 0 when there is not enough credentials * @@ -553,20 +553,20 @@ * headers to a request. The authentication headers will contain the * credentials generated by the list of authenticators. * - * @param[in,out] auc_list list of authenticators + * @param[in,out] auc_list list of authenticators * @param[out] msg message to be authenticated * @param[out] pub headers of the message * @param[in] method request method * @param[in] url request URI * @param[in] body message body (NULL if empty) - * + * * @retval 1 when successful * @retval 0 when there is not enough credentials * @retval -1 upon an error */ int auc_authorization(auth_client_t **auc_list, msg_t *msg, msg_pub_t *pub, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body) { auth_client_t *ca; @@ -616,21 +616,21 @@ * authentication headers for a request. The list of authentication headers * will contain the credentials generated by the list of authenticators. * - * @param[in] auc_list list of authenticators + * @param[in] auc_list list of authenticators * @param[in] home memory home used to allocate headers * @param[in] method request method * @param[in] url request URI * @param[in] body message body (NULL if empty) * @param[out] return_headers authorization headers return value - * + * * @retval 1 when successful * @retval 0 when there is not enough credentials * @retval -1 upon an error */ -int auc_authorization_headers(auth_client_t **auc_list, +int auc_authorization_headers(auth_client_t **auc_list, su_home_t *home, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body, msg_header_t **return_headers) { @@ -666,13 +666,13 @@ static int auc_basic_authorization(auth_client_t *ca, su_home_t *h, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body, msg_header_t **); -static const auth_client_plugin_t ca_basic_plugin = -{ +static const auth_client_plugin_t ca_basic_plugin = +{ /* auc_plugin_size: */ sizeof ca_basic_plugin, /* auc_size: */ sizeof (auth_client_t), /* auc_name: */ "Basic", @@ -694,15 +694,15 @@ * @param hc header class for the header to be created * @param user user name * @param pass password - * + * * @return - * The function auc_basic_authorization() returns a pointer to newly created + * The function auc_basic_authorization() returns a pointer to newly created * authorization header, or NULL upon an error. */ -int auc_basic_authorization(auth_client_t *ca, +int auc_basic_authorization(auth_client_t *ca, su_home_t *home, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body, msg_header_t **return_headers) { @@ -742,7 +742,7 @@ userpass[ulen] = ':'; memcpy(userpass + ulen + 1, pass, plen); userpass[uplen] = '\0'; - + base64_e(base64, b64len + 1, userpass, uplen); base64[b64len] = '\0'; @@ -767,22 +767,22 @@ auth_challenge_t cda_ac[1]; } auth_digest_client_t; -static int auc_digest_challenge(auth_client_t *ca, +static int auc_digest_challenge(auth_client_t *ca, msg_auth_t const *ch); -static int auc_digest_authorization(auth_client_t *ca, +static int auc_digest_authorization(auth_client_t *ca, su_home_t *h, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body, msg_header_t **); -static int auc_digest_info(auth_client_t *ca, +static int auc_digest_info(auth_client_t *ca, msg_auth_info_t const *info); -static const auth_client_plugin_t ca_digest_plugin = -{ +static const auth_client_plugin_t ca_digest_plugin = +{ /* auc_plugin_size: */ sizeof ca_digest_plugin, /* auc_size: */ sizeof (auth_digest_client_t), - /* auc_name: */ "Digest", + /* auc_name: */ "Digest", /* auc_challenge: */ auc_digest_challenge, /* auc_authorize: */ auc_digest_authorization, /* auc_info: */ auc_digest_info, @@ -866,15 +866,15 @@ * sip_authorization_class or sip_proxy_authorization_class, as well as * http_authorization_class or http_proxy_authorization_class. * - * @retval 1 when authorization headers has been created + * @retval 1 when authorization headers has been created * @retval 0 when there is no credentials * @retval -1 upon an error */ static -int auc_digest_authorization(auth_client_t *ca, +int auc_digest_authorization(auth_client_t *ca, su_home_t *home, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body, msg_header_t **return_headers) { @@ -923,7 +923,7 @@ auth_digest_sessionkey(ar, sessionkey, pass); auth_digest_response(ar, response, sessionkey, method, data, dlen); - h = msg_header_format(home, hc, + h = msg_header_format(home, hc, "Digest " "username=\"%s\", " "realm=\"%s\", " @@ -935,21 +935,21 @@ "response=\"%s\"" "%s%s" "%s%s", - ar->ar_username, + ar->ar_username, ar->ar_realm, ar->ar_nonce, - cnonce ? "\", cnonce=\"" : "", + cnonce ? "\", cnonce=\"" : "", cnonce ? cnonce : "", - ar->ar_opaque ? "\", opaque=\"" : "", + ar->ar_opaque ? "\", opaque=\"" : "", ar->ar_opaque ? ar->ar_opaque : "", ar->ar_algorithm ? "\", algorithm=" : "", ar->ar_algorithm ? ar->ar_algorithm : "", ar->ar_uri, response, - ar->ar_auth || ar->ar_auth_int ? ", qop=" : "", - ar->ar_auth_int ? "auth-int" : + ar->ar_auth || ar->ar_auth_int ? ", qop=" : "", + ar->ar_auth_int ? "auth-int" : (ar->ar_auth ? "auth" : ""), - cnonce ? ", nc=" : "", + cnonce ? ", nc=" : "", cnonce ? ncount : ""); su_free(home, uri); @@ -965,7 +965,7 @@ #define MAX_AUC 20 -static auth_client_plugin_t const *ca_plugins[MAX_AUC] = +static auth_client_plugin_t const *ca_plugins[MAX_AUC] = { &ca_digest_plugin, &ca_basic_plugin, NULL }; @@ -984,7 +984,7 @@ return errno = EINVAL, -1; for (i = 0; i < MAX_AUC; i++) { - if (ca_plugins[i] == NULL || + if (ca_plugins[i] == NULL || strcmp(plugin->auc_name, ca_plugins[i]->auc_name) == 0) { ca_plugins[i] = plugin; return 0; @@ -1051,10 +1051,10 @@ * headers to a SIP request. The authentication headers will contain the * credentials generated by the list of authenticators. * - * @param[in,out] auc_list list of authenticators + * @param[in,out] auc_list list of authenticators * @param[in,out] msg message to be authenticated * @param[in,out] sip sip headers of the message - * + * * @retval 1 when successful * @retval 0 when there is not enough credentials * @retval -1 upon an error @@ -1066,14 +1066,14 @@ if (!rq) return 0; - return auc_authorization(auc_list, msg, (msg_pub_t *)sip, - rq->rq_method_name, + return auc_authorization(auc_list, msg, (msg_pub_t *)sip, + rq->rq_method_name, /* RFC 3261 defines the protection domain based only on realm, so we do not bother get a correct URI to auth module. */ - rq->rq_url, + rq->rq_url, sip->sip_payload); } #endif Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client_ntlm.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client_ntlm.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_client_ntlm.c Tue Dec 16 13:05:22 2008 @@ -63,20 +63,20 @@ auth_challenge_t ntlm_ac[1]; } auth_ntlm_client_t; -static int auc_ntlm_challenge(auth_client_t *ca, +static int auc_ntlm_challenge(auth_client_t *ca, msg_auth_t const *ch); -static int auc_ntlm_authorization(auth_client_t *ca, +static int auc_ntlm_authorization(auth_client_t *ca, su_home_t *h, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body, msg_header_t **); -auth_client_plugin_t const _ntlm_client_plugin = -{ +auth_client_plugin_t const _ntlm_client_plugin = +{ sizeof ca_ntlm_plugin, sizeof (auth_ntlm_client_t), - "NTLM", + "NTLM", auc_ntlm_challenge, auc_ntlm_authorization }; @@ -142,7 +142,7 @@ * @param pass password * @param ac challenge structure * @param cnonce client nonce - * @param nc client nonce count + * @param nc client nonce count * @param method request method * @param uri request uri * @param data message body @@ -152,10 +152,10 @@ * Returns a pointer to newly created authorization header, or NULL upon an * error. */ -int auc_ntlm_authorization(auth_client_t *ca, +int auc_ntlm_authorization(auth_client_t *ca, su_home_t *home, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body, msg_header_t **return_headers) { @@ -201,7 +201,7 @@ auth_ntlm_sessionkey(ar, sessionkey, pass); auth_ntlm_response(ar, response, sessionkey, method, data, dlen); - h = msg_header_format(home, hc, + h = msg_header_format(home, hc, "NTLM " "username=\"%s\", " "realm=\"%s\", " @@ -213,21 +213,21 @@ "response=\"%s\"" "%s%s" "%s%s", - ar->ar_username, + ar->ar_username, ar->ar_realm, ar->ar_nonce, - cnonce ? "\", cnonce=\"" : "", + cnonce ? "\", cnonce=\"" : "", cnonce ? cnonce : "", - ar->ar_opaque ? "\", opaque=\"" : "", + ar->ar_opaque ? "\", opaque=\"" : "", ar->ar_opaque ? ar->ar_opaque : "", ar->ar_algorithm ? "\", algorithm=" : "", ar->ar_algorithm ? ar->ar_algorithm : "", ar->ar_uri, response, - ar->ar_auth || ar->ar_auth_int ? ", qop=" : "", - ar->ar_auth_int ? "auth-int" : + ar->ar_auth || ar->ar_auth_int ? ", qop=" : "", + ar->ar_auth_int ? "auth-int" : (ar->ar_auth ? "auth" : ""), - cnonce ? ", nc=" : "", + cnonce ? ", nc=" : "", cnonce ? ncount : ""); su_free(home, uri); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_common.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_common.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_common.c Tue Dec 16 13:05:22 2008 @@ -54,7 +54,7 @@ * The function auth_get_params() searches for the authentication parameters * in @a params. The parameter list @a params is seached for each parameter * given in in vararg section, and if it is found, its value is assigned to - * the given address. + * the given address. * * @note The field name should contain the equal ("=") sign. * Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_digest.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_digest.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_digest.c Tue Dec 16 13:05:22 2008 @@ -59,7 +59,7 @@ * found, or -1 upon an error. */ issize_t auth_digest_challenge_get(su_home_t *home, - auth_challenge_t *ac0, + auth_challenge_t *ac0, char const * const params[]) { ssize_t n; @@ -70,7 +70,7 @@ ac->ac_size = sizeof(ac); - assert(ac0); + assert(ac0); assert(ac0->ac_size >= (int) sizeof(*ac)); if (ac0 == NULL || params == NULL) @@ -103,7 +103,7 @@ auth_struct_copy(ac0, ac, sizeof(ac)); SU_DEBUG_5(("%s(): got "MOD_ZD"\n", "auth_digest_challenge_get", n)); - + return n; } @@ -136,7 +136,7 @@ * found, or -1 upon an error. */ issize_t auth_digest_response_get(su_home_t *home, - auth_response_t *ar0, + auth_response_t *ar0, char const *const params[]) { ssize_t n; @@ -189,7 +189,7 @@ if (!quoted) /*xyzzy*/; else if (quoted[0] == '"') { - char const *q; + char const *q; size_t n; for (q = quoted + 1; *q; q += n + 2) { @@ -204,9 +204,9 @@ su_md5_strupdate(md5, quoted); } -/** Generate A1 hash for digest authentication. +/** Generate A1 hash for digest authentication. */ -int auth_digest_a1(auth_response_t *ar, +int auth_digest_a1(auth_response_t *ar, auth_hexmd5_t ha1, char const *secret) { @@ -222,13 +222,13 @@ su_md5_hexdigest(md5, ha1); - SU_DEBUG_5(("auth_digest_a1() has A1 = MD5(%s:%s:%s) = %s\n", + SU_DEBUG_5(("auth_digest_a1() has A1 = MD5(%s:%s:%s) = %s\n", ar->ar_username, ar->ar_realm, secret, ha1)); return 0; } -int auth_digest_a1sess(auth_response_t *ar, +int auth_digest_a1sess(auth_response_t *ar, auth_hexmd5_t ha1sess, char const *ha1) { @@ -243,15 +243,15 @@ su_md5_hexdigest(md5, ha1sess); - SU_DEBUG_5(("auth_sessionkey has A1' = MD5(%s:%s:%s) = %s\n", + SU_DEBUG_5(("auth_sessionkey has A1' = MD5(%s:%s:%s) = %s\n", ha1, ar->ar_nonce, ar->ar_cnonce, ha1sess)); return 0; } -/** Generate MD5 session key for digest authentication. +/** Generate MD5 session key for digest authentication. */ -int auth_digest_sessionkey(auth_response_t *ar, +int auth_digest_sessionkey(auth_response_t *ar, auth_hexmd5_t ha1, char const *secret) { @@ -263,7 +263,7 @@ return -1; if (ar->ar_md5sess) { - auth_hexmd5_t base_ha1; + auth_hexmd5_t base_ha1; auth_digest_a1(ar, base_ha1, secret); auth_digest_a1sess(ar, ha1, base_ha1); } else { @@ -273,12 +273,12 @@ return 0; } -/** Generate response for digest authentication. +/** Generate response for digest authentication. * */ -int auth_digest_response(auth_response_t *ar, +int auth_digest_response(auth_response_t *ar, auth_hexmd5_t response, - auth_hexmd5_t const ha1, + auth_hexmd5_t const ha1, char const *method_name, void const *data, isize_t dlen) { @@ -314,7 +314,7 @@ } su_md5_hexdigest(md5, HA2); - SU_DEBUG_5(("A2 = MD5(%s:%s%s%s)\n", method_name, ar->ar_uri, + SU_DEBUG_5(("A2 = MD5(%s:%s%s%s)\n", method_name, ar->ar_uri, ar->ar_auth_int ? ":" : "", ar->ar_auth_int ? Hentity : "")); /* Calculate response */ @@ -333,17 +333,17 @@ } su_md5_update(md5, ":", 1); - su_md5_update(md5, HA2, 32); + su_md5_update(md5, HA2, 32); su_md5_hexdigest(md5, response); - SU_DEBUG_5(("auth_response: %s = MD5(%s:%s%s%s%s%s%s%s:%s) (qop=%s)\n", - response, ha1, ar->ar_nonce, - ar->ar_auth || ar->ar_auth_int ? ":" : "", - ar->ar_auth || ar->ar_auth_int ? ar->ar_nc : "", - ar->ar_auth || ar->ar_auth_int ? ":" : "", - ar->ar_auth || ar->ar_auth_int ? ar->ar_cnonce : "", - ar->ar_auth || ar->ar_auth_int ? ":" : "", - ar->ar_auth || ar->ar_auth_int ? ar->ar_qop : "", + SU_DEBUG_5(("auth_response: %s = MD5(%s:%s%s%s%s%s%s%s:%s) (qop=%s)\n", + response, ha1, ar->ar_nonce, + ar->ar_auth || ar->ar_auth_int ? ":" : "", + ar->ar_auth || ar->ar_auth_int ? ar->ar_nc : "", + ar->ar_auth || ar->ar_auth_int ? ":" : "", + ar->ar_auth || ar->ar_auth_int ? ar->ar_cnonce : "", + ar->ar_auth || ar->ar_auth_int ? ":" : "", + ar->ar_auth || ar->ar_auth_int ? ar->ar_qop : "", HA2, ar->ar_qop ? ar->ar_qop : "NONE")); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module.c Tue Dec 16 13:05:22 2008 @@ -80,7 +80,7 @@ static void auth_md5_hmac_key(auth_mod_t *am); HTABLE_PROTOS_WITH(auth_htable, aht, auth_passwd_t, usize_t, unsigned); -HTABLE_BODIES_WITH(auth_htable, aht, auth_passwd_t, APW_HASH, +HTABLE_BODIES_WITH(auth_htable, aht, auth_passwd_t, APW_HASH, usize_t, unsigned); /**Allocate an authentication module instance. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module_http.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module_http.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module_http.c Tue Dec 16 13:05:22 2008 @@ -25,7 +25,7 @@ /**@internal * @file auth_module_http.c * @brief Authenticate HTTP request - * + * * @author Pekka Pessi * @author Jari Urpalainen * @@ -43,10 +43,10 @@ #include -static auth_challenger_t http_server_challenger[] = +static auth_challenger_t http_server_challenger[] = {{ HTTP_401_UNAUTHORIZED, http_www_authenticate_class }}; -static auth_challenger_t http_proxy_challenger[] = +static auth_challenger_t http_proxy_challenger[] = {{ HTTP_407_PROXY_AUTH, http_proxy_authenticate_class }}; const char *auth_mod_check_http(auth_mod_t *am, @@ -54,22 +54,22 @@ http_t const *http, auth_kind_t proxy) { - msg_auth_t *credentials = + msg_auth_t *credentials = proxy ? http->http_proxy_authorization : http->http_authorization; - auth_challenger_t const *challenger = + auth_challenger_t const *challenger = proxy ? http_proxy_challenger : http_server_challenger; if (http->http_request) { if (!as->as_method) as->as_method = http->http_request->rq_method_name; #if 0 - if (!as->as_uri) + if (!as->as_uri) as->as_uri = http->http_request->rq_url; #endif } if (http->http_payload && !as->as_body) - as->as_body = http->http_payload->pl_data, + as->as_body = http->http_payload->pl_data, as->as_bodylen = http->http_payload->pl_len; /* Call real authentication method */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module_sip.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module_sip.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_module_sip.c Tue Dec 16 13:05:22 2008 @@ -25,7 +25,7 @@ /**@internal * @file auth_module_sip.c * @brief Authenticate SIP request - * + * * @author Pekka Pessi * @author Jari Urpalainen * @@ -45,19 +45,19 @@ #include -static auth_challenger_t sip_server_challenger[] = +static auth_challenger_t sip_server_challenger[] = {{ SIP_401_UNAUTHORIZED, sip_www_authenticate_class, sip_authentication_info_class }}; -static auth_challenger_t sip_proxy_challenger[] = +static auth_challenger_t sip_proxy_challenger[] = {{ SIP_407_PROXY_AUTH_REQUIRED, sip_proxy_authenticate_class }}; -/** Authenticate an incoming SIP request. +/** Authenticate an incoming SIP request. * * The function auth_mod_check() completes the @a as structure and calls the * scheme-specific authentication method performing the actual - * authentication. + * authentication. * * A successful authentication is indicated by setting @a as->as_status to * 0. The authentication module sets @a as->as_match as the matching @@ -86,7 +86,7 @@ as->as_method = sip->sip_request->rq_method_name; if (sip->sip_payload) - as->as_body = sip->sip_payload->pl_data, + as->as_body = sip->sip_payload->pl_data, as->as_bodylen = sip->sip_payload->pl_len; auth_mod_method(am, as, credentials, challenger); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_ntlm.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_ntlm.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_ntlm.c Tue Dec 16 13:05:22 2008 @@ -58,7 +58,7 @@ * found, or -1 upon an error. */ issize_t auth_ntlm_challenge_get(su_home_t *home, - auth_challenge_t *ac0, + auth_challenge_t *ac0, char const * const params[]) { ssize_t n; @@ -68,7 +68,7 @@ ac->ac_size = sizeof(ac); - assert(ac0); + assert(ac0); assert(ac0->ac_size >= sizeof(*ac)); if (ac0 == NULL || params == NULL) @@ -103,7 +103,7 @@ auth_struct_copy(ac0, ac, sizeof(ac)); SU_DEBUG_5(("%s(): got %d\n", "auth_ntlm_challenge_get", n)); - + return n; } @@ -119,7 +119,7 @@ * found, or -1 upon an error. */ issize_t auth_ntlm_response_get(su_home_t *home, - auth_response_t *ar0, + auth_response_t *ar0, char const *const params[]) { ssize_t n; @@ -169,9 +169,9 @@ #if 0 -/** Generate A1 hash for digest authentication. +/** Generate A1 hash for digest authentication. */ -int auth_digest_a1(auth_response_t *ar, +int auth_digest_a1(auth_response_t *ar, auth_hexmd5_t ha1, char const *secret) { @@ -187,13 +187,13 @@ su_md5_hexdigest(md5, ha1); - SU_DEBUG_5(("auth_digest_a1() has A1 = MD5(%s:%s:%s) = %s\n", + SU_DEBUG_5(("auth_digest_a1() has A1 = MD5(%s:%s:%s) = %s\n", ar->ar_username, ar->ar_realm, secret, ha1)); return 0; } -int auth_digest_a1sess(auth_response_t *ar, +int auth_digest_a1sess(auth_response_t *ar, auth_hexmd5_t ha1sess, char const *ha1) { @@ -208,15 +208,15 @@ su_md5_hexdigest(md5, ha1sess); - SU_DEBUG_5(("auth_sessionkey has A1' = MD5(%s:%s:%s) = %s\n", + SU_DEBUG_5(("auth_sessionkey has A1' = MD5(%s:%s:%s) = %s\n", ha1, ar->ar_nonce, ar->ar_cnonce, ha1sess)); return 0; } -/** Generate MD5 session key for digest authentication. +/** Generate MD5 session key for digest authentication. */ -int auth_digest_sessionkey(auth_response_t *ar, +int auth_digest_sessionkey(auth_response_t *ar, auth_hexmd5_t ha1, char const *secret) { @@ -228,7 +228,7 @@ return -1; if (ar->ar_md5sess) { - auth_hexmd5_t base_ha1; + auth_hexmd5_t base_ha1; auth_digest_a1(ar, base_ha1, secret); auth_digest_a1sess(ar, ha1, base_ha1); } else { @@ -243,12 +243,12 @@ #if 0 -/** Generate response for digest authentication. +/** Generate response for digest authentication. * */ -int auth_digest_response(auth_response_t *ar, +int auth_digest_response(auth_response_t *ar, auth_hexmd5_t response, - auth_hexmd5_t const ha1, + auth_hexmd5_t const ha1, char const *method_name, void const *data, issize_t dlen) { @@ -284,7 +284,7 @@ } su_md5_hexdigest(md5, HA2); - SU_DEBUG_5(("A2 = MD5(%s:%s%s%s)\n", method_name, ar->ar_uri, + SU_DEBUG_5(("A2 = MD5(%s:%s%s%s)\n", method_name, ar->ar_uri, ar->ar_auth_int ? ":" : "", ar->ar_auth_int ? Hentity : "")); /* Calculate response */ @@ -303,17 +303,17 @@ } su_md5_update(md5, ":", 1); - su_md5_update(md5, HA2, 32); + su_md5_update(md5, HA2, 32); su_md5_hexdigest(md5, response); - SU_DEBUG_5(("auth_response: %s = MD5(%s:%s%s%s%s%s%s%s:%s) (qop=%s)\n", - response, ha1, ar->ar_nonce, - ar->ar_auth || ar->ar_auth_int ? ":" : "", - ar->ar_auth || ar->ar_auth_int ? ar->ar_nc : "", - ar->ar_auth || ar->ar_auth_int ? ":" : "", - ar->ar_auth || ar->ar_auth_int ? ar->ar_cnonce : "", - ar->ar_auth || ar->ar_auth_int ? ":" : "", - ar->ar_auth || ar->ar_auth_int ? ar->ar_qop : "", + SU_DEBUG_5(("auth_response: %s = MD5(%s:%s%s%s%s%s%s%s:%s) (qop=%s)\n", + response, ha1, ar->ar_nonce, + ar->ar_auth || ar->ar_auth_int ? ":" : "", + ar->ar_auth || ar->ar_auth_int ? ar->ar_nc : "", + ar->ar_auth || ar->ar_auth_int ? ":" : "", + ar->ar_auth || ar->ar_auth_int ? ar->ar_cnonce : "", + ar->ar_auth || ar->ar_auth_int ? ":" : "", + ar->ar_auth || ar->ar_auth_int ? ar->ar_qop : "", HA2, ar->ar_qop ? ar->ar_qop : "NONE")); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin.c Tue Dec 16 13:05:22 2008 @@ -25,9 +25,9 @@ /**@internal * @file auth_plugin.c * @brief Plugin interface for authentication verification modules. - * + * * @author Pekka Pessi - * + * * @date Created: Tue Apr 27 15:23:31 2004 ppessi */ @@ -69,7 +69,7 @@ auth_scheme_delayed }; -/** Register an authentication plugin. +/** Register an authentication plugin. * * @retval 0 when successful * @retval -1 upon an error @@ -82,17 +82,17 @@ if (i == N) return -1; } - + schemes[i] = asch; return 0; } -/**Create an authentication plugin module. +/**Create an authentication plugin module. * * The function auth_mod_create() creates a module used to authenticate the * requests. - * + * * @param root pointer to a su_root_t object * @param tag,value,... tagged argument list * @@ -123,7 +123,7 @@ size_t len; base = strrchr(method, '+'); - if (base) + if (base) len = base++ - method; else len = strlen(method); @@ -132,7 +132,7 @@ ; else if (strcasecmp(base, "Basic") == 0) bscheme = auth_scheme_basic; - else if (strcasecmp(base, "Digest") == 0) + else if (strcasecmp(base, "Digest") == 0) bscheme = auth_scheme_digest; if (base == NULL || bscheme) { @@ -152,6 +152,6 @@ } ta_end(ta); - + return am; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin_delayed.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin_delayed.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin_delayed.c Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ /**@CFILE auth_plugin_delayed.c * - * @brief Plugin for delayed authentication. + * @brief Plugin for delayed authentication. * * This authentication plugin provides authentication operation that is * intentionally delayed. It serves as an example of server-side @@ -61,7 +61,7 @@ #include "sofia-sip/auth_module.h" #include "sofia-sip/auth_plugin.h" -struct auth_plugin_t +struct auth_plugin_t { su_root_t *ap_root; auth_scheme_t *ap_base; @@ -81,7 +81,7 @@ msg_auth_t *auth, auth_challenger_t const *ach); -static void delayed_auth_challenge(auth_mod_t *am, +static void delayed_auth_challenge(auth_mod_t *am, auth_status_t *as, auth_challenger_t const *ach); @@ -89,12 +89,12 @@ static void delayed_auth_destroy(auth_mod_t *am); -auth_scheme_t auth_scheme_delayed[1] = +auth_scheme_t auth_scheme_delayed[1] = {{ "Delayed", sizeof (struct { auth_mod_t mod[1]; auth_plugin_t plug[1]; }), delayed_auth_init, - delayed_auth_method, + delayed_auth_method, delayed_auth_challenge, delayed_auth_cancel, delayed_auth_destroy @@ -118,13 +118,13 @@ retval = 0; } - + ta_end(ta); return retval; } -struct auth_splugin_t +struct auth_splugin_t { void const *asp_cookie; auth_splugin_t *asp_next; @@ -152,7 +152,7 @@ su_msg_r mamc = SU_MSG_R_INIT; auth_splugin_t *asp; - if (su_msg_create(mamc, + if (su_msg_create(mamc, su_root_task(ap->ap_root), su_root_task(ap->ap_root), delayed_auth_method_recv, @@ -202,7 +202,7 @@ asp->asp_as->as_callback(asp->asp_as->as_magic, asp->asp_as); } -static void delayed_auth_challenge(auth_mod_t *am, +static void delayed_auth_challenge(auth_mod_t *am, auth_status_t *as, auth_challenger_t const *ach) { @@ -217,7 +217,7 @@ auth_plugin_t *ap = AUTH_PLUGIN(am); (void)ap; /* xyzzy */ - + if (as->as_plugin && as->as_plugin->asp_cookie == delayed_asp_cookie) as->as_plugin->asp_canceled = 1; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin_ntlm.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin_ntlm.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_plugin_ntlm.c Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ /**@CFILE auth_plugin_ntlm.c * - * @brief Plugin for delayed authentication. + * @brief Plugin for delayed authentication. * * This authentication plugin provides authentication operation that is * intentionally delayed. It serves as an example of server-side @@ -100,14 +100,14 @@ if (auth_init_default(am, NULL, root, ta_tags(ta)) != -1) { retval = 0; } - + ta_end(ta); return retval; } -/** Authenticate a request with @b NTLM authentication scheme. +/** Authenticate a request with @b NTLM authentication scheme. * * This function reads user database before authentication, if needed. */ @@ -123,7 +123,7 @@ } } -/** Authenticate a request with @b Ntlm authentication scheme. +/** Authenticate a request with @b Ntlm authentication scheme. */ void auth_method_ntlm(auth_mod_t *am, auth_status_t *as, @@ -144,7 +144,7 @@ as->as_status = 0, as->as_phrase = NULL; as->as_match = (msg_header_t *)au; return; - } + } if (au) { auth_response_t ar[1] = {{ sizeof(ar) }}; @@ -161,7 +161,7 @@ /** Find a NTLM credential header with matching realm and opaque. */ -msg_auth_t *auth_ntlm_credentials(msg_auth_t *auth, +msg_auth_t *auth_ntlm_credentials(msg_auth_t *auth, char const *realm, char const *opaque, char const *gssapidata, @@ -216,19 +216,19 @@ #define PA "Authorization missing " - if ((!ar->ar_username && (phrase = PA "username")) || - (!ar->ar_nonce && (phrase = PA "nonce")) || - (!ar->ar_uri && (phrase = PA "URI")) || - (!ar->ar_response && (phrase = PA "response")) || + if ((!ar->ar_username && (phrase = PA "username")) || + (!ar->ar_nonce && (phrase = PA "nonce")) || + (!ar->ar_uri && (phrase = PA "URI")) || + (!ar->ar_response && (phrase = PA "response")) || /* (!ar->ar_opaque && (phrase = PA "opaque")) || */ /* Check for qop */ - (ar->ar_qop && - ((ar->ar_auth && + (ar->ar_qop && + ((ar->ar_auth && strcasecmp(ar->ar_qop, "auth") && strcasecmp(ar->ar_qop, "\"auth\"")) || - (ar->ar_auth_int && + (ar->ar_auth_int && strcasecmp(ar->ar_qop, "auth-int") && - strcasecmp(ar->ar_qop, "\"auth-int\""))) + strcasecmp(ar->ar_qop, "\"auth-int\""))) && (phrase = PA "has invalid qop"))) { assert(phrase); SU_DEBUG_5(("auth_method_ntlm: 400 %s\n", phrase)); @@ -239,10 +239,10 @@ /* XXX - replace */ #if 0 - if (as->as_nonce_issued == 0 /* Already validated nonce */ && + if (as->as_nonce_issued == 0 /* Already validated nonce */ && auth_validate_ntlm_nonce(am, as, ar, now) < 0) { #else - if (as->as_nonce_issued == 0 /* Already validated nonce */ && + if (as->as_nonce_issued == 0 /* Already validated nonce */ && auth_validate_digest_nonce(am, as, ar, now) < 0) { #endif as->as_blacklist = am->am_blacklist; @@ -262,9 +262,9 @@ a1 = apw->apw_hash; else if (apw && apw->apw_pass) auth_ntlm_a1(ar, a1buf, apw->apw_pass), a1 = a1buf; - else + else auth_ntlm_a1(ar, a1buf, "xyzzy"), a1 = a1buf, apw = NULL; - + if (ar->ar_md5sess) auth_ntlm_a1sess(ar, a1buf, a1), a1 = a1buf; #else @@ -272,19 +272,19 @@ a1 = apw->apw_hash; else if (apw && apw->apw_pass) auth_digest_a1(ar, a1buf, apw->apw_pass), a1 = a1buf; - else + else auth_digest_a1(ar, a1buf, "xyzzy"), a1 = a1buf, apw = NULL; - + if (ar->ar_md5sess) auth_digest_a1sess(ar, a1buf, a1), a1 = a1buf; #endif - /* XXX - replace with auth_ntlm_response */ + /* XXX - replace with auth_ntlm_response */ #if 0 - auth_ntlm_response(ar, response, a1, + auth_ntlm_response(ar, response, a1, as->as_method, as->as_body, as->as_bodylen); #else - auth_digest_response(ar, response, a1, + auth_digest_response(ar, response, a1, as->as_method, as->as_body, as->as_bodylen); #endif @@ -321,7 +321,7 @@ } /** Construct a challenge header for @b Ntlm authentication scheme. */ -void auth_challenge_ntlm(auth_mod_t *am, +void auth_challenge_ntlm(auth_mod_t *am, auth_status_t *as, auth_challenger_t const *ach) { @@ -337,8 +337,8 @@ u = as->as_uri; d = as->as_pdomain; - as->as_response = - msg_header_format(as->as_home, ach->ach_header, + as->as_response = + msg_header_format(as->as_home, ach->ach_header, "Ntlm" " realm=\"%s\"," "%s%s%s" @@ -346,12 +346,12 @@ " nonce=\"%s\"," "%s%s%s" "%s" /* stale */ - " algorithm=%s" + " algorithm=%s" "%s%s%s", - as->as_realm, - u ? " uri=\"" : "", u ? u : "", u ? "\"," : "", - d ? " domain=\"" : "", d ? d : "", d ? "\"," : "", - nonce, + as->as_realm, + u ? " uri=\"" : "", u ? u : "", u ? "\"," : "", + d ? " domain=\"" : "", d ? d : "", d ? "\"," : "", + nonce, am->am_opaque ? " opaque=\"" : "", am->am_opaque ? am->am_opaque : "", am->am_opaque ? "\"," : "", @@ -368,7 +368,7 @@ } /** Construct a info header for @b Ntlm authentication scheme. */ -void auth_info_ntlm(auth_mod_t *am, +void auth_info_ntlm(auth_mod_t *am, auth_status_t *as, auth_challenger_t const *ach) { @@ -385,7 +385,7 @@ auth_generate_digest_nonce(am, nonce, sizeof nonce, 1, msg_now()); #endif - as->as_info = + as->as_info = msg_header_format(as->as_home, ach->ach_info, "nextnonce=\"%s\"", nonce); } } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_tag.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_tag.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/auth_tag.c Tue Dec 16 13:05:22 2008 @@ -40,14 +40,14 @@ #include /**@def AUTHTAG_ANY() - * + * * Filter tag matching any AUTHTAG_*(). */ tag_typedef_t authtag_any = NSTAG_TYPEDEF(*); /**@def AUTHTAG_MODULE() - * - * Pointer to an authentication server module (auth_mod_t). + * + * Pointer to an authentication server module (auth_mod_t). * * The tag item AUTHTAG_MODULE() contains pointer to an authentication server * module. It is used to pass an already initialized authentication module @@ -58,11 +58,11 @@ /**@def AUTHTAG_METHOD() * * Name of the authentication scheme. - * + * * The tag AUTHTAG_METHOD() specifies the authentication module and scheme * to be used by the auth_module. The name can specify a basic * authentication module, like "Digest" or "Basic", or an plugin module, - * like "SGMF+Digest". + * like "SGMF+Digest". * * @sa See for plugin interface. */ @@ -87,7 +87,7 @@ * * Opaque data used by authentication server. * - * The tag authtag_opaque is used to pass opaque data to the @b auth_module. + * The tag authtag_opaque is used to pass opaque data to the @b auth_module. * The opaque data will be included in all the challenges (however, the data * is prefixed with a "." and other opaque data used by the algorithms. * @@ -115,7 +115,7 @@ /**@def AUTHTAG_QOP() * * Quality-of-protection used by Digest authentication. - * + * * The tag AUTHTAG_QOP() specifies the qop scheme to be used by the * digest authentication. */ @@ -124,7 +124,7 @@ /**@def AUTHTAG_ALGORITHM() * * Authentication algorithm used by Digest authentication. - * + * * The tag AUTHTAG_ALGORITHM() specifies the qop scheme to be used by the * digest authentication. */ @@ -133,7 +133,7 @@ /**@def AUTHTAG_EXPIRES() * * Nonce expiration time for Digest authentication. - * + * * The tag AUTHTAG_EXPIRES() specifies the time in seconds that a nonce is * considered valid. If 0, the nonce lifetime unbounded. The default time is * 3600 seconds. @@ -143,7 +143,7 @@ /**@def AUTHTAG_NEXT_EXPIRES() * * Next nonce expiration time for Digest authentication. - * + * * The tag AUTHTAG_NEXT_EXPIRES() specifies the time in seconds that a * nextnonce sent in Authentication-Info header is considered valid. If 0, * the nonce lifetime is unbounded. The default time is 3600 seconds. @@ -153,9 +153,9 @@ /**@def AUTHTAG_MAX_NCOUNT() * * Max nonce count value. - * + * * The tag AUTHTAG_MAX_NCOUNT() specifies the maximum number of times a - * nonce should be used. + * nonce should be used. * * @todo Count actual usages and don't trust "nc" parameter only. */ @@ -164,7 +164,7 @@ /**@def AUTHTAG_BLACKLIST() * * Blacklist time. - * + * * The tag AUTHTAG_BLACKLIST() specifies the time the server delays its * response if it is given bad credentials or malformed nonce. The default * time is 5 seconds. @@ -176,7 +176,7 @@ /**@def AUTHTAG_FORBIDDEN() * * Respond with 403 Forbidden. - * + * * When given a true argument, the tag AUTHTAG_FORBIDDEN() specifies that the * server responds with 403 Forbidden (instead of 401/407) when it receives * bad credentials. @@ -208,8 +208,8 @@ /**@def AUTHTAG_REMOTE() * * Remote authenticator URL. - * - * The tag AUTHTAG_REMOTE() is used to specify URL for remote authenticator. + * + * The tag AUTHTAG_REMOTE() is used to specify URL for remote authenticator. * The meaning of the URL is specific to the authentication module. The * authentication module is selected by AUTHTAG_METHOD(). */ @@ -217,15 +217,15 @@ /**@def AUTHTAG_ALLOW() * - * Comma-separated list of methods that are not challenged. - * + * Comma-separated list of methods that are not challenged. + * * The tag AUTHTAG_ALLOW() takes its argument a string containing a * comma-separated list of methods, for example, * @code * AUTHTAG_ALLOW("ACK, BYE, CANCEL"). * @endcode * - * The specified methods are not challenged by the authentication module. + * The specified methods are not challenged by the authentication module. * For example, this may include SIP ACK method or SIP methods only used * within an already established dialog. */ @@ -234,7 +234,7 @@ /**@def AUTHTAG_MASTER_KEY() * * Private master key for the authentication module. - * + * * The tag AUTHTAG_MASTER_KEY() specifies a private master key that can be * used by the authentication module for various purposes (for instance, * validating that nonces are really generated by it). @@ -244,7 +244,7 @@ /**@def AUTHTAG_CACHE_USERS() * * Time to cache user data. - * + * * The tag AUTHTAG_CACHE_USERS() specifies how many seconds the user data is * cached locally. Default value is typically 30 minutes. */ @@ -253,7 +253,7 @@ /**@def AUTHTAG_CACHE_ERRORS() * * Time to cache errors. - * + * * The tag AUTHTAG_CACHE_ERRORS() specifies the lifetime in seconds for * errors in the local authentication data cache. Note that the errors * generated locally (e.g., because of connectivity problem with Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec.docs Tue Dec 16 13:05:22 2008 @@ -5,10 +5,10 @@ * @section iptsec_meta Module Meta Information * * The iptsec module currently provides interfaces to HTTP - * Basic and Digest authentication, used by HTTP and SIP protocol elements. - * There are both - * @ref auth_client "client-side" and - * @ref auth_module "server-side" + * Basic and Digest authentication, used by HTTP and SIP protocol elements. + * There are both + * @ref auth_client "client-side" and + * @ref auth_module "server-side" * (authentication verification) functionality available. * * @CONTACT Pekka Pessi @@ -25,13 +25,13 @@ * operation is simple enough: * -# server initializes an #auth_status_t structure with information from * the request - * -# server calls auth_mod_method() - * -# server checks the status from auth_status_t structure, sends an error + * -# server calls auth_mod_method() + * -# server checks the status from auth_status_t structure, sends an error * response to the client if authentication fails * -# server proceeds serving the authenticated request. * * If the operation is asynchronous, only a preliminary result is stored in - * the auth_status_t structure when the call to auth_mod_method() returns. + * the auth_status_t structure when the call to auth_mod_method() returns. * In that case, the application can assign a callback function to the * structure. The callback function is invoked when the authentication * operation is completed. An asynchronous authentication operation can be @@ -62,7 +62,7 @@ * -# store the challenge to a list with auc_challenge() * -# prompt user and feed credentials (username and password) to the list * with auc_credentials() or auc_all_credentials() - * -# authorize a request (add credential headers to it) with + * -# authorize a request (add credential headers to it) with * auc_authorization() and resend the request * * If there are several username/password pairs for multiple authentication Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec_debug.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec_debug.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec_debug.c Tue Dec 16 13:05:22 2008 @@ -24,9 +24,9 @@ /**@internal @file iptsec_debug.c * @brief Debug log for IPTSEC module. - * + * * @author Pekka Pessi - * + * * @date Created: Thu Dec 19 15:55:30 2002 ppessi */ @@ -51,7 +51,7 @@ * * The IPTSEC_DEBUG environment variable is used to determine the debug * logging level for @iptsec module. The default level is 3. - * + * * @sa , #iptsec_log, #SOFIA_DEBUG */ extern IPTSEC_DEBUG; @@ -62,7 +62,7 @@ #endif /** Common log for client and server components. - * + * * The iptsec_log is the log object used by @iptsec module. The level of * #iptsec_log is set using #IPTSEC_DEBUG environment variable. */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec_debug.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec_debug.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/iptsec_debug.h Tue Dec 16 13:05:22 2008 @@ -29,9 +29,9 @@ /**@internal * @file iptsec_debug.h * @brief Debug log for IPTSEC module. - * + * * @author Pekka Pessi - * + * * @date Created: Thu Dec 19 15:56:35 2002 ppessi */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef AUTH_CLIENT_H /** Defined when has been included. */ -#define AUTH_CLIENT_H +#define AUTH_CLIENT_H /**@file sofia-sip/auth_client.h * @@ -49,7 +49,7 @@ typedef struct auth_client_s auth_client_t; SOFIAPUBFUN -int auc_challenge(auth_client_t **auc, su_home_t *home, +int auc_challenge(auth_client_t **auc, su_home_t *home, msg_auth_t const *auth, msg_hclass_t *crcl); @@ -62,14 +62,14 @@ msg_hclass_t *credential_class); SOFIAPUBFUN -int auc_all_credentials(auth_client_t **auc_list, +int auc_all_credentials(auth_client_t **auc_list, char const *scheme, - char const *realm, + char const *realm, char const *user, char const *pass); SOFIAPUBFUN -int auc_clear_credentials(auth_client_t **auc_list, +int auc_clear_credentials(auth_client_t **auc_list, char const *scheme, char const *realm); @@ -81,15 +81,15 @@ SOFIAPUBFUN int auc_authorization(auth_client_t **auc_list, msg_t *msg, msg_pub_t *pub, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body); SOFIAPUBFUN -int auc_authorization_headers(auth_client_t **auc_list, +int auc_authorization_headers(auth_client_t **auc_list, su_home_t *home, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body, msg_header_t **return_headers); @@ -105,4 +105,4 @@ SOFIA_END_DECLS -#endif +#endif Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client_plugin.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client_plugin.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_client_plugin.h Tue Dec 16 13:05:22 2008 @@ -24,17 +24,17 @@ #ifndef AUTH_CLIENT_PLUGIN_H /** Defined when has been included. */ -#define AUTH_CLIENT_PLUGIN_H +#define AUTH_CLIENT_PLUGIN_H /**@file sofia-sip/auth_client_plugin.h * @brief Client-side plugin interface for authentication - * - * @note For extensions in 1.12.6 or later, + * + * @note For extensions in 1.12.6 or later, * you have to define SOFIA_EXTEND_AUTH_CLIENT to 1 * before including this file. * * @author Pekka Pessi - * + * * @date Created: Fri May 19 16:18:21 EEST 2006 */ @@ -74,16 +74,16 @@ int auc_size; /* Size of the client structure */ char const *auc_name; /* Name of the autentication scheme */ - + /** Store challenge */ - int (*auc_challenge)(auth_client_t *ca, + int (*auc_challenge)(auth_client_t *ca, msg_auth_t const *ch); /** Authorize request. */ - int (*auc_authorize)(auth_client_t *ca, + int (*auc_authorize)(auth_client_t *ca, su_home_t *h, - char const *method, - url_t const *url, + char const *method, + url_t const *url, msg_payload_t const *body, msg_header_t **return_headers); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_common.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_common.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_common.h Tue Dec 16 13:05:22 2008 @@ -26,7 +26,7 @@ /** Defined when has been included. */ #define AUTH_COMMON_H -/**@file sofia-sip/auth_common.h +/**@file sofia-sip/auth_common.h * * Functions common for client/server. * @@ -43,7 +43,7 @@ SOFIAPUBFUN issize_t auth_get_params(su_home_t *home, char const * const params[], ... - /* char const * name, + /* char const * name, char const **return_value */); SOFIAPUBFUN int auth_struct_copy(void *dst, void const *src, isize_t s_size); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_digest.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_digest.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_digest.h Tue Dec 16 13:05:22 2008 @@ -26,14 +26,14 @@ /** Defined when has been included. */ #define AUTH_DIGEST_H -/**@file sofia-sip/auth_digest.h +/**@file sofia-sip/auth_digest.h * Datatypes and functions for Digest authentication. * * The structures and functions here follow the RFC 2617. * * @sa @RFC2617, * "HTTP Authentication: Basic and Digest Access Authentication", - * J. Franks et al, + * J. Franks et al, * June 1999. * * @sa @RFC3261 section 22 @@ -96,7 +96,7 @@ * * @code * credentials = "Digest" digest-response - * digest-response = 1#( username | realm | nonce | digest-uri | + * digest-response = 1#( username | realm | nonce | digest-uri | * response | [ algorithm ] | [cnonce] | [opaque] | * [message-qop] | [nonce-count] | [auth-param] ) * username = "username" "=" username-value Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_module.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_module.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_module.h Tue Dec 16 13:05:22 2008 @@ -24,9 +24,9 @@ #ifndef AUTH_MODULE_H /** Defined when has been included. */ -#define AUTH_MODULE_H +#define AUTH_MODULE_H -/**@file sofia-sip/auth_module.h +/**@file sofia-sip/auth_module.h * @brief Authentication verification interface. * * @author Pekka Pessi . @@ -56,7 +56,7 @@ /** Authentication operation. */ typedef struct auth_status_t auth_status_t; -#ifdef AUTH_MAGIC_T +#ifdef AUTH_MAGIC_T typedef AUTH_MAGIC_T auth_magic_t; #else typedef void auth_magic_t; @@ -81,10 +81,10 @@ * authentication operation and all the related data. The application * verifying the authentication fills the auth_status_t structure, then * calls auth_mod_method() (or auth_mod_challenge()). The operation result - * is stored in the structure. + * is stored in the structure. * * If the operation is asynchronous, only a preliminary result is stored in - * the auth_status_t structure when the call to auth_mod_method() returns. + * the auth_status_t structure when the call to auth_mod_method() returns. * In that case, the application @b must assign a callback function to the * structure. The callback function is invoked when the authentication * operation is completed. @@ -105,7 +105,7 @@ url_t const *as_user_uri; /* Return user's identity [in/out] */ char const *as_ident; /**< Identities [out] */ unsigned as_profile; /**< User profile (group) [out] */ - + su_addrinfo_t *as_source; /**< Source address [in] */ char const *as_realm; /**< Authentication realm [in] */ @@ -136,7 +136,7 @@ /** @} */ /** Pointer to extended state, used exclusively by plugin modules. */ - auth_splugin_t *as_plugin; + auth_splugin_t *as_plugin; }; /** Authentication challenge. @@ -146,7 +146,7 @@ * with 401 response code and phrase along with header class for * @b WWW-Authenticate header in the @a ach structure. */ -typedef struct auth_challenger +typedef struct auth_challenger { int ach_status; /**< Response status for challenge response */ char const *ach_phrase; /**< Response phrase for challenge response */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_ntlm.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_ntlm.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/sofia-sip/auth_ntlm.h Tue Dec 16 13:05:22 2008 @@ -24,20 +24,20 @@ #ifndef AUTH_NTLM_H /** Defined when has been included. */ -#define AUTH_NTLM_H +#define AUTH_NTLM_H -/**@file sofia-sip/auth_ntlm.h +/**@file sofia-sip/auth_ntlm.h * Datatypes and functions for Ntlm authentication. * * The structures and functions here follow the RFC 2617. * - * @sa - * RFC 2617, + * @sa + * RFC 2617, * "HTTP Authentication: Basic and Ntlm Access Authentication", - * J. Franks et al, + * J. Franks et al, * June 1999. * - * @sa Section 19 from + * @sa Section 19 from * au_params), 10); TEST0(auth_digest_sessionkey(ar, sessionkey, "Circle Of Life") == 0); - if (tstflags & tst_verbatim) + if (tstflags & tst_verbatim) printf("%s: sessionkey=\"%s\"\n", name, sessionkey); TEST0(strcmp(sessionkey, "939e7578ed9e3c518a452acee763bce9") == 0); TEST0(auth_digest_response(ar, hresponse, sessionkey, "GET", NULL, 0) == 0); - if (tstflags & tst_verbatim) + if (tstflags & tst_verbatim) printf("%s: hresponse=\"%s\"\n", name, hresponse); TEST0(strcmp(hresponse, "6629fae49393a05397450978507c4ef1") == 0); @@ -195,11 +195,11 @@ TEST_1(ac->ac_auth_int); { - char challenge[] = + char challenge[] = "Digest realm=\"opera.ntc.nokia.com\", " "nonce=\"InyiWI+qIdvDKkO2jFK7mg==\""; - char credentials[] = + char credentials[] = "Digest username=\"samuel.privat.saturday at opera.ntc.nokia.com\", " "realm=\"opera.ntc.nokia.com\", nonce=\"InyiWI+qIdvDKkO2jFK7mg==\", " "algorithm=MD5, uri=\"sip:opera.ntc.nokia.com\", " @@ -247,12 +247,12 @@ opaque="5ccc069c403ebaf9f0171e9517f40e41" */ - char challenge[] = + char challenge[] = "Digest realm=\"testrealm at host.com\", " "nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\", " "opaque=\"5ccc069c403ebaf9f0171e9517f40e41\""; - char rfc2069_cred[] = + char rfc2069_cred[] = "Digest username=\"Mufasa\", " "realm=\"testrealm at host.com\", " "nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\", " @@ -278,10 +278,10 @@ } { - char worldcom_chal[] = + char worldcom_chal[] = "Digest realm=\"WCOM\", nonce=\"ce2292f3f748fbe239bda9e852e8b986\""; - char worldcom_cred[] = + char worldcom_cred[] = "Digest realm=\"WCOM\", username=\"jari\", " "nonce=\"ce2292f3f748fbe239bda9e852e8b986\", " "response=\"ea692d202019d41a75c70df4b2401e2f\", " @@ -304,12 +304,12 @@ } { - char etri_chal[] = + char etri_chal[] = "Digest realm=\"nokia-proxy\", domain=\"sip:194.2.188.133\", " "nonce=\"wB7JBwIb/XhtgfGp1VuPoQ==\", opaque=\"wkJxwA==\", " ", algorithm=MD5, qop=\"auth\""; - char etri_cred[] = + char etri_cred[] = "Digest username=\"myhuh\", realm=\"nokia-proxy\", " "nonce=\"wB7JBwIb/XhtgfGp1VuPoQ==\", uri=\"sip:194.2.188.133\", " "response=\"32960a62bdc202171ca5a294dc229a6d\", " @@ -317,13 +317,13 @@ memset(ac, 0, sizeof(ac)); ac->ac_size = sizeof(ac); memset(ar, 0, sizeof(ar)); ar->ar_size = sizeof(ar); - + TEST0(pa = sip_proxy_authenticate_make(home, etri_chal)); TEST_SIZE(auth_digest_challenge_get(home, ac, pa->au_params), 8); TEST0(pz = sip_proxy_authorization_make(home, etri_cred)); TEST_SIZE(auth_digest_response_get(home, ar, pz->au_params), 6 /* 8 */); - + ar->ar_md5 = ac->ac_md5 || ac->ac_algorithm == NULL; TEST(auth_digest_sessionkey(ar, sessionkey, "myhuh"), 0); @@ -332,7 +332,7 @@ } { - char chal[] = + char chal[] = "Digest realm=\"nokia-proxy\", domain=\"sip:10.21.32.63\", " "nonce=\"GjbLsrozHC6Lx95C57vGlw==\", opaque=\"HN22wQ==\", algorithm=MD5"; @@ -344,13 +344,13 @@ memset(ac, 0, sizeof(ac)); ac->ac_size = sizeof(ac); memset(ar, 0, sizeof(ar)); ar->ar_size = sizeof(ar); - + TEST0(pa = sip_proxy_authenticate_make(home, chal)); TEST_SIZE(auth_digest_challenge_get(home, ac, pa->au_params), 6); TEST0(pz = sip_proxy_authorization_make(home, cred)); TEST_SIZE(auth_digest_response_get(home, ar, pz->au_params), 8); - + ar->ar_md5 = ac->ac_md5 || ac->ac_algorithm == NULL; TEST(auth_digest_sessionkey(ar, sessionkey, "test1"), 0); @@ -359,18 +359,18 @@ } { - char challenge[] = + char challenge[] = "Digest realm=\"nokia-proxy\", domain=\"sip:194.2.188.133\", " "nonce=\"3wWGOvaWn3n+hFv8PK2ABQ==\", opaque=\"+GNywA==\", " "algorithm=MD5, qop=\"auth-int\""; - char credentials[] = + char credentials[] = "Digest username=\"test\", realm=\"nokia-proxy\", " "nonce=\"3wWGOvaWn3n+hFv8PK2ABQ==\", " "cnonce=\"11RkhFg9EdaIRD36w0EMVA==\", opaque=\"+GNywA==\", " "uri=\"sip:3000 at 194.2.188.133\", algorithm=MD5, " "response=\"26e8b9aaacfca2d68770fab1ec04e2c7\", " "qop=auth-int, nc=00000001"; - char data[] = + char data[] = "\n" "\n" "\n" @@ -389,23 +389,23 @@ memset(ac, 0, sizeof(ac)); ac->ac_size = sizeof(ac); memset(ar, 0, sizeof(ar)); ar->ar_size = sizeof(ar); - + TEST0(pa = sip_proxy_authenticate_make(home, challenge)); TEST_SIZE(auth_digest_challenge_get(home, ac, pa->au_params), 8); TEST0(pz = sip_proxy_authorization_make(home, credentials)); TEST_SIZE(auth_digest_response_get(home, ar, pz->au_params), 12); - + ar->ar_md5 = ac->ac_md5 || ac->ac_algorithm == NULL; TEST0(!auth_digest_sessionkey(ar, sessionkey, "test")); - TEST0(!auth_digest_response(ar, hresponse, sessionkey, "REGISTER", + TEST0(!auth_digest_response(ar, hresponse, sessionkey, "REGISTER", data, strlen(data))); TEST_S(hresponse, "26e8b9aaacfca2d68770fab1ec04e2c7"); } su_home_deinit(home); - + END(); } @@ -418,7 +418,7 @@ msg_iovec_t iovec[2]; n = strlen(buffer); - if (n == 0) + if (n == 0) return NULL; msg = msg_create(sip_default_mclass(), flags); @@ -447,10 +447,10 @@ su_root_break(root); } -static +static void init_as(auth_status_t *as) { - memset(as, 0, sizeof *as); + memset(as, 0, sizeof *as); as->as_home->suh_size = (sizeof *as); su_home_init(as->as_home); as->as_method = "REGISTER"; @@ -458,14 +458,14 @@ as->as_phrase = "Infernal Error"; } -static +static void deinit_as(auth_status_t *as) { su_home_deinit(as->as_home); memset(as, 0, sizeof *as); } -static +static void reinit_as(auth_status_t *as) { deinit_as(as); init_as(as); @@ -475,9 +475,9 @@ int test_digest_client() { BEGIN(); - + { - char challenge[] = + char challenge[] = PROTOCOL " 401 Unauthorized\r\n" "Call-ID:0e3dc2b2-dcc6-1226-26ac-258b5ce429ab\r\n" "CSeq:32439043 REGISTER\r\n" @@ -488,8 +488,8 @@ "Content-Length:0\r\n" "Security-Server:digest\r\n" "r\n"; - - char request[] = + + char request[] = "REGISTER sip:ims3.so.noklab.net " PROTOCOL "\r\n" "Via: SIP/2.0/UDP 10.21.36.70:23800;rport;branch=z9hG4bKRE18GFwa3AS\r\n" "Max-Forwards: 80\r\n" @@ -515,13 +515,13 @@ auth_mod_t *am; auth_status_t as[1]; sip_www_authenticate_t *au; - auth_challenger_t ach[1] = - {{ 401, "Authorization required", + auth_challenger_t ach[1] = + {{ 401, "Authorization required", sip_www_authenticate_class, sip_authentication_info_class }}; - auth_challenger_t pach[1] = - {{ 407, "Proxy Authorization required", + auth_challenger_t pach[1] = + {{ 407, "Proxy Authorization required", sip_proxy_authenticate_class, sip_proxy_authentication_info_class }}; @@ -530,29 +530,29 @@ TEST_1(m1 = read_message(MSG_DO_EXTRACT_COPY, challenge)); TEST_1(sip = sip_object(m1)); - + TEST_1(aucs == NULL); - TEST(auc_challenge(&aucs, home, sip->sip_www_authenticate, + TEST(auc_challenge(&aucs, home, sip->sip_www_authenticate, sip_authorization_class), 1); TEST_1(aucs != NULL); msg_destroy(m1); - TEST(auc_all_credentials(&aucs, "DIGEST", "\"ims3.so.noklab.net\"", + TEST(auc_all_credentials(&aucs, "DIGEST", "\"ims3.so.noklab.net\"", "surf3.private at ims3.so.noklab.net", "1234"), 1); TEST_1(m2 = read_message(MSG_DO_EXTRACT_COPY, request)); TEST_1(sip = sip_object(m2)); TEST_P(sip->sip_authorization, NULL); TEST_1(rq = sip->sip_request); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, rq->rq_url, sip->sip_payload), 1); TEST_1(sip->sip_authorization); TEST_S(msg_params_find(sip->sip_authorization->au_params, "response="), "\"860f5ecc9990772e16937750ced9594d\""); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); TEST_S(msg_params_find(sip->sip_authorization->au_params, @@ -571,7 +571,7 @@ TEST_1(root = su_root_create(NULL)); - TEST_1(am = auth_mod_create(NULL, + TEST_1(am = auth_mod_create(NULL, AUTHTAG_METHOD("Digest"), AUTHTAG_REALM("ims3.so.noklab.net"), AUTHTAG_DB(testpasswd), @@ -582,7 +582,7 @@ auth_mod_check_client(am, as, sip->sip_authorization, ach); TEST(as->as_status, 401); - TEST_1(au = sip_authorization_make(home, + TEST_1(au = sip_authorization_make(home, "Digest username=\"user1\", " "nonce=\"3wWGOvaWn3n+hFv8PK2ABQ==\", " "opaque=\"+GNywA==\", " @@ -602,7 +602,7 @@ char const *uri = au->au_params[3]; char const *response = au->au_params[4]; char const *realm = au->au_params[5]; - + TEST_S(username, "username=\"user1\""); TEST_S(nonce, "nonce=\"3wWGOvaWn3n+hFv8PK2ABQ==\""); TEST_S(opaque, "opaque=\"+GNywA==\""); @@ -653,24 +653,24 @@ as->as_response = (msg_header_t *) sip_www_authenticate_make(as->as_home, "Unknown realm=\"huu haa\""); TEST_1(as->as_response); - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); aucs = NULL; reinit_as(as); auth_mod_check_client(am, as, NULL, ach); TEST(as->as_status, 401); - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); reinit_as(as); - - TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", + + TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", "user1", "secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -683,7 +683,7 @@ auth_mod_destroy(am); aucs = NULL; - TEST_1(am = auth_mod_create(NULL, + TEST_1(am = auth_mod_create(NULL, AUTHTAG_METHOD("Digest"), AUTHTAG_REALM("ims3.so.noklab.net"), AUTHTAG_DB(testpasswd), @@ -713,11 +713,11 @@ reinit_as(as); } - TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", + TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", "user1", "secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -750,12 +750,12 @@ TEST(msg_params_remove((msg_param_t *)au->au_params, "opaque"), 1); TEST(auc_challenge(&aucs, home, au, sip_authorization_class), 1); - TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", + TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", "user1", "secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -774,7 +774,7 @@ { msg_auth_t *au; - TEST_1(am = auth_mod_create(NULL, + TEST_1(am = auth_mod_create(NULL, AUTHTAG_METHOD("Digest"), AUTHTAG_DB(testpasswd), AUTHTAG_ALGORITHM("MD5-sess"), @@ -790,12 +790,12 @@ au = (void *)msg_header_dup(home, as->as_response); TEST_1(au); TEST(auc_challenge(&aucs, home, au, sip_authorization_class), 1); - TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", + TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", "user1", "secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -812,7 +812,7 @@ { char const *nonce1, *nextnonce, *nonce2; - TEST_1(am = auth_mod_create(NULL, + TEST_1(am = auth_mod_create(NULL, AUTHTAG_METHOD("Digest"), AUTHTAG_REALM("ims3.so.noklab.net"), AUTHTAG_DB(testpasswd), @@ -823,21 +823,21 @@ if NEXT_EXPIRES in nonzero */ AUTHTAG_NEXT_EXPIRES(900), TAG_END())); - + reinit_as(as); auth_mod_check_client(am, as, NULL, ach); TEST(as->as_status, 401); - - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); - TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", + TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", "user1", "secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); TEST_1(nonce1 = msg_header_find_param(sip->sip_authorization->au_common, "nonce")); - + reinit_as(as); auth_mod_check_client(am, as, sip->sip_authorization, ach); TEST(as->as_status, 0); @@ -850,8 +850,8 @@ TEST(auc_info(&aucs, (msg_auth_info_t const *)as->as_info, sip_authorization_class), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); TEST_1(nonce2 = msg_header_find_param(sip->sip_authorization->au_common, "nonce")); @@ -867,7 +867,7 @@ auth_mod_destroy(am); aucs = NULL; } - TEST_1(am = auth_mod_create(NULL, + TEST_1(am = auth_mod_create(NULL, AUTHTAG_METHOD("Digest"), AUTHTAG_REALM("ims3.so.noklab.net"), AUTHTAG_DB(testpasswd), @@ -878,13 +878,13 @@ reinit_as(as); auth_mod_check_client(am, as, NULL, ach); TEST(as->as_status, 401); - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); - TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", + TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", "user1", "secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -893,7 +893,7 @@ TEST(as->as_status, 0); auth_mod_destroy(am); aucs = NULL; - TEST_1(am = auth_mod_create(NULL, + TEST_1(am = auth_mod_create(NULL, AUTHTAG_METHOD("Digest"), AUTHTAG_REALM("ims3.so.noklab.net"), AUTHTAG_DB(testpasswd), @@ -907,13 +907,13 @@ reinit_as(as); auth_mod_check_client(am, as, NULL, ach); TEST(as->as_status, 401); - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); - TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", + TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", "user1", "secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -924,7 +924,7 @@ au = (void*)msg_header_copy(msg_home(m2), (void*)sip->sip_authorization); /* Test with invalid qop (bug #2329) */ - msg_params_replace(msg_home(m2), (void *)&au->au_params, + msg_params_replace(msg_home(m2), (void *)&au->au_params, "qop=\"auth,auth-int\""); reinit_as(as); auth_mod_check_client(am, as, au, ach); @@ -949,11 +949,11 @@ TEST_1(au = (void *)as->as_response); TEST_1(au->au_params); TEST_S(msg_params_find(au->au_params, "stale="), "true"); - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); TEST_S(msg_header_find_param(sip->sip_authorization->au_common, "nc="), @@ -965,8 +965,8 @@ /* Test nonce count check */ msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); TEST_S(msg_header_find_param(sip->sip_authorization->au_common, "nc="), @@ -983,15 +983,15 @@ /* Test anonymous operation */ reinit_as(as); auth_mod_check_client(am, as, NULL, ach); TEST(as->as_status, 401); - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); reinit_as(as); - TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", + TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", "anonymous", ""), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -1000,20 +1000,20 @@ auth_mod_destroy(am); aucs = NULL; /* Test empty realm */ - TEST_1(am = auth_mod_create(root, + TEST_1(am = auth_mod_create(root, AUTHTAG_METHOD("Digest"), AUTHTAG_REALM(""), AUTHTAG_DB(testpasswd), TAG_END())); reinit_as(as); auth_mod_check_client(am, as, NULL, ach); TEST(as->as_status, 401); - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); reinit_as(as); TEST(auc_all_credentials(&aucs, "Digest", "\"\"", "user1", "secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -1021,15 +1021,15 @@ auth_mod_check_client(am, as, sip->sip_authorization, ach); TEST(as->as_status, 0); aucs = NULL; - reinit_as(as); + reinit_as(as); auth_mod_check_client(am, as, NULL, pach); TEST(as->as_status, 407); - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_proxy_authorization_class), 1); reinit_as(as); TEST(auc_credentials(&aucs, as->as_home, "Digest:\"\":user1:secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_proxy_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_proxy_authorization); @@ -1040,25 +1040,25 @@ auth_mod_destroy(am); aucs = NULL; /* Test Basic authentication scheme */ - TEST_1(am = auth_mod_create(root, + TEST_1(am = auth_mod_create(root, AUTHTAG_METHOD("Basic"), AUTHTAG_REALM("ims3.so.noklab.net"), AUTHTAG_DB(testpasswd), TAG_END())); - reinit_as(as); - auth_mod_check_client(am, as, NULL, ach); + reinit_as(as); + auth_mod_check_client(am, as, NULL, ach); TEST(as->as_status, 401); - - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); - reinit_as(as); + reinit_as(as); - TEST(auc_all_credentials(&aucs, "Basic", "\"ims3.so.noklab.net\"", + TEST(auc_all_credentials(&aucs, "Basic", "\"ims3.so.noklab.net\"", "user1", "secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -1067,20 +1067,20 @@ aucs = NULL; - reinit_as(as); - auth_mod_check_client(am, as, NULL, ach); + reinit_as(as); + auth_mod_check_client(am, as, NULL, ach); TEST(as->as_status, 401); - - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); - reinit_as(as); + reinit_as(as); - TEST(auc_all_credentials(&aucs, "Basic", "\"ims3.so.noklab.net\"", - "very-long-user-name-that-surely-exceeds-the-static-buffer", + TEST(auc_all_credentials(&aucs, "Basic", "\"ims3.so.noklab.net\"", + "very-long-user-name-that-surely-exceeds-the-static-buffer", "at-least-when-used-with-the-even-longer-password"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -1091,7 +1091,7 @@ /* Test asynchronous operation */ aucs = NULL; - TEST_1(am = auth_mod_create(root, + TEST_1(am = auth_mod_create(root, AUTHTAG_METHOD("Delayed+Digest"), AUTHTAG_REALM("ims3.so.noklab.net"), AUTHTAG_DB(testpasswd), @@ -1107,19 +1107,19 @@ TEST(as->as_status, 100); su_root_run(root); TEST(as->as_status, 401); - - TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, + + TEST(auc_challenge(&aucs, home, (msg_auth_t *)as->as_response, sip_authorization_class), 1); reinit_as(as); as->as_callback = test_callback; as->as_magic = root; - TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", + TEST(auc_all_credentials(&aucs, "Digest", "\"ims3.so.noklab.net\"", "user1", "secret"), 1); msg_header_remove(m2, (void *)sip, (void *)sip->sip_authorization); - TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, - (url_t *)"sip:surf3 at ims3.so.noklab.net", + TEST(auc_authorization(&aucs, m2, (msg_pub_t*)sip, rq->rq_method_name, + (url_t *)"sip:surf3 at ims3.so.noklab.net", sip->sip_payload), 1); TEST_1(sip->sip_authorization); @@ -1188,7 +1188,7 @@ TEST(close(tmpfd), 0); /* Test file reading operation */ - am = auth_mod_create(NULL, + am = auth_mod_create(NULL, AUTHTAG_METHOD("Digest"), AUTHTAG_REALM("realm"), AUTHTAG_DB(tmppasswd), @@ -1201,7 +1201,7 @@ apw = auth_mod_getpass(am, "user2", NULL); TEST_1(apw); TEST_S(apw->apw_hash, "4cbc2aff0b5b2b33675c0731c0db1c14"); - + apw2 = apw; *am0 = *am; @@ -1312,7 +1312,7 @@ if (rest == NULL || *rest) usage(1); - + su_log_set_level(iptsec_log, level); } else { usage(1); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/ChangeLog ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/ChangeLog (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/ChangeLog Tue Dec 16 13:05:22 2008 @@ -6,7 +6,7 @@ * Renamed msg_test.c as test_msg.c. - * Renamed msg_test_class.[hc] as test_class.[hc], + * Renamed msg_test_class.[hc] as test_class.[hc], msg_test_protos.h(.in) as test_protos.h(.in), msg_test_table.c(.in) as test_table.c(.in). @@ -40,14 +40,14 @@ * msg_parser.c: Using header-specific flags to classify parsing errors with msg_extract_errors(). - + Added support for apndlist headers. * msg_header.h: Added support for apndlist headers. * msg_mime.c: Various Accept* headers are now apndlist meaning that they are printed on single line by default. - + 2005-07-18 Kai Vehmanen * Initial import of the module to Sofia-SIP tree. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/Makefile.am Tue Dec 16 13:05:22 2008 @@ -33,7 +33,7 @@ INTERNAL_H = msg_internal.h test_class.h nobase_include_sofia_HEADERS = \ - $(GENERATED_H) $(PUBLIC_H) + $(GENERATED_H) $(PUBLIC_H) GENERATED_HC = $(GENERATED_H) msg_mime_table.c test_table.c test_protos.h @@ -55,7 +55,7 @@ ../bnf/libbnf.la \ ../url/liburl.la \ ../ipt/libipt.la \ - ../su/libsu.la + ../su/libsu.la test_msg_LDFLAGS = -static Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg.c Tue Dec 16 13:05:22 2008 @@ -95,7 +95,7 @@ * destroyed. * * @param msg message of which a reference is created - * + * * @return * A pointer to a message. */ @@ -137,7 +137,7 @@ * @relatesalso msg_s * * @param ref pointer to msg object - * + * * @deprecated Use msg_destroy() instead. */ void msg_ref_destroy(msg_t *ref) @@ -154,7 +154,7 @@ void msg_destroy(msg_t *msg) { msg_t *parent; - + for (; msg; msg = parent) { int refs; su_home_mutex_lock(msg->m_home); @@ -174,9 +174,9 @@ /**Retrieve public message structure. * * Get a pointer to the public message structure. - * + * * @param msg pointer to msg object - * + * * @returns * A pointer to the public message structure, or NULL if none. */ @@ -194,10 +194,10 @@ * * Get a pointer to the public message structure of the * given protocol. - * + * * @param msg pointer to msg object * @param tag tag of public message structure - * + * * @returns * A pointer to the public message structure, or NULL if there is none or * the message is not for desired protocol. @@ -216,9 +216,9 @@ * * Get a pointer to the message class object * (factory object for the message). - * + * * @param msg pointer to msg object - * + * * @returns * A pointer to the message class, or NULL if none. */ @@ -239,7 +239,7 @@ * Zero the address and addressinfo structures associated with the message. * * @sa msg_addrinfo(), msg_set_address(), msg_get_address(), msg_addr_copy(). - */ + */ void msg_addr_zero(msg_t *msg) { memset(&msg->m_addr, 0, sizeof(&msg->m_addr)); @@ -249,7 +249,7 @@ msg->m_addrinfo.ai_addr = &msg->m_addr->su_sa; } -/** Get pointer to socket address structure. +/** Get pointer to socket address structure. * * @relatesalso msg_s * @@ -269,7 +269,7 @@ * * @param msg pointer to msg object * @param su pointer to socket address structure - * @param return_len return parameter value for length + * @param return_len return parameter value for length * of socket address structure * * @sa msg_addrinfo(), msg_set_address(), msg_addr_zero(), msg_addr_copy(). @@ -287,13 +287,13 @@ return -1; } -/** Set message address. +/** Set message address. * * @relatesalso msg_s * * Copy the supplied socket address to the socket address structure * associated with the message. - * + * * @param msg pointer to msg object * @param su pointer to socket address structure * @param sulen length of socket address structure @@ -337,7 +337,7 @@ * Copy the addrinfo and socket address structures from @a src to the @a dst * message object. * - * @param dst pointer to destination message object + * @param dst pointer to destination message object * @param src pointer to source message object * * @sa msg_addrinfo(), msg_get_address(), msg_set_address(), msg_addr_zero(). @@ -347,10 +347,10 @@ dst->m_addrinfo = src->m_addrinfo; dst->m_addrinfo.ai_next = NULL; dst->m_addrinfo.ai_canonname = NULL; - memcpy(dst->m_addrinfo.ai_addr = &dst->m_addr->su_sa, + memcpy(dst->m_addrinfo.ai_addr = &dst->m_addr->su_sa, src->m_addr, src->m_addrinfo.ai_addrlen); if (dst->m_addrinfo.ai_addrlen < sizeof(dst->m_addr)) - memset((char *)dst->m_addr + dst->m_addrinfo.ai_addrlen, 0, + memset((char *)dst->m_addr + dst->m_addrinfo.ai_addrlen, 0, sizeof(dst->m_addr) - dst->m_addrinfo.ai_addrlen); } @@ -361,9 +361,9 @@ * * If the message parser fails to parse certain headers in the message, it * sets the corresponding extract error flags. The flags corresponding to - * each header are stored in the message parser (msg_mclass_t) structure. - * They are set when the header is added to the parser table. - * + * each header are stored in the message parser (msg_mclass_t) structure. + * They are set when the header is added to the parser table. + * * The SIP flags are defined in . For well-known * SIP headers, the flags for each header are listed in a separate text file * (sip_bad_mask) read by msg_parser.awk. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg.docs Tue Dec 16 13:05:22 2008 @@ -38,9 +38,9 @@ is extended by a new header or a parser is created for a completely new protocol. It is possible to add new headers to the parser or extend the definition of existing ones. The header files used for constructing these -parsers are as follows: -- parsing functions, macros -- message factory object definition +parsers are as follows: +- parsing functions, macros +- message factory object definition - hashing of header names @section msg_overview Parsers, Messages and Headers @@ -54,7 +54,7 @@ protocol-specific header files include , , and . For each header, there is defined a @em header @em class structure, some standard functions, and tags for including them in tag -lists. +lists. As a convention, all the identifiers for SIP headers start with prefix @c sip and all the macros with @c SIP. Same thing holds for HTTP, too: it @@ -73,18 +73,18 @@ header class as follows: - @c ns_X_t is the structure used to store parsed header, - - @c ns_hclass_t @c ns_X_class[] contains the @em header @em class + - @c ns_hclass_t @c ns_X_class[] contains the @em header @em class for header X, - @c NS_X_INIT() initializes a static instance of @c ns_X_t, - @c ns_X_init() initializes a dynamic instance of @c ns_X_t, - @c ns_is_X() tests if header object is instance of header X, - @c ns_X_make() creates a header X object by decoding given string, - - @c ns_X_format() creates a header X object by decoding given + - @c ns_X_format() creates a header X object by decoding given @c printf() list, - - @c ns_X_dup() duplicates (deeply copies) the header X, - - @c ns_X_copy() copies the header X, + - @c ns_X_dup() duplicates (deeply copies) the header X, + - @c ns_X_copy() copies the header X, - @c NSTAG_X() is used include instance of @c ns_X_t in a tag list, and - - @c NSTAG_X_STR() is used to include string containing value header + - @c NSTAG_X_STR() is used to include string containing value header in a tag list. The declarations of header tags and the prototypes for these functions can @@ -111,7 +111,7 @@ the parser considers any received data, be it a UDP datagram or a TCP stream, as a @em byte @em stream. The protocol-specific parsers controls how a byte stream is split into separate messages or if it consists of a single -message only. +message only. The parser engine works by separating stream into fragments, then passing the fragment to a suitable parser. A fragment is a piece of message that is @@ -120,7 +120,7 @@ message body can consists of multiple fragments known as chunks.) The parser starts by separating the first line (e.g., request or status -line) from the byte stream, then passing the line to the suitable parser. +line) from the byte stream, then passing the line to the suitable parser. After first line comes the message headers. The parser continues parsing process by extracting headers, each on their own line, from the stream and passing contents of each header to its parser. The message structure is @@ -195,7 +195,7 @@ char const *ac_subtype; //< Points after first slash in type msg_param_t const *ac_params; //< List of parameters msg_param_t ac_q; //< Value of q parameter -} +} msg_accept_t; @endcode @@ -205,8 +205,8 @@ the @c ac_params array. If there is a @e q parameter present, a pointer to the @c qvalue is assigned to @c ac_q field. -In the beginning of the header structure there are two boilerplate members. -The @c ac_common[1] contains information common to all message fragments. +In the beginning of the header structure there are two boilerplate members. +The @c ac_common[1] contains information common to all message fragments. The @c ac_next is a pointer to next header field with the same name, in case a message contains multiple @b Accept headers or multiple comma-separated header fields are located in a single line. @@ -217,7 +217,7 @@ other. The programmer also needs a convenient way to access certain headers at the message level, for example, accessing directly the @b Accept header instead of going through all headers and examining their name. The -structured view to the message is provided via a message-specific C struct. +structured view to the message is provided via a message-specific C struct. In general, its type is msg_pub_t (it provides public view to message). The protocol-specific type is #sip_t, #http_t or #msg_multipart_t for SIP, HTTP and MIME, respectively. @@ -283,7 +283,7 @@ The figure below shows the layout of the BYE message above after parsing: - at image html sip-parser2.gif BYE message and its representation in C + at image html sip-parser2.gif BYE message and its representation in C @image latex sip-parser2.eps BYE message and its representation in C The leftmost box represents the message of type #msg_t. Next box from @@ -446,7 +446,7 @@ /**@typedef typedef struct msg_s msg_t; * - * Message object. + * Message object. * * The @a msg_t is the type of a message object used by Sofia signaling * protocols and parsers. Its contents are not directly accessible. @@ -454,7 +454,7 @@ /**@typedef typedef struct msg_common_s msg_common_t; * - * Common part of header. + * Common part of header. * * The @a msg_common_t is the base type of a message headers used by * protocol parsers. Instead of #msg_common_t, most interfaces use Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_auth.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_auth.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_auth.c Tue Dec 16 13:05:22 2008 @@ -76,9 +76,9 @@ /* ====================================================================== */ /* - * auth = ("Authorization" | "Encryption" | + * auth = ("Authorization" | "Encryption" | * "Proxy-Authenticate" | "Proxy-Authorization" | - * "Response-Key" | "WWW-Authenticate") ":" + * "Response-Key" | "WWW-Authenticate") ":" * scheme 1*SP #auth-param * scheme = token * auth-param = token | token "=" token | token "=" quoted-string @@ -93,12 +93,12 @@ msg_auth_t *au = (msg_auth_t *)h; au->au_scheme = s; - + skip_token(&s); if (!IS_LWS(*s)) return -1; *s++ = '\0'; /* NUL-terminate scheme */ - return msg_commalist_d(home, &s, (msg_param_t **)&au->au_params, + return msg_commalist_d(home, &s, (msg_param_t **)&au->au_params, NULL /* msg_auth_item_scan */); } @@ -114,11 +114,11 @@ MSG_COMMALIST_E(b, end, au->au_params, compact); } MSG_TERM_E(b, end); - + return b - b0; } -/**@internal +/**@internal * Extra size of a msg_auth_t object. * * This function calculates extra size required by a msg_auth_t object. @@ -134,7 +134,7 @@ MSG_PARAMS_SIZE(offset, au->au_params); offset += MSG_STRING_SIZE(au->au_scheme); - + return offset; } @@ -150,7 +150,7 @@ b = msg_params_dup(&au->au_params, o->au_params, b, xtra); MSG_STRING_DUP(b, au->au_scheme, o->au_scheme); - + assert(b <= end); (void)end; return b; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_basic.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_basic.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_basic.c Tue Dec 16 13:05:22 2008 @@ -61,7 +61,7 @@ * @defgroup msg_error Erroneous Headers * * The erroneous headers are stored in #msg_error_t structure. - * + * * @note Parser may put other headers (like duplicate Content-Length * headers) into the list of erroneous headers. If the list of erroneous * headers is processed, the header type must be validated first by calling @@ -111,7 +111,7 @@ * The unknown headers are handled with #msg_unknown_t structure. The whole * unknown header including its name is included in the header value string * @a g_value. - * + * * @note It is possible to speed up parsing process by creating a parser * which does understand only a minimum number of headers. If such a parser * is used, some well-known headers are not regocnized or parser, but they @@ -139,7 +139,7 @@ *s++ = '\0'; skip_lws(&s); un->un_value = s; - + return 0; } @@ -153,7 +153,7 @@ MSG_CHAR_E(b, end, ':'); if (!compact) MSG_CHAR_E(b, end, ' '); MSG_STRING_E(b, end, un->un_value); - + return b - b0; } @@ -184,7 +184,7 @@ * @defgroup msg_payload Message Body * * The payload object contains the message body. The message body has no - * structure, but it is stored in the @a pl_data buffer as a byte array. + * structure, but it is stored in the @a pl_data buffer as a byte array. * Multiple payload objects may be linked to a list. */ @@ -197,7 +197,7 @@ * @code * typedef struct msg_payload_s { * msg_common_t pl_common[1]; // Common fragment info - * msg_header_t *pl_next; // Next payload object + * msg_header_t *pl_next; // Next payload object * char *pl_data; // Data - may contain zero bytes * usize_t pl_len; // Length of message payload * } msg_payload_t; @@ -263,7 +263,7 @@ char *msg_payload_dup_one(msg_header_t *dst, msg_header_t const *src, - char *b, + char *b, isize_t xtra) { msg_payload_t *pl = dst->sh_payload; @@ -288,7 +288,7 @@ /* ====================================================================== */ /**@ingroup msg_headers - * @defgroup msg_separator Message Separator + * @defgroup msg_separator Message Separator * * An empty line separates headers from the message body. In order to avoid * modifying messages with integrity protection, the separator line has its @@ -325,7 +325,7 @@ if (len == 0 && slen > 0) return -1; - + memcpy(h->sh_separator->sep_data, s, len); h->sh_separator->sep_data[len] = '\0'; @@ -345,7 +345,7 @@ msg_separator_t *msg_separator_create(su_home_t *home) { - msg_separator_t *sep = + msg_separator_t *sep = msg_header_alloc(home, msg_separator_class, 0)->sh_separator; if (sep) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_date.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_date.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_date.c Tue Dec 16 13:05:22 2008 @@ -59,7 +59,7 @@ * * First day of the epoch year should be Monday. */ -#define EPOCH 1900 +#define EPOCH 1900 /** Is this year a leap year? @internal */ #define LEAP_YEAR(y) ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0)) /** Day number of New Year Day of given year. @internal */ @@ -69,25 +69,25 @@ /* ====================================================================== */ -static unsigned char const days_per_months[12] = +static unsigned char const days_per_months[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; /** Offset of first day of the month with formula day = 30 * month + offset. */ -static signed char const first_day_offset[12] = +static signed char const first_day_offset[12] = { 0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4 }; -static char const wkdays[7 * 4] = +static char const wkdays[7 * 4] = "Mon\0" "Tue\0" "Wed\0" "Thu\0" "Fri\0" "Sat\0" "Sun"; -static char const months[12 * 4] = - "Jan\0" "Feb\0" "Mar\0" "Apr\0" "May\0" "Jun\0" +static char const months[12 * 4] = + "Jan\0" "Feb\0" "Mar\0" "Apr\0" "May\0" "Jun\0" "Jul\0" "Aug\0" "Sep\0" "Oct\0" "Nov\0" "Dec"; -/** Parse a month name. +/** Parse a month name. * * @return The function month_d() returns 0..11 if given first three letters * of month name, or -1 if no month name matches. @@ -126,19 +126,19 @@ /* Parse SP 2DIGIT ":" 2DIGIT ":" 2DIGIT SP */ su_inline -int time_d(char const **ss, +int time_d(char const **ss, unsigned long *hour, unsigned long *min, unsigned long *sec) { char const *s = *ss; - if (!IS_LWS(*s)) - return -1; + if (!IS_LWS(*s)) + return -1; skip_lws(&s); if (!is_digit(*s)) return -1; *hour = *s++ - '0'; if (is_digit(*s)) *hour = 10 * (*hour) + *s++ - '0'; - if (*s++ != ':' || !is_digit(s[0]) || !is_digit(s[1])) + if (*s++ != ':' || !is_digit(s[0]) || !is_digit(s[1])) return -1; *min = 10 * s[0] + s[1] - 11 * '0'; s += 2; - if (*s++ != ':' || !is_digit(s[0]) || !is_digit(s[1])) + if (*s++ != ':' || !is_digit(s[0]) || !is_digit(s[1])) return -1; *sec = 10 * s[0] + s[1] - 11 * '0'; s += 2; if (*s) { @@ -149,10 +149,10 @@ } /**Decode RFC1123-date, RFC822-date or asctime-date. - * - * The function msg_date_d() decodes , which may have + * + * The function msg_date_d() decodes , which may have * different formats. - * + * * @code * HTTP-date = rfc1123-date / rfc850-date / asctime-date * @@ -174,7 +174,7 @@ * wkday = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun" * weekday = "Monday" / "Tuesday" / "Wednesday" * / "Thursday" / "Friday" / "Saturday" / "Sunday" - * month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" + * month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" * / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" * @endcode */ @@ -189,26 +189,26 @@ if (!IS_TOKEN(*s) || !date) return -1; - wkday = s; skip_token(&s); if (*s == ',') s++; + wkday = s; skip_token(&s); if (*s == ',') s++; while (IS_LWS(*s)) s++; if (is_digit(*s)) { day = *s++ - '0'; if (is_digit(*s)) day = 10 * day + *s++ - '0'; - + if (*s == ' ') { - /* rfc1123-date = + /* rfc1123-date = wkday "," SP 2DIGIT SP month SP 4DIGIT SP time SP "GMT" */ mon = month_d(++s); skip_token(&s); if (mon < 0 || !IS_LWS(*s)) return -1; s++; - if (!is_digit(s[0]) || !is_digit(s[1]) || + if (!is_digit(s[0]) || !is_digit(s[1]) || !is_digit(s[2]) || !is_digit(s[3])) return -1; year = 1000 * s[0] + 100 * s[1] + 10 * s[2] + s[3] - 1111 * '0'; s += 4; } else if (*s == '-') { - /* rfc822-date = + /* rfc822-date = weekday "," SP 2DIGIT "-" month "-" 2DIGIT SP time SP "GMT" */ @@ -216,9 +216,9 @@ if (mon < 0 || s[3] != '-' || !is_digit(s[4]) || !is_digit(s[5])) return -1; - year = 10 * s[4] + s[5] - 11 * '0'; + year = 10 * s[4] + s[5] - 11 * '0'; if (is_digit(s[6]) && is_digit(s[7])) { - /* rfc2822-date = + /* rfc2822-date = weekday "," SP 2DIGIT "-" month "-" 4DIGIT SP time SP "GMT" */ year = year * 100 + 10 * s[6] + s[7] - 11 * '0'; @@ -243,26 +243,26 @@ } } else { - /* actime-date = + /* actime-date = wkday SP month SP ( 2DIGIT | ( SP 1DIGIT )) SP time SP 4DIGIT */ mon = month_d(s); skip_token(&s); if (mon < 0 || !IS_LWS(*s)) return -1; s++; - while (IS_LWS(*s)) s++; + while (IS_LWS(*s)) s++; if (!is_digit(*s)) return -1; day = *s++ - '0'; if (is_digit(*s)) day = 10 * day + *s++ - '0'; if (time_d(&s, &hour, &min, &sec) < 0) return -1; - /* Accept also unix date (if it is GMT) */ + /* Accept also unix date (if it is GMT) */ if ((s[0] == 'G' && s[1] == 'M' && s[2] == 'T' && s[3] == ' ') || (s[0] == 'U' && s[1] == 'T' && s[2] == 'C' && s[3] == ' ')) s += 4; else if (s[0] == 'U' && s[1] == 'T' && s[2] == ' ') s += 3; - if (!is_digit(s[0]) || !is_digit(s[1]) || + if (!is_digit(s[0]) || !is_digit(s[1]) || !is_digit(s[2]) || !is_digit(s[3])) return -1; year = 1000 * s[0] + 100 * s[1] + 10 * s[2] + s[3] - 1111 * '0'; s += 4; } - + if (hour > 24 || min >= 60 || sec >= 60 || (hour == 24 && min > 0 && sec > 0)) return -1; @@ -271,7 +271,7 @@ if (day != 29 || mon != 1 || !LEAP_YEAR(year)) return -1; } - + if (year < EPOCH) { *date = 0; } @@ -281,17 +281,17 @@ else { int leap_year = LEAP_YEAR(year); msg_time_t ydays = YEAR_DAYS(year) - YEAR_DAYS(EPOCH); - + #if 0 - printf("Year %d%s starts %ld = %d - %d days since epoch (%d)\n", - year, leap_year ? " (leap year)" : "", + printf("Year %d%s starts %ld = %d - %d days since epoch (%d)\n", + year, leap_year ? " (leap year)" : "", ydays, YEAR_DAYS(year), YEAR_DAYS(EPOCH), EPOCH); #endif - - *date = sec + 60 * - (min + 60 * - (hour + 24 * - (day - 1 + mon * 30 + first_day_offset[mon] + + + *date = sec + 60 * + (min + 60 * + (hour + 24 * + (day - 1 + mon * 30 + first_day_offset[mon] + (leap_year && mon > 2) + ydays))); } *ss = s; @@ -301,10 +301,10 @@ /**Encode RFC1123-date. - * + * * The function msg_date_e() prints @e http-date in the * format. The format is as follows: - * + * * @code * rfc1123-date = wkday "," SP date SP time SP "GMT" * wkday = "Mon" | "Tue" | "Wed" @@ -317,11 +317,11 @@ * time = 2DIGIT ":" 2DIGIT ":" 2DIGIT * ; 00:00:00 - 23:59:59 * @endcode - * + * * @param b buffer to print the date * @param bsiz size of the buffer * @param http_date seconds since 01 Jan 1900. - * + * * @return The function msg_date_e() returns the size of the formatted date. */ issize_t msg_date_e(char b[], isize_t bsiz, msg_time_t http_date) @@ -349,7 +349,7 @@ day -= YEAR_DAYS(year); leap_year = LEAP_YEAR(year); - month = 0, days_per_month = 31; + month = 0, days_per_month = 31; while (day >= days_per_month) { day -= days_per_month; month++; @@ -357,13 +357,13 @@ } return snprintf(b, bsiz, "%s, %02ld %s %04ld %02ld:%02ld:%02ld GMT", - wkdays + wkday * 4, day + 1, months + month * 4, + wkdays + wkday * 4, day + 1, months + month * 4, year, hour, min, sec); } /**Decode a delta-seconds. - * + * * The function msg_delta_d() decodes a field. * * The is defined as follows: @@ -393,9 +393,9 @@ return snprintf(b, bsiz, "%lu", (unsigned long)delta); } -/** Decode a HTTP date or delta - * - * Decode a @ref msg_date_d() "" or +/** Decode a HTTP date or delta + * + * Decode a @ref msg_date_d() "" or * @ref msg_delta_d() "" field. */ issize_t msg_date_delta_d(char const **ss, Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_generic.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_generic.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_generic.c Tue Dec 16 13:05:22 2008 @@ -22,15 +22,15 @@ * */ -/**@internal +/**@internal * @ingroup msg_parser * @file msg_generic.c * @brief Functions for generic headers - * + * * @author Pekka Pessi * * @date Created: Thu Jan 23 20:08:00 2003 ppessi - * + * */ #include "config.h" @@ -55,17 +55,17 @@ * * The function msg_generic_d() parses a generic header structure. * - * @param[in] home memory home - * @param[in,out] h header structure - * @param[in] s string to be parsed - * @param[in] slen length of the string + * @param[in] home memory home + * @param[in,out] h header structure + * @param[in] s string to be parsed + * @param[in] slen length of the string * - * @retval 0 when successful, + * @retval 0 when successful, * @retval -1 upon an error. */ issize_t msg_generic_d(su_home_t *home, msg_header_t *h, - char *s, + char *s, isize_t slen) { h->sh_generic->g_string = s; @@ -80,9 +80,9 @@ */ issize_t msg_generic_e(char b[], isize_t bsiz, msg_header_t const *h, int flags) { - msg_generic_t const *g = h->sh_generic; + msg_generic_t const *g = h->sh_generic; size_t n = strlen(g->g_string); - + if (bsiz > n) strcpy(b, g->g_string); @@ -142,7 +142,7 @@ /* ====================================================================== */ /* Comma-separated list */ -/** @typedef struct msg_list_s msg_list_t; +/** @typedef struct msg_list_s msg_list_t; * * Type for token list headers. * @@ -157,14 +157,14 @@ { int compact = MSG_IS_COMPACT(flags); char *b0 = b, *end = b + bsiz; - + MSG_COMMALIST_E(b, end, h->sh_list->k_items, compact); MSG_TERM_E(b, end); return b - b0; } -/**@internal +/**@internal * Extra size of a msg_auth_t object. * * This function calculates extra size required by a msg_auth_t object. @@ -182,14 +182,14 @@ char *msg_list_dup_one(msg_header_t *dst, msg_header_t const *src, - char *b, + char *b, isize_t xtra) { char *end = b + xtra; msg_param_t const ** items = (msg_param_t const **)&dst->sh_list->k_items; b = msg_params_dup(items, src->sh_list->k_items, b, xtra); - + assert(b <= end); (void)end; return b; @@ -200,8 +200,8 @@ * @retval 0 when successful * @retval -1 upon an error */ -int msg_list_append_items(su_home_t *home, - msg_list_t *k, +int msg_list_append_items(su_home_t *home, + msg_list_t *k, msg_param_t const items[]) { size_t i; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_header_copy.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_header_copy.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_header_copy.c Tue Dec 16 13:05:22 2008 @@ -23,8 +23,8 @@ */ /**@ingroup msg_headers - * @CFILE msg_header_copy.c - * + * @CFILE msg_header_copy.c + * * Copying and duplicating headers structures. * * @author Pekka Pessi @@ -65,7 +65,7 @@ /** Copy a vector of parameters */ su_inline char *msg_params_copy(char *b, size_t size, - msg_param_t **dst, + msg_param_t **dst, msg_param_t const src[]) { size_t n = msg_params_count(src); @@ -90,11 +90,11 @@ * @param hc header class for the copied header * @param src pointer to a header object * - * @return + * @return * The function @c msg_header_copy_as() returns a pointer to the the shallow copy * of the header object, or @c NULL upon an error. */ -static msg_header_t *msg_header_copy_one_as(su_home_t *home, +static msg_header_t *msg_header_copy_one_as(su_home_t *home, msg_hclass_t *hc, msg_header_t const *src) { @@ -145,7 +145,7 @@ * @return The function @c msg_header_copy_as() returns a pointer to the * first of the copied msg header object(s), or @c NULL upon an error. */ -msg_header_t *msg_header_copy_as(su_home_t *home, +msg_header_t *msg_header_copy_as(su_home_t *home, msg_hclass_t *hc, msg_header_t const *src) { @@ -161,7 +161,7 @@ if (!(h = msg_header_copy_one_as(home, hc, src))) break; - if (!rv) + if (!rv) rv = h; else prev->sh_next = h; @@ -210,7 +210,7 @@ * @return Return a pointer to the * the duplicated msg header object(s), or @c NULL upon an error. */ -msg_header_t *msg_header_dup_one(su_home_t *home, +msg_header_t *msg_header_dup_one(su_home_t *home, msg_header_t const *src) { msg_hclass_t *hc; @@ -277,7 +277,7 @@ if (!(h = msg_header_alloc(home, hc, (isize_t)xtra))) break; /* error */ - if (!rv) + if (!rv) rv = h; if (!(end = hc->hc_dup_one(h, src, (char *)h + size, xtra))) @@ -343,7 +343,7 @@ */ char *msg_default_dup_one(msg_header_t *h, msg_header_t const *src, - char *b, + char *b, isize_t xtra) { memcpy(&h->sh_header_next[1], @@ -357,9 +357,9 @@ /* Copying or duplicating all headers in a message */ static int msg_copy_chain(msg_t *msg, msg_t const *copied); -static int msg_dup_or_copy_all(msg_t *msg, +static int msg_dup_or_copy_all(msg_t *msg, msg_t const *original, - msg_header_t *(*copy_one)(su_home_t *h, + msg_header_t *(*copy_one)(su_home_t *h, msg_header_t const *)); @@ -383,8 +383,8 @@ msg_t *copy = msg_create(original->m_class, original->m_object->msg_flags); if (copy) { - if (original->m_chain - ? msg_copy_chain(copy, original) < 0 + if (original->m_chain + ? msg_copy_chain(copy, original) < 0 : msg_dup_or_copy_all(copy, original, msg_header_copy_one) < 0) { msg_destroy(copy), copy = NULL; } @@ -412,18 +412,18 @@ msg_header_t *dh; msg_header_t const *sh; msg_header_t **hh; - + tail = msg->m_tail; - + for (sh = original->m_chain; sh; sh = (msg_header_t const *)sh->sh_succ) { hh = msg_hclass_offset(msg->m_class, dst, sh->sh_class); if (!hh) break; while (*hh) hh = &(*hh)->sh_next; - + dh = msg_header_copy_one(home, sh); - if (!dh) + if (!dh) break; dh->sh_prev = tail, *tail = dh, tail = &dh->sh_succ; @@ -468,15 +468,15 @@ return NULL; } -/** Copy a complete message, not keeping the header chain structure. +/** Copy a complete message, not keeping the header chain structure. * * @retval 0 when successful * @retval -1 upon an error */ static -int msg_dup_or_copy_all(msg_t *msg, +int msg_dup_or_copy_all(msg_t *msg, msg_t const *original, - msg_header_t *(*copy_one)(su_home_t *h, + msg_header_t *(*copy_one)(su_home_t *h, msg_header_t const *)) { su_home_t *home = msg_home(msg); @@ -493,7 +493,7 @@ assert(copy_one); end = (msg_header_t**)((char *)src + src->msg_size); - + for (ssh = &src->msg_request; ssh < end; ssh++) { sh = *ssh; if (!sh) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_header_make.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_header_make.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_header_make.c Tue Dec 16 13:05:22 2008 @@ -61,14 +61,14 @@ #include /** Make a header from a value string. */ -msg_header_t *msg_header_make(su_home_t *home, +msg_header_t *msg_header_make(su_home_t *home, msg_hclass_t *hc, char const *s) { size_t xtra; msg_header_t *h; int normal = hc->hc_name || - (hc->hc_hash != msg_payload_hash && + (hc->hc_hash != msg_payload_hash && hc->hc_hash != msg_separator_hash && hc->hc_hash != msg_error_hash); @@ -76,7 +76,7 @@ return NULL; /* For normal headers, strip LWS from both ends */ - if (normal) + if (normal) skip_lws(&s); xtra = strlen(s); if (normal) @@ -91,7 +91,7 @@ strncpy(b, s, xtra)[xtra] = 0; if (hc->hc_parse(home, h, b, xtra) == -1) { - /* Note: parsing function is responsible to free + /* Note: parsing function is responsible to free everything it has allocated (like parameter lists) */ /* XXX - except header structures */ su_free(home, h), h = NULL; @@ -102,13 +102,13 @@ } /** Make a MSG header with formatting provided. */ -msg_header_t *msg_header_vformat(su_home_t *home, +msg_header_t *msg_header_vformat(su_home_t *home, msg_hclass_t *hc, char const *fmt, va_list ap) { msg_header_t *h; - + int n; size_t xtra = 64; /* reasonable default */ @@ -121,7 +121,7 @@ fmt = va_arg(ap, char const *); return msg_header_make(home, hc, fmt); } - + if (!(h = msg_header_alloc(home, hc, xtra))) return NULL; @@ -131,7 +131,7 @@ va_copy(aq, ap); n = vsnprintf(MSG_HEADER_DATA(h), xtra, fmt, aq); va_end(aq); - + if (n >= 0 && (size_t)n < xtra) break; @@ -148,13 +148,13 @@ if (xtra > INT_MAX) xtra = INT_MAX; - + if (!(h = msg_header_alloc(home, hc, xtra))) return NULL; } - + if (hc->hc_parse(home, h, MSG_HEADER_DATA(h), (size_t)n) == -1) { - /* Note: parsing function is responsible to free + /* Note: parsing function is responsible to free everything it has allocated (like parameter lists) */ su_free(home, h), h = NULL; } @@ -162,7 +162,7 @@ return h; } -msg_header_t *msg_header_format(su_home_t *home, +msg_header_t *msg_header_format(su_home_t *home, msg_hclass_t *hc, char const *fmt, ...) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_internal.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_internal.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_internal.h Tue Dec 16 13:05:22 2008 @@ -24,10 +24,10 @@ #ifndef MSG_INTERNAL_H /** Defined when has been included. */ -#define MSG_INTERNAL_H +#define MSG_INTERNAL_H -/**@IFILE msg_internal.h - * @brief Abstract messages - internal interface +/**@IFILE msg_internal.h + * @brief Abstract messages - internal interface * * @author Pekka Pessi * @@ -131,7 +131,7 @@ su_inline int msg_is_append(msg_header_t const *h) { - return + return h->sh_class->hc_kind == msg_kind_append || h->sh_class->hc_kind == msg_kind_apndlist; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mclass.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mclass.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mclass.c Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ * */ -/**@ingroup msg_parser +/**@ingroup msg_parser * @CFILE msg_mclass.c * * Message factory object. @@ -63,12 +63,12 @@ * empty is true, the copied message class object will not recognize any * headers. This is useful if more fine-grained control of parsing process * is required, for instance. - * - * @param[in] old pointer to the message class object to be copied - * @param[in] newsize size of hash table in the copied object - * @param[in] empty if true, resulting copy does not contain any headers - * - * @return + * + * @param[in] old pointer to the message class object to be copied + * @param[in] newsize size of hash table in the copied object + * @param[in] empty if true, resulting copy does not contain any headers + * + * @return * The function msg_mclass_clone() returns a pointer to a newly * copied message class object, or NULL upon an error. * The returned message class object can be freed with free(). @@ -78,7 +78,7 @@ * A memory allocation failed. * @ERROR EINVAL * The function was given invalid arguments. - * + * * @note The empty parser can handle request/status line. All headers are * put into list of unknown headers (unless they are malformed, and they are * put into list of erronous headers). However, SIP, RTSP, and HTTP @@ -90,7 +90,7 @@ msg_mclass_t *msg_mclass_clone(msg_mclass_t const *old, int newsize, int empty) { size_t size, shortsize; - msg_mclass_t *mc; + msg_mclass_t *mc; int identical; unsigned short i; @@ -126,7 +126,7 @@ memcpy(mc, old, size); mc->mc_short = NULL; } - + if (shortsize) { if (empty) mc->mc_short = memset((char *)mc + size, 0, shortsize); @@ -147,8 +147,8 @@ * structure" is zero, the function extends the public message structure in * order to store newly inserted header there. * - * @param[in,out] mc pointer to a message class object - * @param[in] hc pointer to a header class object + * @param[in,out] mc pointer to a message class object + * @param[in] hc pointer to a header class object * @param[in] offset offset of the header in * @ref msg_pub_t "public message structure" * @@ -156,10 +156,10 @@ * the public message structure and places the header at the end of message. * * @return Number of collisions in hash table, or -1 upon an error. - * + * * @deprecated Use msg_mclass_insert_with_mask() instead. */ -int msg_mclass_insert_header(msg_mclass_t *mc, +int msg_mclass_insert_header(msg_mclass_t *mc, msg_hclass_t *hc, unsigned short offset) { @@ -195,13 +195,13 @@ * * @param[in,out] mc pointer to a message class * @param[in] hc pointer to a header class - * @param[in] offset offset of the header in - * @ref msg_pub_t "public message structure" - * @param[in] flags classification flags for the header + * @param[in] offset offset of the header in + * @ref msg_pub_t "public message structure" + * @param[in] flags classification flags for the header * * @return Number of collisions in hash table, or -1 upon an error. */ -int msg_mclass_insert_with_mask(msg_mclass_t *mc, +int msg_mclass_insert_with_mask(msg_mclass_t *mc, msg_hclass_t *hc, unsigned short offset, unsigned short flags) @@ -232,8 +232,8 @@ * * @relatesalso msg_mclass_s * - * @param[in,out] mc pointer to a message class object - * @param[in] hr header reference object + * @param[in,out] mc pointer to a message class object + * @param[in] hr header reference object * * @return Number of collisions in hash table, or -1 upon an error. */ @@ -249,7 +249,7 @@ return -1; } - if (hr == NULL || (hc = hr->hr_class) == NULL) + if (hr == NULL || (hc = hr->hr_class) == NULL) return 0; /* Add short form */ @@ -260,10 +260,10 @@ if (compact < 'a' || compact > 'z') return -1; - if (shorts[compact - 'a'].hr_class && + if (shorts[compact - 'a'].hr_class && shorts[compact - 'a'].hr_class != hc) return -1; - + shorts[compact - 'a'] = *hr; } @@ -281,7 +281,7 @@ mc->mc_hash[j] = hr[0]; mc->mc_hash_used++; - + return collisions; } @@ -296,8 +296,8 @@ * class based on the contents of the header to be parsed. The buffer @a s * should point to the first character in the header name. * - * @param[in] mc message class object - * @param[in] s header contents + * @param[in] mc message class object + * @param[in] s header contents * @param[out] return_start_of_content start of header content (may be NULL) * * @return The function msg_find_hclass() returns a pointer to a header @@ -309,11 +309,11 @@ * start of the header contents within @a s, or 0 upon an error parsing the * header name and following colon. * - * @par + * @par * Upon a fatal error, a NULL pointer is returned. */ -msg_href_t const *msg_find_hclass(msg_mclass_t const *mc, - char const *s, +msg_href_t const *msg_find_hclass(msg_mclass_t const *mc, + char const *s, isize_t *return_start_of_content) { msg_href_t const *hr; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mime.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mime.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mime.c Tue Dec 16 13:05:22 2008 @@ -132,7 +132,7 @@ * part. Note that the semantics of a part differ from the * semantics of a message, as described in the text.> * - * encapsulation := delimiter transport-padding CRLF + * encapsulation := delimiter transport-padding CRLF * body-part * * close-delimiter := delimiter "--" @@ -144,26 +144,26 @@ * @endcode * * @par Parsing a Multipart Message - * + * * When a message body contains a multipart entity (in other words, it has a * MIME media type of "multipart"), the application can split the multipart * entity into body parts * * The parsing is relatively simple, the application just gives a memory - * home object, a Content-Type header object and message body object as an + * home object, a Content-Type header object and message body object as an * argument to msg_multipart_parse() function: * @code - * if (sip->sip_content_type && + * if (sip->sip_content_type && * strncasecmp(sip->sip_content_type, "multipart/", 10) == 0) { * msg_multipart_t *mp; * * if (sip->sip_multipart) * mp = sip->sip_multipart; * else - * mp = msg_multipart_parse(msg_home(msg), + * mp = msg_multipart_parse(msg_home(msg), * sip->sip_content_type, * (sip_payload_t *)sip->sip_payload); - * + * * if (mp) * ... processing multipart ... * else @@ -194,12 +194,12 @@ * msg_header_t *h = NULL; * char *b; * size_t len, offset; - * + * * mp = msg_multipart_create(home, "text/html;level=3", html, strlen(html)); * mp->mp_next = msg_multipart_create(home, "image/gif", gif, giflen); * * c = sip_content_type_make(home, "multipart/mixed"); - * + * * // Add delimiters to multipart, and boundary parameter to content-type * if (msg_multipart_complete(home, c, mp) < 0) * return -1; // Error @@ -209,14 +209,14 @@ * if (msg_multipart_serialize(&h, mp) < 0) * return -1; // Error * - * // Encode all multipart components + * // Encode all multipart components * len = msg_multipart_prepare(msg, mp, 0); * if (len < 0) * return -1; // Error * * pl = sip_payload_create(home, NULL, len); * - * // Copy each element from multipart to pl_data + * // Copy each element from multipart to pl_data * b = pl->pl_data; * for (offset = 0, h = mp; offset < len; h = h->sh_succ) { * memcpy(b + offset, h->sh_data, h->sh_len); @@ -292,7 +292,7 @@ /** Boundary chars. */ -static char const bchars[] = +static char const bchars[] = "'()+_,-./:=?" "0123456789" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -331,7 +331,7 @@ } return boundary; } - } + } /* Look for LF -- */ for (;(p = memmem(p, end - p, LF "--", 3)); p += 3) { @@ -362,9 +362,9 @@ * The function msg_multipart_parse() parses a MIME multipart message. The * common syntax of multiparts is described in @RFC2046 (section 7). * - * @param[in,out] home home for allocating structures - * @param[in] c content-type header for multipart - * @param[in] pl payload structure for multipart + * @param[in,out] home home for allocating structures + * @param[in] c content-type header for multipart + * @param[in] pl payload structure for multipart * * After parsing, the @a pl will contain the plain-text preamble (if any). * @@ -418,7 +418,7 @@ /* Split multipart into parts */ for (;;) { - while (p[0] == ' ') + while (p[0] == ' ') p++; p += p[0] == '\r' ? 1 + (p[1] == '\n') : (p[0] == '\n'); @@ -464,7 +464,7 @@ break; } - b = next; p = next + m; + b = next; p = next + m; } if (!mp || !mp->mp_close_delim) { @@ -516,7 +516,7 @@ blen = strlen(boundary); for (mp = all; mp; mp = mp->mp_next) { - mp->mp_data = boundary; + mp->mp_data = boundary; mp->mp_len = blen; assert(mp->mp_payload || mp->mp_separator); @@ -546,19 +546,19 @@ } /**Add all missing parts to the multipart. - * + * * Add missing components such as boundaries between body parts, separators * between body-part headers and data, and close-delimiter after last * body-part to the multipart message. - * - * @param[in,out] home home for allocating structures - * @param[in,out] c content-type header for multipart - * @param[in,out] mp pointer to first multipart structure + * + * @param[in,out] home home for allocating structures + * @param[in,out] c content-type header for multipart + * @param[in,out] mp pointer to first multipart structure * * @retval 0 when successful * @retval -1 upon an error * - * @ERRORS + * @ERRORS * @ERROR EBADMSG * The @b Content-Type header @a c is malformed, or multipart message * contains a malformed @b Content-Type header. @@ -635,7 +635,7 @@ if (mp->mp_next == NULL) { if (!mp->mp_close_delim) - mp->mp_close_delim = msg_payload_format(home, "%.*s--" CR LF, + mp->mp_close_delim = msg_payload_format(home, "%.*s--" CR LF, (int)m, boundary); if (!mp->mp_close_delim) return -1; @@ -813,7 +813,7 @@ if (!mp || !mp->mp_data) return -1; - if (!mp->mp_common->h_data || + if (!mp->mp_common->h_data || mp->mp_common->h_len != mp->mp_len - 2 || memcmp(mp->mp_common->h_data, mp->mp_data + 2, mp->mp_len - 2)) { mp->mp_common->h_data = mp->mp_data + 2; @@ -833,10 +833,10 @@ assert(h && msg_is_multipart(h)); msg_payload_init(pl); - + result = (msg_multipart_t *)h; - pl->pl_data = s; + pl->pl_data = s; pl->pl_len = slen; mp = msg_multipart_parse(tmphome, NULL, pl); @@ -845,14 +845,14 @@ *result = *mp; if (result->mp_common->h_succ->sh_prev) - result->mp_common->h_succ->sh_prev = + result->mp_common->h_succ->sh_prev = &result->mp_common->h_succ; su_free(tmphome, mp); - + su_home_move(home, tmphome); } - + su_home_deinit(tmphome); return mp ? 0 : -1; @@ -877,7 +877,7 @@ offset = msg_payload_dup_xtra(h, offset); for (hh = (msg_header_t const **)&((msg_pub_t *)mp)->msg_request; - (char *)hh <= (char *)&mp->mp_close_delim; + (char *)hh <= (char *)&mp->mp_close_delim; hh++) { for (h = *hh; h; h = h->sh_next) { MSG_STRUCT_SIZE_ALIGN(offset); @@ -899,7 +899,7 @@ b = msg_payload_dup_one(dst, src, b, xtra); for (hh = &((msg_pub_t*)mp)->msg_request; - (char *)hh <= (char *)&mp->mp_close_delim; + (char *)hh <= (char *)&mp->mp_close_delim; hh++) { for (h = *hh; h; h = h->sh_next) { MSG_STRUCT_ALIGN(b); @@ -972,8 +972,8 @@ * * The function msg_mediatype_d() parses a mediatype string. * - * @param[in,out] ss string to be parsed - * @param[out] type value result for media type + * @param[in,out] ss string to be parsed + * @param[out] type value result for media type * * @retval 0 when successful, * @retval -1 upon an error. @@ -1059,7 +1059,7 @@ */ msg_hclass_t msg_accept_class[] = -MSG_HEADER_CLASS(msg_, accept, "Accept", "", ac_params, apndlist, +MSG_HEADER_CLASS(msg_, accept, "Accept", "", ac_params, apndlist, msg_accept, msg_accept); issize_t msg_accept_d(su_home_t *home, msg_header_t *h, char *s, isize_t slen) @@ -1136,8 +1136,8 @@ return b; } -/** Update parameter(s) for Accept header. */ -int msg_accept_update(msg_common_t *h, +/** Update parameter(s) for Accept header. */ +int msg_accept_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -1223,8 +1223,8 @@ return b; } -/** Update parameter(s) for Accept-* header. */ -int msg_accept_any_update(msg_common_t *h, +/** Update parameter(s) for Accept-* header. */ +int msg_accept_any_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -1431,7 +1431,7 @@ */ /**@ingroup msg_content_disposition - * @typedef struct msg_content_disposition_s msg_content_disposition_t; + * @typedef struct msg_content_disposition_s msg_content_disposition_t; * * The structure msg_content_disposition_t contains representation of an @b * Content-Disposition header. @@ -1548,7 +1548,7 @@ */ /**@ingroup msg_content_encoding - * @typedef struct msg_list_s msg_content_encoding_t; + * @typedef struct msg_list_s msg_content_encoding_t; * * The structure msg_content_encoding_t contains representation of an @b * Content-Encoding header. @@ -1715,7 +1715,7 @@ */ /**@ingroup msg_content_md5 - * @typedef struct msg_generic_s msg_content_md5_t; + * @typedef struct msg_generic_s msg_content_md5_t; * * The structure msg_content_md5_t contains representation of an @b * Content-MD5 header. @@ -1896,7 +1896,7 @@ */ /**@ingroup msg_mime_version - * @typedef struct msg_generic_s msg_mime_version_t; + * @typedef struct msg_generic_s msg_mime_version_t; * * The structure msg_mime_version_t contains representation of an @b * MIME-Version header. @@ -1935,7 +1935,7 @@ */ /**@ingroup msg_content_location - * @typedef struct msg_generic_s msg_content_location_t; + * @typedef struct msg_generic_s msg_content_location_t; * * The structure msg_content_location_t contains representation of an @b * Content-Location header. @@ -2000,7 +2000,7 @@ */ /**@ingroup msg_content_transfer_encoding - * @typedef struct msg_generic_s msg_content_transfer_encoding_t; + * @typedef struct msg_generic_s msg_content_transfer_encoding_t; * * The structure msg_content_transfer_encoding_t contains representation of * an @b Content-Transfer-Encoding header. @@ -2027,11 +2027,11 @@ /**@ingroup msg_mime * @defgroup msg_warning Warning Header - * + * * The Warning response-header field is used to carry additional information * about the status of a response. Its syntax is defined in [S20.43] * as follows: - * + * * @code * Warning = "Warning" HCOLON warning-value *(COMMA warning-value) * warning-value = warn-code SP warn-agent SP warn-text @@ -2045,7 +2045,7 @@ */ /**@ingroup msg_warning - * @typedef struct msg_warning_s msg_warning_t; + * @typedef struct msg_warning_s msg_warning_t; * * The structure msg_warning_t contains representation of an @b * Warning header. @@ -2073,7 +2073,7 @@ *s = '\0', s += span_lws(s + 1) + 1; /* Parse protocol */ - if (!IS_DIGIT(*s)) + if (!IS_DIGIT(*s)) return -1; w->w_code = strtoul(s, &s, 10); skip_lws(&s); @@ -2098,7 +2098,7 @@ int n; size_t m; - n = snprintf(b, bsiz, "%03u %s%s%s ", + n = snprintf(b, bsiz, "%03u %s%s%s ", w->w_code, w->w_host, port ? ":" : "", port ? port : ""); if (n < 0) return n; @@ -2122,9 +2122,9 @@ return offset; } -char *msg_warning_dup_one(msg_header_t *dst, - msg_header_t const *src, - char *b, +char *msg_warning_dup_one(msg_header_t *dst, + msg_header_t const *src, + char *b, isize_t xtra) { msg_warning_t *w = (msg_warning_t *)dst; @@ -2143,6 +2143,6 @@ #define msg_warning_update NULL -msg_hclass_t msg_warning_class[] = - MSG_HEADER_CLASS(msg_, warning, "Warning", "", w_common, append, +msg_hclass_t msg_warning_class[] = + MSG_HEADER_CLASS(msg_, warning, "Warning", "", w_common, append, msg_warning, msg_warning); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mime_table.c.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mime_table.c.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_mime_table.c.in Tue Dec 16 13:05:22 2008 @@ -31,8 +31,8 @@ */ /**@ingroup msg_mime - * - * @CFILE msg_mime_table.c + * + * @CFILE msg_mime_table.c * @brief Parser table used for testing. * * #AUTO# Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_name_hash.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_name_hash.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_name_hash.c Tue Dec 16 13:05:22 2008 @@ -24,9 +24,9 @@ /**@ingroup test_msg * @CFILE msg_name_hash.c - * - * Calculate hash for given header name. - * + * + * Calculate hash for given header name. + * * @author Pekka Pessi * * @date Tue Aug 20 16:27:01 EEST 2002 ppessi Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.awk ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.awk (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.awk Tue Dec 16 13:05:22 2008 @@ -49,7 +49,7 @@ # Initialize these as arrays split("", symbols); split("", names); - split("", comments); + split("", comments); split("", hashes); split("", NAMES); split("", Comments); @@ -81,7 +81,7 @@ { hash = 0; - len = length(name); + len = length(name); for (i = 1; i <= len; i++) { c = tolower(substr(name, i, 1)); @@ -112,7 +112,7 @@ function protos (name, comment, hash, since) { NAME=toupper(name); - sub(/.*[\/][*][*][<][ ]*/, "", comment); + sub(/.*[\/][*][*][<][ ]*/, "", comment); sub(/[ ]*[*][\/].*/, "", comment); sub(/[ ]+/, " ", comment); @@ -132,12 +132,12 @@ if (name2 != name && name2 != tprefix "_" name) { print name " mismatch with " comment " (" real ")" > "/dev/stderr"; } - + hash = name_hash(parts[1]); hashed[name] = hash; - if (comment !~ /header/) { + if (comment !~ /header/) { comment = comment " header"; } } @@ -149,13 +149,13 @@ COMMENT = toupper(comment); # Store the various forms into an array for the footer processing - N++; - hashes[N] = hash; + N++; + hashes[N] = hash; names[N] = name; - NAMES[N] = NAME; - comments[N] = comment; - Comments[N] = comment; - COMMENTS[N] = COMMENT; + NAMES[N] = NAME; + comments[N] = comment; + Comments[N] = comment; + COMMENTS[N] = COMMENT; symbols[name] = comment; if (since) { @@ -165,8 +165,8 @@ expr = (without_experimental > 0 && do_hash); if (expr) { printf "%s is experimental\n", Comment; - } - + } + experimental[N] = expr; if (PR) { @@ -190,7 +190,7 @@ # if (p) { gsub(/#hash#/, hash, p); - gsub(/#xxxxxx#/, name, p); + gsub(/#xxxxxx#/, name, p); gsub(/#XXXXXX#/, NAME, p); gsub(/#xxxxxxx_xxxxxxx#/, comment, p); gsub(/#Xxxxxxx_Xxxxxxx#/, Comment, p); @@ -203,17 +203,17 @@ # Remove line with #version# gsub(/\n[^#\n]*#version#[^\n]*/, "", p); } - + print p > PR; } } -# +# # Repeat each line in the footer containing the magic replacement # pattern with an instance of all headers # function process_footer (text) -{ +{ if (!match(tolower(text), /#(xxxxxx(x_xxxxxxx)?|hash)#/)) { n = length(text); while (substr(text, n) == "\n") { @@ -224,7 +224,7 @@ print text > PR; return; } - + n = split(text, lines, RS); for (i = 1; i <= n; i++) { @@ -247,7 +247,7 @@ gsub(/#xxxxxxx_xxxxxxx#/, comments[j], l); gsub(/#Xxxxxxx_Xxxxxxx#/, Comments[j], l); gsub(/#XXXXXXX_XXXXXXX#/, COMMENTS[j], l); - gsub(/#xxxxxx#/, names[j], l); + gsub(/#xxxxxx#/, names[j], l); gsub(/#XXXXXX#/, NAMES[j], l); print l > PR; } @@ -272,7 +272,7 @@ if (line ~ /^#/ || line ~ /^$/) continue; - split(line, tokens, /[ \t]*=[ \t]*/); + split(line, tokens, /[ \t]*=[ \t]*/); name = tolower(tokens[1]); gsub(/-/, "_", name); gsub(/,/, " ", name); @@ -297,7 +297,7 @@ function templates () { if (!auto) { - auto = FILENAME; + auto = FILENAME; if (!prefix) { prefix = module; } if (!tprefix) { tprefix = prefix; } @@ -369,11 +369,11 @@ /^#### EXTRA HEADER LIST STARTS HERE ####$/ { HLIST=1; templates(); } HLIST && /^#### DEFAULT HEADER LIST ENDS HERE ####$/ { basic=total; } -HLIST && /^#### EXPERIMENTAL HEADER LIST STARTS HERE ####$/ { +HLIST && /^#### EXPERIMENTAL HEADER LIST STARTS HERE ####$/ { without_experimental = total; } -HLIST && /^[a-z]/ { protos($1, $0, 0, $2); - headers[total++] = $1; +HLIST && /^[a-z]/ { protos($1, $0, 0, $2); + headers[total++] = $1; Extra[$1] = extra++; } /^#### EXTRA HEADER LIST ENDS HERE ####$/ { HLIST=0; } @@ -383,14 +383,14 @@ PT && /^ *\/\* === Hash headers end here \*\// { in_header_list=0;} -in_header_list && /^ (sip|rtsp|http|msg|mp)_[a-z_0-9]+_t/ { +in_header_list && /^ (sip|rtsp|http|msg|mp)_[a-z_0-9]+_t/ { n=$0 - sub(/;.*$/, "", n); + sub(/;.*$/, "", n); sub(/^ *(sip|rtsp|http|msg|mp)_[a-z0-9_]*_t[ ]*/, "", n); sub(/^[*](sip|rtsp|http|msg|mp)_/, "", n); if ($0 !~ /[\/][*][*][<]/) { - getline; + getline; } if ($0 !~ /[\/][*][*][<]/) { printf "msg_protos.awk: header %s is malformed\n", n; @@ -446,7 +446,7 @@ len = split("request status separator payload unknown error", unnamed, " "); for (i = 1; i <= len; i++) { - printf(" {{ %s_%s_class, msg_offsetof(%s_t, %s_%s) }},\n", + printf(" {{ %s_%s_class, msg_offsetof(%s_t, %s_%s) }},\n", tprefix, unnamed[i], module, prefix, unnamed[i]) > PT; } if (multipart) { @@ -456,7 +456,7 @@ printf(" {{ NULL, 0 }},\n") > PT; } if (MC_SHORT_SIZE) { - printf(" %s_short_forms, \n", module) > PT; + printf(" %s_short_forms, \n", module) > PT; } else { printf(" NULL, \n") > PT; @@ -488,11 +488,11 @@ if (i >= ordinary) { printf(" { %s_%s_class,\n" \ - " msg_offsetof(struct %s, extra[%u])%s }%s\n", + " msg_offsetof(struct %s, extra[%u])%s }%s\n", tprefix, n, struct, Extra[n], flags, c) > PT; } else { - printf(" { %s_%s_class, msg_offsetof(%s_t, %s_%s)%s }%s\n", + printf(" { %s_%s_class, msg_offsetof(%s_t, %s_%s)%s }%s\n", tprefix, n, module, prefix, n, flags, c) > PT; } @@ -520,7 +520,7 @@ if (multipart) protos("multipart", "/**< Multipart payload */", -7); } - + if (PR) { process_footer(footer); } @@ -547,17 +547,17 @@ if (MC_SHORT_SIZE) { printf("static msg_href_t const " \ - "%s_short_forms[MC_SHORT_SIZE] = \n{\n", - module) > PT; + "%s_short_forms[MC_SHORT_SIZE] = \n{\n", + module) > PT; for (i = 1; i <= MC_SHORT_SIZE; i = i + 1) { c = (i == MC_SHORT_SIZE) ? "" : ","; if (i in shorts) { n = shorts[i]; flags = header_flags[n]; if (flags) flags = ",\n " flags; - - printf(" { /* %s */ %s_%s_class, msg_offsetof(%s_t, %s_%s)%s }%s\n", - substr(lower_case, i, 1), + + printf(" { /* %s */ %s_%s_class, msg_offsetof(%s_t, %s_%s)%s }%s\n", + substr(lower_case, i, 1), tprefix, n, module, prefix, n, flags, c) \ > PT; } @@ -566,7 +566,7 @@ > PT; } } - printf("};\n\n") > PT; + printf("};\n\n") > PT; } # printf("extern msg_hclass_t msg_multipart_class[];\n\n") > PT; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.c Tue Dec 16 13:05:22 2008 @@ -209,7 +209,7 @@ /* realloc and cut down buffer */ size_t new_size; void *new_data; - + if (eos) new_size = mb->mb_commit + 1; else @@ -324,11 +324,11 @@ * blocks, so the caller should allocate at least two elements for the I/O * vector @a vec. * - * @param[in] msg message object - * @param[out] vec I/O vector - * @param[in] veclen available length of @a vec + * @param[in] msg message object + * @param[out] vec I/O vector + * @param[in] veclen available length of @a vec * @param[in] n number of possibly available bytes? - * @param[in] exact true if data ends at message boundary + * @param[in] exact true if data ends at message boundary * * @return * The length of I/O vector to @@ -815,7 +815,7 @@ su_inline int extract_incomplete_chunks(msg_t *, int eos); static issize_t extract_first(msg_t *, msg_pub_t *, char b[], isize_t bsiz, int eos); -su_inline issize_t extract_next(msg_t *, msg_pub_t *, char *, isize_t bsiz, +su_inline issize_t extract_next(msg_t *, msg_pub_t *, char *, isize_t bsiz, int eos, int copy); static issize_t extract_header(msg_t *, msg_pub_t*, char b[], isize_t bsiz, int eos, int copy); @@ -992,7 +992,7 @@ /* Extract header or message body */ su_inline issize_t -extract_next(msg_t *msg, msg_pub_t *mo, char *b, isize_t bsiz, +extract_next(msg_t *msg, msg_pub_t *mo, char *b, isize_t bsiz, int eos, int copy) { if (IS_CRLF(b[0])) @@ -1002,7 +1002,7 @@ } /** Extract a header. */ -issize_t msg_extract_header(msg_t *msg, msg_pub_t *mo, +issize_t msg_extract_header(msg_t *msg, msg_pub_t *mo, char b[], isize_t bsiz, int eos) { return extract_header(msg, mo, b, bsiz, eos, 0); @@ -1187,16 +1187,16 @@ return h; } -/** Complete this header field and parse next header field. +/** Complete this header field and parse next header field. * * This function completes parsing a multi-field header like @Accept, - * @Contact, @Via or @Warning. It scans for the next header field and + * @Contact, @Via or @Warning. It scans for the next header field and * if one is found, it calls the parsing function recursively. * - * @param home memory home used ot allocate + * @param home memory home used ot allocate * new header structures and parameter lists * @param prev pointer to header structure already parsed - * @param s header content to parse; should point to the area after + * @param s header content to parse; should point to the area after * current header field (either end of line or to a comma * separating header fields) * @param slen ignored @@ -1206,7 +1206,7 @@ * @retval >= 0 when successful * @retval -1 upon an error */ -issize_t msg_parse_next_field(su_home_t *home, msg_header_t *prev, +issize_t msg_parse_next_field(su_home_t *home, msg_header_t *prev, char *s, isize_t slen) { msg_hclass_t *hc = prev->sh_class; @@ -1224,7 +1224,7 @@ if (*s == 0) return 0; - + h = msg_header_alloc(home, hc, 0); if (!h) return -1; @@ -1764,19 +1764,19 @@ /** Convert a message to a string. * - * A message is encoded and the encoding result is returned as a string. + * A message is encoded and the encoding result is returned as a string. * Because the message may contain binary payload (or NUL in headers), the * message length is returned separately in @a *return_len, too. * - * Note that the message is serialized as a side effect. + * Note that the message is serialized as a side effect. * * @param home memory home used to allocate the string * @param msg message to encode * @param pub message object to encode (may be NULL) * @param flags flags used when encoding * @param return_len return-value parameter for encoded message length - * - * @return Encoding result as a C string. + * + * @return Encoding result as a C string. * * @since New in @VERSION_1_12_4 * @@ -1843,7 +1843,7 @@ b2 = su_realloc(home, b, bsiz); if (b2 == NULL) { - errno = ENOMEM; + errno = ENOMEM; su_free(home, b); return NULL; } @@ -2110,8 +2110,8 @@ * Headers are either inserted just before the payload, or after the first * line, depending on their type. * - * @param[in] msg message object - * @param[in,out] pub public message structure + * @param[in] msg message object + * @param[in,out] pub public message structure * @param prepend if true, add before same type of headers (instead after them) * @param head head of chain * @param h header to insert @@ -2128,7 +2128,7 @@ msg_header_t **hh; msg_header_t **separator; msg_header_t **payload; - + assert(msg && pub && head && h); mc = msg->m_class; @@ -2523,7 +2523,7 @@ *hh = h; } -static int _msg_header_add_list_items(msg_t *msg, +static int _msg_header_add_list_items(msg_t *msg, msg_header_t **hh, msg_header_t const *src); @@ -2658,7 +2658,7 @@ } /* Add list items */ -static int _msg_header_add_list_items(msg_t *msg, +static int _msg_header_add_list_items(msg_t *msg, msg_header_t **hh, msg_header_t const *src) { @@ -2667,17 +2667,17 @@ if (!s || !*s) return 0; - + msg_fragment_clear(h->sh_common); - + /* Remove empty headers */ for (hh = &h->sh_next; *hh; *hh = (*hh)->sh_next) msg_chain_remove(msg, *hh); - + if (msg_header_join_items(msg_home(msg), h->sh_common, src->sh_common, 1) < 0) return -1; - + return 0; } @@ -2801,12 +2801,12 @@ return msg_header_parse_str(msg, pub, s); } - + /**Add string to message. * * Parse a string containing headers (or a message body, if the string * starts with linefeed) and add resulting header objects to the message - * object. + * object. * * @param msg message object * @param pub message header structure where heades are added (may be NULL) @@ -2816,7 +2816,7 @@ * @retval -1 upon an error * * @sa msg_header_add_str(), url_headers_as_string() - * + * * @since New in @VERSION_1_12_4. */ int msg_header_parse_str(msg_t *msg, @@ -2880,7 +2880,7 @@ assert(msg); - if (msg == NULL || h == NULL || h == MSG_HEADER_NONE || + if (msg == NULL || h == NULL || h == MSG_HEADER_NONE || h->sh_class == NULL) return -1; if (pub == NULL) @@ -2906,7 +2906,7 @@ { msg_header_t **hh, **hh0; - if (msg == NULL || h == NULL || h == MSG_HEADER_NONE || + if (msg == NULL || h == NULL || h == MSG_HEADER_NONE || h->sh_class == NULL) return -1; if (pub == NULL) @@ -2955,7 +2955,7 @@ msg_header_t **hh, **hh0; void const *data; - if (msg == NULL || h == NULL || h == MSG_HEADER_NONE || + if (msg == NULL || h == NULL || h == MSG_HEADER_NONE || h->sh_class == NULL) return -1; if (pub == NULL) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser_util.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser_util.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser_util.c Tue Dec 16 13:05:22 2008 @@ -102,7 +102,7 @@ * in @a return_token, and updates the @a ss to the end of token and * possible whitespace. */ -issize_t msg_token_d(char **ss, char const **return_token) +issize_t msg_token_d(char **ss, char const **return_token) { char *s = *ss; size_t n = span_token(s); @@ -131,7 +131,7 @@ uint32_t value; unsigned digit; - if (!IS_DIGIT(*s)) + if (!IS_DIGIT(*s)) return -1; for (value = 0; IS_DIGIT(*s); s++) { @@ -169,26 +169,26 @@ * list. * * The function @b must be passed a scanning function @a scanner. The - * scanning function scans for a legitimate list item, for example, a token. + * scanning function scans for a legitimate list item, for example, a token. * It should also compact the list item, for instance, if the item consists * of @c name=value parameter definitions it should remove whitespace around * "=" sign. The scanning function returns the length of the scanned item, * including any linear whitespace after it. * - * @param[in] home memory home for allocating list pointers - * @param[in,out] ss pointer to pointer to string to be parsed + * @param[in] home memory home for allocating list pointers + * @param[in,out] ss pointer to pointer to string to be parsed * @param[in,out] append_list pointer to list * where parsed list items are appended - * @param[in] sep separator character + * @param[in] sep separator character * @param[in] scanner pointer to function for scanning a single item - * + * * @retval 0 if successful. * @retval -1 upon an error. */ -issize_t msg_any_list_d(su_home_t *home, - char **ss, +issize_t msg_any_list_d(su_home_t *home, + char **ss, msg_param_t **append_list, - issize_t (*scanner)(char *s), + issize_t (*scanner)(char *s), int sep) { char const *stack[MSG_N_PARAMS]; @@ -232,7 +232,7 @@ goto error; list = re_list; } - + list[n++] = s; s += tlen; } @@ -240,7 +240,7 @@ if (*s == sep) { *s++ = '\0'; skip_lws(&s); - } + } else if (*s) break; } @@ -278,11 +278,11 @@ * This function compacts the scanned value. It removes the * whitespace around equal sign "=" by moving the equal sign character and * value towards name. - * - * If there is whitespace within the scanned value or after it, + * + * If there is whitespace within the scanned value or after it, * NUL-terminates the scanned attribute. * - * @retval > 0 number of characters scanned, + * @retval > 0 number of characters scanned, * including the whitespace within the value * @retval -1 upon an error */ @@ -313,9 +313,9 @@ v = s; s += qlen; } else { - v = s; + v = s; skip_param(&s); - if (s == v) + if (s == v) return -1; } @@ -339,16 +339,16 @@ * av-pair = token ["=" ( value / quoted-string) ] ; optional value * @endcode * - * @param[in] home pointer to a memory home - * @param[in,out] ss pointer to string at the start of parameter list + * @param[in] home pointer to a memory home + * @param[in,out] ss pointer to string at the start of parameter list * @param[in,out] append_list pointer to list * where parsed list items are appended * * @retval >= 0 if successful * @retval -1 upon an error */ -issize_t msg_avlist_d(su_home_t *home, - char **ss, +issize_t msg_avlist_d(su_home_t *home, + char **ss, msg_param_t const **append_list) { char const *stack[MSG_N_PARAMS]; @@ -369,7 +369,7 @@ params = stack; N = MSG_PARAMS_NUM(1); } - + for (;;) { char *p; size_t tlen; @@ -398,9 +398,9 @@ v = s; s += qlen; } else { - v = s; + v = s; skip_param(&s); - if (s == v) + if (s == v) goto error; } if (p + tlen + 1 != v) { @@ -440,7 +440,7 @@ } else if (n == N) { /* Reallocate params */ - char **nparams = su_alloc(home, + char **nparams = su_alloc(home, (N = MSG_PARAMS_NUM(N + 1)) * sizeof(*params)); if (!nparams) { goto error; @@ -467,8 +467,8 @@ * *(";" token [ "=" (token | quoted-string)]). * @endcode * - * @param[in] home pointer to a memory home - * @param[in,out] ss pointer to string at the start of parameter list + * @param[in] home pointer to a memory home + * @param[in,out] ss pointer to string at the start of parameter list * @param[in,out] append_list pointer to list * where parsed list items are appended * @@ -477,8 +477,8 @@ * * @sa msg_avlist_d() */ -issize_t msg_params_d(su_home_t *home, - char **ss, +issize_t msg_params_d(su_home_t *home, + char **ss, msg_param_t const **append_list) { if (**ss == ';') { @@ -487,7 +487,7 @@ return msg_avlist_d(home, ss, append_list); } - if (IS_LWS(**ss)) { + if (IS_LWS(**ss)) { *(*ss)++ = '\0'; skip_lws(ss); } @@ -501,7 +501,7 @@ char *end = b + bsiz, *b0 = b; msg_param_t p; - if (pparams) + if (pparams) for (i = 0; (p = pparams[i]); i++) { if (p[0]) { MSG_CHAR_E(b, end, ';'); @@ -537,13 +537,13 @@ MSG_STRING_DUP(b, pp[i], s[i]); } pp[i] = NULL; - + assert(b <= end); (void)end; - + *d = (msg_param_t const *)pp; return b; -} +} /** Parse a comma-separated list. @@ -565,18 +565,18 @@ * By default, the scanning function accepts tokens, quoted strings or * separators (except comma, of course). * - * @param[in] home memory home for allocating list pointers - * @param[in,out] ss pointer to pointer to string to be parsed + * @param[in] home memory home for allocating list pointers + * @param[in,out] ss pointer to pointer to string to be parsed * @param[in,out] append_list pointer to list * where parsed list items are appended - * @param[in] scanner pointer to function scanning a single item + * @param[in] scanner pointer to function scanning a single item * (optional) - * + * * @retval 0 if successful. * @retval -1 upon an error. */ -issize_t msg_commalist_d(su_home_t *home, - char **ss, +issize_t msg_commalist_d(su_home_t *home, + char **ss, msg_param_t **append_list, issize_t (*scanner)(char *s)) { @@ -603,7 +603,7 @@ { size_t tlen; char *s, *p; - + s = p = start; if (s[0] == ',') @@ -613,22 +613,22 @@ /* Grab next section - token, quoted string, or separator character */ char c = *s; - if (IS_TOKEN(c)) + if (IS_TOKEN(c)) tlen = span_token(s); else if (c == '"') tlen = span_quoted(s); else /* if (IS_SEPARATOR(c)) */ tlen = 1; - + if (tlen == 0) return -1; if (p != s) memmove(p, s, tlen); /* Move section to end of paramexter */ p += tlen; s += tlen; - + skip_lws(&s); /* Skip possible LWS */ - + if (*s == '\0' || *s == ',') { /* Test for possible end */ if (p != s) *p = '\0'; return s - start; @@ -661,15 +661,15 @@ if (return_comment) *return_comment = s; - + while (level) switch (*s++) { case '(': level++; break; case ')': level--; break; case '\0': /* ERROR */ return -1; } - + assert(s[-1] == ')'); - + s[-1] = '\0'; skip_lws(&s); *ss = s; @@ -730,12 +730,12 @@ * string via @a ss, and pointers to which parsed host and port are assigned * via @a hhost and @a pport, respectively. The value-result parameter @a * *pport must be initialized to default value (e.g., NULL). - * + * * @param ss pointer to pointer to string to be parsed * @param return_host value-result parameter for @e host * @param return_port value-result parameter for @e port - * @return + * @return * Returns zero when successful, and a negative value upon an error. The * parsed values for host and port are assigned via @a return_host and @a * return_port, respectively. The function also updates the pointer @a *ss, @@ -747,15 +747,15 @@ * NUL-terminated. The calling function @b must NUL terminate the value by * setting the @a **ss to NUL after first examining its value. */ -int msg_hostport_d(char **ss, - char const **return_host, +int msg_hostport_d(char **ss, + char const **return_host, char const **return_port) { char *host, *s = *ss; char *port = NULL; /* Host name */ - host = s; + host = s; if (s[0] != '[') { skip_token(&s); if (host == s) return -1; } @@ -785,7 +785,7 @@ *return_host = host; *return_port = port; - + *ss = s; return 0; @@ -816,7 +816,7 @@ } /**Modify a parameter value or list item in a header. - * + * * A header parameter @a param can be just a C-string (@a is_item > 0), or * it can have internal format name [ "=" value]. In the latter case, * the value part following = is ignored when replacing or removing the @@ -834,11 +834,11 @@ * - 1 add * * @retval 1 if parameter was replaced or removed successfully - * @retval 0 if parameter was added successfully, + * @retval 0 if parameter was added successfully, * or there was nothing to remove * @retval -1 upon an error */ -static +static int msg_header_param_modify(su_home_t *home, msg_common_t *h, char const *param, int is_item, @@ -855,12 +855,12 @@ plen = is_item > 0 ? strlen(param) : strcspn(param, "="); n = 0; - + if (params) { /* Existing list, try to replace or remove */ for (; params[n]; n++) { char const *maybe = params[n]; - + if (remove_replace_add > 0) continue; @@ -877,7 +877,7 @@ } } } - + /* Not found? */ if (!params || !params[n]) { if (remove_replace_add < 0) @@ -885,22 +885,22 @@ else remove_replace_add = 1; /* Add instead of replace */ } - + if (remove_replace_add < 0) { /* Remove */ - for (; params[n]; n++) + for (; params[n]; n++) params[n] = params[n + 1]; } else { if (remove_replace_add > 0) { /* Add */ size_t m_before = MSG_PARAMS_NUM(n + 1); size_t m_after = MSG_PARAMS_NUM(n + 2); - + assert(!params || !params[n]); - + if (m_before != m_after || !params) { msg_param_t *p; /* XXX - we should know when to do realloc */ - p = su_alloc(home, m_after * sizeof(*p)); + p = su_alloc(home, m_after * sizeof(*p)); if (!p) return -1; if (n > 0) memcpy(p, params, n * sizeof(p[0])); @@ -908,25 +908,25 @@ } params[n + 1] = NULL; } - + params[n] = param; /* Add .. or replace */ } - + msg_fragment_clear(h); if (h->h_class->hc_update) { /* Update shortcuts */ size_t namelen; char const *name, *value; - + name = param; namelen = strcspn(name, "="); - + if (remove_replace_add < 0) value = NULL; else value = param + namelen + (name[namelen] == '='); - + h->h_class->hc_update(h, name, namelen, value); } @@ -958,21 +958,21 @@ * @retval 0 if parameter was added * @retval -1 upon an error * - * @sa msg_header_replace_param(), msg_header_remove_param(), + * @sa msg_header_replace_param(), msg_header_remove_param(), * msg_header_update_params(), - * #msg_common_t, #msg_header_t, + * #msg_common_t, #msg_header_t, * #msg_hclass_t, msg_hclass_t::hc_params, msg_hclass_t::hc_update */ int msg_header_add_param(su_home_t *home, msg_common_t *h, char const *param) { - return msg_header_param_modify(home, h, param, - 0 /* case-insensitive name=value */, + return msg_header_param_modify(home, h, param, + 0 /* case-insensitive name=value */, 1 /* add */); } -/** Replace or add a parameter to a header. +/** Replace or add a parameter to a header. * * A header parameter @a param is a string of format name "=" value * or just name. The value part following "=" is ignored when selecting a @@ -994,17 +994,17 @@ * @retval 1 if parameter was replaced * @retval -1 upon an error * - * @sa msg_header_add_param(), msg_header_remove_param(), + * @sa msg_header_add_param(), msg_header_remove_param(), * msg_header_update_params(), - * #msg_common_t, #msg_header_t, + * #msg_common_t, #msg_header_t, * #msg_hclass_t, msg_hclass_t::hc_params, msg_hclass_t::hc_update */ -int msg_header_replace_param(su_home_t *home, - msg_common_t *h, +int msg_header_replace_param(su_home_t *home, + msg_common_t *h, char const *param) { - return msg_header_param_modify(home, h, param, - 0 /* case-insensitive name=value */, + return msg_header_param_modify(home, h, param, + 0 /* case-insensitive name=value */, 0 /* replace */); } @@ -1028,13 +1028,13 @@ * * @sa msg_header_add_param(), msg_header_replace_param(), * msg_header_update_params(), - * #msg_common_t, #msg_header_t, + * #msg_common_t, #msg_header_t, * #msg_hclass_t, msg_hclass_t::hc_params, msg_hclass_t::hc_update */ int msg_header_remove_param(msg_common_t *h, char const *name) { - return msg_header_param_modify(NULL, h, name, - 0 /* case-insensitive name=value */, + return msg_header_param_modify(NULL, h, name, + 0 /* case-insensitive name=value */, -1 /* remove */); } @@ -1053,7 +1053,7 @@ * * @sa msg_header_add_param(), msg_header_replace_param(), * msg_header_update_params(), - * #msg_common_t, #msg_header_t, + * #msg_common_t, #msg_header_t, * #msg_hclass_t, msg_hclass_t::hc_params, msg_hclass_t::hc_update */ int msg_header_update_params(msg_common_t *h, int clear) @@ -1065,7 +1065,7 @@ msg_param_t const *params; size_t n; char const *p, *v; - + if (h == NULL) return errno = EFAULT, -1; @@ -1107,13 +1107,13 @@ * * @since New in @VERSION_1_12_4 * - * @sa msg_header_replace_item(), msg_header_remove_item(), + * @sa msg_header_replace_item(), msg_header_remove_item(), * @Allow, @AllowEvents */ char const *msg_header_find_item(msg_common_t const *h, char const *item) { if (h && h->h_class->hc_params) { - char const * const * items = + char const * const * items = *(char const * const * const *) ((char *)h + h->h_class->hc_params); @@ -1148,22 +1148,22 @@ * @since New in @VERSION_1_12_4. * * @sa msg_header_remove_item(), @Allow, @AllowEvents, - * msg_header_replace_param(), msg_header_remove_param(), + * msg_header_replace_param(), msg_header_remove_param(), * #msg_common_t, #msg_header_t, #msg_list_t * #msg_hclass_t, msg_hclass_t::hc_params */ -int msg_header_replace_item(su_home_t *home, - msg_common_t *h, +int msg_header_replace_item(su_home_t *home, + msg_common_t *h, char const *item) { - return msg_header_param_modify(home, h, item, - 1 /* string item */, + return msg_header_param_modify(home, h, item, + 1 /* string item */, 0 /* replace */); } /**Remove an item from a header. * - * This function treats a #msg_header_t as set of C strings. The @a item is a + * This function treats a #msg_header_t as set of C strings. The @a item is a * C string. If identical string is found from the list, it is removed. * * The shortcuts, if any, to item values are updated accordingly. @@ -1178,14 +1178,14 @@ * @since New in @VERSION_1_12_4. * * @sa msg_header_replace_item(), @Allow, @AllowEvents, - * msg_header_replace_param(), msg_header_remove_param(), + * msg_header_replace_param(), msg_header_remove_param(), * #msg_common_t, #msg_header_t, #msg_list_t * #msg_hclass_t, msg_hclass_t::hc_params */ int msg_header_remove_item(msg_common_t *h, char const *name) { - return msg_header_param_modify(NULL, h, name, - 1 /* item */, + return msg_header_param_modify(NULL, h, name, + 1 /* item */, -1 /* remove */); } @@ -1193,11 +1193,11 @@ /** Find a parameter from a parameter list. * * Searches for given parameter @a token from the parameter list. If - * parameter is found, it returns a non-NULL pointer to the parameter value. + * parameter is found, it returns a non-NULL pointer to the parameter value. * If there is no value for the parameter (the parameter is of form "name" * or "name="), the returned pointer points to a NUL character. * - * @param params list (or vector) of parameters + * @param params list (or vector) of parameters * @param token parameter name (with or without "=" sign) * * @return @@ -1230,7 +1230,7 @@ * parameter is found, it returns a non-NULL pointer to the item containing * the parameter. * - * @param params list (or vector) of parameters + * @param params list (or vector) of parameters * @param token parameter name (with or without "=" sign) * * @return @@ -1259,7 +1259,7 @@ return NULL; } -/** Replace or add a parameter from a list. +/** Replace or add a parameter from a list. * * A non-NULL parameter list must have been created by msg_params_d() * or by msg_params_dup(). @@ -1275,7 +1275,7 @@ * @retval -1 upon an error */ int msg_params_replace(su_home_t *home, - msg_param_t **inout_params, + msg_param_t **inout_params, msg_param_t param) { msg_param_t *params; @@ -1297,7 +1297,7 @@ if (!(strncasecmp(maybe, param, n))) { if (maybe[n] == '=' || maybe[n] == 0) { - params[i] = param; + params[i] = param; return 1; } } @@ -1308,7 +1308,7 @@ return msg_params_add(home, inout_params, param); } -/** Remove a parameter from a list. +/** Remove a parameter from a list. * * @retval 1 if parameter was removed * @retval 0 if parameter was not found @@ -1369,7 +1369,7 @@ * @param inout_params pointer to pointer to parameter list * @param param parameter to be added * - * @retval 0 if parameter was added + * @retval 0 if parameter was added * @retval -1 upon an error */ int msg_params_add(su_home_t *home, @@ -1377,7 +1377,7 @@ msg_param_t param) { size_t n, m_before, m_after; - msg_param_t *p = *inout_params; + msg_param_t *p = *inout_params; if (param == NULL) return -1; @@ -1388,9 +1388,9 @@ m_before = MSG_PARAMS_NUM(n + 1); m_after = MSG_PARAMS_NUM(n + 2); - + if (m_before != m_after || !p) { - p = su_alloc(home, m_after * sizeof(*p)); + p = su_alloc(home, m_after * sizeof(*p)); assert(p); if (!p) return -1; if (n) memcpy(p, *inout_params, n * sizeof(*p)); @@ -1403,7 +1403,7 @@ return 0; } -static +static int msg_param_prune(msg_param_t const d[], msg_param_t p, unsigned prune) { size_t i, nlen; @@ -1414,10 +1414,10 @@ nlen = 0; for (i = 0; d[i]; i++) { - if ((prune == 1 && - strncasecmp(p, d[i], nlen) == 0 + if ((prune == 1 && + strncasecmp(p, d[i], nlen) == 0 && (d[i][nlen] == '=' || d[i][nlen] == '\0')) - || + || (prune == 2 && strcasecmp(p, d[i]) == 0) || (prune == 3 && strcmp(p, d[i]) == 0)) @@ -1436,10 +1436,10 @@ * @param home memory home * @param dst pointer to pointer to destination parameter list * @param src source list - * @param prune prune duplicates + * @param prune prune duplicates * @param dup duplicate parameters in src list * - * @par Pruning + * @par Pruning * * * @@ -1458,7 +1458,7 @@ int dup) { size_t n, m, n_before, n_after, pruned, total = 0; - msg_param_t *d = *dst; + msg_param_t *d = *dst; if (prune > 3) return -1; @@ -1483,9 +1483,9 @@ } n_after = MSG_PARAMS_NUM(n + m - pruned + 1); - + if (n_before != n_after || !d) { - d = su_alloc(home, n_after * sizeof(*d)); + d = su_alloc(home, n_after * sizeof(*d)); assert(d); if (!d) return -1; if (n) memcpy(d, *dst, n * sizeof(*d)); @@ -1503,7 +1503,7 @@ d[n++] = su_strdup(home, src[m]); /* XXX */ else d[n++] = src[m]; - } + } d[n] = NULL; @@ -1605,12 +1605,12 @@ for (m = 0; m < M; m++) { d[N++] = memcpy(dup, temp[m], len[m] + 1); - + if (update) update(dst, dup, len[m], dup + len[m]); dup += len[m] + 1; - } + } d[N] = NULL; @@ -1627,7 +1627,7 @@ } /**Compare parameter lists. - * + * * Compares parameter lists. * * @param a pointer to a parameter list @@ -1658,7 +1658,7 @@ } -/** Unquote string +/** Unquote string * * Duplicates the string @a q in unquoted form. */ @@ -1681,7 +1681,7 @@ break; m = strcspn(q + n + 2, "\"\\"); total += m + 1; - n += m + 2; + n += m + 2; } if (!(d = su_alloc(home, total + 1))) @@ -1689,16 +1689,16 @@ for (n = 0;;) { m = strcspn(q, "\"\\"); - memcpy(d + n, q, m); + memcpy(d + n, q, m); n += m, q += m; if (q[0] == '\0' || q[0] == '"' || q[1] == '\0') break; - d[n++] = q[1]; + d[n++] = q[1]; q += 2; } assert(total == n); d[n] = '\0'; - + return d; } @@ -1742,7 +1742,7 @@ if (b && b + 1 < end) *b = '"'; b++; - + for (;*s;) { size_t n = strcspn(s, "\"\\"); @@ -1783,7 +1783,7 @@ if (hash == 0) hash = (unsigned long)-1; - + return hash; } @@ -1798,14 +1798,14 @@ } -/** Encode a message to the buffer. +/** Encode a message to the buffer. * * The function msg_encode_e encodes a message to a given buffer. * It returns the length of the message to be encoded, even if the * buffer is too small (just like snprintf() is supposed to do). * * @param b buffer (may be NULL) - * @param size size of buffer + * @param size size of buffer * @param mo public message structure (#sip_t, #http_t) * @param flags see # */ @@ -1837,7 +1837,7 @@ /** Encode header contents. */ issize_t msg_header_field_e(char b[], isize_t bsiz, msg_header_t const *h, int flags) { - assert(h); assert(h->sh_class); + assert(h); assert(h->sh_class); return h->sh_class->hc_print(b, bsiz, h, flags); } @@ -1846,7 +1846,7 @@ msg_header_t ** msg_header_offset(msg_t const *msg, msg_pub_t const *mo, msg_header_t const *h) { - if (h == NULL || h->sh_class == NULL) + if (h == NULL || h->sh_class == NULL) return NULL; return msg_hclass_offset(msg->m_class, mo, h->sh_class); @@ -1871,7 +1871,7 @@ if (hh) return *hh; - else + else return NULL; } @@ -1880,7 +1880,7 @@ /** Generates a random token. * */ -issize_t msg_random_token(char token[], isize_t tlen, +issize_t msg_random_token(char token[], isize_t tlen, void const *rmemp, isize_t rsize) { uint32_t random = 0, rword; @@ -1889,7 +1889,7 @@ size_t i; ssize_t n; - static char const token_chars[33] = + static char const token_chars[33] = /* Create aesthetically pleasing raNDom capS LooK */ "aBcDeFgHjKmNpQrStUvXyZ0123456789"; @@ -1908,7 +1908,7 @@ else return rsize / 5 * 8; } - + for (i = 0, n = 0; i < tlen;) { if (n < 5) { if (rsize == 0) @@ -1931,7 +1931,7 @@ if (n < 0 || (n == 0 && rsize == 0)) break; } - + token[i] = 0; return i; @@ -1955,7 +1955,7 @@ * @param flags message flags (see #msg_flg_user) * @param data message text * @param len size of message text (if -1, use strlen(data)) - * + * * @retval A pointer to a freshly allocated and parsed message. * * Upon parsing error, the header structure may be left incomplete. The @@ -1973,7 +1973,7 @@ if (len == -1) len = strlen(data); - if (len == 0) + if (len == 0) return NULL; msg = msg_create(mc, flags); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_tag.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_tag.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/msg_tag.c Tue Dec 16 13:05:22 2008 @@ -58,9 +58,9 @@ assert(t); - if (!t) { - if (size) b[0] = 0; - return 0; + if (!t) { + if (size) b[0] = 0; + return 0; } h = (msg_header_t const *)t->t_value; @@ -103,7 +103,7 @@ char *b; size_t size; - assert(src); assert(*bb); + assert(src); assert(*bb); dst->t_tag = src->t_tag; dst->t_value = 0L; @@ -149,8 +149,8 @@ /** Convert a string to a header structure based on to the tag. */ -int msghdrtag_scan(tag_type_t tt, su_home_t *home, - char const *s, +int msghdrtag_scan(tag_type_t tt, su_home_t *home, + char const *s, tag_value_t *return_value) { msg_hclass_t *hc = (msg_hclass_t *)tt->tt_magic; @@ -158,19 +158,19 @@ int retval; h = msg_header_make(home, hc, s); - + if (h) *return_value = (tag_value_t)h, retval = 1; else *return_value = (tag_value_t)NULL, retval = -1; - + return retval; } tagi_t *msgstrtag_filter(tagi_t *dst, tagi_t const f[], - tagi_t const *src, + tagi_t const *src, void **bb); int msgobjtag_snprintf(tagi_t const *t, char b[], size_t size) @@ -179,9 +179,9 @@ assert(t); - if (!t || !t->t_value) { - if (size) b[0] = 0; - return 0; + if (!t || !t->t_value) { + if (size) b[0] = 0; + return 0; } mo = (msg_pub_t *)t->t_value; @@ -230,7 +230,7 @@ msg_header_t const *o; char *b; - assert(src); assert(*bb); + assert(src); assert(*bb); omo = (msg_pub_t const *)src->t_value; @@ -320,7 +320,7 @@ msg_header_t const *o; char *b; - assert(src); assert(*bb); + assert(src); assert(*bb); omo = (msg_pub_t const *)src->t_value; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg.h Tue Dec 16 13:05:22 2008 @@ -55,7 +55,7 @@ SOFIAPUBFUN msg_t *msg_ref_create(msg_t *); SOFIAPUBFUN void msg_ref_destroy(msg_t *); - + SOFIAPUBFUN msg_pub_t *msg_public(msg_t const *msg, void *tag); SOFIAPUBFUN msg_pub_t *msg_object(msg_t const *msg); SOFIAPUBFUN msg_mclass_t const *msg_mclass(msg_t const *msg); @@ -103,9 +103,9 @@ /** Cache a copy of headers when parsing. */ MSG_FLG_EXTRACT_COPY = (1<<2), /** Print comma-separated lists instead of separate headers */ - MSG_FLG_COMMA_LISTS = (1<<3), + MSG_FLG_COMMA_LISTS = (1<<3), - /**Use mailbox format when parsing - in mailbox format + /**Use mailbox format when parsing - in mailbox format * message has no body unless Content-Length header is present. */ MSG_FLG_MAILBOX = (1<<4), Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_addr.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_addr.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_addr.h Tue Dec 16 13:05:22 2008 @@ -24,10 +24,10 @@ #ifndef MSG_ADDR_H /** Defined when has been included. */ -#define MSG_ADDR_H +#define MSG_ADDR_H -/**@file sofia-sip/msg_addr.h +/**@file sofia-sip/msg_addr.h * @brief Addressing and I/O interface for messages. * * @author Pekka Pessi @@ -66,8 +66,8 @@ msg_n_fragments = 8 }; -/** I/O vector type. - * @sa msg_recv_iovec(), msg_iovec(), #su_iovec_s, su_vsend(), su_vrecv(). +/** I/O vector type. + * @sa msg_recv_iovec(), msg_iovec(), #su_iovec_s, su_vsend(), su_vrecv(). */ typedef struct su_iovec_s msg_iovec_t; #define mv_base siv_base @@ -88,8 +88,8 @@ SOFIAPUBFUN void msg_clear_committed(msg_t *msg); -SOFIAPUBFUN issize_t msg_buf_external(msg_t *msg, - usize_t N, +SOFIAPUBFUN issize_t msg_buf_external(msg_t *msg, + usize_t N, usize_t blocksize); SOFIA_END_DECLS Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_buffer.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_buffer.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_buffer.h Tue Dec 16 13:05:22 2008 @@ -27,10 +27,10 @@ #define MSG_BUFFER_H /**@file sofia-sip/msg_buffer.h - * @brief Internal buffer management functions. - * + * @brief Internal buffer management functions. + * * @author Pekka Pessi - * + * * @date Created: Fri Nov 8 12:23:00 2002 ppessi * */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_date.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_date.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_date.h Tue Dec 16 13:05:22 2008 @@ -24,16 +24,16 @@ #ifndef MSG_DATE_H /** Defined when has been included. */ -#define MSG_DATE_H +#define MSG_DATE_H /**@ingroup msg_parser - * @file sofia-sip/msg_date.h + * @file sofia-sip/msg_date.h * @brief Types and functions for handling dates and times. * * @author Pekka Pessi * * @date Created: Thu Jun 8 19:28:55 2000 ppessi - * + * */ #ifndef SU_TYPES_H Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_header.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_header.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_header.h Tue Dec 16 13:05:22 2008 @@ -33,7 +33,7 @@ * @author Pekka Pessi * * @date Created: Mon Aug 27 15:44:27 2001 ppessi - * + * */ #include @@ -203,13 +203,13 @@ #ifdef SU_HAVE_INLINE /** Clear encoded data from header structure. */ -su_inline void msg_fragment_clear(msg_common_t *h) +su_inline void msg_fragment_clear(msg_common_t *h) { h->h_data = NULL, h->h_len = 0; } /** Pointer to header parameters. */ -su_inline +su_inline msg_param_t **msg_header_params(msg_common_t const *h) { if (h && h->h_class->hc_params) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mclass.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mclass.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mclass.h Tue Dec 16 13:05:22 2008 @@ -41,20 +41,20 @@ SOFIA_BEGIN_DECLS -enum { +enum { /** Default size of hash table */ - MC_HASH_SIZE = 127, + MC_HASH_SIZE = 127, /** Size of short form table */ - MC_SHORT_SIZE = 'Z' - 'A' + 1 + MC_SHORT_SIZE = 'Z' - 'A' + 1 }; /**Header reference. * - * A header reference object contains a pointer to a - * @ref msg_hclass_s "header class" + * A header reference object contains a pointer to a + * @ref msg_hclass_s "header class" * and a offset to the header objects within the @ref msg_pub_t "public * message structure". - * + * * The @a hr_flags field is used to provide classification of headers. For * instance, the msg_extract_errors() returns bitwise or of all hr_flags * belonging to headers with parsing errors. @@ -102,7 +102,7 @@ unsigned mc_flags; /**< Default flags */ unsigned mc_msize; /**< Size of public message structure */ /** Function extracting the message contents. */ - issize_t (*mc_extract_body)(msg_t *msg, msg_pub_t *pub, + issize_t (*mc_extract_body)(msg_t *msg, msg_pub_t *pub, char b[], isize_t bsiz, int eos); msg_href_t mc_request[1]; /**< Request line reference */ @@ -117,7 +117,7 @@ short mc_hash_size; /**< Size of parsing table */ short mc_hash_used; /**< Number of headers in parsing table */ /** Hash table for parsing containing reference for each header. */ - msg_href_t mc_hash[MC_HASH_SIZE]; + msg_href_t mc_hash[MC_HASH_SIZE]; }; enum { msg_mclass_copy = 0, msg_mclass_empty = 1 }; @@ -128,12 +128,12 @@ SOFIAPUBFUN int msg_mclass_insert(msg_mclass_t *mc, msg_href_t const *hr); SOFIAPUBFUN -int msg_mclass_insert_header(msg_mclass_t *mc, +int msg_mclass_insert_header(msg_mclass_t *mc, msg_hclass_t *hc, unsigned short offset); SOFIAPUBFUN -int msg_mclass_insert_with_mask(msg_mclass_t *mc, +int msg_mclass_insert_with_mask(msg_mclass_t *mc, msg_hclass_t *hc, unsigned short offset, unsigned short mask); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mclass_hash.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mclass_hash.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mclass_hash.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef MSG_MCLASS_HASH_H /** Defined when has been included. */ -#define MSG_MCLASS_HASH_H +#define MSG_MCLASS_HASH_H /**@ingroup msg_parser * @file sofia-sip/msg_mclass_hash.h @@ -34,7 +34,7 @@ * @author Pekka Pessi * * @date Created: Tue Aug 21 16:03:45 2001 ppessi - * + * */ #include @@ -49,7 +49,7 @@ #define MC_HASH(s, n) (msg_header_name_hash(s, NULL) % (unsigned)(n)) /** Hash header name */ -su_inline +su_inline unsigned short msg_header_name_hash(char const *s, isize_t *llen) { unsigned short hash = 0; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mime.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mime.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mime.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef MSG_MIME_H /** Defined when has been included. */ -#define MSG_MIME_H +#define MSG_MIME_H /**@ingroup msg_mime * @file sofia-sip/msg_mime.h @@ -34,7 +34,7 @@ * @author Pekka Pessi * * @date Created: Fri Aug 16 19:18:26 EEST 2002 ppessi - * + * */ #ifndef URL_H @@ -58,7 +58,7 @@ typedef msg_accept_any_t msg_accept_encoding_t; typedef msg_accept_any_t msg_accept_language_t; -typedef struct msg_content_disposition_s +typedef struct msg_content_disposition_s msg_content_disposition_t; typedef msg_list_t msg_content_encoding_t; typedef msg_generic_t msg_content_id_t; @@ -100,7 +100,7 @@ char const *aa_q; /**< Value of q parameter */ }; -/**@ingroup msg_content_disposition +/**@ingroup msg_content_disposition * @brief Structure for @b Content-Disposition header. */ struct msg_content_disposition_s @@ -208,12 +208,12 @@ char const *content_type, void const *data, isize_t dlen); -SOFIAPUBFUN -msg_multipart_t *msg_multipart_parse(su_home_t *home, +SOFIAPUBFUN +msg_multipart_t *msg_multipart_parse(su_home_t *home, msg_content_type_t const *c, msg_payload_t *pl); SOFIAPUBFUN -int msg_multipart_complete(su_home_t *home, +int msg_multipart_complete(su_home_t *home, msg_content_type_t *c, msg_multipart_t *mp); SOFIAPUBFUN msg_header_t *msg_multipart_serialize(msg_header_t **head0, Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mime_protos.h.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mime_protos.h.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_mime_protos.h.in Tue Dec 16 13:05:22 2008 @@ -30,7 +30,7 @@ #ifndef MSG_MIME_PROTOS_H /** Defined when has been included. */ -#define MSG_MIME_PROTOS_H +#define MSG_MIME_PROTOS_H /**@ingroup msg_mime * @file sofia-sip/msg_mime_protos.h @@ -64,13 +64,13 @@ /* Declare internal prototypes for #xxxxxxx_xxxxxxx# */ -/**@addtogroup msg_#xxxxxx# - * @{ +/**@addtogroup msg_#xxxxxx# + * @{ */ -enum { +enum { /** Hash of #xxxxxxx_xxxxxxx#. @internal */ - msg_#xxxxxx#_hash = #hash# + msg_#xxxxxx#_hash = #hash# }; /** Parse a #xxxxxxx_xxxxxxx#. @internal */ @@ -83,43 +83,43 @@ MSG_DLL msg_dup_f msg_#xxxxxx#_dup_one; /**Header class for #xxxxxxx_xxxxxxx#. - * - * The header class msg_#xxxxxx#_class defines how a + * + * The header class msg_#xxxxxx#_class defines how a * #xxxxxxx_xxxxxxx# header is parsed and printed. It also * contains methods used by message parser and other functions * to manipulate the #msg_#xxxxxx#_t header structure. - * + * */ #ifndef msg_#xxxxxx#_class MSG_DLL extern msg_hclass_t msg_#xxxxxx#_class[]; #endif /**Initializer for an #msg_#xxxxxx#_t structure. - * + * * A static msg_#xxxxxx#_t structure must be initialized * with the MSG_#XXXXXX#_INIT() macro. For instance, - * @code - * + * @code + * * msg_#xxxxxx#_t msg_#xxxxxx# = MSG_#XXXXXX#_INIT; - * + * * @endcode * @HI */ #define MSG_#XXXXXX#_INIT() MSG_HDR_INIT(#xxxxxx#) /**Initialize an #msg_#xxxxxx#_t structure. - * + * * An #msg_#xxxxxx#_t structure can be initialized with the * msg_#xxxxxx#_init() function/macro. For instance, * @code - * + * * msg_#xxxxxx#_t msg_#xxxxxx#; - * + * * msg_#xxxxxx#_init(&msg_#xxxxxx#); - * + * * @endcode - * - * @param x pointer to #msg_#xxxxxx#_t structure + * + * @param x pointer to #msg_#xxxxxx#_t structure */ #if SU_HAVE_INLINE su_inline msg_#xxxxxx#_t *msg_#xxxxxx#_init(msg_#xxxxxx#_t x[1]) @@ -132,13 +132,13 @@ #endif /**Test if header object is an instance of #msg_#xxxxxx#_t. - * + * * The function msg_is_#xxxxxx#() returns true (nonzero) if * the header class is an instance of #xxxxxxx_xxxxxxx# * object and false (zero) otherwise. - * + * * @param header pointer to the header structure to be tested - * + * * @return The function msg_is_#xxxxxx#() returns true (nonzero) if the * header object is an instance of header #xxxxxxx_xxxxxxx# and false (zero) * otherwise. @@ -155,27 +155,27 @@ #define msg_#xxxxxx#_p(h) msg_is_#xxxxxx#((h)) /**Duplicate (deep copy) #msg_#xxxxxx#_t. - * + * * The function msg_#xxxxxx#_dup() duplicates a header structure @a * header. If the header structure @a header contains a reference * (@c header->x_next) to a list of headers, all the headers in the * list are duplicated, too. - * + * * @param home memory home used to allocate new structure * @param header header structure to be duplicated - * + * * When duplicating, all parameter lists and non-constant strings * attached to the header are copied, too. The function uses given * memory @a home to allocate all the memory areas used to copy the * header. - * + * * @par Example * @code - * + * * #xxxxxx# = msg_#xxxxxx#_dup(home, msg->msg_#xxxxxx#); - * + * * @endcode - * + * * @return * The function msg_#xxxxxx#_dup() returns a pointer to the * newly duplicated #msg_#xxxxxx#_t header structure, or NULL @@ -184,44 +184,44 @@ #if SU_HAVE_INLINE su_inline #endif -msg_#xxxxxx#_t *msg_#xxxxxx#_dup(su_home_t *home, +msg_#xxxxxx#_t *msg_#xxxxxx#_dup(su_home_t *home, msg_#xxxxxx#_t const *header); #if SU_HAVE_INLINE su_inline -msg_#xxxxxx#_t *msg_#xxxxxx#_dup(su_home_t *home, +msg_#xxxxxx#_t *msg_#xxxxxx#_dup(su_home_t *home, msg_#xxxxxx#_t const *header) { return (msg_#xxxxxx#_t *) - msg_header_dup_as(home, msg_#xxxxxx#_class, (msg_header_t const *)header); + msg_header_dup_as(home, msg_#xxxxxx#_class, (msg_header_t const *)header); } #endif /**Copy an #msg_#xxxxxx#_t header structure. - * + * * The function msg_#xxxxxx#_copy() copies a header structure @a * header. If the header structure @a header contains a reference * (@c header->h_next) to a list of headers, all the headers in that * list are copied, too. The function uses given memory @a home to * allocate all the memory areas used to copy the header structure * @a header. - * + * * @param home memory home used to allocate new structure * @param header pointer to the header structure to be duplicated - * + * * When copying, only the header structure and parameter lists * attached to it are duplicated. The new header structure retains * all the references to the strings within the old @a header, * including the encoding of the old header, if present. - * + * * @par Example * @code - * + * * #xxxxxx# = msg_#xxxxxx#_copy(home, msg->msg_#xxxxxx#); - * + * * @endcode - * + * * @return * The function msg_#xxxxxx#_copy() returns a pointer to * newly copied header structure, or NULL upon an error. @@ -229,32 +229,32 @@ #if SU_HAVE_INLINE su_inline #endif -msg_#xxxxxx#_t *msg_#xxxxxx#_copy(su_home_t *home, +msg_#xxxxxx#_t *msg_#xxxxxx#_copy(su_home_t *home, msg_#xxxxxx#_t const *header); #if SU_HAVE_INLINE su_inline -msg_#xxxxxx#_t *msg_#xxxxxx#_copy(su_home_t *home, +msg_#xxxxxx#_t *msg_#xxxxxx#_copy(su_home_t *home, msg_#xxxxxx#_t const *header) { return (msg_#xxxxxx#_t *) - msg_header_copy_as(home, msg_#xxxxxx#_class, (msg_header_t const *)header); + msg_header_copy_as(home, msg_#xxxxxx#_class, (msg_header_t const *)header); } #endif /**Make a header structure #msg_#xxxxxx#_t. - * + * * The function msg_#xxxxxx#_make() makes a new #msg_#xxxxxx#_t header * structure. It allocates a new header structure, and decodes the string @a * s as the value of the structure. - * + * * @param home memory home used to allocate new header structure. * @param s string to be decoded as value of the new header structure - * + * * @note This function may be implemented as a macro calling * msg_header_make(). - * + * * @return * The function msg_#xxxxxx#_make() returns a pointer to newly maked * #msg_#xxxxxx#_t header structure, or NULL upon an error. @@ -270,24 +270,24 @@ /**Make a #xxxxxxx_xxxxxxx# from formatting result. - * + * * The function msg_#xxxxxx#_format() makes a new #xxxxxxx_xxxxxxx# object * using snprintf-formatted result as its value. The function first * prints the arguments according to the format @a fmt specified. Then it * allocates a new header structure, and uses the formatting result as the * header value. - * + * * @param home memory home used to allocate new header structure. * @param fmt string used as a printf()-style format * @param ... argument list for format - * + * * @note This function may be implemented as a macro calling * msg_header_format(). - * + * * @return * The function msg_#xxxxxx#_format() returns a pointer to newly * makes header structure, or NULL upon an error. - * + * * @HIDE */ #if SU_HAVE_INLINE @@ -301,11 +301,11 @@ { msg_header_t *h; va_list ap; - + va_start(ap, fmt); h = msg_header_vformat(home, msg_#xxxxxx#_class, fmt, ap); va_end(ap); - + return (msg_#xxxxxx#_t*)h; } #endif Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_parser.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_parser.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_parser.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef MSG_PARSER_H /** Defined when has been included. */ -#define MSG_PARSER_H +#define MSG_PARSER_H /**@ingroup msg_parser * @file sofia-sip/msg_parser.h @@ -101,8 +101,8 @@ char b[], isize_t bsiz, int eos); SOFIAPUBFUN issize_t msg_extract_separator(msg_t *msg, msg_pub_t *mo, char b[], isize_t bsiz, int eos); -SOFIAPUBFUN issize_t msg_extract_payload(msg_t *msg, msg_pub_t *mo, - msg_header_t **return_payload, +SOFIAPUBFUN issize_t msg_extract_payload(msg_t *msg, msg_pub_t *mo, + msg_header_t **return_payload, usize_t body_len, char b[], isize_t bsiz, int eos); @@ -113,9 +113,9 @@ SOFIAPUBFUN int msg_firstline_d(char *s, char **ss2, char **ss3); SOFIAPUBFUN isize_t msg_default_dup_xtra(msg_header_t const *header, isize_t offset); -SOFIAPUBFUN char *msg_default_dup_one(msg_header_t *dst, +SOFIAPUBFUN char *msg_default_dup_one(msg_header_t *dst, msg_header_t const *src, - char *b, + char *b, isize_t xtra); SOFIAPUBFUN issize_t msg_numeric_d(su_home_t *, msg_header_t *h, char *s, isize_t slen); @@ -133,7 +133,7 @@ SOFIAPUBFUN isize_t msg_generic_dup_xtra(msg_header_t const *h, isize_t offset); SOFIAPUBFUN char *msg_generic_dup_one(msg_header_t *dst, msg_header_t const *src, - char *b, + char *b, isize_t xtra); SOFIAPUBFUN isize_t msg_unknown_dup_xtra(msg_header_t const *h, isize_t offset); @@ -159,7 +159,7 @@ SOFIAPUBFUN issize_t msg_auth_d(su_home_t *, msg_header_t *h, char *s, isize_t slen); SOFIAPUBFUN issize_t msg_auth_e(char b[], isize_t bsiz, msg_header_t const *h, int f); SOFIAPUBFUN isize_t msg_auth_dup_xtra(msg_header_t const *h, isize_t offset); -SOFIAPUBFUN char *msg_auth_dup_one(msg_header_t *dst, msg_header_t const *src, +SOFIAPUBFUN char *msg_auth_dup_one(msg_header_t *dst, msg_header_t const *src, char *b, isize_t xtra); /* --------------------------------------------------------------------------- @@ -189,7 +189,7 @@ #define MSG_TERM_E(p, e) ((p) < (e) ? (p)[0] = '\0' : '\0') /** Encode a character. @HI */ -#define MSG_CHAR_E(p, e, c) (++(p) < (e) ? ((p)[-1]=(c)) : (c)) +#define MSG_CHAR_E(p, e, c) (++(p) < (e) ? ((p)[-1]=(c)) : (c)) /** Calculate separator and string length. @HI */ #define MSG_STRING_LEN(s, sep_size) ((s) ? (strlen(s) + sep_size) : 0) @@ -214,7 +214,7 @@ SOFIAPUBFUN issize_t msg_token_scan(char *start); SOFIAPUBFUN issize_t msg_attribute_value_scanner(char *s); -SOFIAPUBFUN issize_t msg_any_list_d(su_home_t *, char **ss, +SOFIAPUBFUN issize_t msg_any_list_d(su_home_t *, char **ss, msg_param_t **append_list, issize_t (*scanner)(char *s), int sep); @@ -269,7 +269,7 @@ #define MSG_PARAMS_SIZE(rv, params) (rv = msg_params_dup_xtra(params, rv)) /** Duplicate a parameter list */ -SOFIAPUBFUN char *msg_params_dup(msg_param_t const **d, msg_param_t const *s, +SOFIAPUBFUN char *msg_params_dup(msg_param_t const **d, msg_param_t const *s, char *b, isize_t xtra); /** Count number of parameters in the list */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_protos.h.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_protos.h.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_protos.h.in Tue Dec 16 13:05:22 2008 @@ -30,7 +30,7 @@ #ifndef MSG_PROTOS_H /** Defined when has been included. */ -#define MSG_PROTOS_H +#define MSG_PROTOS_H /**@ingroup msg_headers * @file sofia-sip/msg_protos.h @@ -58,13 +58,13 @@ /* Declare internal prototypes for #xxxxxxx_xxxxxxx# */ -/**@addtogroup msg_#xxxxxx# - * @{ +/**@addtogroup msg_#xxxxxx# + * @{ */ -enum { +enum { /** Hash of #xxxxxxx_xxxxxxx#. @internal */ - msg_#xxxxxx#_hash = #hash# + msg_#xxxxxx#_hash = #hash# }; /** Parse a #xxxxxxx_xxxxxxx#. @internal */ @@ -74,41 +74,41 @@ MSG_DLL msg_print_f msg_#xxxxxx#_e; /**Header class for #xxxxxxx_xxxxxxx#. - * - * The header class msg_#xxxxxx#_class defines how a + * + * The header class msg_#xxxxxx#_class defines how a * #xxxxxxx_xxxxxxx# header is parsed and printed. It also * contains methods used by message parser and other functions * to manipulate the msg_#xxxxxx#_t header structure. - * + * */ MSG_DLL extern msg_hclass_t msg_#xxxxxx#_class[]; /**Initializer for structure msg_#xxxxxx#_t. - * + * * A static msg_#xxxxxx#_t structure must be initialized * with the MSG_#XXXXXX#_INIT() macro. For instance, - * @code - * + * @code + * * msg_#xxxxxx#_t msg_#xxxxxx# = MSG_#XXXXXX#_INIT; - * + * * @endcode * @HI */ #define MSG_#XXXXXX#_INIT() MSG_HDR_INIT(#xxxxxx#) /**Initialize a structure msg_#xxxxxx#_t. - * + * * An msg_#xxxxxx#_t structure can be initialized with the * msg_#xxxxxx#_init() function/macro. For instance, * @code - * + * * msg_#xxxxxx#_t msg_#xxxxxx#; - * + * * msg_#xxxxxx#_init(&msg_#xxxxxx#); - * + * * @endcode - * - * @param x pointer to msg_#xxxxxx#_t structure + * + * @param x pointer to msg_#xxxxxx#_t structure */ #if SU_HAVE_INLINE su_inline msg_#xxxxxx#_t *msg_#xxxxxx#_init(msg_#xxxxxx#_t x[1]) @@ -121,13 +121,13 @@ #endif /**Test if header object is instance of msg_#xxxxxx#_t. - * + * * The function msg_is_#xxxxxx#() returns true (nonzero) if * the header class is an instance of #xxxxxxx_xxxxxxx# * object and false (zero) otherwise. - * + * * @param header pointer to the header structure to be tested - * + * * @return * The function msg_is_#xxxxxx#() returns true (nonzero) if * the header object is an instance of header #xxxxxx# and @@ -144,27 +144,27 @@ #endif /**Duplicate (deep copy) @c msg_#xxxxxx#_t. - * + * * The function msg_#xxxxxx#_dup() duplicates a header structure @a * header. If the header structure @a header contains a reference * (@c header->x_next) to a list of headers, all the headers in the * list are duplicated, too. - * + * * @param home memory home used to allocate new structure * @param header header structure to be duplicated - * + * * When duplicating, all parameter lists and non-constant strings * attached to the header are copied, too. The function uses given * memory @a home to allocate all the memory areas used to copy the * header. - * + * * @par Example * @code - * + * * #xxxxxx# = msg_#xxxxxx#_dup(home, msg->msg_#xxxxxx#); - * + * * @endcode - * + * * @return * The function msg_#xxxxxx#_dup() returns a pointer to the * newly duplicated msg_#xxxxxx#_t header structure, or NULL @@ -173,45 +173,45 @@ #if SU_HAVE_INLINE su_inline #endif -msg_#xxxxxx#_t *msg_#xxxxxx#_dup(su_home_t *home, +msg_#xxxxxx#_t *msg_#xxxxxx#_dup(su_home_t *home, msg_#xxxxxx#_t const *header) __attribute__((__malloc__)); #if SU_HAVE_INLINE su_inline -msg_#xxxxxx#_t *msg_#xxxxxx#_dup(su_home_t *home, +msg_#xxxxxx#_t *msg_#xxxxxx#_dup(su_home_t *home, msg_#xxxxxx#_t const *header) { return (msg_#xxxxxx#_t *) - msg_header_dup_as(home, msg_#xxxxxx#_class, (msg_header_t const *)header); + msg_header_dup_as(home, msg_#xxxxxx#_class, (msg_header_t const *)header); } #endif /**Copy a msg_#xxxxxx#_t header structure. - * + * * The function msg_#xxxxxx#_copy() copies a header structure @a * header. If the header structure @a header contains a reference * (@c header->h_next) to a list of headers, all the headers in that * list are copied, too. The function uses given memory @a home to * allocate all the memory areas used to copy the header structure * @a header. - * + * * @param home memory home used to allocate new structure * @param header pointer to the header structure to be duplicated - * + * * When copying, only the header structure and parameter lists * attached to it are duplicated. The new header structure retains * all the references to the strings within the old @a header, * including the encoding of the old header, if present. - * + * * @par Example * @code - * + * * #xxxxxx# = msg_#xxxxxx#_copy(home, msg->msg_#xxxxxx#); - * + * * @endcode - * + * * @return * The function msg_#xxxxxx#_copy() returns a pointer to * newly copied header structure, or NULL upon an error. @@ -219,33 +219,33 @@ #if SU_HAVE_INLINE su_inline #endif -msg_#xxxxxx#_t *msg_#xxxxxx#_copy(su_home_t *home, +msg_#xxxxxx#_t *msg_#xxxxxx#_copy(su_home_t *home, msg_#xxxxxx#_t const *header) __attribute__((__malloc__)); #if SU_HAVE_INLINE su_inline -msg_#xxxxxx#_t *msg_#xxxxxx#_copy(su_home_t *home, +msg_#xxxxxx#_t *msg_#xxxxxx#_copy(su_home_t *home, msg_#xxxxxx#_t const *header) { return (msg_#xxxxxx#_t *) - msg_header_copy_as(home, msg_#xxxxxx#_class, (msg_header_t const *)header); + msg_header_copy_as(home, msg_#xxxxxx#_class, (msg_header_t const *)header); } #endif /**Make a header structure msg_#xxxxxx#_t. - * + * * The function msg_#xxxxxx#_make() makes a new * msg_#xxxxxx#_t header structure. It allocates a new * header structure, and decodes the string @a s as the * value of the structure. - * + * * @param home memory home used to allocate new header structure. * @param s string to be decoded as value of the new header structure - * + * * @note This function is usually implemented as a macro calling * msg_header_make(). - * + * * @return * The function msg_#xxxxxx#_make() returns a pointer to * newly maked msg_#xxxxxx#_t header structure, or NULL upon @@ -262,25 +262,25 @@ #endif /**Make a #xxxxxxx_xxxxxxx# from formatting result. - * + * * The function msg_#xxxxxx#_format() makes a new * #xxxxxxx_xxxxxxx# object using formatting result as its * value. The function first prints the arguments according to * the format @a fmt specified. Then it allocates a new header * structure, and uses the formatting result as the header * value. - * + * * @param home memory home used to allocate new header structure. * @param fmt string used as a printf()-style format * @param ... argument list for format - * + * * @note This function is usually implemented as a macro calling * msg_header_format(). - * + * * @return * The function msg_#xxxxxx#_format() returns a pointer to newly * makes header structure, or NULL upon an error. - * + * * @HIDE */ #if SU_HAVE_INLINE @@ -294,11 +294,11 @@ { msg_header_t *h; va_list ap; - + va_start(ap, fmt); h = msg_header_vformat(home, msg_#xxxxxx#_class, fmt, ap); va_end(ap); - + return (msg_#xxxxxx#_t*)h; } #endif Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_tag_class.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_tag_class.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_tag_class.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef MSG_TAG_CLASS_H /** Defined when has been included */ -#define MSG_TAG_CLASS_H +#define MSG_TAG_CLASS_H /**@file sofia-sip/msg_tag_class.h * @brief Functions for constructing per-protocol tag classes. @@ -44,15 +44,15 @@ SOFIAPUBFUN size_t msghdrtag_xtra(tagi_t const *t, size_t offset); SOFIAPUBFUN tagi_t *msghdrtag_dup(tagi_t *dst, tagi_t const *src, void **inout_buffer); -SOFIAPUBFUN int msghdrtag_scan(tag_type_t tt, su_home_t *home, - char const *s, +SOFIAPUBFUN int msghdrtag_scan(tag_type_t tt, su_home_t *home, + char const *s, tag_value_t *return_value); -SOFIAPUBFUN tagi_t *msghdrtag_filter(tagi_t *dst, tagi_t const f[], - tagi_t const *src, +SOFIAPUBFUN tagi_t *msghdrtag_filter(tagi_t *dst, tagi_t const f[], + tagi_t const *src, void **inout_buffer); SOFIAPUBFUN tagi_t *msgstrtag_filter(tagi_t *dst, tagi_t const f[], - tagi_t const *src, + tagi_t const *src, void **inout_buffer); SOFIAPUBFUN int msgobjtag_snprintf(tagi_t const *t, char b[], size_t size); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_types.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_types.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_types.h Tue Dec 16 13:05:22 2008 @@ -28,9 +28,9 @@ /**@file sofia-sip/msg_types.h * @brief Types for messages and common headers - * + * * @author Pekka Pessi - * + * * @date Created: Thu Jan 23 15:43:17 2003 ppessi * */ @@ -65,15 +65,15 @@ #endif #ifndef MSG_PUB_T -#ifdef MSG_OBJ_T +#ifdef MSG_OBJ_T #define MSG_PUB_T MSG_OBJ_T #else #define MSG_PUB_T struct msg_pub_s #endif #endif -/**Public protocol-specific message structure for accessing the message. - * +/**Public protocol-specific message structure for accessing the message. + * * This type can be either #sip_t, #http_t, or #msg_multipart_t, depending * on the message. The base structure used by msg module is defined in * struct #msg_pub_s. @@ -104,7 +104,7 @@ #define MSG_HEADER_N 16377 -/** Common part of the header objects (or message fragments). +/** Common part of the header objects (or message fragments). * * This structure is also known as #msg_common_t or #sip_common_t. */ @@ -132,7 +132,7 @@ #define msg_ident msg_common->h_class -/** Numeric header. +/** Numeric header. * * A numeric header has value range of a 32-bit, 0..4294967295. The @a * x_value field is unsigned long, however. @@ -143,7 +143,7 @@ unsigned long x_value; /**< Numeric header value */ }; -/** Generic header. +/** Generic header. * * A generic header does not have any internal structure. Its value is * represented as a string. @@ -154,8 +154,8 @@ char const *g_string; /**< Header value */ }; -/** List header. - * +/** List header. + * * A list header consists of comma-separated list of tokens. */ struct msg_list_s { @@ -164,7 +164,7 @@ msg_param_t *k_items; /**< List of items */ }; -/** Authentication header. +/** Authentication header. * * An authentication header has authentication scheme name and * comma-separated list of parameters as its value. @@ -244,13 +244,13 @@ /* ====================================================================== */ -/**Define how to handle existing headers - * when a new header is added to a message. +/**Define how to handle existing headers + * when a new header is added to a message. */ typedef enum { msg_kind_single, /**< Only one header is allowed */ msg_kind_append, /**< New header is appended */ - msg_kind_list, /**< A token list header, + msg_kind_list, /**< A token list header, * new header is combined with old one. */ msg_kind_apndlist, /**< A complex list header. */ msg_kind_prepend /**< New header is prepended */ @@ -259,17 +259,17 @@ struct su_home_s; typedef issize_t msg_parse_f(struct su_home_s *, msg_header_t *, char *, isize_t); -typedef issize_t msg_print_f(char buf[], isize_t bufsiz, +typedef issize_t msg_print_f(char buf[], isize_t bufsiz, msg_header_t const *, int flags); -typedef char *msg_dup_f(msg_header_t *dst, msg_header_t const *src, +typedef char *msg_dup_f(msg_header_t *dst, msg_header_t const *src, char *buf, isize_t bufsiz); typedef isize_t msg_xtra_f(msg_header_t const *h, isize_t offset); typedef int msg_update_f(msg_common_t *, char const *name, isize_t namelen, char const *value); -/** Factory object for a header. - * +/** Factory object for a header. + * * The #msg_hclass_t object, "header class", defines how a header is * handled. It has parsing and printing functions, functions used to copy * header objects, header name and other information used when parsing, Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_class.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_class.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_class.c Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ /**@ingroup test_msg * @file test_class.c - * + * * Message class for testing parser and transports. * * @author Pekka Pessi @@ -65,7 +65,7 @@ static msg_dup_f msg_request_dup_one; msg_hclass_t msg_request_class[] = -MSG_HEADER_CLASS(msg_, request, NULL, "", rq_common, +MSG_HEADER_CLASS(msg_, request, NULL, "", rq_common, single_critical, msg_request, msg_generic); /** Decode a request line */ @@ -133,7 +133,7 @@ static msg_dup_f msg_status_dup_one; msg_hclass_t msg_status_class[1] = -MSG_HEADER_CLASS(msg_, status, NULL, "", st_common, +MSG_HEADER_CLASS(msg_, status, NULL, "", st_common, single_critical, msg_status, msg_generic); /** Parse status line */ @@ -162,7 +162,7 @@ if (status > 999 || status < 100) status = 0; - return snprintf(b, bsiz, "%s %03u %s" CRLF, + return snprintf(b, bsiz, "%s %03u %s" CRLF, st->st_version, status, st->st_phrase); } @@ -201,19 +201,19 @@ MSG_HEADER_CLASS(msg_, auth, "Auth", "", au_params, append, msg_auth, msg_generic); -/** Extract the message body, including separator line. +/** Extract the message body, including separator line. * - * @param[in,out] msg message object - * @param[in,out] pub public message structure - * @param[in] b buffer containing unparsed data - * @param[in] bsiz buffer size + * @param[in,out] msg message object + * @param[in,out] pub public message structure + * @param[in] b buffer containing unparsed data + * @param[in] bsiz buffer size * @param[in] eos true if buffer contains whole message * * @retval -1 error * @retval 0 message is incomplete * @retval other number of bytes extracted */ -issize_t msg_test_extract_body(msg_t *msg, msg_pub_t *pub, +issize_t msg_test_extract_body(msg_t *msg, msg_pub_t *pub, char b[], isize_t bsiz, int eos) { msg_test_t *tst = (msg_test_t *)pub; @@ -249,14 +249,14 @@ if ((m = msg_extract_payload(msg, (msg_pub_t *)tst, NULL, body_len, b, bsiz, eos) ) == -1) return -1; - + tst->msg_flags |= MSG_FLG_FRAGS; if (bsiz >= body_len) tst->msg_flags |= MSG_FLG_COMPLETE; return m; } -msg_href_t const msg_content_length_href[1] = +msg_href_t const msg_content_length_href[1] = {{ msg_content_length_class, offsetof(msg_test_t, msg_content_length) @@ -269,11 +269,11 @@ tagi_t *tsttag_filter(tagi_t *dst, tagi_t const f[], - tagi_t const *src, + tagi_t const *src, void **bb); /** Tag class for test header tags. @HIDE */ -tag_class_t tsthdrtag_class[1] = +tag_class_t tsthdrtag_class[1] = {{ sizeof(tsthdrtag_class), /* tc_next */ NULL, @@ -290,7 +290,7 @@ }}; /** Tag class for TST header string tags. @HIDE */ -tag_class_t tststrtag_class[1] = +tag_class_t tststrtag_class[1] = {{ sizeof(tststrtag_class), /* tc_next */ NULL, @@ -307,7 +307,7 @@ }}; /** Tag class for TST message tags. @HIDE */ -tag_class_t tstmsgtag_class[1] = +tag_class_t tstmsgtag_class[1] = {{ sizeof(tstmsgtag_class), /* tc_next */ NULL, @@ -322,7 +322,7 @@ /* tc_ref_set */ t_ptr_ref_set, }}; -tag_typedef_t tsttag_header = +tag_typedef_t tsttag_header = {{ TAG_NAMESPACE, "header", tsthdrtag_class, 0 }}; tag_typedef_t tsttag_header_str = STRTAG_TYPEDEF(header_str); @@ -330,7 +330,7 @@ /** Filter a TST header structure. */ tagi_t *tsttag_filter(tagi_t *dst, tagi_t const f[], - tagi_t const *src, + tagi_t const *src, void **bb) { tagi_t stub[2] = {{ NULL }}; @@ -348,7 +348,7 @@ msg_hclass_offset(mc, (msg_pub_t *)tst, hc); msg_header_t const *h; - if (tst == NULL || + if (tst == NULL || (char *)hh >= ((char *)tst + tst->msg_size) || (char *)hh < (char const *)&tst->msg_request) return dst; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_class.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_class.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_class.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef TEST_CLASS_H /** Defined when has been included. */ -#define TEST_CLASS_H +#define TEST_CLASS_H /**@ingroup test_msg * @file test_class.h @@ -65,16 +65,16 @@ typedef struct msg_status_s msg_status_t; /** Request line. */ -struct msg_request_s { +struct msg_request_s { msg_common_t rq_common[1]; /**< Common fragment info */ msg_header_t *rq_next; /**< Link to next header */ char const *rq_method_name; /**< Method name */ url_t rq_url[1]; /**< RequestURI */ char const *rq_version; /**< Protocol version */ -}; +}; /** Status line. */ -struct msg_status_s { +struct msg_status_s { msg_common_t st_common[1]; /**< Common fragment info */ msg_header_t *st_next; /**< Link to next (dummy) */ char const *st_version; /**< Protocol version */ @@ -107,7 +107,7 @@ msg_accept_language_t *msg_accept_language; /**< Accept-Language */ msg_mime_version_t *msg_mime_version; /**< MIME-Version */ msg_content_md5_t *msg_content_md5; /**< Content-MD5 */ - msg_content_encoding_t *msg_content_encoding; + msg_content_encoding_t *msg_content_encoding; /**< Content-Encoding */ msg_content_length_t *msg_content_length; /**< Content-Length */ @@ -140,7 +140,7 @@ msg_content_id_t sh_content_id[1]; msg_content_md5_t sh_content_md5[1]; msg_content_language_t sh_content_language[1]; - msg_content_length_t sh_content_length[1]; + msg_content_length_t sh_content_length[1]; msg_content_location_t sh_content_location[1]; msg_content_type_t sh_content_type[1]; msg_mime_version_t sh_mime_version[1]; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_msg.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_msg.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_msg.c Tue Dec 16 13:05:22 2008 @@ -138,7 +138,7 @@ static int addr_test(void) { BEGIN(); - + /* It *will* fail. */ /* TEST(sizeof(socklen_t), sizeof(msg_addrlen(NULL))); */ @@ -268,7 +268,7 @@ msg_param_t const *p = NULL; char *master = ";0", *list, *end; - + for (i = 1; i < 256; i++) { master = su_sprintf(home, "%s; %u", master, i); TEST_1(master); list = end = su_strdup(home, master); @@ -294,7 +294,7 @@ msg_list_t k1[1] = {{{{ 0 }}}}; char list1[] = "foo, bar, baz zi \"baz\""; - + TEST_1(msg_list_d(home, (msg_header_t *)k1, list1, strlen(list1)) >= 0); TEST_1(k1->k_items); TEST_S(k1->k_items[0], "foo"); @@ -310,7 +310,7 @@ su_home_t home[1] = { SU_HOME_INIT(home) }; msg_list_t k2[1] = {{{{ 0 }}}}; char list2[] = "one, two, three, four, five, six, seven, eight"; - + TEST_1( msg_list_d(home, (msg_header_t *)k2, list2, strlen(list2)) >= 0); TEST_1(k2->k_items); @@ -319,33 +319,33 @@ su_home_deinit(home); } - + { /* Test that list longer than MSG_PARAMS_N is handled correctly */ su_home_t home[1] = { SU_HOME_INIT(home) }; msg_list_t k3[1] = {{{{ 0 }}}}; char list3[] = "one, two, three, four, five, six, seven, eight, nine"; - + TEST_1( msg_list_d(home, (msg_header_t *)k3, list3, strlen(list3)) >= 0); TEST_1(k3->k_items); TEST_1(k3->k_items[7]); TEST_1(k3->k_items[8]); TEST_1(k3->k_items[9] == NULL); - + su_home_deinit(home); } { /* Test that long lists are handled correctly */ su_home_t home[1] = { SU_HOME_INIT(home) }; - + msg_param_t *k = NULL; char *s; char list1[] = "one, two, three, four, five, six, seven, eight"; char list2[] = "one, two, three, four, five, six, seven, eight"; char list3[] = "one, two, three, four, five, six, seven, eight"; - char list4[] = "one, two, three, four, five, six, seven, eight, nine"; + char list4[] = "one, two, three, four, five, six, seven, eight, nine"; s = list1; TEST_1(msg_commalist_d(home, &s, &k, msg_token_scan) >= 0); TEST_1(k); @@ -366,7 +366,7 @@ msg_param_t *p = NULL; char *master = "0", *list, *end; - + for (i = 1; i < 256; i++) { master = su_sprintf(home, "%s, %u", master, i); TEST_1(master); list = end = su_strdup(home, master); @@ -389,7 +389,7 @@ { /* Test that errors in lists are handled correctly */ su_home_t home[1] = { SU_HOME_INIT(home) }; - + msg_param_t *k = NULL; char *s; char list1[] = "one, two, three, four, five, six, seven, foo=\"eight"; @@ -409,7 +409,7 @@ msg_list_t k4[1] = {{{{ 0 }}}}; char list4[] = ", ,\t,\r\n\t, , "; - + TEST_1( msg_list_d(home, (msg_header_t *)k4, list4, strlen(list4)) >= 0); TEST_1(k4->k_items == NULL); @@ -423,7 +423,7 @@ msg_auth_t au[1] = {{{{ 0 }}}}; char s[] = "Basic foo = \"bar==\" ,, bar=baari," "baz=\"bof,\\\\ \\\" baff\", base\t64/ - is== ,,"; - + TEST_1(msg_auth_d(home, (msg_header_t *)au, s, strlen(s)) >= 0); TEST_S(au->au_scheme, "Basic"); TEST_1(au->au_params); @@ -441,7 +441,7 @@ su_home_t home[1] = { SU_HOME_INIT(home) }; msg_content_type_t *c; - + c = msg_content_type_format(home, "%s/%s;%s;%s;%s;%s;%s;%s", "text", "plain", "charset=iso-8859-15", @@ -487,7 +487,7 @@ int i, j, hash = 0; msg_mclass_t const *mc = msg_test_mclass; msg_hclass_t *hc; - + BEGIN(); for (i = 0; i < mc->mc_hash_size; i++) { @@ -517,12 +517,12 @@ return msg_make(msg_test_mclass, MSG_DO_EXTRACT_COPY, buffer, -1); } -/**Check if header chain contains any loops. +/**Check if header chain contains any loops. * * @return * Return 0 if no loop, -1 otherwise. */ -static +static int msg_chain_loop(msg_header_t const *h) { msg_header_t const *h2; @@ -542,7 +542,7 @@ return 0; } -/** Check header chain consistency. +/** Check header chain consistency. * * @return * Return 0 if consistent, number of errors otherwise. @@ -552,7 +552,7 @@ { if (msg_chain_loop(h)) return -1; - + for (; h; h = h->sh_succ) { if (h->sh_succ && h->sh_succ->sh_prev != &h->sh_succ) return -1; @@ -606,14 +606,14 @@ TEST_1(separator = msg_separator_make(home, "\r\n")); TEST(msg_header_insert(msg, (msg_pub_t *)tst, (msg_header_t *)separator), 0); - TEST_P(tst->msg_separator, separator); + TEST_P(tst->msg_separator, separator); TEST_P(separator->sep_common->h_succ, tst->msg_payload); /* Try to add a new payload */ TEST_1(payload = msg_payload_make(home, "foofaa\r\n")); TEST(msg_header_insert(msg, (msg_pub_t *)tst, (msg_header_t *)payload), 0); /* It is appended */ - TEST_P(tst->msg_payload->pl_next, payload); + TEST_P(tst->msg_payload->pl_next, payload); TEST_P(tst->msg_payload->pl_common->h_succ, payload); { @@ -622,10 +622,10 @@ msg_param_t foo = "foo=bar"; vs = NULL; - MSG_PARAM_MATCH(vs, foo, "foo"); + MSG_PARAM_MATCH(vs, foo, "foo"); TEST_S(vs, "bar"); vs = NULL; - MSG_PARAM_MATCH(vs, foo, "fo"); + MSG_PARAM_MATCH(vs, foo, "fo"); TEST_P(vs, NULL); vi = 0; MSG_PARAM_MATCH_P(vi, foo, "foo"); @@ -670,14 +670,14 @@ TEST_1(se = fi->aa_next); TEST_S(en->aa_value, "en"); - TEST_M(en->aa_common->h_data, + TEST_M(en->aa_common->h_data, "Accept-Language: en;q=0.8, fi, se ; q = 0.6" CRLF, en->aa_common->h_len); - TEST_P((char *)en->aa_common->h_data + en->aa_common->h_len, + TEST_P((char *)en->aa_common->h_data + en->aa_common->h_len, fi->aa_common->h_data); TEST(fi->aa_common->h_len, 0); - TEST_P((char *)en->aa_common->h_data + en->aa_common->h_len, + TEST_P((char *)en->aa_common->h_data + en->aa_common->h_len, se->aa_common->h_data); TEST(se->aa_common->h_len, 0); @@ -689,9 +689,9 @@ TEST_P(fi->aa_next, de); TEST_P(de->aa_next, NULL); - TEST_P(en->aa_common->h_succ, fi); + TEST_P(en->aa_common->h_succ, fi); TEST_P(en->aa_common->h_prev, &deflate->aa_common->h_succ); - TEST_P(fi->aa_common->h_succ, de); + TEST_P(fi->aa_common->h_succ, de); TEST_P(fi->aa_common->h_prev, &en->aa_common->h_succ); TEST_P(de->aa_common->h_succ, NULL); TEST_P(de->aa_common->h_prev, &fi->aa_common->h_succ); @@ -700,21 +700,21 @@ TEST_P(se->aa_common->h_succ, NULL); TEST_P(se->aa_common->h_prev, NULL); - TEST_1(sv = msg_accept_language_make(msg_home(msg), + TEST_1(sv = msg_accept_language_make(msg_home(msg), "sv;q=0.6,sv_FI;q=0.7")); TEST_1(sv_fi = sv->aa_next); TEST(msg_header_replace(msg, (msg_pub_t *)tst, (void *)fi, (void *)sv), 0); TEST_P(en->aa_next, sv); - TEST_P(sv->aa_next->aa_next, de); + TEST_P(sv->aa_next->aa_next, de); TEST_P(de->aa_next, NULL); - TEST_P(en->aa_common->h_succ, sv); + TEST_P(en->aa_common->h_succ, sv); TEST_P(en->aa_common->h_prev, &deflate->aa_common->h_succ); - TEST_P(sv->aa_common->h_succ, sv_fi); + TEST_P(sv->aa_common->h_succ, sv_fi); TEST_P(sv->aa_common->h_prev, &en->aa_common->h_succ); - TEST_P(sv_fi->aa_common->h_succ, de); + TEST_P(sv_fi->aa_common->h_succ, de); TEST_P(sv_fi->aa_common->h_prev, &sv->aa_common->h_succ); TEST_P(de->aa_common->h_succ, NULL); TEST_P(de->aa_common->h_prev, &sv_fi->aa_common->h_succ); @@ -727,7 +727,7 @@ "Foo: bar" CRLF "Content-Length: 6" CRLF CRLF - "test" CRLF + "test" CRLF "extra stuff" CRLF); TEST_1(orig); otst = msg_test_public(orig); @@ -743,7 +743,7 @@ TEST(msg_header_insert(msg, (msg_pub_t *)tst, (void *)request), 0); - TEST_1(location = + TEST_1(location = msg_content_location_make(home, "http://localhost:8080/wife")); TEST(msg_header_insert(msg, (msg_pub_t *)tst, (void *)location), 0); @@ -751,14 +751,14 @@ TEST(msg_serialize(msg, (msg_pub_t *)tst), 0); TEST_1(msg_prepare(msg) > 0); - TEST_1(language = + TEST_1(language = msg_content_language_make(home, "se-FI, fi-FI, sv-FI")); TEST(msg_header_insert(msg, (msg_pub_t *)tst, (void *)language), 0); TEST_1(se = msg_accept_language_make(home, "se, fi, sv")); TEST_1(se->aa_next); TEST_1(se->aa_next->aa_next); TEST(msg_header_insert(msg, (msg_pub_t *)tst, (void *)se), 0); - + TEST(msg_serialize(msg, (msg_pub_t *)tst), 0); TEST_1(msg_prepare(msg) > 0); @@ -789,9 +789,9 @@ char const encoded[] = "Accept-Language: se, fi, sv\r\n"; TEST_SIZE(se->aa_common->h_len, strlen(encoded)); TEST_M(se->aa_common->h_data, encoded, se->aa_common->h_len); - TEST_P((char *)se->aa_common->h_data + se->aa_common->h_len, + TEST_P((char *)se->aa_common->h_data + se->aa_common->h_len, se->aa_next->aa_common->h_data); - TEST_P((char *)se->aa_common->h_data + se->aa_common->h_len, + TEST_P((char *)se->aa_common->h_data + se->aa_common->h_len, se->aa_next->aa_next->aa_common->h_data); } @@ -804,7 +804,7 @@ /* Bug #1726034 */ for (i = 0; i < 15; i++) - strcpy(body + i * 66, + strcpy(body + i * 66, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r\n"); pl = msg_payload_make(msg_home(msg), body); @@ -812,7 +812,7 @@ TEST(msg_header_insert(msg, (msg_pub_t *)tst, (void *)pl), 0); s = msg_as_string(msg_home(msg), msg, NULL, 0, &size); - TEST_S(s, + TEST_S(s, "GET a-wife HTTP/1.1" CRLF "Foo: bar" CRLF "Content-Length: 6" CRLF @@ -854,7 +854,7 @@ TEST_1(home = su_home_new(sizeof *home)); - TEST_1((w = msg_warning_make(home, + TEST_1((w = msg_warning_make(home, "399 host:5060 \"Ok\", " "399 [::1]:39999 \"foo\\\" bar\""))); TEST(w->w_code, 399); @@ -980,8 +980,8 @@ TEST_1(la->k_next->k_common->h_data); TEST_1(la->k_next->k_items == NULL); - TEST(msg_header_add_make(msg, (msg_pub_t *)tst, - msg_content_language_class, + TEST(msg_header_add_make(msg, (msg_pub_t *)tst, + msg_content_language_class, "en-gb"), 0); TEST_P(la, tst->msg_content_language); TEST_P(la->k_common->h_data, NULL); @@ -998,19 +998,19 @@ TEST_1(separator = msg_separator_make(home, "\r\n")); TEST(msg_header_insert(msg, (msg_pub_t *)tst, (msg_header_t *)separator), 0); - TEST_P(tst->msg_separator, separator); + TEST_P(tst->msg_separator, separator); TEST_P(separator->sep_common->h_succ, tst->msg_payload); /* Try to add a new payload */ TEST_1(payload = msg_payload_make(home, "foofaa\r\n")); TEST(msg_header_insert(msg, (msg_pub_t *)tst, (msg_header_t *)payload), 0); /* The new payload should be appended */ - TEST_P(tst->msg_payload->pl_next, payload); + TEST_P(tst->msg_payload->pl_next, payload); TEST_P(tst->msg_payload->pl_common->h_succ, payload); /* Try to add a new header */ - TEST_1(l = msg_content_length_create(home, - tst->msg_payload->pl_len + + TEST_1(l = msg_content_length_create(home, + tst->msg_payload->pl_len + payload->pl_len)); TEST(msg_header_insert(msg, (msg_pub_t *)tst, (msg_header_t *)l), 0); /* The new header should be last before separator */ @@ -1056,7 +1056,7 @@ msg_common_t *h, *h_succ; msg_iovec_t iovec[8]; - char const s[] = + char const s[] = "GET /a-life HTTP/1.1" CRLF "Content-Length: 6" CRLF "Content-Type: *" CRLF @@ -1078,10 +1078,10 @@ TEST_1(copy = msg_test_public(msg)); TEST_1(copy->msg_request); TEST_1(tst0->msg_request); - TEST_S(copy->msg_request->rq_url->url_path, + TEST_S(copy->msg_request->rq_url->url_path, tst0->msg_request->rq_url->url_path); TEST_S(copy->msg_request->rq_url->url_path, "a-life"); - TEST_P(copy->msg_request->rq_url->url_path, + TEST_P(copy->msg_request->rq_url->url_path, tst0->msg_request->rq_url->url_path); msg_destroy(msg); @@ -1090,10 +1090,10 @@ TEST_1(dup = msg_test_public(msg)); TEST_1(dup->msg_request); TEST_1(tst0->msg_request); - TEST_S(dup->msg_request->rq_url->url_path, + TEST_S(dup->msg_request->rq_url->url_path, tst0->msg_request->rq_url->url_path); TEST_S(dup->msg_request->rq_url->url_path, "a-life"); - TEST_1(dup->msg_request->rq_url->url_path != + TEST_1(dup->msg_request->rq_url->url_path != tst0->msg_request->rq_url->url_path); msg_destroy(msg); @@ -1156,7 +1156,7 @@ msg_content_id_t *cid; msg_content_transfer_encoding_t *cte; - char const s[] = + char const s[] = "GET /a-life HTTP/1.1" CRLF "Accept: text/html;level=4;q=1" CRLF "Accept: text / plain;q=0.9" CRLF @@ -1175,13 +1175,13 @@ /* "Content-Length: 305" CRLF */ "Content-MD5: LLO7gLaGqGt4BI6HouiWng==" CRLF CRLF - "test" CRLF + "test" CRLF CRLF /* 1 */ - "--LaGqGt4BI6Ho" " " CRLF + "--LaGqGt4BI6Ho" " " CRLF CRLF /* 2 */ "part 1" CRLF /* 3 */ CRLF /* 4 */ - "--LaGqGt4BI6Ho" CRLF + "--LaGqGt4BI6Ho" CRLF "Content-Type: text/plain ; charset = iso-8859-1" CRLF /* 5 */ "Content-ID: " CRLF /* 6 */ "Content-Transfer-Encoding: quoted-unreadable" CRLF /* 7 */ @@ -1191,10 +1191,10 @@ "Content-Type: text/html" CRLF /* 11 */ "Content-ID: <4SP77aQZ9z6Top2dvLqKPQ at localhost>" CRLF /* 12 */ CRLF /* 13 */ -#define BODY3 "part 3" CRLF +#define BODY3 "part 3" CRLF BODY3 /* 14 */ CRLF /* 15 */ - "--LaGqGt4BI6Ho--" CRLF; + "--LaGqGt4BI6Ho--" CRLF; BEGIN(); @@ -1240,7 +1240,7 @@ TEST_1(mp->mp_data); TEST(memcmp(mp->mp_data, CRLF "--" "LaGqGt4BI6Ho" CRLF, mp->mp_len), 0); TEST_1(mp->mp_common->h_data); - TEST_M(mp->mp_common->h_data, CRLF "--" "LaGqGt4BI6Ho" " " CRLF, + TEST_M(mp->mp_common->h_data, CRLF "--" "LaGqGt4BI6Ho" " " CRLF, mp->mp_common->h_len); TEST_1(pl = mp->mp_payload); TEST_1(pl->pl_data); @@ -1254,7 +1254,7 @@ TEST_1(c = mp->mp_content_type); TEST_S(c->c_type, "text/plain"); TEST_S(c->c_subtype, "plain"); - TEST_1(c->c_params); TEST_1(c->c_params[0]); + TEST_1(c->c_params); TEST_1(c->c_params[0]); TEST_S(c->c_params[0], "charset=iso-8859-1"); TEST_1(cid = mp->mp_content_id); @@ -1265,7 +1265,7 @@ TEST_1(pl = mp->mp_payload); TEST_1(pl->pl_data); TEST_SIZE(strlen("part 2"), pl->pl_len); TEST(memcmp(pl->pl_data, "part 2", pl->pl_len), 0); - + TEST_1(mp = mp->mp_next); TEST_1(mp->mp_data); @@ -1295,7 +1295,7 @@ TEST(n, 15); - head = NULL; + head = NULL; TEST_1(h = msg_multipart_serialize(&head, mp0)); TEST_P(h, mpX->mp_close_delim); TEST_1(!msg_chain_errors((msg_header_t *)mp0)); @@ -1306,15 +1306,15 @@ TEST(n, 15); - /* Add a new part to multipart */ - mpnew = su_zalloc(home, sizeof(*mpnew)); TEST_1(mpnew); + /* Add a new part to multipart */ + mpnew = su_zalloc(home, sizeof(*mpnew)); TEST_1(mpnew); removed = mpX->mp_close_delim; mpX->mp_next = mpnew; mpX = mpnew; mpnew->mp_content_type = msg_content_type_make(home, "multipart/mixed"); TEST_1(mpnew->mp_content_type); TEST(msg_multipart_complete(msg_home(msg), tst->msg_content_type, mp0), 0); - head = NULL; + head = NULL; TEST_1(h = msg_multipart_serialize(&head, mp0)); TEST_P((void *)h, mpX->mp_close_delim); TEST_1(!msg_chain_errors((msg_header_t *)mp0)); @@ -1355,14 +1355,14 @@ TEST(n, 19); /* Add an recursive multipart */ - mpnew = su_zalloc(home, sizeof(*mpnew)); TEST_1(mpnew); + mpnew = su_zalloc(home, sizeof(*mpnew)); TEST_1(mpnew); mpX->mp_multipart = mpnew; mpnew->mp_content_type = msg_content_type_make(home, "text/plain"); TEST_1(mpnew->mp_content_type); TEST(msg_multipart_complete(msg_home(msg), tst->msg_content_type, mp0), 0); TEST_1(mpnew->mp_close_delim); - head = NULL; + head = NULL; TEST_1(h = msg_multipart_serialize(&head, mp0)); TEST_P(h, mpX->mp_close_delim); @@ -1393,7 +1393,7 @@ msg_payload_t *pl; char const *end; - char const s[] = + char const s[] = "GET /a-life HTTP/1.1" CRLF "Accept: text/html;level=4;q=1" CRLF "Accept: text / plain;q=0.9" CRLF @@ -1411,13 +1411,13 @@ "Content-Type: multipart/alternative ; boundary=\"LaGqGt4BI6Ho\"" CRLF "Content-MD5: LLO7gLaGqGt4BI6HouiWng==" CRLF CRLF - "test" CRLF + "test" CRLF CRLF /* 1 */ - "--LaGqGt4BI6Ho" " " CRLF + "--LaGqGt4BI6Ho" " " CRLF CRLF /* 2 */ "part 1" CRLF /* 3 */ CRLF /* 4 */ - "--LaGqGt4BI6Ho" CRLF + "--LaGqGt4BI6Ho" CRLF "Content-Type: text/plain;charset=iso-8859-1" CRLF /* 5 */ "Content-ID: " CRLF /* 6 */ "Content-Transfer-Encoding: quoted-unreadable" CRLF /* 7 */ @@ -1427,10 +1427,10 @@ "Content-Type: text/html" CRLF /* 11 */ "Content-ID: <4SP77aQZ9z6Top2dvLqKPQ at localhost>" CRLF /* 12 */ CRLF /* 13 */ -#define BODY3 "part 3" CRLF +#define BODY3 "part 3" CRLF BODY3 /* 14 */ CRLF /* 15 */ - "--LaGqGt4BI6Ho--" CRLF; + "--LaGqGt4BI6Ho--" CRLF; char const part1[] = "This is text\n"; char const part2[] = "This is html"; @@ -1465,19 +1465,19 @@ su_home_t h0[1] = { SU_HOME_INIT(h0) }; pl = msg_payload_dup(h0, tst->msg_payload); TEST_1(pl); - + mp = msg_multipart_parse(home, c, pl); TEST_1(mp); - for (n = 0, h = (msg_header_t *)mp; h; h = h->sh_succ, n++) + for (n = 0, h = (msg_header_t *)mp; h; h = h->sh_succ, n++) h->sh_data = NULL, h->sh_len = 0; TEST(n, 15); - + n = msg_multipart_prepare(msg, mp, 0); - + TEST_1(end = strstr(s, "--LaGqGt4BI6Ho ")); len = strlen(end); TEST(len, n); - + TEST_1(mp = msg_multipart_dup(h0, mp)); su_home_check(h0); @@ -1489,20 +1489,20 @@ su_home_t h0[1] = { SU_HOME_INIT(h0) }; pl = msg_payload_dup(h0, tst->msg_payload); TEST_1(pl); - + mp = msg_multipart_parse(h0, NULL, pl); TEST_1(mp); - for (n = 0, h = (msg_header_t *)mp; h; h = h->sh_succ, n++) + for (n = 0, h = (msg_header_t *)mp; h; h = h->sh_succ, n++) h->sh_data = NULL, h->sh_len = 0; TEST(n, 15); - + n = msg_multipart_prepare(msg, mp, 0); - + TEST_1(end = strstr(s, "--LaGqGt4BI6Ho ")); len = strlen(end); TEST(len, n); - + TEST_1(mp = msg_multipart_dup(h0, mp)); su_home_check(h0); @@ -1514,7 +1514,7 @@ su_home_t h0[1] = { SU_HOME_INIT(h0) }; pl = msg_payload_dup(h0, tst->msg_payload); TEST_1(pl); - + n = strstr(pl->pl_data, "--LaGqGt4BI6Ho") - (char *)pl->pl_data; pl->pl_data = n + (char *)pl->pl_data; pl->pl_len -= n; @@ -1522,14 +1522,14 @@ mp = msg_multipart_parse(h0, NULL, pl); TEST_1(mp); - for (n = 0, h = (msg_header_t *)mp; h; h = h->sh_succ, n++) + for (n = 0, h = (msg_header_t *)mp; h; h = h->sh_succ, n++) h->sh_data = NULL, h->sh_len = 0; TEST(n, 15); - + n = msg_multipart_prepare(msg, mp, 0); TEST(len, n); - + TEST_1(mp = msg_multipart_dup(h0, mp)); su_home_check(h0); @@ -1542,7 +1542,7 @@ char *b; pl = msg_payload_dup(h0, tst->msg_payload); TEST_1(pl); - + /* Remove CRs */ b = pl->pl_data, len = pl->pl_len; for (n = m = 0; n < len; n++) { @@ -1550,14 +1550,14 @@ m++; } pl->pl_len = m; - + mp = msg_multipart_parse(h0, NULL, pl); TEST_1(mp); - - for (n = 0, h = (msg_header_t *)mp; h; h = h->sh_succ, n++) + + for (n = 0, h = (msg_header_t *)mp; h; h = h->sh_succ, n++) h->sh_data = NULL, h->sh_len = 0; TEST(n, 15); - + n = msg_multipart_prepare(msg, mp, 0); TEST_1(n > 0); @@ -1571,10 +1571,10 @@ TEST_1(c = msg_content_type_make(home, "multipart/related")); TEST_1(mp = msg_multipart_create(home, "text/plain", part1, strlen(part1))); - TEST_1(mp->mp_next = + TEST_1(mp->mp_next = msg_multipart_create(home, "text/html", part2, strlen(part2))); - TEST_1(mp->mp_next->mp_next = - msg_multipart_create(home, "application/octet-stream", + TEST_1(mp->mp_next->mp_next = + msg_multipart_create(home, "application/octet-stream", part3, sizeof part3)); TEST(msg_multipart_complete(home, c, mp), 0); @@ -1605,7 +1605,7 @@ msg_accept_encoding_t *aen; msg_accept_language_t *ala; - char const s[] = + char const s[] = "GET /a-life HTTP/1.1" CRLF "Accept-Language: fi" CRLF "Accept-Encoding: z0" CRLF @@ -1629,7 +1629,7 @@ TEST(msg_header_remove(msg, (msg_pub_t *)tst, (msg_header_t *)ala), 0); TEST_S(ala->aa_value, "de"); - TEST_1(ala = tst->msg_accept_language); + TEST_1(ala = tst->msg_accept_language); TEST_1(ala = ala->aa_next); TEST_S(ala->aa_value, "se"); /* Make sure that cached encoding of se is reset */ TEST_1(ala->aa_common->h_data == NULL); @@ -1642,12 +1642,12 @@ TEST_1(aen = tst->msg_accept_encoding->aa_next->aa_next); TEST(msg_header_remove_all(msg, (msg_pub_t *)tst, (msg_header_t *)aen), 0); - TEST_1(aen = tst->msg_accept_encoding); + TEST_1(aen = tst->msg_accept_encoding); TEST_1(aen = aen->aa_next); TEST_S(aen->aa_value, "z1"); /* Make sure that cached encoding of z1 is reset */ TEST_1(aen->aa_common->h_data == NULL); TEST_1(aen->aa_common->h_len == 0); - TEST_1(aen->aa_next == NULL); + TEST_1(aen->aa_next == NULL); TEST_1(aen->aa_common->h_succ == (void *)ala); TEST_1(ala->aa_next->aa_common); @@ -1708,7 +1708,7 @@ TEST_S(token, "aaaaaaaaaaaaa"); TEST_SIZE(msg_random_token(token, 32, zeros, 12), 20); TEST_S(token, "aaaaaaaaaaaaaaaaaaaa"); - + END(); } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_protos.h.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_protos.h.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_protos.h.in Tue Dec 16 13:05:22 2008 @@ -1,4 +1,4 @@ -/**-*- c -*- +/**-*- c -*- * @ingroup msg * @internal @file test_protos.h.in * @@ -31,15 +31,15 @@ #ifndef TEST_PROTOS_H /** Defined when has been included. */ -#define TEST_PROTOS_H +#define TEST_PROTOS_H /**@ingroup test_msg * @file test_protos.h * * Prototypes and macros for dummy testing protocol headers. - * + * * #AUTO# - * + * * @author Pekka Pessi */ @@ -85,8 +85,8 @@ /**Tag list item for header string. * * The TSTTAG_HEADER_STR() macro is used to include a tag item containing a - * header string in the tag list, e.g., - * @code + * header string in the tag list, e.g., + * @code * TSTTAG_HEADER_STR("Priority: urgent"). * @endcode * @@ -134,7 +134,7 @@ #if HAVE_INLINE su_inline tag_value_t tsttag_tst_v(msg_test_t const *v) { return (tag_value_t)v; } -su_inline +su_inline tag_value_t tsttag_tst_vr(msg_test_t const **vp) { return (tag_value_t)vp; } #else #define tsttag_tst_v(v) (tag_value_t)(v) @@ -153,8 +153,8 @@ /**Header class for #xxxxxxx_xxxxxxx#. - * - * The header class msg_#xxxxxx#_class defines how a + * + * The header class msg_#xxxxxx#_class defines how a * #xxxxxxx_xxxxxxx# is parsed and printed. It also * contains methods used by message parser and other functions * to manipulate the msg_#xxxxxx#_t header structure. @@ -162,28 +162,28 @@ extern msg_hclass_t msg_#xxxxxx#_class[]; /**Initializer for structure msg_#xxxxxx#_t. - * + * * A static msg_#xxxxxx#_t structure must be initialized * with the MSG_#XXXXXX#_INIT() macro. For instance, - * @code - * + * @code + * * msg_#xxxxxx#_t msg_#xxxxxx# = MSG_#XXXXXX#_INIT; - * + * * @endcode * @HI */ #define MSG_#XXXXXX#_INIT() MSG_HDR_INIT(#xxxxxx#) /**Initialize a structure msg_#xxxxxx#_t. - * + * * An msg_#xxxxxx#_t structure can be initialized with the * msg_#xxxxxx#_init() function/macro. For instance, * @code - * + * * msg_#xxxxxx#_t msg_#xxxxxx#; - * + * * msg_#xxxxxx#_init(&msg_#xxxxxx#); - * + * * @endcode * @HI */ @@ -198,13 +198,13 @@ #endif /**Test if header object is instance of msg_#xxxxxx#_t. - * + * * The function msg_is_#xxxxxx#() returns true (nonzero) if * the header class is an instance of #xxxxxxx_xxxxxxx# * object and false (zero) otherwise. - * + * * @param header pointer to the header structure to be tested - * + * * @return * The function msg_is_x#xxxxxx#() returns true (nonzero) if * the header object is an instance of header #xxxxxx# and @@ -222,27 +222,27 @@ #define msg_#xxxxxx#_p(h) msg_is_#xxxxxx#((h)) /**Duplicate (deep copy) @c msg_#xxxxxx#_t. - * + * * The function msg_#xxxxxx#_dup() duplicates a header * structure @a hdr. If the header structure @a hdr * contains a reference (@c hdr->x_next) to a list of * headers, all the headers in the list are duplicated, too. - * + * * @param home memory home used to allocate new structure * @param hdr header structure to be duplicated - * + * * When duplicating, all parameter lists and non-constant * strings attached to the header are copied, too. The * function uses given memory @a home to allocate all the * memory areas used to copy the header. - * + * * @par Example * @code - * + * * #xxxxxx# = msg_#xxxxxx#_dup(home, tst->msg_#xxxxxx#); - * + * * @endcode - * + * * @return * The function msg_#xxxxxx#_dup() returns a pointer to the * newly duplicated msg_#xxxxxx#_t header structure, or NULL @@ -251,49 +251,49 @@ msg_#xxxxxx#_t *msg_#xxxxxx#_dup(su_home_t *home, msg_#xxxxxx#_t const *hdr); /**Copy a msg_#xxxxxx#_t header structure. - * + * * The function msg_#xxxxxx#_copy() copies a header structure @a * hdr. If the header structure @a hdr contains a reference (@c * hdr->h_next) to a list of headers, all the headers in that * list are copied, too. The function uses given memory @a home * to allocate all the memory areas used to copy the header * structure @a hdr. - * + * * @param home memory home used to allocate new structure * @param hdr pointer to the header structure to be duplicated - * + * * When copying, only the header structure and parameter lists * attached to it are duplicated. The new header structure * retains all the references to the strings within the old @a * header, including the encoding of the old header, if present. - * + * * @par Example * @code - * + * * #xxxxxx# = msg_#xxxxxx#_copy(home, tst->msg_#xxxxxx#); - * + * * @endcode - * + * * @return * The function msg_#xxxxxx#_copy() returns a pointer to * newly copied header structure, or NULL upon an error. */ -msg_#xxxxxx#_t *msg_#xxxxxx#_copy(su_home_t *home, +msg_#xxxxxx#_t *msg_#xxxxxx#_copy(su_home_t *home, msg_#xxxxxx#_t const *hdr); /**Make a header structure msg_#xxxxxx#_t. - * + * * The function msg_#xxxxxx#_make() makes a new * msg_#xxxxxx#_t header structure. It allocates a new * header structure, and decodes the string @a s as the * value of the structure. - * + * * @param home memory home used to allocate new header structure. * @param s string to be decoded as value of the new header structure - * + * * @note This function is usually implemented as a macro calling * msg_header_make(). - * + * * @return * The function msg_#xxxxxx#_make() returns a pointer to * newly maked msg_#xxxxxx#_t header structure, or NULL upon @@ -309,25 +309,25 @@ #endif /**Make a #xxxxxxx_xxxxxxx# from formatting result. - * + * * The function msg_#xxxxxx#_format() makes a new * #xxxxxxx_xxxxxxx# object using formatting result as its * value. The function first prints the arguments according to * the format @a fmt specified. Then it allocates a new header * structure, and uses the formatting result as the header * value. - * + * * @param home memory home used to allocate new header structure. * @param fmt string used as a printf()-style format * @param ... argument list for format - * + * * @note This function is usually implemented as a macro calling * msg_header_format(). - * + * * @return * The function msg_#xxxxxx#_format() returns a pointer to newly * makes header structure, or NULL upon an error. - * + * * @HIDE */ #if SU_HAVE_INLINE @@ -341,11 +341,11 @@ { msg_header_t *h; va_list ap; - + va_start(ap, fmt); h = msg_header_vformat(home, msg_#xxxxxx#_class, fmt, ap); va_end(ap); - + return (msg_#xxxxxx#_t *)h; } #endif Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_table.c.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_table.c.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/msg/test_table.c.in Tue Dec 16 13:05:22 2008 @@ -31,8 +31,8 @@ */ /**@ingroup test_msg - * - * @CFILE test_table.c + * + * @CFILE test_table.c * @brief Parser table used for testing. * * #AUTO# Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/Doxyfile.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/Doxyfile.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/Doxyfile.in Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ PROJECT_NAME = "nea" OUTPUT_DIRECTORY = ../docs/html/nea -INPUT = @srcdir@/nea.docs @srcdir@/sofia-sip @srcdir@ . +INPUT = @srcdir@/nea.docs @srcdir@/sofia-sip @srcdir@ . @INCLUDE_PATH = . @srcdir@ @INCLUDE = ../docs/Doxyfile.conf Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/Makefile.am Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ noinst_LTLIBRARIES = libnea.la -TESTS = +TESTS = # ---------------------------------------------------------------------- # Rules for building the targets @@ -49,7 +49,7 @@ ../msg/libmsg.la \ ../url/liburl.la \ ../bnf/libbnf.la \ - ../su/libsu.la + ../su/libsu.la # ---------------------------------------------------------------------- # Install and distribution rules Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea.c Tue Dec 16 13:05:22 2008 @@ -66,7 +66,7 @@ sip_to_t *nea_to; /**< The other end of subscription :) */ nea_notify_f nea_callback; /**< Notify callback */ nea_magic_t *nea_context; /**< Application context */ - + sip_contact_t *nea_contact; /**< */ sip_expires_t *nea_expires; /**< Proposed expiration time */ @@ -84,12 +84,12 @@ static int process_nea_request(nea_t *nea, nta_leg_t *leg, - nta_incoming_t *ireq, + nta_incoming_t *ireq, sip_t const *sip); -static int handle_notify(nta_leg_magic_t *lmagic, +static int handle_notify(nta_leg_magic_t *lmagic, nta_leg_t *leg, - nta_incoming_t *ireq, + nta_incoming_t *ireq, sip_t const *sip); static int response_to_subscribe(nea_t *nea, @@ -126,13 +126,13 @@ ta_start(ta, tag, value); - have_to = + have_to = tl_find(ta_args(ta), siptag_to) || tl_find(ta_args(ta), siptag_to_str); - have_from = + have_from = tl_find(ta_args(ta), siptag_from) || tl_find(ta_args(ta), siptag_from_str); have_contact = - tl_find(ta_args(ta), siptag_contact) || - tl_find(ta_args(ta), siptag_contact_str); + tl_find(ta_args(ta), siptag_contact) || + tl_find(ta_args(ta), siptag_contact_str); if (have_to && (nea = su_home_new(sizeof(nea_t)))) { su_home_t *home = nea->nea_home; @@ -145,7 +145,7 @@ nea->nea_callback = no_callback; nea->nea_context = context; - if (!have_from) + if (!have_from) from = sip_from_create(home, (url_string_t*)m->m_url); else from = NULL; @@ -155,7 +155,7 @@ ta_tags(ta)); /* Get and remove Expires header from tag list */ - tl_gets(nea->nea_args, + tl_gets(nea->nea_args, SIPTAG_EXPIRES_REF(expires), SIPTAG_EXPIRES_STR_REF(expires_str), SIPTAG_TO_REF(to), @@ -175,8 +175,8 @@ else nea->nea_expires = sip_expires_create(home, EXPIRES_DEFAULT); - tl_tremove(nea->nea_args, - SIPTAG_EXPIRES(0), + tl_tremove(nea->nea_args, + SIPTAG_EXPIRES(0), SIPTAG_EXPIRES_STR(0), TAG_END()); @@ -189,7 +189,7 @@ if (nea->nea_timer) { /* Create leg for NOTIFY requests */ - nea->nea_leg = nta_leg_tcreate(nea->nea_agent, + nea->nea_leg = nta_leg_tcreate(nea->nea_agent, process_nea_request, nea, TAG_IF(!have_from, SIPTAG_FROM(from)), TAG_NEXT(nea->nea_args)); @@ -208,7 +208,7 @@ if (!nea->nea_leg || !nea->nea_oreq || - !nea->nea_timer) + !nea->nea_timer) nea_destroy(nea), nea = NULL; } @@ -217,7 +217,7 @@ } -int nea_update(nea_t *nea, +int nea_update(nea_t *nea, tag_type_t tag, tag_value_t value, ...) @@ -234,22 +234,22 @@ /* XXX - hack, previous request still waiting for response */ if (!nea->nea_leg || nea->nea_oreq) return -1; - + ta_start(ta, tag, value); - + tl_gets(ta_args(ta), SIPTAG_CONTENT_TYPE_REF(ct), SIPTAG_CONTENT_TYPE_STR_REF(cts), SIPTAG_PAYLOAD_REF(pl), SIPTAG_EXPIRES_REF(expires), TAG_NULL()); - + if (!pl || (!ct && !cts)) { ta_end(ta); return -1; } - tl_tremove(nea->nea_args, + tl_tremove(nea->nea_args, SIPTAG_CONTENT_TYPE(0), SIPTAG_CONTENT_TYPE_STR(0), SIPTAG_PAYLOAD(0), @@ -268,17 +268,17 @@ response_to_subscribe, nea, NULL, SIP_METHOD_SUBSCRIBE, - NULL, + NULL, SIPTAG_TO(nea->nea_to), SIPTAG_PAYLOAD(pl), - TAG_IF(ct, SIPTAG_CONTENT_TYPE(ct)), + TAG_IF(ct, SIPTAG_CONTENT_TYPE(ct)), TAG_IF(cts, SIPTAG_CONTENT_TYPE_STR(cts)), SIPTAG_EXPIRES(nea->nea_expires), TAG_NEXT(nea->nea_args)); ta_end(ta); - if (!nea->nea_oreq) + if (!nea->nea_oreq) return -1; return 0; @@ -329,16 +329,16 @@ /* Function called by NTA to handle incoming requests belonging to the leg */ -int process_nea_request(nea_t *nea, +int process_nea_request(nea_t *nea, nta_leg_t *leg, - nta_incoming_t *ireq, + nta_incoming_t *ireq, sip_t const *sip) { switch (sip->sip_request->rq_method) { case sip_method_notify: return handle_notify(nea, leg, ireq, sip); - case sip_method_ack: + case sip_method_ack: return 400; default: nta_incoming_treply(ireq, SIP_405_METHOD_NOT_ALLOWED, @@ -370,12 +370,12 @@ sip_time_t now = sip_now(); if (!nea->nea_notify_received) { nea->nea_deadline = now + - sip_contact_expires(NULL, sip->sip_expires, sip->sip_date, + sip_contact_expires(NULL, sip->sip_expires, sip->sip_date, EXPIRES_DEFAULT, now); if (sip->sip_to->a_tag && !nea->nea_dialog) { nea->nea_dialog = 1; nta_leg_rtag(nea->nea_leg, sip->sip_to->a_tag); - nta_leg_client_route(nea->nea_leg, + nta_leg_client_route(nea->nea_leg, sip->sip_record_route, sip->sip_contact); } } @@ -432,14 +432,14 @@ if (nea->nea_oreq || !error) { su_time_t now = su_now(); now.tv_sec = nea->nea_deadline; - su_timer_set_at(nea->nea_timer, - nea_expires_renew, + su_timer_set_at(nea->nea_timer, + nea_expires_renew, nea, now); } else nea->nea_callback(nea, nea->nea_context, NULL); - + return 0; } @@ -454,16 +454,16 @@ if (status >= 200) nta_outgoing_destroy(orq), nea->nea_oreq = NULL; - if (status >= 300) + if (status >= 300) nea->nea_callback(nea, nea->nea_context, NULL); return 0; } /** handle notifications */ -int handle_notify(nea_t *nea, +int handle_notify(nea_t *nea, nta_leg_t *leg, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip) { sip_subscription_state_t *ss = sip->sip_subscription_state; @@ -475,9 +475,9 @@ if (ss == NULL) phrase = "NOTIFY Has No Subscription-State Header"; - else if (sip->sip_event == NULL) + else if (sip->sip_event == NULL) phrase = "Event Header Missing"; - + if (phrase) { nta_incoming_treply(irq, 400, phrase, TAG_END()); nta_incoming_destroy(irq); @@ -511,7 +511,7 @@ if (!nea->nea_dialog) { nea->nea_dialog = 1; nta_leg_rtag(nea->nea_leg, sip->sip_from->a_tag); - nta_leg_server_route(nea->nea_leg, + nta_leg_server_route(nea->nea_leg, sip->sip_record_route, sip->sip_contact); } @@ -541,9 +541,9 @@ return 200; } } - else if (strcasecmp(ss->ss_substate, "pending") == 0) + else if (strcasecmp(ss->ss_substate, "pending") == 0) nea->nea_state = nea_pending; - else if (strcasecmp(ss->ss_substate, "active") == 0) + else if (strcasecmp(ss->ss_substate, "active") == 0) nea->nea_state = nea_active; else nea->nea_state = nea_extended; @@ -557,8 +557,8 @@ { su_time_t now = su_now(); now.tv_sec = nea->nea_deadline; - su_timer_set_at(nea->nea_timer, - nea_expires_renew, + su_timer_set_at(nea->nea_timer, + nea_expires_renew, nea, now); } @@ -574,7 +574,7 @@ /* re-subscribe if expires soon */ if (nea->nea_state == nea_terminated || - nea->nea_deadline == 0 || + nea->nea_deadline == 0 || nea->nea_deadline > now + NEA_TIMER_DELTA) return; @@ -592,6 +592,6 @@ NULL, SIPTAG_EXPIRES(nea->nea_expires), TAG_NEXT(nea->nea_args)); - + return; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea.docs Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ /* -*- c -*- */ /**@MODULEPAGE "nea" - SIP Events Module - * + * * @section nea_meta Module Meta Information * * Sofia Event API provides an interface to different events used in SIP @@ -40,9 +40,9 @@ * { * presentity_t *pr = su_home_clone(p->p_home, sizeof (*pr)); * ... - * pr->pr_nes = + * pr->pr_nes = * nea_server_create(agent, root, - * m->m_url, + * m->m_url, * MAX_SUBSCRIBERS, * event_callback, pr, * SIPTAG_CONTACT(m), @@ -51,7 +51,7 @@ * ... * } * @endcode - * + * * @section nea_event_create Creating Events * * Next, events are created. The function nea_event_create () defines @@ -65,7 +65,7 @@ * #define XPIDF_MIME_TYPE "application/xpidf+xml" * #define PIDF_MIME_TYPE "application/cpim-pidf+xml" - * ne = nea_event_create(pr->pr_nes, presence_callback, ep, + * ne = nea_event_create(pr->pr_nes, presence_callback, ep, * PRESENCE_PACKAGE, NULL, * PIDF_MIME_TYPE, * PIDF_MIME_TYPE "," XPIDF_MIME_TYPE); @@ -83,16 +83,16 @@ * * After the update, subscribers of the event are notified (with SIP * NOTIFY) of the changed payload with nea_server_update (). - * + * * @code * nea_server_update(pr->pr_nes, home, event, 1, * SIPTAG_CONTENT_TYPE(ct), * SIPTAG_PAYLOAD(pl), * TAG_END()); - + * nea_server_notify(pr->pr_nes, event); * @endcode - * + * * Obtaining the event's payload and removing it is presented in the * example below. The event is defined as a part of the @a package_t * structure. Function nea_payloads_get() is used to return a payload Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_debug.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_debug.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_debug.c Tue Dec 16 13:05:22 2008 @@ -66,7 +66,7 @@ * * The NEA_DEBUG environment variable is used to determine the debug * logging level for @b nea module. The default level is 3. - * + * * @sa , nea_log, SOFIA_DEBUG */ extern char const NEA_DEBUG[]; @@ -75,8 +75,8 @@ #define SU_DEBUG 3 #endif -/**Debug log for @b nea module. - * +/**Debug log for @b nea module. + * * The nea_log is the log object used by @b nea module. The level of * #nea_log is set using #NEA_DEBUG environment variable. */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_event.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_event.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_event.c Tue Dec 16 13:05:22 2008 @@ -25,7 +25,7 @@ /**@internal * @file nea_event.c * @brief Default MIME type for certain events. - * + * * @author Pekka Pessi * * @date Created: Thu Dec 11 20:28:46 2003 ppessi Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_server.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_server.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/nea_server.c Tue Dec 16 13:05:22 2008 @@ -71,7 +71,7 @@ su_home_t nes_home[1]; su_root_t *nes_root; su_timer_t *nes_timer; - + nta_agent_t *nes_agent; nta_leg_t *nes_leg; @@ -106,8 +106,8 @@ nea_new_event_f *nes_callback; nea_smagic_t *nes_context; - /** Events. - * Each subscriber will be added to one of these. */ + /** Events. + * Each subscriber will be added to one of these. */ nea_event_t *nes_events; }; @@ -178,11 +178,11 @@ struct nea_sub_s { nea_sub_t *s_next; nea_sub_t **s_prev; - + nta_leg_t *s_leg; nta_incoming_t *s_irq; nta_outgoing_t *s_oreq; - + nea_server_t *s_nes; sip_contact_t *s_local; /**< Local contact */ @@ -204,7 +204,7 @@ unsigned s_reported :1 ; /**< Made watcher report upon un-SUBSCRIBE */ unsigned s_processing : 1; - unsigned s_rejected : 1; + unsigned s_rejected : 1; unsigned s_pending_flush : 1; unsigned s_garbage : 1; unsigned s_fake : 1; /**< Do not send real information to user */ @@ -242,7 +242,7 @@ static int nea_server_callback(nea_sub_t *nes_as_sub, nta_leg_t *leg, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip); static int nea_sub_process_incoming(nea_sub_t *s, @@ -255,9 +255,9 @@ nta_incoming_t *irq, sip_t const *sip); -static int nea_sub_notify(nea_server_t *nes, - nea_sub_t *s, - sip_time_t now, +static int nea_sub_notify(nea_server_t *nes, + nea_sub_t *s, + sip_time_t now, tag_type_t tag, tag_value_t value, ...); static int response_to_notify(nea_sub_t *s, @@ -268,8 +268,8 @@ su_timer_t *timer, su_timer_arg_t *arg); -static int nea_view_queue(nea_server_t *nes, - nea_event_view_t *evv, +static int nea_view_queue(nea_server_t *nes, + nea_event_view_t *evv, nea_event_queue_t *evq); /** Assign an event view to subscriber. */ @@ -283,7 +283,7 @@ s->s_throttle = evv->evv_throttle; } -su_inline +su_inline void nea_subnode_init(nea_subnode_t *sn, nea_sub_t *s, sip_time_t now) { sn->sn_state = s->s_state; @@ -312,18 +312,18 @@ * The function nea_server_create() initializes an event server object and * registers it with @b nta. An event server object takes care of all events * for a particular URI (@em eventity). - * + * * @param agent pointer to an @b nta agent object * @param root pointer to an @b root object *?@param url url of the server to be created * @param max_subs maximum number of subscriptions - * @param callback authorization function, + * @param callback authorization function, * or @c NULL if no authorization is required * @param context server context (pointer to application data) * @param tag, value, ... optional list of tag parameters * * @TAGS - * The function nea_server_create() takes the following tag values as its + * The function nea_server_create() takes the following tag values as its * arguments: *
* @@ -339,26 +339,26 @@ * *
NEATAG_MINSUB() *
Minimum duration of a subscription. - * + * *
NEATAG_THROTTLE() *
Default value for event throttle (by default, 5 seconds). * Throttle determines the minimum interval betweeen notifications. Note * that the notification indicating that the subscription has terminated * will be sent regardless of throttle. - * + * * The default throttle value is used if the subscriber does not include * a throttle parameter in @ref sip_event "Event" header of SUBSCRIBE request. - * + * *
NEATAG_MINTHROTTLE() *
Minimum allowed throttle value (by default, 5 seconds). - * + * *
NEATAG_EVENTLIST() *
If true, the subscribers must support eventlists. If SIPTAG_REQUIRE() * is given, it must contain the "eventlist" feature. * *
NEATAG_DIALOG() *
Give an optional NTA destination leg to event server. - * + * *
SIPTAG_REQUIRE()/SIPTAG_REQUIRE_STR() *
The @b Require header for the event server. The subscribers must * indicate support the specified features. @@ -384,8 +384,8 @@ char const *contact_str = NULL; char const *server_str = NULL; char const *rq_str = NULL; - unsigned - min_expires = 15 * 60, + unsigned + min_expires = 15 * 60, expires = NEA_DEFAULT_EXPIRES, max_expires = 24 * 60 * 60; nta_leg_t *leg = NONE; @@ -397,7 +397,7 @@ ta_start(ta, tag, value); - tl_gets(ta_args(ta), + tl_gets(ta_args(ta), SIPTAG_CONTACT_REF(contact), SIPTAG_CONTACT_STR_REF(contact_str), SIPTAG_ALLOW_EVENTS_REF(allow_events), @@ -428,7 +428,7 @@ SU_DEBUG_5(("nea_server_create(): invalid expiration range\n")); return NULL; } - + nes = su_home_new(sizeof(nea_server_t)); if (nes) { @@ -453,10 +453,10 @@ nes->nes_allow_methods = sip_allow_make(home, "SUBSCRIBE"); - nes->nes_server = - su_sprintf(home, "%s%snea/" NEA_VERSION_STR " %s", + nes->nes_server = + su_sprintf(home, "%s%snea/" NEA_VERSION_STR " %s", server_str ? server_str : "", - server_str ? " " : "", + server_str ? " " : "", nta_agent_version(agent)); if (contact) @@ -471,15 +471,15 @@ if (leg != NULL) nta_leg_bind(leg, nea_server_callback, (nea_sub_t*)nes); } else { - nes->nes_leg = nta_leg_tcreate(agent, - nea_server_callback, - (nea_sub_t*)nes, + nes->nes_leg = nta_leg_tcreate(agent, + nea_server_callback, + (nea_sub_t*)nes, NTATAG_NO_DIALOG(1), NTATAG_METHOD("SUBSCRIBE"), URLTAG_URL(url), TAG_END()); } - + nes->nes_eventlist = eventlist; /* Every event is a list */ if (eventlist && rq == NULL && rq_str == NULL) rq_str = "eventlist"; @@ -489,9 +489,9 @@ else if (rq_str) nes->nes_require = sip_require_make(nes->nes_home, rq_str); - nes->nes_timer = su_timer_create(su_root_task(nes->nes_root), + nes->nes_timer = su_timer_create(su_root_task(nes->nes_root), nes->nes_min_throttle - ? 500L * nes->nes_min_throttle + ? 500L * nes->nes_min_throttle : 500L); if (nes->nes_allow_events && @@ -515,8 +515,8 @@ /** Invoke the new event callback. * - * The function nes_event_callback() calls the callback provided by the - * application using the notifier object. + * The function nes_event_callback() calls the callback provided by the + * application using the notifier object. * * @param nes pointer to notifier object * @param ev pointer to event view @@ -528,9 +528,9 @@ * has been destroyed by the callback function, 0 otherwise. */ static -int nes_new_event_callback(nea_server_t *nes, - nea_event_t **ev_p, - nea_event_view_t **view_p, +int nes_new_event_callback(nea_server_t *nes, + nea_event_t **ev_p, + nea_event_view_t **view_p, nta_incoming_t *irq, sip_t const *sip) { @@ -556,7 +556,7 @@ SU_DEBUG_5(("nea_server_shutdown(%p) while in callback\n", (void *)nes)); return 100; } - + SU_DEBUG_5(("nea_server_shutdown(%p)\n", (void *)nes)); in_callback = nes->nes_in_callback; nes->nes_in_callback = 1; @@ -567,16 +567,16 @@ if (s->s_pending_flush) continue; if (s->s_oreq == NULL) - nea_sub_auth(s, nea_terminated, + nea_sub_auth(s, nea_terminated, TAG_IF(retry_after, NEATAG_REASON("probation")), TAG_IF(!retry_after, NEATAG_REASON("deactivated")), TAG_IF(retry_after, NEATAG_RETRY_AFTER(retry_after)), TAG_END()); else status = 180; - } + } - nes->nes_in_callback = in_callback; + nes->nes_in_callback = in_callback; return 200; } @@ -591,16 +591,16 @@ nes->nes_pending_destroy = 1; return; } - + SU_DEBUG_5(("nea_server_destroy(%p)\n", (void *)nes)); - + nta_leg_destroy(nes->nes_leg), nes->nes_leg = NULL; - + while (nes->nes_subscribers) nea_sub_destroy(nes->nes_subscribers); - + su_timer_destroy(nes->nes_timer), nes->nes_timer = NULL; - + su_home_unref(nes->nes_home); } @@ -611,10 +611,10 @@ * A nea event server has typed content that is delivered to the * subscribers. Different content types are each assigned a separate primary * view. There can be also primary views with "fake" content, content - * delivered to politely blocked subscribers. + * delivered to politely blocked subscribers. * * In addition to primary views, there can be secondary views, views - * assigned to a single subscriber only. + * assigned to a single subscriber only. * * @TAGS * The following tagged arguments are accepted: @@ -629,7 +629,7 @@ *
NEATAG_FAKE(fak) *
If @a fake is true, 'fake' view is updated. * - *
NEATAG_VIEW(view) + *
NEATAG_VIEW(view) *
If included in tagged arguments, @a view is * updated. Used when * updating secondary view. * @@ -642,8 +642,8 @@ *
Application-provided @a context pointer. * The @a context pointer is returned by nea_view_magic() function. * - *
NEATAG_RELIABLE(reliable) - *
The @a reliable flag determines how overlapping updates are handled. + *
NEATAG_RELIABLE(reliable) + *
The @a reliable flag determines how overlapping updates are handled. * If @a reliable is true, all updates are delivered to the subscribers. * *
NEATAG_THROTTLE(throttl) @@ -651,10 +651,10 @@ * determines the minimum interval in seconds betweeen notifications. Note * that the notification indicating that the subscription has terminated * will be sent regardless of throttle. - * + * * The default throttle value is used if the subscriber does not include * a throttle parameter in @ref sip_event "Event" header of SUBSCRIBE request. - * + * *
NEATAG_MINTHROTTLE() *
Minimum allowed throttle value for updated event view. * @@ -684,7 +684,7 @@ NEATAG_FAKE_REF(fake), NEATAG_VIEW_REF(evv), TAG_NULL()); - + updated = nea_view_update(nes, ev, &evv, 0, fake, ta_tags(ta)); ta_end(ta); @@ -733,7 +733,7 @@ NEATAG_THROTTLE_REF(throttle), NEATAG_MINTHROTTLE_REF(min_throttle), TAG_NULL()); - + ta_end(ta); if (min_throttle < throttle) @@ -754,7 +754,7 @@ for (i = 0; (evv = ev->ev_views[i]); i++) if (str0casecmp(cts, evv->evv_content_type->c_type) == 0) break; - + if (private && evv == NULL) /* No private view without primary view. */ return -1; @@ -762,7 +762,7 @@ return -1; primary_p = eevv = ev->ev_views + i; - + /* Search for fakeness/eventlist/private view */ if (evv && (private || evv->evv_private || evv->evv_fake != (unsigned)fake)) { for (eevv = &evv->evv_next; (evv = *eevv); eevv = &evv->evv_next) { @@ -773,7 +773,7 @@ } } } - + /* New event view, allocate and link to chain */ if (!evv) { sip_content_type_t *new_ct; @@ -781,20 +781,20 @@ evv = su_zalloc(home, sizeof (*evv)); if (!evv) return -1; - + new_pl = pl ? sip_payload_dup(home, pl) : sip_payload_make(home, pls); - - new_ct = ct ? sip_content_type_dup(home, ct) + + new_ct = ct ? sip_content_type_dup(home, ct) : sip_content_type_make(home, cts); - + if ((!new_pl && pl) || !new_ct) { su_free(home, evv); su_free(home, new_pl); return -1; } *evvp = *eevv = evv; - + evv->evv_primary = *primary_p; evv->evv_private = private != 0; evv->evv_fake = fake != 0; @@ -808,13 +808,13 @@ assert(evv->evv_content_type); } else { - if (pl && - evv->evv_payload && + if (pl && + evv->evv_payload && evv->evv_payload->pl_len == pl->pl_len && memcmp(evv->evv_payload->pl_data, pl->pl_data, pl->pl_len) == 0) return 0; - if (!pl && pls && evv->evv_payload && - evv->evv_payload->pl_len == strlen(pls) && + if (!pl && pls && evv->evv_payload && + evv->evv_payload->pl_len == strlen(pls) && memcmp(evv->evv_payload->pl_data, pls, evv->evv_payload->pl_len) == 0) return 0; if (!pl && !pls && !evv->evv_payload) @@ -826,7 +826,7 @@ if (!new_pl && (pl || pls)) return -1; - + evv->evv_payload = new_pl; } @@ -861,7 +861,7 @@ ta_start(ta, tag, value); nea_view_update(nes, ev, &evv, 1, 0, ta_tags(ta)); - + ta_end(ta); return evv; @@ -935,8 +935,8 @@ /** Queue an old notification if needed. */ static -int nea_view_queue(nea_server_t *nes, - nea_event_view_t *evv, +int nea_view_queue(nea_server_t *nes, + nea_event_view_t *evv, nea_event_queue_t *evq) { nea_sub_t *s = NULL; @@ -953,7 +953,7 @@ continue; break; /* This */ } - + if (s) { nea_event_queue_t *evq0 = su_alloc(nes->nes_home, sizeof *evq); @@ -963,7 +963,7 @@ *evq0 = *evq, evq = evq0; /* evq should be copy of old head but with changed payload */ - assert(evq->evq_next == evv->evv_head->evq_next); + assert(evq->evq_next == evv->evv_head->evq_next); evv->evv_head->evq_next = evq; /* insert to the queue */ @@ -977,7 +977,7 @@ /** Remove old unneeded notifications. */ static -int nea_view_dequeue(nea_server_t *nes, +int nea_view_dequeue(nea_server_t *nes, nea_event_t *ev) { int i; @@ -1011,7 +1011,7 @@ /** Notify watchers. * - * @return + * @return * The function nea_server_notify() returns number of subscribers that the * notification could be sent, or -1 upon an error. */ @@ -1045,11 +1045,11 @@ if (ev == NULL) for (ev = nes->nes_events; ev; ev = ev->ev_next) { nea_view_dequeue(nes, ev); - SU_DEBUG_3(("nea_server(): notified %u, throttling at %u\n", + SU_DEBUG_3(("nea_server(): notified %u, throttling at %u\n", notified, ev->ev_throttling)); } else { - SU_DEBUG_3(("nea_server(): notified %u, throttling at %u\n", + SU_DEBUG_3(("nea_server(): notified %u, throttling at %u\n", notified, ev->ev_throttling)); nea_view_dequeue(nes, ev); } @@ -1087,7 +1087,7 @@ nea_sub_destroy(*ss); continue; } - } + } ss = &((*ss)->s_next); } } @@ -1127,7 +1127,7 @@ nes->nes_subscribers = s; /* Copy default values */ - s->s_throttle = nes->nes_throttle; + s->s_throttle = nes->nes_throttle; } return s; @@ -1180,9 +1180,9 @@ su_free(home, del->s_local), del->s_local = NULL; su_free(home, del->s_remote), del->s_remote = NULL; - if (del->s_oreq) + if (del->s_oreq) nta_outgoing_destroy(del->s_oreq), del->s_oreq = NULL; - if (del->s_leg) + if (del->s_leg) nta_leg_destroy(del->s_leg), del->s_leg = NULL; if (del->s_from) su_free(home, del->s_from), del->s_from = NULL; @@ -1198,14 +1198,14 @@ nea_event_t *nea_event_create(nea_server_t *nes, nea_watcher_f *callback, nea_emagic_t *context, - char const *name, + char const *name, char const *subname, char const *default_content_type, char const *accept) { - return nea_event_tcreate(nes, callback, context, - name, subname, - SIPTAG_CONTENT_TYPE_STR(default_content_type), + return nea_event_tcreate(nes, callback, context, + name, subname, + SIPTAG_CONTENT_TYPE_STR(default_content_type), SIPTAG_ACCEPT_STR(accept), TAG_END()); } @@ -1214,7 +1214,7 @@ nea_event_t *nea_event_tcreate(nea_server_t *nes, nea_watcher_f *callback, nea_emagic_t *context, - char const *name, + char const *name, char const *subname, tag_type_t tag, tag_value_t value, ...) { @@ -1253,7 +1253,7 @@ sip_supported_t const *k = NULL; sip_require_t const *rq = NULL; char const *ct_str = NULL, *ac_str = NULL, *k_str = NULL, *rq_str = NULL; - + unsigned throttle = nes->nes_throttle, min_throttle = nes->nes_min_throttle; int eventlist = nes->nes_eventlist; @@ -1274,11 +1274,11 @@ ev->ev_callback = callback; ev->ev_magic = context; - ev->ev_event = sip_event_format(nes->nes_home, "%s%s%s", - name, - subname ? "." : "", + ev->ev_event = sip_event_format(nes->nes_home, "%s%s%s", + name, + subname ? "." : "", subname ? subname : ""); - + ev->ev_reliable = reliable != 0; ev->ev_throttle = throttle; ev->ev_min_throttle = min_throttle; @@ -1294,15 +1294,15 @@ if (ev->ev_event) { #define sip_allow_events_find(k, i) sip_params_find(k->k_items, i) - if (!sip_allow_events_find(nes->nes_allow_events, + if (!sip_allow_events_find(nes->nes_allow_events, ev->ev_event->o_type)) - sip_allow_events_add(nes->nes_home, nes->nes_allow_events, + sip_allow_events_add(nes->nes_home, nes->nes_allow_events, ev->ev_event->o_type); } if (ct) ev->ev_default = sip_accept_make(nes->nes_home, ct->c_type); - else + else ev->ev_default = sip_accept_make(nes->nes_home, ct_str); if (ac == NULL && ac_str == NULL) @@ -1319,7 +1319,7 @@ ev->ev_supported = sip_supported_make(nes->nes_home, k_str); ev->ev_prev = pev; - *pev = ev; + *pev = ev; } ta_end(ta); @@ -1370,8 +1370,8 @@ /** Invoke the event callback. * - * The function nes_watcher_callback() calls the callback provided by the - * application using the notifier object. + * The function nes_watcher_callback() calls the callback provided by the + * application using the notifier object. * * @param nes pointer to notifier object * @param ev pointer to event view @@ -1383,9 +1383,9 @@ * has been destroyed by the callback function, 0 otherwise. */ static -int nes_watcher_callback(nea_server_t *nes, - nea_event_t *ev, - nea_sub_t *s, +int nes_watcher_callback(nea_server_t *nes, + nea_event_t *ev, + nea_sub_t *s, sip_t const *sip, sip_time_t now) { @@ -1395,7 +1395,7 @@ nea_subnode_t sn[1]; nea_subnode_init(sn, s, now); - + if (sn->sn_expires == 0 || sn->sn_state == nea_terminated) s->s_reported = 1; @@ -1405,12 +1405,12 @@ if (nes->nes_in_list) return 0; - + if (nes->nes_pending_destroy) { nea_server_destroy(nes); return -2; } - + if (sip == NULL && nes->nes_pending_flush) { int flushed = s->s_pending_flush; nea_server_pending_flush(nes); @@ -1429,18 +1429,18 @@ * * The function nea_server_add() is called when the notifier receives a * SUBSCRIBE request without existing event dialog. - * + * * @param nes pointer to notifier - * @param local_target optional contact header + * @param local_target optional contact header * @param msg pointer to request message * @param sip pointer to SIP view to request message * - * @return + * @return * The function nea_server_add() returns 0 if successful, -1 upon an * error. - * + * */ -int nea_server_add(nea_server_t *nes, +int nea_server_add(nea_server_t *nes, sip_contact_t const *local_target, msg_t *msg, sip_t *sip) { @@ -1480,7 +1480,7 @@ static int nea_server_callback(nea_sub_t *nes_as_sub, nta_leg_t *leg, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip) { return nea_server_add_irq((nea_server_t *)nes_as_sub, leg, NULL, irq, sip); @@ -1490,7 +1490,7 @@ int nea_server_add_irq(nea_server_t *nes, nta_leg_t *leg, sip_contact_t const *local_target, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip) { nea_sub_t *s = nea_sub_create(nes); @@ -1506,10 +1506,10 @@ if (leg == NULL || leg == nes->nes_leg) { url_t target[1]; - + *target = *local_target->m_url; - s->s_leg = nta_leg_tcreate(nes->nes_agent, nea_sub_process_incoming, s, + s->s_leg = nta_leg_tcreate(nes->nes_agent, nea_sub_process_incoming, s, SIPTAG_FROM(sip->sip_to), SIPTAG_TO(sip->sip_from), SIPTAG_CALL_ID(sip->sip_call_id), @@ -1519,7 +1519,7 @@ else { nta_leg_bind(s->s_leg = leg, nea_sub_process_incoming, s); } - + if (s->s_leg) { if (sip->sip_to->a_tag == NULL) { nta_leg_tag(s->s_leg, NULL); @@ -1568,7 +1568,7 @@ break; default: - nta_incoming_treply(irq, + nta_incoming_treply(irq, retval = SIP_405_METHOD_NOT_ALLOWED, SIPTAG_ALLOW_STR("SUBSCRIBE"), TAG_END()); @@ -1579,7 +1579,7 @@ if (s->s_irq) nta_incoming_destroy(irq), s->s_irq = NULL; - + if (s->s_pending_flush || s->s_state == nea_embryonic) nea_sub_destroy(s); @@ -1624,7 +1624,7 @@ int once, what, supported_eventlist, require_eventlist; if (sip->sip_payload && !sip->sip_content_type) { - nta_incoming_treply(irq, 400, "Missing Content-Type", + nta_incoming_treply(irq, 400, "Missing Content-Type", SIPTAG_SERVER_STR(nes->nes_server), SIPTAG_ALLOW_EVENTS(nes->nes_allow_events), SIPTAG_ALLOW(nes->nes_allow_methods), @@ -1632,16 +1632,16 @@ return 0; } - if (sip->sip_expires && - sip->sip_expires->ex_delta > 0 && + if (sip->sip_expires && + sip->sip_expires->ex_delta > 0 && sip->sip_expires->ex_delta < nes->nes_min_expires) { - sip_min_expires_t me[1]; + sip_min_expires_t me[1]; sip_min_expires_init(me); me->me_delta = nes->nes_min_expires; - nta_incoming_treply(irq, 423, "Subscription Interval Too Small", + nta_incoming_treply(irq, 423, "Subscription Interval Too Small", SIPTAG_ACCEPT(accept), SIPTAG_MIN_EXPIRES(me), SIPTAG_SERVER_STR(nes->nes_server), @@ -1653,13 +1653,13 @@ /* Check features */ if (nes->nes_require) { - unsupported = sip_has_unsupported2(nes->nes_home, + unsupported = sip_has_unsupported2(nes->nes_home, sip->sip_supported, sip->sip_require, nes->nes_require); if (unsupported) { - nta_incoming_treply(irq, SIP_421_EXTENSION_REQUIRED, + nta_incoming_treply(irq, SIP_421_EXTENSION_REQUIRED, SIPTAG_REQUIRE(nes->nes_require), SIPTAG_UNSUPPORTED(unsupported), SIPTAG_SERVER_STR(nes->nes_server), @@ -1676,12 +1676,12 @@ require_eventlist = sip_has_feature(sip->sip_require, "eventlist"); supported_eventlist = supported_eventlist || require_eventlist; - if (s->s_id && (!sip->sip_event || + if (s->s_id && (!sip->sip_event || str0cmp(s->s_id->o_type, sip->sip_event->o_type) != 0 || str0cmp(s->s_id->o_id, sip->sip_event->o_id))) { /* Multiple subscriptions per dialog are not supported. */ - return nta_incoming_treply(irq, 501, - "Multiple subscriptions not implemented", + return nta_incoming_treply(irq, 501, + "Multiple subscriptions not implemented", SIPTAG_SERVER_STR(nes->nes_server), TAG_NULL()); } @@ -1709,13 +1709,13 @@ if (!ev && !require_eventlist) ev = ev_maybe; - + if (ev || once) break; /* Ask the application either to - 1) add a new event or assing us an event/payload (0), - 2) take care of transaction (positive), or + 1) add a new event or assing us an event/payload (0), + 2) take care of transaction (positive), or 3) drop request (negative). */ if ((what = nes_new_event_callback(nes, &ev, &evv, irq, sip)) < 0) @@ -1727,7 +1727,7 @@ } if (ev_maybe == NULL && ev == NULL) { - nta_incoming_treply(irq, SIP_489_BAD_EVENT, + nta_incoming_treply(irq, SIP_489_BAD_EVENT, SIPTAG_SERVER_STR(nes->nes_server), SIPTAG_ALLOW_EVENTS(nes->nes_allow_events), SIPTAG_ALLOW(nes->nes_allow_methods), @@ -1739,7 +1739,7 @@ unsupported = sip_has_unsupported(nes->nes_home, ev->ev_supported, sip->sip_require); - nta_incoming_treply(irq, SIP_420_BAD_EXTENSION, + nta_incoming_treply(irq, SIP_420_BAD_EXTENSION, SIPTAG_UNSUPPORTED(unsupported), SIPTAG_REQUIRE(ev->ev_require), SIPTAG_SUPPORTED(ev->ev_supported), @@ -1775,12 +1775,12 @@ /* Sort the accept list by Q values */ for (a = a0, accept = NULL; a; a = a_next) { a_next = a->ac_next; - - for (aa = (sip_accept_t **)&accept; - *aa && sip_q_value((*aa)->ac_q) >= sip_q_value(a->ac_q); + + for (aa = (sip_accept_t **)&accept; + *aa && sip_q_value((*aa)->ac_q) >= sip_q_value(a->ac_q); aa = &(*aa)->ac_next) ; - + a->ac_next = *aa; *aa = a; /* Insert */ } } @@ -1795,11 +1795,11 @@ if (ac->ac_type == NULL || ac->ac_subtype == NULL) continue; - + /* Check all supported content types v. accept */ for (i = 0; (evv = ev->ev_views[i]); i++) { assert(evv->evv_content_type && evv->evv_content_type->c_type); - + if (strcmp(ac->ac_type, "*/*") == 0) break; @@ -1807,7 +1807,7 @@ if ((strcasecmp(ac->ac_type, type) == 0) || (strcasecmp(ac->ac_subtype, "*") == 0 && - strncasecmp(ac->ac_type, type, + strncasecmp(ac->ac_type, type, ac->ac_subtype - ac->ac_type) == 0)) { if (evv_maybe == NULL) evv_maybe = evv; @@ -1820,17 +1820,17 @@ /* Free the sorted Accept list */ for (a = a0; a; a = a_next) - a_next = a->ac_next, su_free(home, a); + a_next = a->ac_next, su_free(home, a); if (!evv) evv = evv_maybe; - + if (evv || once) break; /* Ask the application either to - 1) add a new event view or assign us an event view (0), - 2) take care of transaction (positive), or + 1) add a new event view or assign us an event view (0), + 2) take care of transaction (positive), or 3) drop request (negative). */ if ((what = nes_new_event_callback(nes, &ev, &evv, irq, sip)) < 0) @@ -1846,7 +1846,7 @@ ev->ev_event->o_type, SIP_406_NOT_ACCEPTABLE)); /* There is no media acceptable to watcher */ - return nta_incoming_treply(irq, SIP_406_NOT_ACCEPTABLE, + return nta_incoming_treply(irq, SIP_406_NOT_ACCEPTABLE, SIPTAG_ACCEPT(ev->ev_accept), SIPTAG_SERVER_STR(nes->nes_server), SIPTAG_ALLOW_EVENTS(nes->nes_allow_events), @@ -1859,7 +1859,7 @@ evv = s->s_view; /* Set throttle */ - if (sip->sip_event && + if (sip->sip_event && (throttle = sip_params_find(sip->sip_event->o_params, "throttle="))) { proposed_throttle = strtoul(throttle, NULL, 10); @@ -1902,7 +1902,7 @@ s->s_updated = evv->evv_updated - 1; /* Force notify */ if (nes->nes_202_before_notify) { - nta_incoming_treply(irq, SIP_202_ACCEPTED, + nta_incoming_treply(irq, SIP_202_ACCEPTED, SIPTAG_SERVER_STR(nes->nes_server), SIPTAG_ALLOW_EVENTS(nes->nes_allow_events), SIPTAG_ALLOW(nes->nes_allow_methods), @@ -1923,8 +1923,8 @@ return -1; } - - + + evv = s->s_view; /* Callback can change event view */ if (s->s_state == nea_embryonic) @@ -1935,11 +1935,11 @@ if (irq) { if (s->s_rejected) - nta_incoming_treply(irq, SIP_403_FORBIDDEN, + nta_incoming_treply(irq, SIP_403_FORBIDDEN, SIPTAG_SERVER_STR(nes->nes_server), TAG_END()); else if (s->s_state == nea_active) - nta_incoming_treply(irq, SIP_200_OK, + nta_incoming_treply(irq, SIP_200_OK, SIPTAG_REQUIRE(ev->ev_require), SIPTAG_SUPPORTED(ev->ev_supported), SIPTAG_EXPIRES(expires), @@ -1949,7 +1949,7 @@ SIPTAG_ALLOW(nes->nes_allow_methods), TAG_END()); else - nta_incoming_treply(irq, SIP_202_ACCEPTED, + nta_incoming_treply(irq, SIP_202_ACCEPTED, SIPTAG_REQUIRE(ev->ev_require), SIPTAG_SUPPORTED(ev->ev_supported), SIPTAG_EXPIRES(expires), @@ -1964,7 +1964,7 @@ } /* ----------------------------------------------------------------- */ -/**Notify subscriber +/**Notify subscriber * * The function nea_sub_notify() sends a notification to the subscriber. The * event type is specified by subscriber event, payload type and payload in @@ -1973,12 +1973,12 @@ * * @param nes pointer to the notifier object * @param s pointer to the subscription object - * @param now current SIP time (if 0, no body is sent, + * @param now current SIP time (if 0, no body is sent, * but updated Subscription-State header only * @param tag,value,... tag list * */ -int nea_sub_notify(nea_server_t *nes, nea_sub_t *s, +int nea_sub_notify(nea_server_t *nes, nea_sub_t *s, sip_time_t now, tag_type_t tag, tag_value_t value, ...) { @@ -1999,7 +1999,7 @@ assert(s->s_view); assert(ev); - if (suppress && s->s_view->evv_updated == s->s_updated) + if (suppress && s->s_view->evv_updated == s->s_updated) return 0; if (now == 0) @@ -2007,7 +2007,7 @@ if (s->s_notified + s->s_throttle > now && /* Do not throttle state termination notification */ - substate != nea_terminated && + substate != nea_terminated && (long)(s->s_expires - now) > 0) { if (ev->ev_throttling > s->s_updated && !s->s_fake) ev->ev_throttling = s->s_updated; @@ -2034,7 +2034,7 @@ sip_subscription_state_init(ss); - tl_gets(ta_args(ta), + tl_gets(ta_args(ta), NEATAG_REASON_REF(reason), NEATAG_FAKE_REF(fake), /* XXX - semantics??? */ NEATAG_RETRY_AFTER_REF(retry_after), @@ -2042,10 +2042,10 @@ if (substate == nea_terminated) { if (reason) - snprintf(reason_buf, sizeof(reason_buf), + snprintf(reason_buf, sizeof(reason_buf), "reason=%s", reason), params[i++] = reason_buf; if (retry_after != (unsigned)-1) - snprintf(retry_after_buf, sizeof(retry_after_buf), + snprintf(retry_after_buf, sizeof(retry_after_buf), "retry-after=%u", retry_after), params[i++] = retry_after_buf; } else if ((long)(s->s_expires - now) <= 0) { @@ -2065,10 +2065,10 @@ case nea_pending: ss->ss_substate = "pending"; break; case nea_active: ss->ss_substate = "active"; break; case nea_terminated: ss->ss_substate = "terminated"; break; - /* Do not send notifys for embryonic subscriptions */ + /* Do not send notifys for embryonic subscriptions */ case nea_embryonic: ta_end(ta); - return 0; + return 0; } callback = substate != nea_terminated ? response_to_notify : NULL; @@ -2082,9 +2082,9 @@ n_evq = evq->evq_payload ? evq : evv->evv_primary->evv_head; - s->s_oreq = - nta_outgoing_tcreate(s->s_leg, - callback, s, NULL, + s->s_oreq = + nta_outgoing_tcreate(s->s_leg, + callback, s, NULL, SIP_METHOD_NOTIFY, NULL, SIPTAG_SUBSCRIPTION_STATE(ss), SIPTAG_REQUIRE(ev->ev_require), @@ -2092,11 +2092,11 @@ SIPTAG_USER_AGENT_STR(nes->nes_server), SIPTAG_CONTACT(s->s_local), SIPTAG_EVENT(s->s_id), - TAG_IF(!suppress, + TAG_IF(!suppress, SIPTAG_CONTENT_TYPE(n_evq->evq_content_type)), TAG_IF(!suppress, SIPTAG_PAYLOAD(n_evq->evq_payload)), - ta_tags(ta)); + ta_tags(ta)); notified = s->s_oreq != 0; @@ -2123,8 +2123,8 @@ /* ----------------------------------------------------------------- */ /**Process responses to the NOTIFY. - * - * The response_to_notify() processes the responses to the NOTIFY request. + * + * The response_to_notify() processes the responses to the NOTIFY request. * If there was an error with delivering the NOTIFY, the subscription is * considered terminated. * @@ -2172,7 +2172,7 @@ * * @param nes notifier * @param ev event - * + * * The function nea_server_active() returns number of active subscribers. */ int nea_server_active(nea_server_t *nes, nea_event_t const *ev) @@ -2182,7 +2182,7 @@ /* Count the number of subscribers watching this event */ for (s = nes->nes_subscribers; s ; s = s->s_next) - if (!s->s_pending_flush && s->s_state == nea_active + if (!s->s_pending_flush && s->s_state == nea_active && (ev == NULL || ev == s->s_event)) n++; @@ -2198,7 +2198,7 @@ * * @param nes notifier * @param ev event view - * + * * The function nea_server_active() returns number of active subscribers. */ int nea_server_non_embryonic(nea_server_t *nes, nea_event_t const *ev) @@ -2208,7 +2208,7 @@ /* Count the number of subscribers watching this event */ for (s = nes->nes_subscribers; s ; s = s->s_next) - if (!s->s_pending_flush && s->s_state != nea_embryonic + if (!s->s_pending_flush && s->s_state != nea_embryonic && (ev == NULL || ev == s->s_event)) n++; @@ -2248,7 +2248,7 @@ * @retval 0 if successful * @retval -1 upon an error */ -int nea_sub_auth(nea_sub_t *s, +int nea_sub_auth(nea_sub_t *s, nea_state_t state, tag_type_t tag, tag_value_t value, ...) { @@ -2289,9 +2289,9 @@ } tl_gets(ta_args(ta), NEATAG_REASON_REF(reason), TAG_END()); - + rejected = reason && strcasecmp(reason, "rejected") == 0; - + if (state == nea_terminated && embryonic && rejected && s->s_irq) retval = 0, s->s_rejected = 1; else @@ -2303,7 +2303,7 @@ } /** Obtain a list of subscribers */ -nea_subnode_t const **nea_server_get_subscribers(nea_server_t *nes, +nea_subnode_t const **nea_server_get_subscribers(nea_server_t *nes, nea_event_t const *ev) { nea_sub_t *s; @@ -2315,13 +2315,13 @@ if (n == 0) return NULL; - sn_list = su_zalloc(nes->nes_home, + sn_list = su_zalloc(nes->nes_home, (n + 1) * sizeof(sn) + n * sizeof(*sn)); if (sn_list) { sn = (nea_subnode_t *)(sn_list + n + 1); for (i = 0, s = nes->nes_subscribers; s; s = s->s_next) { - if (!s->s_pending_flush && s->s_state != nea_embryonic + if (!s->s_pending_flush && s->s_state != nea_embryonic && (ev == NULL || ev == s->s_event)) { assert(i < n); nea_subnode_init(sn, s, now); @@ -2338,7 +2338,7 @@ } /** Free a list of subscriptions. */ -void nea_server_free_subscribers(nea_server_t *nes, +void nea_server_free_subscribers(nea_server_t *nes, nea_subnode_t const **sn_list) { if (sn_list) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/sofia-sip/nea.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/sofia-sip/nea.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nea/sofia-sip/nea.h Tue Dec 16 13:05:22 2008 @@ -67,19 +67,19 @@ /** Event view. */ typedef struct nea_event_view_s nea_event_view_t; -#ifndef NEA_SMAGIC_T +#ifndef NEA_SMAGIC_T #define NEA_SMAGIC_T struct nea_smagic_t #endif /** NEA server context */ typedef NEA_SMAGIC_T nea_smagic_t; -#ifndef NEA_EMAGIC_T +#ifndef NEA_EMAGIC_T #define NEA_EMAGIC_T struct nea_emagic_t #endif /** NEA server event context */ typedef NEA_EMAGIC_T nea_emagic_t; -#ifndef NEA_EVMAGIC_T +#ifndef NEA_EVMAGIC_T #define NEA_EVMAGIC_T struct nea_evmagic_t #endif /** Event view context */ @@ -88,7 +88,7 @@ /** Description of subscription */ typedef struct nea_subnode_t { nea_state_t sn_state; /**< Subscription state */ - unsigned sn_fake; /**< True if subscriber is given + unsigned sn_fake; /**< True if subscriber is given * fake contents. */ unsigned sn_eventlist; /**< Subscriber supports eventlist */ @@ -98,7 +98,7 @@ sip_contact_t const *sn_contact; /**< Contact of subscriber */ /** Content-Type of SUBSCRIBE body (filter). */ - sip_content_type_t const *sn_content_type; + sip_content_type_t const *sn_content_type; sip_payload_t const *sn_payload; /**< Body of subscribe*/ unsigned sn_expires; /**< When subscription expires */ @@ -123,7 +123,7 @@ * * @retval 1 application takes care of responding to request * @retval 0 application has added new event or payload format - * @retval -1 nea server rejects request + * @retval -1 nea server rejects request */ typedef int (nea_new_event_f)(nea_smagic_t *context, nea_server_t *nes, @@ -166,7 +166,7 @@ int nea_server_add_irq(nea_server_t *nes, nta_leg_t *leg, sip_contact_t const *local_target, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip); /** QAUTH callback function type. @@ -189,7 +189,7 @@ nea_event_t *nea_event_create(nea_server_t *nes, nea_watcher_f *callback, nea_emagic_t *context, - char const *name, + char const *name, char const *subname, char const *default_content_type, char const *accept); @@ -199,7 +199,7 @@ nea_event_t *nea_event_tcreate(nea_server_t *nes, nea_watcher_f *callback, nea_emagic_t *context, - char const *name, + char const *name, char const *subname, tag_type_t, tag_value_t, ...); @@ -215,10 +215,10 @@ /** Get number of (non-embryonic) subscribers. */ int nea_server_non_embryonic(nea_server_t *nes, nea_event_t const *ev); -/** Obtain a list of subscriptions. +/** Obtain a list of subscriptions. */ SOFIAPUBFUN -nea_subnode_t const **nea_server_get_subscribers(nea_server_t *nes, +nea_subnode_t const **nea_server_get_subscribers(nea_server_t *nes, nea_event_t const *ev); /** Free a list of subscriptions. */ @@ -227,12 +227,12 @@ /** Notify subscribers */ SOFIAPUBFUN -int nea_server_notify(nea_server_t *nes, +int nea_server_notify(nea_server_t *nes, nea_event_t *ev); /** Notify a subscriber */ SOFIAPUBFUN -int nea_server_notify_one(nea_server_t *nes, +int nea_server_notify_one(nea_server_t *nes, nea_event_t *ev, nea_sub_t *ns); @@ -257,12 +257,12 @@ #if 0 /** Do a remote qauth. * - * The function nea_server_qauth() is given as q_callback pointer + * The function nea_server_qauth() is given as q_callback pointer * to nea_server_create() if remote authentication from url is desired. */ -void nea_server_qauth(nea_server_t *nes, +void nea_server_qauth(nea_server_t *nes, nea_emagic_t *context, - nea_sub_t *subscriber, + nea_sub_t *subscriber, sip_t const *sip); #endif @@ -329,7 +329,7 @@ /** NEA Event Watcher */ typedef struct nea_s nea_t; -#ifndef NEA_MAGIC_T +#ifndef NEA_MAGIC_T #define NEA_MAGIC_T struct nea_magic_t #endif @@ -337,7 +337,7 @@ typedef NEA_MAGIC_T nea_magic_t; /** Event notification callback type. - * + * * This callback is called also when initial or refresh subscribe transaction * completes with the transaction result in @a sip. */ @@ -360,7 +360,7 @@ /** Update SUBSCRIBE payload (filter rules) */ SOFIAPUBFUN -int nea_update(nea_t *nea, +int nea_update(nea_t *nea, tag_type_t tag, tag_value_t value, ...); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/Doxyfile.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/Doxyfile.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/Doxyfile.in Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ PROJECT_NAME = "nta" OUTPUT_DIRECTORY = ../docs/html/nta -INPUT = @srcdir@/nta.docs @srcdir@/sofia-sip @srcdir@ . +INPUT = @srcdir@/nta.docs @srcdir@/sofia-sip @srcdir@ . @INCLUDE_PATH = . @srcdir@ @INCLUDE = ../docs/Doxyfile.conf Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/Makefile.am Tue Dec 16 13:05:22 2008 @@ -27,7 +27,7 @@ dist_noinst_SCRIPTS = run_test_nta_api run_test_nta TESTS = run_test_nta_api run_test_nta -TESTS_ENVIRONMENT = $(SHELL) +TESTS_ENVIRONMENT = $(SHELL) # ---------------------------------------------------------------------- # Rules for building the targets @@ -37,7 +37,7 @@ nobase_include_sofia_HEADERS = \ sofia-sip/nta.h sofia-sip/nta_stateless.h \ sofia-sip/nta_tport.h sofia-sip/nta_tag.h \ - sofia-sip/sl_utils.h + sofia-sip/sl_utils.h libnta_la_SOURCES = nta.c nta_check.c nta_tag.c nta_tag_ref.c \ nta_internal.h \ @@ -68,7 +68,7 @@ EXTRA_DIST = nta.docs sl_utils.docs \ agent.pem cafile.pem \ - invite.msc $(BUILT_SOURCES) + invite.msc $(BUILT_SOURCES) # ---------------------------------------------------------------------- # Sofia specific rules Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/invite.msc ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/invite.msc (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/invite.msc Tue Dec 16 13:05:22 2008 @@ -86,14 +86,14 @@ | |nta_leg_destroy | | | |---------------------------|--------->| | | ? | X - | X ? | + | X ? | User Agent Server Accepting a Call ---------------------------------- APP ? NTA -User ? NTA +User ? NTA Agent ? agent | ? | INVITE | ? |<---------------------- Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ /**@CFILE nta.c * @brief Sofia SIP Transaction API implementation - * + * * This source file has been divided into sections as follows: * 1) agent * 2) tport handling @@ -37,9 +37,9 @@ * 9) resolving URLs for client transactions * 10) 100rel reliable responses (reliable) * 11) SigComp handling and public transport interface - * + * * @author Pekka Pessi - * + * * @date Created: Tue Jun 13 02:57:51 2000 ppessi */ @@ -135,8 +135,8 @@ tport_t const *tport, tp_client_t *via); -static int complete_response(msg_t *response, - int status, char const *phrase, +static int complete_response(msg_t *response, + int status, char const *phrase, msg_t *request); static int mreply(nta_agent_t *agent, @@ -208,10 +208,10 @@ static void incoming_free(nta_incoming_t *irq); su_inline void incoming_cut_off(nta_incoming_t *irq); su_inline void incoming_reclaim(nta_incoming_t *irq); -static void incoming_queue_init(incoming_queue_t *, +static void incoming_queue_init(incoming_queue_t *, unsigned timeout); -static void incoming_queue_adjust(nta_agent_t *sa, - incoming_queue_t *queue, +static void incoming_queue_adjust(nta_agent_t *sa, + incoming_queue_t *queue, unsigned timeout); static nta_incoming_t *incoming_find(nta_agent_t const *agent, @@ -252,10 +252,10 @@ tp_name_t const *tpn, msg_t *msg, tag_type_t tag, tag_value_t value, ...); -static void outgoing_queue_init(outgoing_queue_t *, +static void outgoing_queue_init(outgoing_queue_t *, unsigned timeout); -static void outgoing_queue_adjust(nta_agent_t *sa, - outgoing_queue_t *queue, +static void outgoing_queue_adjust(nta_agent_t *sa, + outgoing_queue_t *queue, unsigned timeout); static void outgoing_free(nta_outgoing_t *orq); su_inline void outgoing_cut_off(nta_outgoing_t *orq); @@ -290,7 +290,7 @@ * * The NTA_DEBUG environment variable is used to determine the default * debug logging level. The normal level is 3. - * + * * @sa , #su_log_global, #SOFIA_DEBUG */ #ifdef DOXYGEN @@ -301,8 +301,8 @@ #define SU_DEBUG 3 #endif -/**Debug log for @b nta module. - * +/**Debug log for @b nta module. + * * The nta_log is the log object used by @b nta module. The level of * nta_log is set using #NTA_DEBUG environment variable. */ @@ -354,8 +354,8 @@ * NTATAG_DEBUG_DROP_PROB(), NTATAG_DEFAULT_PROXY(), * NTATAG_EXTRA_100(), NTATAG_GRAYLIST(), * NTATAG_MAXSIZE(), NTATAG_MAX_FORWARDS(), NTATAG_MERGE_482(), NTATAG_MCLASS() - * NTATAG_PASS_100(), NTATAG_PASS_408(), NTATAG_PRELOAD(), NTATAG_PROGRESS(), - * NTATAG_REL100(), + * NTATAG_PASS_100(), NTATAG_PASS_408(), NTATAG_PRELOAD(), NTATAG_PROGRESS(), + * NTATAG_REL100(), * NTATAG_SERVER_RPORT(), * NTATAG_SIPFLAGS(), * NTATAG_SIP_T1X64(), NTATAG_SIP_T1(), NTATAG_SIP_T2(), NTATAG_SIP_T4(), @@ -368,9 +368,9 @@ * @note The value from following tags are stored, but they currently do nothing: * NTATAG_SIGCOMP_ALGORITHM(), NTATAG_SIGCOMP_OPTIONS(), NTATAG_SMIME() * - * @note It is possible to provide @c (url_string_t*)-1 as @a contact_url. + * @note It is possible to provide @c (url_string_t*)-1 as @a contact_url. * In that case, no server sockets are bound. - * + * * @retval handle to the agent when successful, * @retval NULL upon an error. * @@ -399,15 +399,15 @@ agent->sa_flags = MSG_DO_CANONIC; agent->sa_maxsize = 2 * 1024 * 1024; /* 2 MB */ - agent->sa_bad_req_mask = + agent->sa_bad_req_mask = /* - * Bit-wise not of these - what is left is suitable for UAs with - * 100rel, timer, events, publish + * Bit-wise not of these - what is left is suitable for UAs with + * 100rel, timer, events, publish */ - (unsigned) ~(sip_mask_response | sip_mask_proxy | sip_mask_registrar | + (unsigned) ~(sip_mask_response | sip_mask_proxy | sip_mask_registrar | sip_mask_pref | sip_mask_privacy); - agent->sa_bad_resp_mask = - (unsigned) ~(sip_mask_request | sip_mask_proxy | sip_mask_registrar | + agent->sa_bad_resp_mask = + (unsigned) ~(sip_mask_request | sip_mask_proxy | sip_mask_registrar | sip_mask_pref | sip_mask_privacy); agent->sa_t1 = NTA_SIP_T1; agent->sa_t2 = NTA_SIP_T2; @@ -445,14 +445,14 @@ agent->sa_mclass = sip_default_mclass(); agent->sa_in.re_t1 = &agent->sa_in.re_list; - + incoming_queue_init(agent->sa_in.proceeding, 0); incoming_queue_init(agent->sa_in.preliminary, agent->sa_t1x64); /* P1 */ incoming_queue_init(agent->sa_in.inv_completed, agent->sa_t1x64); /* H */ incoming_queue_init(agent->sa_in.inv_confirmed, agent->sa_t4); /* I */ incoming_queue_init(agent->sa_in.completed, agent->sa_t1x64); /* J */ incoming_queue_init(agent->sa_in.terminated, 0); - incoming_queue_init(agent->sa_in.final_failed, 0); + incoming_queue_init(agent->sa_in.final_failed, 0); agent->sa_out.re_t1 = &agent->sa_out.re_list; @@ -460,7 +460,7 @@ outgoing_queue_init(agent->sa_out.resolving, 0); outgoing_queue_init(agent->sa_out.trying, agent->sa_t1x64); /* F */ outgoing_queue_init(agent->sa_out.completed, agent->sa_t4); /* K */ - outgoing_queue_init(agent->sa_out.terminated, 0); + outgoing_queue_init(agent->sa_out.terminated, 0); /* Special queues (states) for outgoing INVITE transactions */ outgoing_queue_init(agent->sa_out.inv_calling, agent->sa_t1x64); /* B */ timer_c = (agent->sa_use_timer_c || !agent->sa_is_a_uas) @@ -547,7 +547,7 @@ for (i = 0, lht = agent->sa_defaults; i < lht->lht_size; i++) { if ((leg = lht->lht_table[i])) { - SU_DEBUG_3(("%s: destroying leg for <" + SU_DEBUG_3(("%s: destroying leg for <" URL_PRINT_FORMAT ">\n", __func__, URL_PRINT_ARGS(leg->leg_url))); leg_free(agent, leg); @@ -851,7 +851,7 @@ now = agent->sa_now, ms = agent->sa_millisec; else now = su_now(), ms = su_time_ms(now); - + next = ms + offset; if (next == 0) next = 1; if (agent->sa_in_timer) /* Currently executing timer */ @@ -863,8 +863,8 @@ SU_DEBUG_9(("nta: timer %s to %ld ms\n", "shortened", (long)offset)); else SU_DEBUG_9(("nta: timer %s to %ld ms\n", "set", (long)offset)); - - su_timer_set_at(agent->sa_timer, agent_timer, agent, + + su_timer_set_at(agent->sa_timer, agent_timer, agent, add_milliseconds(now, offset)); agent->sa_next = next; } @@ -879,7 +879,7 @@ { if (agent && agent->sa_millisec != 0) return agent->sa_now; - else + else return su_now(); } @@ -891,7 +891,7 @@ #ifdef TPTAG_THRPSIZE if (agent->sa_tport_threadpool) { su_home_threadsafe(agent->sa_home); - return su_clone_start(agent->sa_root, + return su_clone_start(agent->sa_root, agent->sa_terminator, NULL, NULL, @@ -916,7 +916,7 @@ * NTA keeps transactions alive, does NTA apply proxy or user-agent logic to * INVITE transactions, or how the @Via headers are generated. * - * @note + * @note * Setting the parameters NTATAG_MAXSIZE(), NTATAG_UDP_MTU(), NTATAG_MAX_PROCEEDING(), * NTATAG_SIP_T1X64(), NTATAG_SIP_T1(), NTATAG_SIP_T2(), NTATAG_SIP_T4() to * 0 selects the default value. @@ -928,8 +928,8 @@ * NTATAG_DEBUG_DROP_PROB(), NTATAG_DEFAULT_PROXY(), * NTATAG_EXTRA_100(), NTATAG_GRAYLIST(), * NTATAG_MAXSIZE(), NTATAG_MAX_FORWARDS(), NTATAG_MERGE_482(), NTATAG_MCLASS() - * NTATAG_PASS_100(), NTATAG_PASS_408(), NTATAG_PRELOAD(), NTATAG_PROGRESS(), - * NTATAG_REL100(), + * NTATAG_PASS_100(), NTATAG_PASS_408(), NTATAG_PRELOAD(), NTATAG_PROGRESS(), + * NTATAG_REL100(), * NTATAG_SERVER_RPORT(), * NTATAG_SIPFLAGS(), * NTATAG_SIP_T1X64(), NTATAG_SIP_T1(), NTATAG_SIP_T2(), NTATAG_SIP_T4(), @@ -1220,7 +1220,7 @@ return n; } -static +static void agent_set_udp_params(nta_agent_t *self, usize_t udp_mtu) { tport_t *tp; @@ -1243,23 +1243,23 @@ * INVITE transactions, or how the @Via headers are generated. * * @TAGS - * NTATAG_ALIASES_REF(), NTATAG_BLACKLIST_REF(), + * NTATAG_ALIASES_REF(), NTATAG_BLACKLIST_REF(), * NTATAG_CANCEL_2543_REF(), NTATAG_CANCEL_487_REF(), - * NTATAG_CLIENT_RPORT_REF(), NTATAG_CONTACT_REF(), + * NTATAG_CLIENT_RPORT_REF(), NTATAG_CONTACT_REF(), * NTATAG_DEBUG_DROP_PROB_REF(), NTATAG_DEFAULT_PROXY_REF(), * NTATAG_EXTRA_100_REF(), NTATAG_GRAYLIST_REF(), * NTATAG_MAXSIZE_REF(), NTATAG_MAX_FORWARDS_REF(), NTATAG_MCLASS_REF(), * NTATAG_MERGE_482_REF(), NTATAG_MAX_PROCEEDING_REF(), * NTATAG_PASS_100_REF(), NTATAG_PASS_408_REF(), NTATAG_PRELOAD_REF(), * NTATAG_PROGRESS_REF(), - * NTATAG_REL100_REF(), - * NTATAG_SERVER_RPORT_REF(), + * NTATAG_REL100_REF(), + * NTATAG_SERVER_RPORT_REF(), * NTATAG_SIGCOMP_ALGORITHM_REF(), NTATAG_SIGCOMP_OPTIONS_REF(), * NTATAG_SIPFLAGS_REF(), * NTATAG_SIP_T1_REF(), NTATAG_SIP_T1X64_REF(), NTATAG_SIP_T2_REF(), * NTATAG_SIP_T4_REF(), NTATAG_SMIME_REF(), NTATAG_STATELESS_REF(), * NTATAG_TAG_3261_REF(), NTATAG_TIMEOUT_408_REF(), NTATAG_TIMER_C_REF(), - * NTATAG_UA_REF(), NTATAG_UDP_MTU_REF(), NTATAG_USER_VIA_REF(), + * NTATAG_UA_REF(), NTATAG_UDP_MTU_REF(), NTATAG_USER_VIA_REF(), * NTATAG_USE_NAPTR_REF(), NTATAG_USE_SRV_REF(), * and NTATAG_USE_TIMESTAMP_REF(). * @@ -1366,7 +1366,7 @@ * NTATAG_S_SENT_REQUEST_REF(), * NTATAG_S_SENT_RESPONSE_REF(), * NTATAG_S_SERVER_TR_REF(), - * NTATAG_S_TOUT_REQUEST_REF(), + * NTATAG_S_TOUT_REQUEST_REF(), * NTATAG_S_TOUT_RESPONSE_REF(), * NTATAG_S_TRLESS_200_REF(), * NTATAG_S_TRLESS_REQUEST_REF(), @@ -1459,7 +1459,7 @@ /* XXX - use a cryptographically safe func here? */ sa->sa_branch += NTA_BRANCH_PRIME; - msg_random_token(branch, sizeof(branch) - 1, + msg_random_token(branch, sizeof(branch) - 1, &sa->sa_branch, sizeof(sa->sa_branch)); return su_sprintf(home, "branch=z9hG4bK%s", branch); @@ -1469,13 +1469,13 @@ /** * Calculate branch value for stateless operation. - * + * * XXX - should include HMAC of previous @Via line. */ static -char const *stateless_branch(nta_agent_t *sa, +char const *stateless_branch(nta_agent_t *sa, msg_t *msg, - sip_t const *sip, + sip_t const *sip, tp_name_t const *tpn) { su_md5_t md5[1]; @@ -1542,7 +1542,7 @@ /**For each transport, we have name used by tport module, SRV prefixes used * for resolving, and NAPTR service/conversion. */ -static +static struct sipdns_tport { char name[6]; /**< Named used by tport module */ char port[6]; /**< Default port number */ @@ -1678,14 +1678,14 @@ if (url->url_type == url_sip) { tpn->tpn_proto = "*"; tports = tports_sip; - if (!tpn->tpn_port || !tpn->tpn_port[0]) + if (!tpn->tpn_port || !tpn->tpn_port[0]) tpn->tpn_port = SIP_DEFAULT_SERV; } else { assert(url->url_type == url_sips); tpn->tpn_proto = "*"; tports = tports_sips; - if (!tpn->tpn_port || !tpn->tpn_port[0]) + if (!tpn->tpn_port || !tpn->tpn_port[0]) tpn->tpn_port = SIPS_DEFAULT_SERV; } @@ -1712,8 +1712,8 @@ if (url_param(url->url_params, "comp", comp, sizeof(comp)) > 0) tpn->tpn_comp = comp; - if (tpn->tpn_comp && - (nta_compressor_vtable == NULL || + if (tpn->tpn_comp && + (nta_compressor_vtable == NULL || strcasecmp(tpn->tpn_comp, nta_compressor_vtable->ncv_name) != 0)) { SU_DEBUG_1(("nta(%p): comp=%s not supported for " URL_PRINT_FORMAT "\n", (void *)self, tpn->tpn_comp, URL_PRINT_ARGS(url))); @@ -1781,7 +1781,7 @@ static int agent_create_master_transport(nta_agent_t *self, tagi_t *tags) { - self->sa_tports = + self->sa_tports = tport_tcreate(self, nta_agent_class, self->sa_root, TPTAG_SDWN_ERROR(0), TPTAG_IDLE(1800000), @@ -1872,14 +1872,14 @@ maddr = 0; port = 0; } - + if (strncasecmp(tpn->tpn_proto, "tls", 3) ? port == SIP_DEFAULT_PORT : port == SIPS_DEFAULT_PORT) port = 0; snprintf(sport, sizeof sport, ":%u", port); - + comp = tpn->tpn_comp; SU_DEBUG_9(("nta: agent_init_via: " @@ -1933,7 +1933,7 @@ while (via->v_next && via->v_next->v_common->h_data == tp) via = via->v_next, new_via = new_via->v_next, dup_via = dup_via->v_next; - + via = via->v_next; /* Break the link in via list between transports */ vv = &new_via->v_next, new_via = *vv, *vv = NULL; @@ -1952,7 +1952,7 @@ agent_set_udp_params(self, self->sa_udp_mtu); v = self->sa_vias; - self->sa_vias = new_vias; + self->sa_vias = new_vias; msg_header_free(self->sa_home, (void *)v); v = self->sa_public_vias; @@ -2003,7 +2003,7 @@ v2 = v1->v_next; - if (v2 && + if (v2 && strcasecmp(v1->v_host, v2->v_host) == 0 && str0casecmp(v1->v_port, v2->v_port) == 0) { char const *p1 = v1->v_protocol, *p2 = v2->v_protocol; @@ -2017,7 +2017,7 @@ tp = NULL; } - self->sa_contact = + self->sa_contact = sip_contact_create_from_via_with_transport(self->sa_home, v1, NULL, tp); if (!self->sa_contact) @@ -2038,7 +2038,7 @@ /** Insert @Via to a request message */ static -int outgoing_insert_via(nta_outgoing_t *orq, +int outgoing_insert_via(nta_outgoing_t *orq, sip_via_t const *via) { nta_agent_t *self = orq->orq_agent; @@ -2062,7 +2062,7 @@ else return -1; - if (!v->v_rport && + if (!v->v_rport && ((self->sa_rport && v->v_protocol == sip_transport_udp) || (self->sa_tcp_rport && v->v_protocol == sip_transport_tcp))) msg_header_add_param(msg_home(msg), v->v_common, "rport"); @@ -2089,7 +2089,7 @@ if ((!user_via || /* Replace port in user Via only if we use udp and no rport */ - (v->v_protocol == sip_transport_udp && !v->v_rport && + (v->v_protocol == sip_transport_udp && !v->v_rport && !orq->orq_stateless)) && via->v_port != v->v_port && str0cmp(via->v_port, v->v_port)) @@ -2101,7 +2101,7 @@ return 0; } -/** Get destination name from @Via. +/** Get destination name from @Via. * * If @a using_rport is non-null, try rport. * If *using_rport is non-zero, try rport even if is not UDP. @@ -2149,7 +2149,7 @@ return -1; } - if (url->url_type != url_sip && + if (url->url_type != url_sip && url->url_type != url_sips && url->url_type != url_im && url->url_type != url_pres) { @@ -2215,7 +2215,7 @@ } else { /* XXX - we should do something else? */ - SU_DEBUG_3(("%s(%p): %s\n", "nta", (void *)self, + SU_DEBUG_3(("%s(%p): %s\n", "nta", (void *)self, "transport address updated")); } } @@ -2288,7 +2288,7 @@ if (agent->sa_drop_prob && !tport_is_reliable(tport)) { if ((unsigned)su_randint(0, 1000) < agent->sa_drop_prob) { - SU_DEBUG_5(("nta: %s (%u) is %s\n", + SU_DEBUG_5(("nta: %s (%u) is %s\n", method_name, cseq, "dropped simulating packet loss")); agent->sa_stats->as_drop_request++; msg_destroy(msg); @@ -2299,16 +2299,16 @@ stream = tport_is_stream(tport); /* Try to use compression on reverse direction if @Via has comp=sigcomp */ - if (stream && + if (stream && sip->sip_via && sip->sip_via->v_comp && tport_can_send_sigcomp(tport) && - tport_name(tport)->tpn_comp == NULL && + tport_name(tport)->tpn_comp == NULL && tport_has_compression(tport_parent(tport), sip->sip_via->v_comp)) { tport_set_compression(tport, sip->sip_via->v_comp); } if (sip->sip_flags & MSG_FLG_TOOLARGE) { - SU_DEBUG_5(("nta: %s (%u) is %s\n", + SU_DEBUG_5(("nta: %s (%u) is %s\n", method_name, cseq, sip_413_Request_too_large)); agent->sa_stats->as_bad_request++; mreply(agent, NULL, SIP_413_REQUEST_TOO_LARGE, msg, @@ -2325,11 +2325,11 @@ errors = sip->sip_error != NULL; if (errors || - (sip->sip_flags & MSG_FLG_ERROR) /* Fatal error */ || + (sip->sip_flags & MSG_FLG_ERROR) /* Fatal error */ || (insane = (sip_sanity_check(sip) < 0))) { sip_header_t const *h; char const *badname = NULL, *phrase; - + agent->sa_stats->as_bad_message++; agent->sa_stats->as_bad_request++; @@ -2342,12 +2342,12 @@ if (h->sh_class == sip_error_class) bad = h->sh_error->er_name; - else + else bad = h->sh_class->hc_name; if (bad) SU_DEBUG_5(("nta: %s has bad %s header\n", method_name, bad)); - + if (!badname) badname = bad; } @@ -2363,7 +2363,7 @@ phrase = sip_400_Bad_request; SU_DEBUG_5(("nta: %s (%u) is %s\n", method_name, cseq, phrase)); - + mreply(agent, reply, 400, phrase, msg, tport, 1, stream, NULL, TAG_END()); @@ -2400,7 +2400,7 @@ } /* First, try existing incoming requests */ - irq = incoming_find(agent, sip, sip->sip_via, + irq = incoming_find(agent, sip, sip->sip_via, agent->sa_merge_482 && !sip->sip_to->a_tag && method != sip_method_ack @@ -2442,7 +2442,7 @@ if (rel) { SU_DEBUG_5(("nta: %s (%u) is going to %s (%u)\n", method_name, cseq, - rel->rel_irq->irq_cseq->cs_method_name, + rel->rel_irq->irq_cseq->cs_method_name, rel->rel_irq->irq_cseq->cs_seq)); reliable_recv(rel, msg, sip, tport); return; @@ -2453,10 +2453,10 @@ url->url_params = NULL; agent_aliases(agent, url, tport); /* canonize urls */ - if ((leg = leg_find(agent, - method_name, url, + if ((leg = leg_find(agent, + method_name, url, sip->sip_call_id, - sip->sip_from->a_tag, + sip->sip_from->a_tag, sip->sip_to->a_tag))) { /* Try existing dialog */ SU_DEBUG_5(("nta: %s (%u) %s\n", @@ -2490,14 +2490,14 @@ else if (agent->sa_callback) { /* Stateless processing for request */ agent->sa_stats->as_trless_request++; - SU_DEBUG_5(("nta: %s (%u) %s\n", + SU_DEBUG_5(("nta: %s (%u) %s\n", method_name, cseq, "to message callback")); (void)agent->sa_callback(agent->sa_magic, agent, msg, sip); } else { agent->sa_stats->as_trless_request++; SU_DEBUG_5(("nta: %s (%u) %s\n", - method_name, cseq, + method_name, cseq, "not processed by application: returning 501")); if (method != sip_method_ack) mreply(agent, NULL, SIP_501_NOT_IMPLEMENTED, msg, @@ -2569,7 +2569,7 @@ hostport[rlen] = '\0'; } - msg_header_replace_param(msg_home(msg), v->v_common, + msg_header_replace_param(msg_home(msg), v->v_common, su_strdup(msg_home(msg), received)); SU_DEBUG_5(("nta: Via check: %s\n", received)); } @@ -2580,7 +2580,7 @@ else if (v->v_rport) { rport = su_sprintf(msg_home(msg), "rport=%u", ntohs(from->su_port)); msg_header_replace_param(msg_home(msg), v->v_common, rport); - } + } else if (tport_is_tcp(tport)) { rport = su_sprintf(msg_home(msg), "rport=%u", ntohs(from->su_port)); msg_header_replace_param(msg_home(msg), v->v_common, rport); @@ -2588,12 +2588,12 @@ else if (agent->sa_server_rport == 2) { rport = su_sprintf(msg_home(msg), "rport=%u", ntohs(from->su_port)); msg_header_replace_param(msg_home(msg), v->v_common, rport); - } + } return 0; } -/** @internal Handle aliases of local node. +/** @internal Handle aliases of local node. * * Return true if @a url is modified. */ @@ -2687,7 +2687,7 @@ agent->sa_stats->as_recv_msg++; agent->sa_stats->as_recv_response++; - SU_DEBUG_5(("nta: received %03d %s for %s (%u)\n", + SU_DEBUG_5(("nta: received %03d %s for %s (%u)\n", status, phrase, method, cseq)); if (agent->sa_drop_prob && !tport_is_reliable(tport)) { @@ -2705,7 +2705,7 @@ else errors = sip->sip_error != NULL; - if (errors || + if (errors || sip_sanity_check(sip) < 0) { sip_header_t const *h; @@ -2750,7 +2750,7 @@ /* XXX - should check if msg should be discarded based on via? */ if ((orq = outgoing_find(agent, msg, sip, sip->sip_via))) { - SU_DEBUG_5(("nta: %03d %s %s\n", + SU_DEBUG_5(("nta: %03d %s %s\n", status, phrase, "is going to a transaction")); if (outgoing_recv(orq, status, msg, sip) == 0) return; @@ -2759,7 +2759,7 @@ agent->sa_stats->as_trless_response++; if ((orq = agent->sa_default_outgoing)) { - SU_DEBUG_5(("nta: %03d %s %s\n", status, phrase, + SU_DEBUG_5(("nta: %03d %s %s\n", status, phrase, "to the default transaction")); outgoing_default_recv(orq, status, msg, sip); return; @@ -2778,7 +2778,7 @@ && 200 <= sip->sip_status->st_status && sip->sip_status->st_status < 300 /* Exactly one Via header, belonging to us */ - && sip->sip_via && !sip->sip_via->v_next + && sip->sip_via && !sip->sip_via->v_next && agent_has_via(agent, sip->sip_via)) { agent->sa_stats->as_trless_200++; #if nomore /* sf.net bug #1750691. Let UAS to cope with it. */ @@ -2867,7 +2867,7 @@ /** Check if the headers are from response generated locally by NTA. */ int nta_sip_is_internal(sip_t const *sip) { - return + return sip == NULL /* No message generated */ || (sip->sip_flags & NTA_INTERNAL_MSG) == NTA_INTERNAL_MSG; } @@ -2878,7 +2878,7 @@ return msg_get_flags(msg, NTA_INTERNAL_MSG) == NTA_INTERNAL_MSG; } -/** Check if the message is internally generated by NTA. +/** Check if the message is internally generated by NTA. * * @deprecated Use nta_msg_is_internal() instead */ @@ -2887,7 +2887,7 @@ /* ====================================================================== */ /* 5) Stateless operation */ -/**Forward a request or response message. +/**Forward a request or response message. * * @note * The ownership of @a msg is taken over by the function even if the @@ -2907,8 +2907,8 @@ return -1; } - what = - sip->sip_status ? "nta_msg_tsend(response)" : + what = + sip->sip_status ? "nta_msg_tsend(response)" : sip->sip_request ? "nta_msg_tsend(request)" : "nta_msg_tsend()"; @@ -2932,7 +2932,7 @@ /* NTATAG_INCOMPLETE_REF(incomplete), */ TAG_END()); - if (!sip->sip_separator && + if (!sip->sip_separator && !(sip->sip_separator = sip_separator_create(msg_home(msg)))) SU_DEBUG_3(("%s: cannot create sip_separator\n", what)); else if (msg_serialize(msg, (msg_pub_t *)sip) != 0) @@ -2967,7 +2967,7 @@ } else { /* Send request */ - if (outgoing_create(agent, NULL, NULL, u, NULL, msg_ref_create(msg), + if (outgoing_create(agent, NULL, NULL, u, NULL, msg_ref_create(msg), NTATAG_STATELESS(1), ta_tags(ta))) retval = 0; @@ -3127,7 +3127,7 @@ } } - if (tport_tsend(tport, reply, tpn, + if (tport_tsend(tport, reply, tpn, IF_SIGCOMP_TPTAG_COMPARTMENT(cc) TPTAG_MTU(INT_MAX), TPTAG_SDWN_AFTER(sdwn_after), @@ -3151,8 +3151,8 @@ /** Add headers from the request to the response message. */ static -int complete_response(msg_t *response, - int status, char const *phrase, +int complete_response(msg_t *response, + int status, char const *phrase, msg_t *request) { su_home_t *home = msg_home(response); @@ -3173,7 +3173,7 @@ if (!response_sip->sip_to) response_sip->sip_to = sip_to_dup(home, request_sip->sip_to); if (!response_sip->sip_call_id) - response_sip->sip_call_id = + response_sip->sip_call_id = sip_call_id_dup(home, request_sip->sip_call_id); if (!response_sip->sip_cseq) response_sip->sip_cseq = sip_cseq_dup(home, request_sip->sip_cseq); @@ -3252,7 +3252,7 @@ /* Append r-uri */ *sip_route_init(r0)->r_url = *ruri->us_url; r->r_next = sip_route_dup(home, r0); - + /* Use topmost route as request-uri */ ruri = (url_string_t const *)route->r_url; route = route->r_next; @@ -3292,7 +3292,7 @@ else msg_header_insert(bmsg, (msg_pub_t *)bsip, (msg_header_t *)rq); - if (!(bye = nta_outgoing_mcreate(agent, NULL, NULL, NULL, bmsg, + if (!(bye = nta_outgoing_mcreate(agent, NULL, NULL, NULL, bmsg, NTATAG_STATELESS(1), TAG_END()))) goto err; @@ -3374,7 +3374,7 @@ request_uri = (url_string_t *)sip->sip_request->rq_url; to = sip->sip_to ? sip->sip_to : leg->leg_remote; - + if (!request_uri && to) { if (method != sip_method_register) request_uri = (url_string_t *)to->a_url; @@ -3391,7 +3391,7 @@ if (method || method_name) { sip_request_t *rq = sip->sip_request; - int use_headers = + int use_headers = request_uri == original || (url_t *)request_uri == rq->rq_url; if (!rq @@ -3406,11 +3406,11 @@ return -1; } - /* @RFC3261 table 1 (page 152): - * Req-URI cannot contain method parameter or headers + /* @RFC3261 table 1 (page 152): + * Req-URI cannot contain method parameter or headers */ if (rq->rq_url->url_params) { - rq->rq_url->url_params = + rq->rq_url->url_params = url_strip_param_string((char *)rq->rq_url->url_params, "method"); sip_fragment_clear(rq->rq_common); } @@ -3466,10 +3466,10 @@ method_name = sip->sip_request->rq_method_name; if (!leg->leg_id && sip->sip_cseq) - seq = sip->sip_cseq->cs_seq; + seq = sip->sip_cseq->cs_seq; else if (method == sip_method_ack || method == sip_method_cancel) /* Dangerous - we may do PRACK/UPDATE meanwhile */ - seq = sip->sip_cseq ? sip->sip_cseq->cs_seq : leg->leg_seq; + seq = sip->sip_cseq ? sip->sip_cseq->cs_seq : leg->leg_seq; else if (leg->leg_seq) seq = ++leg->leg_seq; else if (sip->sip_cseq) /* Obtain initial value from existing CSeq header */ @@ -3484,10 +3484,10 @@ sip->sip_call_id = sip_call_id_create(home, NULL); } - if ((!sip->sip_cseq || + if ((!sip->sip_cseq || seq != sip->sip_cseq->cs_seq || method != sip->sip_cseq->cs_method || - (method == sip_method_unknown && + (method == sip_method_unknown && strcmp(method_name, sip->sip_cseq->cs_method_name) != 0)) && (!(cseq = sip_cseq_create(home, seq, method, method_name)) || msg_header_insert(msg, (msg_pub_t *)sip, (msg_header_t *)cseq) < 0)) @@ -3576,7 +3576,7 @@ * nta_leg_client_route(), nta_leg_server_route(), * nta_leg_destroy(), nta_outgoing_tcreate(), and nta_request_f(). * - * @TAGS + * @TAGS * NTATAG_NO_DIALOG(), NTATAG_STATELESS(), NTATAG_METHOD(), * URLTAG_URL(), SIPTAG_CALL_ID(), SIPTAG_CALL_ID_STR(), SIPTAG_FROM(), * SIPTAG_FROM_STR(), SIPTAG_TO(), SIPTAG_TO_STR(), SIPTAG_ROUTE(), @@ -3648,7 +3648,7 @@ if (from) { /* Now this is kludge */ - leg->leg_local_is_to = sip_is_to((sip_header_t*)from); + leg->leg_local_is_to = sip_is_to((sip_header_t*)from); leg->leg_local = sip_to_dup(home, from); } else if (from_str) @@ -3682,7 +3682,7 @@ url_t *changed = url_hdup(home, url); su_free(home, url); url = changed; - } + } leg->leg_rseq = rseq; leg->leg_seq = seq; @@ -3716,7 +3716,7 @@ what = "Missing local dialog address"; else if (leg->leg_local) what = "Missing remote dialog address"; - else + else what = "Missing dialog addresses"; goto err; } @@ -3909,7 +3909,7 @@ * @param leg leg to be tagged * @param tag tag to be added (if NULL, a tag generated by @b NTA is added) * - * @return + * @return * Pointer to tag if successful, NULL otherwise. */ char const *nta_leg_tag(nta_leg_t *leg, char const *tag) @@ -3920,7 +3920,7 @@ if (tag && strchr(tag, '=')) tag = strchr(tag, '=') + 1; - /* If there already is a tag, + /* If there already is a tag, return NULL if it does not match with new one */ if (leg->leg_local->a_tag) { if (!tag && str0casecmp(tag, leg->leg_local->a_tag)) @@ -3928,7 +3928,7 @@ else return leg->leg_local->a_tag; } - + if (tag) { if (sip_to_tag(leg->leg_home, leg->leg_local, tag) < 0) return NULL; @@ -3957,12 +3957,12 @@ /** Add a remote tag to the leg. * - * @note No remote tag is ever generated. + * @note No remote tag is ever generated. * * @param leg leg to be tagged * @param tag tag to be added (@b must be non-NULL) * - * @return + * @return * Pointer to tag if successful, NULL otherwise. */ char const *nta_leg_rtag(nta_leg_t *leg, char const *tag) @@ -3975,7 +3975,7 @@ if (leg && leg->leg_remote) return leg->leg_remote->a_tag; - else + else return NULL; } @@ -4023,8 +4023,8 @@ } /** Return route components. */ -int nta_leg_get_route(nta_leg_t *leg, - sip_route_t const **return_route, +int nta_leg_get_route(nta_leg_t *leg, + sip_route_t const **return_route, sip_contact_t const **return_target) { if (!leg) @@ -4054,12 +4054,12 @@ return NULL; if (!leg->leg_dialog || !leg->leg_local || !leg->leg_remote || !leg->leg_id) return NULL; - + from_tag = leg->leg_local->a_tag; if (!from_tag) from_tag = "0"; to_tag = leg->leg_remote->a_tag; if (!to_tag) to_tag = "0"; return sip_replaces_format(home, "%s;from-tag=%s;to-tag=%s%s", - leg->leg_id->i_id, from_tag, to_tag, + leg->leg_id->i_id, from_tag, to_tag, early_only ? ";early-only" : ""); } @@ -4257,8 +4257,8 @@ * @param request_uri if non-NULL, and there is destination URI * associated with the dialog, these URIs must match * @param call_id if non-NULL, must match with @CallID header contents - * @param remote_tag if there is remote tag - * associated with dialog, @a remote_tag must match + * @param remote_tag if there is remote tag + * associated with dialog, @a remote_tag must match * @param remote_uri ignored * @param local_tag if non-NULL and there is local tag associated with leg, * it must math @@ -4290,7 +4290,7 @@ else if (URL_IS_STRING(request_uri)) { /* accept a string as URL */ to_be_freed = url = url_hdup(NULL, request_uri); - } + } else { *url0 = *request_uri, url = url0; } @@ -4305,10 +4305,10 @@ if (local_tag && local_tag[0] == '\0') local_tag = NULL; - leg = leg_find(agent, - NULL, url, - call_id, - remote_tag, + leg = leg_find(agent, + NULL, url, + call_id, + remote_tag, local_tag); if (to_be_freed) su_free(NULL, to_be_freed); @@ -4581,8 +4581,8 @@ HTABLE_BODIES_WITH(incoming_htable, iht, nta_incoming_t, HTABLE_HASH_IRQ, size_t, hash_value_t); -static void incoming_insert(nta_agent_t *agent, - incoming_queue_t *queue, +static void incoming_insert(nta_agent_t *agent, + incoming_queue_t *queue, nta_incoming_t *irq); su_inline int incoming_is_queued(nta_incoming_t const *irq); @@ -4602,14 +4602,14 @@ su_inline int incoming_final_failed(nta_incoming_t *irq, msg_t *); static void incoming_retransmit_reply(nta_incoming_t *irq, tport_t *tport); -/** Create a default server transaction. +/** Create a default server transaction. * * The default server transaction is used by a proxy to forward responses * statelessly. * * @param agent pointer to agent object * - * @retval pointer to default server transaction object + * @retval pointer to default server transaction object * @retval NULL if failed */ nta_incoming_t *nta_incoming_default(nta_agent_t *agent) @@ -4639,11 +4639,11 @@ irq->irq_default = 1; agent->sa_default_incoming = irq; - + return irq; } -/** Create a server transaction. +/** Create a server transaction. * * Create a server transaction for a request message. This function is used * when an element processing requests statelessly wants to process a @@ -4660,10 +4660,10 @@ * function fails. * * @TAGS - * @TAG NTATAG_TPORT() specifies the transport used to receive the request + * @TAG NTATAG_TPORT() specifies the transport used to receive the request * and also default transport for sending the response. * - * @retval nta_incoming_t pointer to the newly created server transaction + * @retval nta_incoming_t pointer to the newly created server transaction * @retval NULL if failed */ nta_incoming_t *nta_incoming_create(nta_agent_t *agent, @@ -4690,9 +4690,9 @@ return msg_destroy(msg), NULL; ta_start(ta, tag, value); - - tl_gets(ta_args(ta), - NTATAG_TPORT_REF(tport), + + tl_gets(ta_args(ta), + NTATAG_TPORT_REF(tport), TAG_END()); ta_end(ta); @@ -4727,7 +4727,7 @@ incoming_queue_t *queue; sip_method_t method = sip->sip_request->rq_method; - irq->irq_request = msg; + irq->irq_request = msg; irq->irq_home = home = msg_home(msg_ref_create(msg)); irq->irq_agent = agent; @@ -4751,7 +4751,7 @@ case sip_method_publish: break; default: - irq->irq_record_route = + irq->irq_record_route = sip_record_route_copy(home, sip->sip_record_route); } irq->irq_branch = sip->sip_via->v_branch; @@ -4807,7 +4807,7 @@ else { queue = agent->sa_in.completed; /* Timer J */ } - } + } else { queue = agent->sa_in.proceeding; /* RFC 4320 (nit-actions-03): @@ -4822,7 +4822,7 @@ period of time in which Timer E reaches T2 had this been a UDP hop is one reasonable compromise. - */ + */ if (agent->sa_extra_100 && irq->irq_reliable_tp) incoming_set_timer(irq, agent->sa_t2 / 2); /* T2 / 2 */ @@ -4841,7 +4841,7 @@ * Insert incoming transaction to hash table. */ static void -incoming_insert(nta_agent_t *agent, +incoming_insert(nta_agent_t *agent, incoming_queue_t *queue, nta_incoming_t *irq) { @@ -4867,8 +4867,8 @@ char const *method_name = sip->sip_request->rq_method_name; /* RFC-3261 section 12.2.2 (page 76) */ - if (leg->leg_dialog && - irq->irq_agent->sa_is_a_uas && + if (leg->leg_dialog && + irq->irq_agent->sa_is_a_uas && method != sip_method_ack) { uint32_t seq = sip->sip_cseq->cs_seq; @@ -4920,8 +4920,8 @@ /** Change the timeout value of a queue */ static void -incoming_queue_adjust(nta_agent_t *sa, - incoming_queue_t *queue, +incoming_queue_adjust(nta_agent_t *sa, + incoming_queue_t *queue, uint32_t timeout) { nta_incoming_t *irq; @@ -4950,13 +4950,13 @@ } /** @internal - * Insert an incoming transaction into a queue. + * Insert an incoming transaction into a queue. * * Insert a server transaction into a queue, and sets the corresponding * timeout at the same time. */ su_inline -void incoming_queue(incoming_queue_t *queue, +void incoming_queue(incoming_queue_t *queue, nta_incoming_t *irq) { if (irq->irq_queue == queue) { @@ -4972,7 +4972,7 @@ irq->irq_timeout = set_timeout(irq->irq_agent, queue->q_timeout); irq->irq_queue = queue; - irq->irq_prev = queue->q_tail; + irq->irq_prev = queue->q_tail; *queue->q_tail = irq; queue->q_tail = &irq->irq_next; queue->q_length++; @@ -5003,7 +5003,7 @@ void incoming_set_timer(nta_incoming_t *irq, uint32_t interval) { nta_incoming_t **rq; - + assert(irq); if (interval == 0) { @@ -5012,7 +5012,7 @@ } if (irq->irq_rprev) { - if ((*irq->irq_rprev = irq->irq_rnext)) + if ((*irq->irq_rprev = irq->irq_rnext)) irq->irq_rnext->irq_rprev = irq->irq_rprev; if (irq->irq_agent->sa_in.re_t1 == &irq->irq_rnext) irq->irq_agent->sa_in.re_t1 = irq->irq_rprev; @@ -5044,12 +5044,12 @@ void incoming_reset_timer(nta_incoming_t *irq) { if (irq->irq_rprev) { - if ((*irq->irq_rprev = irq->irq_rnext)) + if ((*irq->irq_rprev = irq->irq_rnext)) irq->irq_rnext->irq_rprev = irq->irq_rprev; if (irq->irq_agent->sa_in.re_t1 == &irq->irq_rnext) irq->irq_agent->sa_in.re_t1 = irq->irq_rprev; irq->irq_agent->sa_in.re_length--; - } + } irq->irq_interval = 0, irq->irq_retry = 0; irq->irq_rnext = NULL, irq->irq_rprev = NULL; @@ -5121,11 +5121,11 @@ su_free(home, irq); - msg_destroy((msg_t *)home); + msg_destroy((msg_t *)home); } /** Queue request to be freed */ -su_inline +su_inline void incoming_free_queue(incoming_queue_t *q, nta_incoming_t *irq) { incoming_cut_off(irq); @@ -5133,7 +5133,7 @@ } /** Reclaim memory used by queue of requests */ -static +static void incoming_reclaim_queued(su_root_magic_t *rm, su_msg_r msg, union sm_arg_u *u) @@ -5322,7 +5322,7 @@ return irq && irq->irq_callback == callback ? irq->irq_magic : NULL; } -/** When received. +/** When received. * * Return timestamp from the reception of the initial request. * @@ -5395,15 +5395,15 @@ continue; if (is_uas_ack && - irq->irq_method == sip_method_invite && + irq->irq_method == sip_method_invite && 200 <= irq->irq_status && irq->irq_status < 300 && str0casecmp(irq->irq_tag, to->a_tag) == 0) { *return_ack = irq; - return NULL; + return NULL; } if (magic_branch) { - /* RFC3261 17.2.3: + /* RFC3261 17.2.3: * * The request matches a transaction if branch and sent-by in topmost * the method of the request matches the one that created the @@ -5415,8 +5415,8 @@ strcasecmp(irq->irq_via->v_branch + 7, magic_branch) == 0 && strcasecmp(irq->irq_via->v_host, v->v_host) == 0 && str0cmp(irq->irq_via->v_port, v->v_port) == 0) { - if (irq->irq_method == cseq->cs_method && - strcmp(irq->irq_cseq->cs_method_name, + if (irq->irq_method == cseq->cs_method && + strcmp(irq->irq_cseq->cs_method_name, cseq->cs_method_name) == 0) return irq; if (return_ack && irq->irq_method == sip_method_invite) @@ -5428,8 +5428,8 @@ else { /* No magic branch */ - /* INVITE request matches a transaction if - the Request-URI, To tag, From tag, Call-ID, CSeq, and + /* INVITE request matches a transaction if + the Request-URI, To tag, From tag, Call-ID, CSeq, and top Via header match */ /* From tag, Call-ID, and CSeq number has been matched above */ @@ -5445,7 +5445,7 @@ else { /* Match CSeq */ if (irq->irq_method == cseq->cs_method && - strcmp(irq->irq_cseq->cs_method_name, + strcmp(irq->irq_cseq->cs_method_name, cseq->cs_method_name) == 0) { /* Match To tag */ if (!str0casecmp(irq->irq_to->a_tag, to->a_tag)) @@ -5462,12 +5462,12 @@ else if (return_cancel && irq->irq_method != sip_method_ack) return *return_cancel = irq, NULL; } - } + } /* RFC3261 - section 8.2.2.2 Merged Requests */ if (return_merge) { - if (irq->irq_cseq->cs_method == cseq->cs_method && - strcmp(irq->irq_cseq->cs_method_name, + if (irq->irq_cseq->cs_method == cseq->cs_method && + strcmp(irq->irq_cseq->cs_method_name, cseq->cs_method_name) == 0) *return_merge = irq, return_merge = NULL; } @@ -5478,7 +5478,7 @@ /** Process retransmitted requests. */ su_inline -int +int incoming_recv(nta_incoming_t *irq, msg_t *msg, sip_t *sip, tport_t *tport) { nta_agent_t *agent = irq->irq_agent; @@ -5543,7 +5543,7 @@ } else if (irq->irq_queue == agent->sa_in.proceeding || irq->irq_queue == agent->sa_in.preliminary) return -1; - else + else assert(irq->irq_queue == agent->sa_in.inv_confirmed || irq->irq_queue == agent->sa_in.terminated); @@ -5560,7 +5560,7 @@ nta_agent_t *agent = irq->irq_agent; /* According to the RFC 3261, this INVITE has been destroyed */ - if (irq->irq_method == sip_method_invite && + if (irq->irq_method == sip_method_invite && 200 <= irq->irq_status && irq->irq_status < 300) { mreply(agent, NULL, SIP_481_NO_TRANSACTION, msg, tport, 0, 0, NULL, @@ -5600,7 +5600,7 @@ /** Merge request */ static -void request_merge(nta_agent_t *agent, +void request_merge(nta_agent_t *agent, msg_t *msg, sip_t *sip, tport_t *tport, char const *to_tag) { @@ -5671,7 +5671,7 @@ tag_type_t tag, tag_value_t value, ...) { int retval = -1; - + if (irq) { ta_list ta; ta_start(ta, tag, value); @@ -5698,15 +5698,15 @@ return retval; for (t = tags; t; t = tl_next(t)) { - tag_type_t tt = t->t_tag; + tag_type_t tt = t->t_tag; - if (ntatag_comp == tt) + if (ntatag_comp == tt) comp = (char const *)t->t_value, retval++; else if (ntatag_sigcomp_close == tt) irq->irq_sigcomp_zap = t->t_value != 0, retval++; - else if (tptag_compartment == tt) + else if (tptag_compartment == tt) cc = (void *)t->t_value, retval++; } @@ -5725,7 +5725,7 @@ irq->irq_tpn->tpn_comp = NULL; } - return retval; + return retval; } su_inline @@ -5735,17 +5735,17 @@ if (!nta_compressor_vtable) return 0; - if (irq->irq_cc == NULL + if (irq->irq_cc == NULL || irq->irq_tpn->tpn_comp || tport_delivered_with_comp(tport, msg, NULL) != -1) { struct sigcomp_compartment *cc; cc = agent_compression_compartment(irq->irq_agent, tport, irq->irq_tpn, create_if_needed); - + if (cc) agent_accept_compressed(irq->irq_agent, msg, cc); - + irq->irq_cc = cc; } @@ -5753,7 +5753,7 @@ } /** Add essential headers to the response message */ -static int nta_incoming_response_headers(nta_incoming_t *irq, +static int nta_incoming_response_headers(nta_incoming_t *irq, msg_t *msg, sip_t *sip) { @@ -5789,13 +5789,13 @@ * @param tag,value,... taged argument list * * Generate status structure based on @a status and @a phrase. - * Add essential headers to the response message: - * @From, @To, @CallID, @CSeq, @Via, and optionally + * Add essential headers to the response message: + * @From, @To, @CallID, @CSeq, @Via, and optionally * @RecordRoute. */ int nta_incoming_complete_response(nta_incoming_t *irq, msg_t *msg, - int status, + int status, char const *phrase, tag_type_t tag, tag_value_t value, ...) { @@ -5866,7 +5866,7 @@ if (nta_incoming_response_headers(irq, msg, sip) < 0) msg_destroy(msg), msg = NULL; } - + return msg; } @@ -5932,7 +5932,7 @@ * @retval 0 when succesful * @retval -1 upon an error */ -int nta_incoming_mreply(nta_incoming_t *irq, msg_t *msg) +int nta_incoming_mreply(nta_incoming_t *irq, msg_t *msg) { sip_t *sip = sip_object(msg); @@ -5998,12 +5998,12 @@ int retry_without_rport = 0; tp_name_t *tpn, default_tpn[1]; - if (status == 408 && - irq->irq_method != sip_method_invite && + if (status == 408 && + irq->irq_method != sip_method_invite && !agent->sa_pass_408 && !irq->irq_default) { /* RFC 4320 nit-actions-03 Action 2: - + A transaction-stateful SIP element MUST NOT send a response with Status-Code of 408 to a non-INVITE request. As a consequence, an element that can not respond before the transaction expires will not @@ -6063,7 +6063,7 @@ SU_DEBUG_5(("%s: tport_tsend: %s%s\n", __func__, su_strerror(err), err == EPIPE ? "(retrying)" : "")); - + if (err != EPIPE && err != ECONNREFUSED) break; tport_decref(&irq->irq_tport); @@ -6099,13 +6099,13 @@ if (status < 200) { queue = agent->sa_in.proceeding; - - if (irq->irq_method == sip_method_invite && status > 100 && + + if (irq->irq_method == sip_method_invite && status > 100 && agent->sa_progress != UINT_MAX && agent->sa_is_a_uas) { /* Retransmit preliminary responses in regular intervals */ incoming_set_timer(irq, agent->sa_progress); /* N2 */ } - } + } else { irq->irq_completed = 1; @@ -6126,7 +6126,7 @@ tport_decref(&irq->irq_tport); } else if (status >= 300 || agent->sa_is_a_uas) { - if (status < 300 || !irq->irq_reliable_tp) + if (status < 300 || !irq->irq_reliable_tp) incoming_set_timer(irq, agent->sa_t1); /* G */ queue = agent->sa_in.inv_completed; /* H */ } @@ -6175,7 +6175,7 @@ } /* We could not send final response. */ - return incoming_final_failed(irq, msg); + return incoming_final_failed(irq, msg); } @@ -6213,20 +6213,20 @@ msg = reliable_response(irq); else msg = irq->irq_response; - + if (msg && tport) { irq->irq_retries++; if (irq->irq_retries == 2 && irq->irq_tpn->tpn_comp) { irq->irq_tpn->tpn_comp = NULL; - + if (irq->irq_cc) { agent_close_compressor(irq->irq_agent, irq->irq_cc); nta_compartment_decref(&irq->irq_cc); } } - tport = tport_tsend(tport, msg, irq->irq_tpn, + tport = tport_tsend(tport, msg, irq->irq_tpn, IF_SIGCOMP_TPTAG_COMPARTMENT(irq->irq_cc) TPTAG_MTU(INT_MAX), TAG_END()); irq->irq_agent->sa_stats->as_sent_msg++; @@ -6263,11 +6263,11 @@ uint32_t now = sa->sa_millisec; nta_incoming_t *irq, *irq_next; size_t retransmitted = 0, timeout = 0, terminated = 0, destroyed = 0; - size_t unconfirmed = - sa->sa_in.inv_completed->q_length + + size_t unconfirmed = + sa->sa_in.inv_completed->q_length + sa->sa_in.preliminary->q_length; - size_t unterminated = - sa->sa_in.inv_confirmed->q_length + + size_t unterminated = + sa->sa_in.inv_confirmed->q_length + sa->sa_in.completed->q_length; size_t total = sa->sa_incoming->iht_used; @@ -6297,7 +6297,7 @@ incoming_set_timer(irq, 2U * irq->irq_interval); /* G */ else incoming_set_timer(irq, sa->sa_t2); /* G */ - } + } else if (irq->irq_method == sip_method_invite && irq->irq_status >= 100) { if (irq->irq_queue == sa->sa_in.preliminary) { /* Timer P1 - PRACK timer */ @@ -6352,7 +6352,7 @@ } /* Timeouts. - * For each state the request is in, there is always a queue of its own + * For each state the request is in, there is always a queue of its own */ while ((irq = sa->sa_in.preliminary->q_head)) { assert(irq->irq_status < 200); @@ -6379,7 +6379,7 @@ assert(irq->irq_method == sip_method_invite); if ((int32_t)(irq->irq_timeout - now) > 0 || - timeout >= timer_max_timeout || + timeout >= timer_max_timeout || terminated >= timer_max_terminate) break; @@ -6390,7 +6390,7 @@ irq->irq_terminated = 1; incoming_reset_timer(irq); if (!irq->irq_destroyed) { - timeout++; + timeout++; incoming_queue(sa->sa_in.terminated, irq); /* report timeout error to user */ incoming_call_callback(irq, NULL, NULL); @@ -6399,7 +6399,7 @@ terminated++; incoming_free_queue(rq, irq); } - } + } while ((irq = sa->sa_in.inv_confirmed->q_head)) { assert(irq->irq_timeout); @@ -6409,7 +6409,7 @@ if ((int32_t)(irq->irq_timeout - now) > 0 || terminated >= timer_max_terminate) break; - + /* Timer I */ SU_DEBUG_5(("nta: timer %s fired, %s %u response\n", "I", "terminate", irq->irq_status)); @@ -6460,9 +6460,9 @@ MOD_ZU"/"MOD_ZU" tout, " MOD_ZU"/"MOD_ZU" term, " MOD_ZU"/"MOD_ZU" free\n", - retransmitted, unconfirmed, + retransmitted, unconfirmed, timeout, unconfirmed, - terminated, unterminated, + terminated, unterminated, destroyed, total)); } @@ -6486,8 +6486,8 @@ if (su_msg_send(m) == SU_SUCCESS) q->q_length = 0; - } - } + } + } if (q->q_length > 0) incoming_reclaim_queued(NULL, NULL, (void *)q); @@ -6513,25 +6513,25 @@ static void outgoing_try_udp_instead(nta_outgoing_t *orq); static void outgoing_tport_error(nta_agent_t *agent, nta_outgoing_t *orq, tport_t *tp, msg_t *msg, int error); -static void outgoing_print_tport_error(nta_outgoing_t *orq, +static void outgoing_print_tport_error(nta_outgoing_t *orq, int level, char *todo, tp_name_t const *, msg_t *, int error); static void outgoing_insert(nta_agent_t *sa, nta_outgoing_t *orq); static void outgoing_destroy(nta_outgoing_t *orq); su_inline int outgoing_is_queued(nta_outgoing_t const *orq); -su_inline void outgoing_queue(outgoing_queue_t *queue, +su_inline void outgoing_queue(outgoing_queue_t *queue, nta_outgoing_t *orq); su_inline void outgoing_remove(nta_outgoing_t *orq); su_inline void outgoing_set_timer(nta_outgoing_t *orq, uint32_t interval); su_inline void outgoing_reset_timer(nta_outgoing_t *orq); -static size_t outgoing_timer_dk(outgoing_queue_t *q, - char const *timer, +static size_t outgoing_timer_dk(outgoing_queue_t *q, + char const *timer, uint32_t now); -static size_t outgoing_timer_bf(outgoing_queue_t *q, - char const *timer, +static size_t outgoing_timer_bf(outgoing_queue_t *q, + char const *timer, uint32_t now); -static size_t outgoing_timer_c(outgoing_queue_t *q, - char const *timer, +static size_t outgoing_timer_c(outgoing_queue_t *q, + char const *timer, uint32_t now); static void outgoing_ack(nta_outgoing_t *orq, sip_t *sip); @@ -6563,13 +6563,13 @@ static int outgoing_try_another(nta_outgoing_t *orq); #else #define outgoing_other_destinations(orq) (0) -#define outgoing_try_another(orq) (0) +#define outgoing_try_another(orq) (0) #endif /** Create a default outgoing transaction. * * The default outgoing transaction is used when agent receives responses - * not belonging to any transaction. + * not belonging to any transaction. * * @sa nta_leg_default(), nta_incoming_default(). */ @@ -6588,7 +6588,7 @@ orq = su_zalloc(agent->sa_home, sizeof *orq); if (!orq) return NULL; - + orq->orq_agent = agent; orq->orq_callback = callback; orq->orq_magic = magic; @@ -6637,7 +6637,7 @@ * NTATAG_STATELESS(), NTATAG_DELAY_SENDING(), NTATAG_BRANCH_KEY(), * NTATAG_ACK_BRANCH(), NTATAG_DEFAULT_PROXY(), NTATAG_PASS_100(), * NTATAG_USE_TIMESTAMP(), NTATAG_USER_VIA(), TPTAG_IDENT(), NTATAG_TPORT(). All - * SIP tags from can be used to manipulate the request message. + * SIP tags from can be used to manipulate the request message. * SIP tags after SIPTAG_END() are ignored, however. */ nta_outgoing_t *nta_outgoing_tcreate(nta_leg_t *leg, @@ -6710,7 +6710,7 @@ * Returns a pointer to newly created outgoing transaction object if * successful, and NULL otherwise. * - * @note The caller is responsible for destroying the request message @a msg + * @note The caller is responsible for destroying the request message @a msg * upon failure. * * @note If NTATAG_STATELESS(1) tag is given and the @a callback is NULL, @@ -6725,7 +6725,7 @@ * NTATAG_STATELESS(), NTATAG_DELAY_SENDING(), NTATAG_BRANCH_KEY(), * NTATAG_ACK_BRANCH(), NTATAG_DEFAULT_PROXY(), NTATAG_PASS_100(), * NTATAG_USE_TIMESTAMP(), NTATAG_USER_VIA(), TPTAG_IDENT(), NTATAG_TPORT(). All - * SIP tags from can be used to manipulate the request message. + * SIP tags from can be used to manipulate the request message. * SIP tags after SIPTAG_END() are ignored, however. */ nta_outgoing_t *nta_outgoing_mcreate(nta_agent_t *agent, @@ -6836,8 +6836,8 @@ ta_start(ta, tag, value); - tl_gets(ta_args(ta), - NTATAG_CANCEL_408_REF(cancel_408), + tl_gets(ta_args(ta), + NTATAG_CANCEL_408_REF(cancel_408), NTATAG_CANCEL_2543_REF(cancel_2543), TAG_END()); @@ -6848,7 +6848,7 @@ ta_end(ta); - if ((cancel_2543 || cancel_408) && + if ((cancel_2543 || cancel_408) && !orq->orq_stateless && !orq->orq_destroyed) outgoing_reply(orq, SIP_487_REQUEST_CANCELLED, 1); @@ -6880,7 +6880,7 @@ * * @param orq outgoing client transaction * @param callback callback function (may be NULL) - * @param magic application context pointer + * @param magic application context pointer * (given as argument to @a callback) * * @NEW_1_12_9 @@ -6912,7 +6912,7 @@ return; if (orq->orq_destroyed) { - SU_DEBUG_1(("%s(%p): %s\n", "nta_outgoing_destroy", (void *)orq, + SU_DEBUG_1(("%s(%p): %s\n", "nta_outgoing_destroy", (void *)orq, "already destroyed")); return; } @@ -6948,7 +6948,7 @@ */ uint32_t nta_outgoing_cseq(nta_outgoing_t const *orq) { - return orq != NULL && orq != NONE && orq->orq_cseq + return orq != NULL && orq != NONE && orq->orq_cseq ? orq->orq_cseq->cs_seq : 0; } @@ -6958,7 +6958,7 @@ int nta_outgoing_status(nta_outgoing_t const *orq) { /* Return 500 Internal server error for invalid handles. */ - return orq != NULL && orq != NONE ? orq->orq_status : 500; + return orq != NULL && orq != NONE ? orq->orq_status : 500; } /** Get the RTT delay measured using @Timestamp header. */ @@ -7028,7 +7028,7 @@ * @param route_url optional URL used to route transaction requests * @param msg request message * @param tpn (optional) transport name - * @param msg request message to + * @param msg request message to * @param tag, value, ... tagged arguments * * @return @@ -7106,24 +7106,24 @@ /* tl_gets() is a bit too slow here... */ for (t = ta_args(ta); t; t = tl_next(t)) { - tag_type_t tt = t->t_tag; + tag_type_t tt = t->t_tag; - if (ntatag_stateless == tt) - stateless = t->t_value != 0; - else if (ntatag_delay_sending == tt) - delay_sending = t->t_value != 0; - else if (ntatag_branch_key == tt) - branch = (void *)t->t_value; - else if (ntatag_pass_100 == tt) - pass_100 = t->t_value != 0; - else if (ntatag_use_timestamp == tt) - use_timestamp = t->t_value != 0; - else if (ntatag_user_via == tt) - user_via = t->t_value != 0; - else if (ntatag_ack_branch == tt) - ack_branch = (void *)t->t_value; - else if (ntatag_default_proxy == tt) - route_url = (void *)t->t_value; + if (ntatag_stateless == tt) + stateless = t->t_value != 0; + else if (ntatag_delay_sending == tt) + delay_sending = t->t_value != 0; + else if (ntatag_branch_key == tt) + branch = (void *)t->t_value; + else if (ntatag_pass_100 == tt) + pass_100 = t->t_value != 0; + else if (ntatag_use_timestamp == tt) + use_timestamp = t->t_value != 0; + else if (ntatag_user_via == tt) + user_via = t->t_value != 0; + else if (ntatag_ack_branch == tt) + ack_branch = (void *)t->t_value; + else if (ntatag_default_proxy == tt) + route_url = (void *)t->t_value; else if (tptag_ident == tt) tp_ident = (void *)t->t_value; else if (ntatag_comp == tt) @@ -7182,7 +7182,7 @@ invalid = nta_tpn_by_url(home, orq->orq_tpn, &scheme, &port, route_url); if (override_tport) { /* Use transport protocol name from transport */ - if (strcmp(orq->orq_tpn->tpn_proto, "*") == 0) + if (strcmp(orq->orq_tpn->tpn_proto, "*") == 0) orq->orq_tpn->tpn_proto = tport_name(override_tport)->tpn_proto; } @@ -7244,7 +7244,7 @@ orq->orq_branch = su_strdup(home, ack_branch); else orq->orq_branch = su_sprintf(home, "branch=%s", ack_branch); - } + } else if (!stateless && agent->sa_is_a_uas) { /* * ACK redirect further 2XX messages to it. @@ -7252,14 +7252,14 @@ * Use orq_branch from INVITE, but put a different branch in topmost Via. */ nta_outgoing_t *invite = outgoing_find(agent, msg, sip, NULL); - + if (invite) { sip_t const *inv = sip_object(invite->orq_request); orq->orq_branch = su_strdup(home, invite->orq_branch); /* @RFC3261 section 13.2.2.4 - - * The ACK MUST contain the same credentials as the INVITE. + * The ACK MUST contain the same credentials as the INVITE. */ if (!sip->sip_proxy_authorization && !sip->sip_authorization) { if (inv->sip_proxy_authorization) @@ -7297,7 +7297,7 @@ agent->sa_stats->as_client_tr++; orq->orq_hash = NTA_HASH(sip->sip_call_id, sip->sip_cseq->cs_seq); - if (orq->orq_user_tport) + if (orq->orq_user_tport) outgoing_send_via(orq, override_tport); else if (resolved) outgoing_prepare_send(orq); @@ -7306,14 +7306,14 @@ outgoing_resolve(orq); #endif - if (stateless && - orq->orq_status >= 200 && + if (stateless && + orq->orq_status >= 200 && callback == outgoing_default_cb) { void *retval; - if (orq->orq_status < 300) + if (orq->orq_status < 300) retval = (void *)-1; /* NONE */ - else + else retval = NULL, orq->orq_request = NULL; outgoing_free(orq); @@ -7365,7 +7365,7 @@ outgoing_reply(orq, 503, "No transport", 1); } } - + /** Send request using given transport */ static void outgoing_send_via(nta_outgoing_t *orq, tport_t *tp) @@ -7471,7 +7471,7 @@ cc = orq->orq_cc, orq->orq_cc = NULL; } else { - cc = agent_compression_compartment(agent, orq->orq_tport, tpn, + cc = agent_compression_compartment(agent, orq->orq_tport, tpn, orq->orq_sigcomp_new); } @@ -7484,7 +7484,7 @@ orq->orq_pending = 0; } - tp = tport_tsend(orq->orq_tport, msg, tpn, + tp = tport_tsend(orq->orq_tport, msg, tpn, tag, value, IF_SIGCOMP_TPTAG_COMPARTMENT(cc) TAG_NEXT(orq->orq_tags)); @@ -7542,7 +7542,7 @@ if (orq->orq_pending) { assert(orq->orq_tport); - tport_release(orq->orq_tport, orq->orq_pending, + tport_release(orq->orq_tport, orq->orq_pending, orq->orq_request, NULL, orq, 0); orq->orq_pending = 0; } @@ -7553,7 +7553,7 @@ } if (orq->orq_method != sip_method_ack) { - orq->orq_pending = tport_pend(tp, orq->orq_request, + orq->orq_pending = tport_pend(tp, orq->orq_request, outgoing_tport_error, orq); if (orq->orq_pending < 0) orq->orq_pending = 0; @@ -7636,7 +7636,7 @@ *tpn = *orq->orq_tpn; tpn->tpn_proto = "udp"; orq->orq_try_udp_instead = 1; - + tp = tport_by_name(orq->orq_agent->sa_tports, tpn); if (tp && tp != orq->orq_tport) { sip_t *sip = sip_object(orq->orq_request); @@ -7663,14 +7663,14 @@ if (orq->orq_pending) { assert(orq->orq_tport); - tport_release(orq->orq_tport, orq->orq_pending, orq->orq_request, + tport_release(orq->orq_tport, orq->orq_pending, orq->orq_request, NULL, orq, 0); orq->orq_pending = 0; } if (error == EPIPE && orq->orq_retries++ == 0) { /* XXX - we should retry only if the transport is not newly created */ - outgoing_print_tport_error(orq, 5, "retrying once after ", + outgoing_print_tport_error(orq, 5, "retrying once after ", tpn, msg, error); outgoing_send(orq, 1); return; @@ -7678,7 +7678,7 @@ else if (error == ECONNREFUSED && orq->orq_try_tcp_instead) { /* RFC3261, 18.1.1 */ if (strcasecmp(tpn->tpn_proto, "tcp") == 0 && msg_size(msg) <= 65535) { - outgoing_print_tport_error(orq, 5, "retrying with UDP after ", + outgoing_print_tport_error(orq, 5, "retrying with UDP after ", tpn, msg, error); outgoing_try_udp_instead(orq); outgoing_remove(orq); /* Reset state - this is no resend! */ @@ -7688,7 +7688,7 @@ } if (outgoing_other_destinations(orq)) { - outgoing_print_tport_error(orq, 5, "trying alternative server after ", + outgoing_print_tport_error(orq, 5, "trying alternative server after ", tpn, msg, error); outgoing_try_another(orq); return; @@ -7707,11 +7707,11 @@ su_sockaddr_t const *su = msg_addr(msg); char addr[SU_ADDRSIZE]; - su_llog(nta_log, level, + su_llog(nta_log, level, "nta: %s (%u): %s%s (%u) with %s/[%s]:%u\n", orq->orq_method_name, orq->orq_cseq->cs_seq, - todo, su_strerror(error), error, - tpn->tpn_proto, + todo, su_strerror(error), error, + tpn->tpn_proto, su_inet_ntop(su->su_family, SU_ADDR(su), addr, sizeof(addr)), htons(su->su_port)); } @@ -7791,8 +7791,8 @@ /** Change the timeout value of a queue */ static void -outgoing_queue_adjust(nta_agent_t *sa, - outgoing_queue_t *queue, +outgoing_queue_adjust(nta_agent_t *sa, + outgoing_queue_t *queue, unsigned timeout) { nta_outgoing_t *orq; @@ -7822,13 +7822,13 @@ } /** @internal - * Insert an outgoing transaction into a queue. + * Insert an outgoing transaction into a queue. * * Insert a client transaction into a queue and set the corresponding * timeout at the same time. */ su_inline -void outgoing_queue(outgoing_queue_t *queue, +void outgoing_queue(outgoing_queue_t *queue, nta_outgoing_t *orq) { if (orq->orq_queue == queue) { @@ -7845,7 +7845,7 @@ orq->orq_timeout = set_timeout(orq->orq_agent, queue->q_timeout); orq->orq_queue = queue; - orq->orq_prev = queue->q_tail; + orq->orq_prev = queue->q_tail; *queue->q_tail = orq; queue->q_tail = &orq->orq_next; queue->q_length++; @@ -7880,7 +7880,7 @@ void outgoing_set_timer(nta_outgoing_t *orq, uint32_t interval) { nta_outgoing_t **rq; - + assert(orq); if (interval == 0) { @@ -7890,7 +7890,7 @@ if (orq->orq_rprev) { /* Remove transaction from retry dequeue, re-insert it later. */ - if ((*orq->orq_rprev = orq->orq_rnext)) + if ((*orq->orq_rprev = orq->orq_rnext)) orq->orq_rnext->orq_rprev = orq->orq_rprev; if (orq->orq_agent->sa_out.re_t1 == &orq->orq_rnext) orq->orq_agent->sa_out.re_t1 = orq->orq_rprev; @@ -7923,12 +7923,12 @@ void outgoing_reset_timer(nta_outgoing_t *orq) { if (orq->orq_rprev) { - if ((*orq->orq_rprev = orq->orq_rnext)) + if ((*orq->orq_rprev = orq->orq_rnext)) orq->orq_rnext->orq_rprev = orq->orq_rprev; if (orq->orq_agent->sa_out.re_t1 == &orq->orq_rnext) orq->orq_agent->sa_out.re_t1 = orq->orq_rprev; orq->orq_agent->sa_out.re_length--; - } + } orq->orq_interval = 0, orq->orq_retry = 0; orq->orq_rnext = NULL, orq->orq_rprev = NULL; @@ -7963,7 +7963,7 @@ outgoing_reset_timer(orq); if (orq->orq_pending) { - tport_release(orq->orq_tport, orq->orq_pending, + tport_release(orq->orq_tport, orq->orq_pending, orq->orq_request, NULL, orq, 0); } orq->orq_pending = 0; @@ -7989,12 +7989,12 @@ #if HAVE_SOFIA_SRESOLV if (orq->orq_resolver) outgoing_destroy_resolver(orq); -#endif +#endif su_free(orq->orq_agent->sa_home, orq); } /** Queue request to be freed */ -su_inline +su_inline void outgoing_free_queue(outgoing_queue_t *q, nta_outgoing_t *orq) { outgoing_cut_off(orq); @@ -8002,7 +8002,7 @@ } /** Reclaim memory used by queue of requests */ -static +static void outgoing_reclaim_queued(su_root_magic_t *rm, su_msg_r msg, union sm_arg_u *u) @@ -8050,7 +8050,7 @@ } } -/** @internal Outgoing transaction timer routine. +/** @internal Outgoing transaction timer routine. * */ static void outgoing_timer(nta_agent_t *sa) @@ -8061,9 +8061,9 @@ size_t retransmitted = 0, terminated = 0, timeout = 0, destroyed; size_t total = sa->sa_outgoing->oht_used; size_t trying = sa->sa_out.re_length; - size_t pending = sa->sa_out.trying->q_length + + size_t pending = sa->sa_out.trying->q_length + sa->sa_out.inv_calling->q_length; - size_t completed = sa->sa_out.completed->q_length + + size_t completed = sa->sa_out.completed->q_length + sa->sa_out.inv_completed->q_length; outgoing_queue_init(sa->sa_out.free = rq, 0); @@ -8082,7 +8082,7 @@ * Timer N3: try to use UDP if trying to send via TCP * but no connection is established within SIP T4 */ - SU_DEBUG_5(("nta: timer %s fired, %s %s (%u)\n", "N3", + SU_DEBUG_5(("nta: timer %s fired, %s %s (%u)\n", "N3", "try UDP instead", orq->orq_method_name, orq->orq_cseq->cs_seq)); outgoing_try_udp_instead(orq); } @@ -8128,7 +8128,7 @@ MOD_ZU"/"MOD_ZU" free\n", retransmitted, trying, timeout, pending, - terminated, completed, + terminated, completed, destroyed, total)); } } @@ -8163,8 +8163,8 @@ /** Handle timers B and F */ static -size_t outgoing_timer_bf(outgoing_queue_t *q, - char const *timer, +size_t outgoing_timer_bf(outgoing_queue_t *q, + char const *timer, uint32_t now) { nta_outgoing_t *orq; @@ -8176,9 +8176,9 @@ break; timeout++; - + SU_DEBUG_5(("nta: timer %s fired, %s %s (%u)\n", - timer, + timer, orq->orq_method != sip_method_ack ? "timeout" : "terminating", orq->orq_method_name, orq->orq_cseq->cs_seq)); @@ -8195,8 +8195,8 @@ /** Handle timer C */ static -size_t outgoing_timer_c(outgoing_queue_t *q, - char const *timer, +size_t outgoing_timer_c(outgoing_queue_t *q, + char const *timer, uint32_t now) { nta_outgoing_t *orq; @@ -8210,9 +8210,9 @@ break; timeout++; - + SU_DEBUG_5(("nta: timer %s fired, %s %s (%u)\n", - timer, "CANCEL and timeout", + timer, "CANCEL and timeout", orq->orq_method_name, orq->orq_cseq->cs_seq)); nta_outgoing_tcancel(orq, NULL, NULL, TAG_NULL()); @@ -8246,7 +8246,7 @@ outgoing_timeout(cancel, now); } -/** Complete a client transaction. +/** Complete a client transaction. * * @return True if transaction was free()d. */ @@ -8273,8 +8273,8 @@ /** Handle timers D and K */ static -size_t outgoing_timer_dk(outgoing_queue_t *q, - char const *timer, +size_t outgoing_timer_dk(outgoing_queue_t *q, + char const *timer, uint32_t now) { nta_outgoing_t *orq; @@ -8292,7 +8292,7 @@ outgoing_terminate(orq); } - + return terminated; } @@ -8336,10 +8336,10 @@ if (su_msg_send(m) == SU_SUCCESS) q->q_length = 0; - } + } } - - if (q->q_length) + + if (q->q_length) outgoing_reclaim_queued(NULL, NULL, (void*)q); return destroyed; @@ -8349,7 +8349,7 @@ * * Return an outgoing request object based on a message and the @Via line * given as argument. This function is used when doing loop checking: if we - * have sent the request and it has been routed back to us. + * have sent the request and it has been routed back to us. * * @param agent * @param msg @@ -8474,7 +8474,7 @@ else outgoing_reply(cancel, SIP_481_NO_TRANSACTION, 0); - if (status < 300 && orq->orq_destroyed && + if (status < 300 && orq->orq_destroyed && orq->orq_method == sip_method_invite) { outgoing_terminate(orq); /* We can now kill transaction */ if (status == 100) { @@ -8486,7 +8486,7 @@ } if (orq->orq_pending) { - tport_release(orq->orq_tport, orq->orq_pending, orq->orq_request, + tport_release(orq->orq_tport, orq->orq_pending, orq->orq_request, msg, orq, status < 200); if (status >= 200) orq->orq_pending = 0; @@ -8561,16 +8561,16 @@ if (status < 200) { /* @RFC3261 17.1.2.1: - * retransmissions continue for unreliable transports, - * but at an interval of T2 + * retransmissions continue for unreliable transports, + * but at an interval of T2 */ if (!orq->orq_reliable) outgoing_set_timer(orq, sa->sa_t2); - } + } else if (!outgoing_complete(orq)) { if (orq->orq_sigcomp_zap && orq->orq_tport && orq->orq_cc) agent_zap_compressor(orq->orq_agent, orq->orq_cc); - } + } else /* outgoing_complete */ { msg_destroy(msg); return 0; @@ -8772,7 +8772,7 @@ if (tags) { sip_add_tl(msg, sip, TAG_NEXT(tags)); /* Bug sf.net # 173323: - * Ensure that request-URI, topmost Via, From, To, Call-ID, CSeq, + * Ensure that request-URI, topmost Via, From, To, Call-ID, CSeq, * Max-Forward, Route, Accept-Contact, Reject-Contact and * Request-Disposition are copied from original request */ @@ -8846,7 +8846,7 @@ assert(status == 202 || status >= 400); if (orq->orq_pending) - tport_release(orq->orq_tport, orq->orq_pending, + tport_release(orq->orq_tport, orq->orq_pending, orq->orq_request, NULL, orq, 0); orq->orq_pending = 0; @@ -8861,7 +8861,7 @@ outgoing_trying(orq); /* Timer F */ return 0; } - + if (orq->orq_destroyed) { if (orq->orq_status < 200) orq->orq_status = status; @@ -8873,7 +8873,7 @@ ; else if (orq->orq_queue == NULL || orq->orq_queue == orq->orq_agent->sa_out.resolving || - orq->orq_queue == orq->orq_agent->sa_out.delayed) + orq->orq_queue == orq->orq_agent->sa_out.delayed) outgoing_trying(orq); /** Insert a dummy Via header */ @@ -8886,7 +8886,7 @@ if (!orq->orq_stateless && !(orq->orq_callback == outgoing_default_cb) && !(status == 408 && - orq->orq_method != sip_method_invite && + orq->orq_method != sip_method_invite && !orq->orq_agent->sa_timeout_408)) { char const *to_tag; @@ -8895,7 +8895,7 @@ if (complete_response(msg, status, phrase, orq->orq_request) < 0) { assert(!"complete message"); return -1; - } + } sip = sip_object(msg); assert(sip->sip_flags & NTA_INTERNAL_MSG); to_tag = nta_agent_newtag(msg_home(msg), "tag=%s", agent); @@ -9010,8 +9010,8 @@ uint16_t sr_a_aaaa1, sr_a_aaaa2; /**< Order of A and/or AAAA queries. */ - unsigned - sr_use_naptr:1, + unsigned + sr_use_naptr:1, sr_use_srv:1, sr_use_a_aaaa:1; }; @@ -9033,7 +9033,7 @@ static int outgoing_resolve_next(nta_outgoing_t *orq); static int outgoing_resolving(nta_outgoing_t *orq); -static int outgoing_resolving_error(nta_outgoing_t *, +static int outgoing_resolving_error(nta_outgoing_t *, int status, char const *phrase); static void outgoing_graylist(nta_outgoing_t *orq, struct sipdns_query *sq); static int outgoing_query_naptr(nta_outgoing_t *orq, char const *domain); @@ -9080,7 +9080,7 @@ if (!sr) { outgoing_resolving_error(orq, SIP_500_INTERNAL_SERVER_ERROR); return; - } + } *sr->sr_tpn = *orq->orq_tpn; sr->sr_use_srv = orq->orq_agent->sa_use_srv; @@ -9097,7 +9097,7 @@ an attempt should fail, based on the definition of failure in Section 4.3, the next SHOULD be tried, and if that should fail, the next SHOULD be tried, and so on. - + This is a change from RFC 2543. Previously, if the port was explicit, but with a value of 5060, SRV records were used. Now, A or AAAA records will be used. @@ -9130,7 +9130,7 @@ if (strcasecmp(tpn->tpn_proto, sipdns_tports[j].name) == 0) break; - assert(j < SIPDNS_TRANSPORTS); + assert(j < SIPDNS_TRANSPORTS); if (j == SIPDNS_TRANSPORTS) /* Someone added transport but did not update sipdns_tports */ continue; @@ -9142,7 +9142,7 @@ sr->sr_tports[i] = sipdns_tports + j; if (strcmp(tpname, "*")) /* Looking for only one transport */ - break; + break; } /* Nothing found */ @@ -9168,7 +9168,7 @@ case nta_res_ip4_only: sr->sr_a_aaaa1 = sres_type_a, sr->sr_a_aaaa2 = sres_type_a; break; - } + } outgoing_resolve_next(orq); } @@ -9219,7 +9219,7 @@ outgoing_make_a_aaaa_query(orq); /* A/AAAA */ else return outgoing_resolving_error(orq, SIPDNS_503_ERROR); - + return 1; } @@ -9232,7 +9232,7 @@ if (!sr) return 0; - if (sr->sr_use_a_aaaa || sr->sr_use_srv || sr->sr_use_naptr) + if (sr->sr_use_a_aaaa || sr->sr_use_srv || sr->sr_use_naptr) return 1; if (sr->sr_results && sr->sr_results[1]) @@ -9264,7 +9264,7 @@ else if (orq->orq_agent->sa_graylist == 0) /* PP: priority hacking disabled */ ; - /* NetModule hack: + /* NetModule hack: * Move server that did not work to end of queue in sres cache * * the next request does not try to use the server that is currently down @@ -9296,18 +9296,18 @@ /* Don't know how to graylist but SRV records */ if (sq->sq_otype != sres_type_srv) - return; + return; SU_DEBUG_5(("nta: graylisting %s:%s;transport=%s\n", target, sq->sq_port, proto)); - for (sq = sr->sr_head; sq; sq = sq->sq_next) + for (sq = sr->sr_head; sq; sq = sq->sq_next) if (sq->sq_otype == sres_type_srv && sq->sq_priority > maxprio) maxprio = sq->sq_priority; for (sq = sr->sr_done; sq; sq = sq->sq_next) if (sq->sq_otype == sres_type_srv && sq->sq_priority > maxprio) maxprio = sq->sq_priority; - + for (sq = sr->sr_done; sq; sq = sq->sq_next) { int modified; @@ -9316,8 +9316,8 @@ /* modify the SRV record(s) corresponding to the latest A/AAAA record */ modified = sres_set_cached_srv_priority( - orq->orq_agent->sa_resolver, - sq->sq_domain, + orq->orq_agent->sa_resolver, + sq->sq_domain, target, sq->sq_port[0] ? (uint16_t)strtoul(sq->sq_port, NULL, 10) : 0, orq->orq_agent->sa_graylist, @@ -9335,7 +9335,7 @@ su_inline void outgoing_cancel_resolver(nta_outgoing_t *orq) { struct sipdns_resolver *sr = orq->orq_resolver; - + assert(orq->orq_resolver); if (sr->sr_query) /* Cancel resolver query */ @@ -9362,12 +9362,12 @@ int outgoing_resolving(nta_outgoing_t *orq) { struct sipdns_resolver *sr = orq->orq_resolver; - + assert(orq->orq_resolver); if (!sr->sr_query) { return outgoing_resolving_error(orq, SIPDNS_503_ERROR); - } + } else { outgoing_queue(orq->orq_agent->sa_out.resolving, orq); return 0; @@ -9375,8 +9375,8 @@ } /** Return 503 response */ -static -int outgoing_resolving_error(nta_outgoing_t *orq, int status, char const *phrase) +static +int outgoing_resolving_error(nta_outgoing_t *orq, int status, char const *phrase) { orq->orq_resolved = 1; outgoing_reply(orq, status, phrase, 0); @@ -9390,10 +9390,10 @@ struct sipdns_resolver *sr = orq->orq_resolver; su_home_t *home = msg_home(orq->orq_request); struct sipdns_query *sq; - char const *host; + char const *host; int i; size_t hlen; - + sr->sr_use_srv = 0; host = sr->sr_tpn->tpn_host; @@ -9553,19 +9553,19 @@ break; /* Check if NAPTR matches our target */ - if (strncasecmp(na->na_services, "SIP+", 4) && + if (strncasecmp(na->na_services, "SIP+", 4) && strncasecmp(na->na_services, "SIPS+", 5)) /* Not a SIP/SIPS service */ continue; /* Use NAPTR results, don't try extra SRV/A/AAAA records */ - sr->sr_use_srv = 0, sr->sr_use_a_aaaa = 0; - + sr->sr_use_srv = 0, sr->sr_use_a_aaaa = 0; + /* Check if we have a transport mathing with service */ for (j = 0; sr->sr_tports[j]; j++) { /* - * Syntax of services is actually more complicated - * but comparing the values in the transport list + * Syntax of services is actually more complicated + * but comparing the values in the transport list * match with those values that make any sense */ if (strcasecmp(na->na_services, sr->sr_tports[j]->service) != 0) @@ -9587,7 +9587,7 @@ if (!sr->sr_tports[j]) continue; - /* OK, we found matching NAPTR */ + /* OK, we found matching NAPTR */ order = na->na_order; /* @@ -9608,7 +9608,7 @@ if (sq == NULL) continue; - *tail = sq, tail = &sq->sq_next; + *tail = sq, tail = &sq->sq_next; sq->sq_otype = sres_type_naptr; sq->sq_priority = na->na_prefer; sq->sq_weight = j; @@ -9619,7 +9619,7 @@ sres_free_answers(orq->orq_agent->sa_resolver, answers); - /* RFC2915: + /* RFC2915: Preference [...] specifies the order in which NAPTR records with equal "order" values SHOULD be processed, low numbers being processed before high numbers. */ @@ -9646,7 +9646,7 @@ /* Query SRV records */ static -int outgoing_query_srv(nta_outgoing_t *orq, +int outgoing_query_srv(nta_outgoing_t *orq, struct sipdns_query *sq) { struct sipdns_resolver *sr = orq->orq_resolver; @@ -9689,7 +9689,7 @@ sr->sr_query = NULL; - sq0 = sr->sr_current; + sq0 = sr->sr_current; assert(sq0 && sq0->sq_type == sres_type_srv); assert(sq0->sq_domain); assert(sq0->sq_proto); @@ -9761,8 +9761,8 @@ } /* This is not needed anymore (?) */ - sr->sr_current = NULL; - sq0->sq_next = sr->sr_done; sr->sr_done = sq0; + sr->sr_current = NULL; + sq0->sq_next = sr->sr_done; sr->sr_done = sq0; outgoing_resolve_next(orq); } @@ -9782,7 +9782,7 @@ sres_type_aaaa, sq->sq_domain); SU_DEBUG_5(("nta: for \"%s\" query \"%s\" %s%s\n", - orq->orq_tpn->tpn_host, sq->sq_domain, "AAAA", + orq->orq_tpn->tpn_host, sq->sq_domain, "AAAA", answers ? " (cached)" : "")); if (answers) { @@ -9836,7 +9836,7 @@ su_inet_ntop(AF_INET6, &aaaa->aaaa_addr, addr, sizeof(addr)); if (j == 0) - SU_DEBUG_5(("nta(%p): %s IN AAAA %s\n", (void *)orq, + SU_DEBUG_5(("nta(%p): %s IN AAAA %s\n", (void *)orq, aaaa->aaaa_record->r_name, addr)); else SU_DEBUG_5(("nta(%p): AAAA %s\n", (void *)orq, addr)); @@ -9949,11 +9949,11 @@ sq->sq_domain, sq->sq_type == sres_type_a ? "A" : "AAAA")); /* - * Three possible policies: + * Three possible policies: * 1) try each host for AAAA/A, then A/AAAA * 2) try everything first for AAAA/A, then everything for A/AAAA * 3) try one SRV record results for AAAA/A, then for A/AAAA, - * then next SRV record + * then next SRV record */ /* We use now policy #1 */ @@ -9968,7 +9968,7 @@ outgoing_graylist(orq, sq); } - if (rlen > 1) + if (rlen > 1) sr->sr_results = results; else sr->sr_current = NULL; @@ -10047,7 +10047,7 @@ ta_start(ta, tag, value); - if (0 > nta_incoming_complete_response(irq, msg, status, phrase, + if (0 > nta_incoming_complete_response(irq, msg, status, phrase, ta_tags(ta))) msg_destroy(msg); else if (!(retval = reliable_mreply(irq, callback, rmagic, msg, sip))) @@ -10060,7 +10060,7 @@ /** Respond reliably with @a msg. * - * @note + * @note * The stack takes over the ownership of @a msg. (It is destroyed even if * sending the response fails.) * @@ -10105,7 +10105,7 @@ nta_agent_t *agent; agent = irq->irq_agent; - + if (callback == NULL) callback = nta_reliable_destroyed; @@ -10176,7 +10176,7 @@ incoming_queue(sa->sa_in.preliminary, irq); /* P1 */ incoming_set_timer(irq, sa->sa_t1); /* P2 */ - + return 0; } @@ -10260,7 +10260,7 @@ /* Found matching INVITE */ for (rel = irq->irq_reliable; rel; rel = rel->rel_next) - if (rel->rel_rseq == rack->ra_response) + if (rel->rel_rseq == rack->ra_response) return (nta_reliable_t *)rel; return NULL; @@ -10311,7 +10311,7 @@ } nta_incoming_treply(pr_irq, status, "OK", TAG_END()); nta_incoming_destroy(pr_irq); - } + } /* If there are queued unsent reliable responses, send them all. */ while (irq->irq_reliable && irq->irq_reliable->rel_rseq == 0) { @@ -10327,7 +10327,7 @@ if (reliable_send(irq, rel, msg_ref_create(msg), sip) < 0) { assert(!"send reliable response"); } - } + } else { /* * XXX @@ -10388,8 +10388,8 @@ * process incoming PRACK requests */ int nta_reliable_leg_prack(nta_reliable_magic_t *magic, - nta_reliable_t *rel, - nta_incoming_t *irq, + nta_reliable_t *rel, + nta_incoming_t *irq, sip_t const *sip) { nta_agent_t *agent; @@ -10398,7 +10398,7 @@ url_t url[1]; int retval; - if (irq == NULL || sip == NULL || rel == NULL || + if (irq == NULL || sip == NULL || rel == NULL || sip_object(irq->irq_request) != sip) return 500; @@ -10407,14 +10407,14 @@ *url = *sip->sip_request->rq_url; url->url_params = NULL; agent_aliases(agent, url, irq->irq_tport); /* canonize urls */ - if ((leg = leg_find(irq->irq_agent, - method_name, url, + if ((leg = leg_find(irq->irq_agent, + method_name, url, sip->sip_call_id, - sip->sip_from->a_tag, + sip->sip_from->a_tag, sip->sip_to->a_tag))) { /* Use existing dialog */ SU_DEBUG_5(("nta: %s (%u) %s\n", - method_name, sip->sip_cseq->cs_seq, + method_name, sip->sip_cseq->cs_seq, "PRACK processed by default callback, too")); retval = leg->leg_callback(leg->leg_magic, leg, irq, sip); } @@ -10578,9 +10578,9 @@ tagged->orq_response = msg_ref_create(orq->orq_response); tagged->orq_cancel = NULL; - tagged->orq_pending = tport_pend(orq->orq_tport, - orq->orq_request, - outgoing_tport_error, + tagged->orq_pending = tport_pend(orq->orq_tport, + orq->orq_request, + outgoing_tport_error, tagged); if (tagged->orq_pending < 0) tagged->orq_pending = 0; @@ -10654,7 +10654,7 @@ __func__, resp->sip_status->st_status)); return NULL; } - + if (!resp->sip_rseq) { SU_DEBUG_1(("%s: %u response missing RSeq\n", __func__, resp->sip_status->st_status)); @@ -10706,7 +10706,7 @@ sip_route_init(r0)->r_url[0] = resp->sip_contact->m_url[0]; route = sip_route_dup(home, r0); } - + /* Reverse record route */ if (resp->sip_record_route) { sip_route_t *r, *r_next; @@ -10740,7 +10740,7 @@ ; else if (route && sip_add_dup(msg, sip, (sip_header_t *)route) < 0) ; - else if (!sip->sip_rack) + else if (!sip->sip_rack) SU_DEBUG_1(("%s: RAck header missing\n", __func__)); else if (nta_msg_request_complete(msg, leg, SIP_METHOD_PRACK, @@ -10768,7 +10768,7 @@ return orq ? orq->orq_rseq : 0; } -/** Set @RSeq value stored with client transaction. +/** Set @RSeq value stored with client transaction. * * @return 0 if rseq was set successfully * @return -1 if rseq is invalid or orq is NULL. @@ -10776,7 +10776,7 @@ int nta_outgoing_setrseq(nta_outgoing_t *orq, uint32_t rseq) { if (orq && orq->orq_rseq <= rseq) { - orq->orq_rseq = rseq; + orq->orq_rseq = rseq; return 0; } @@ -10841,7 +10841,7 @@ struct sigcomp_compartment * nta_incoming_compartment(nta_incoming_t *irq) { - if (nta_compressor_vtable && irq && irq->irq_cc) + if (nta_compressor_vtable && irq && irq->irq_cc) return nta_compressor_vtable->ncv_compartment_ref(irq->irq_cc); else return NULL; @@ -10860,7 +10860,7 @@ struct sigcomp_compartment * nta_outgoing_compartment(nta_outgoing_t *orq) { - if (nta_compressor_vtable && orq && orq->orq_cc) + if (nta_compressor_vtable && orq && orq->orq_cc) return nta_compressor_vtable->ncv_compartment_ref(orq->orq_cc); else return NULL; @@ -10879,7 +10879,7 @@ void nta_compartment_decref(struct sigcomp_compartment **pcc) { - if (nta_compressor_vtable && pcc && *pcc) + if (nta_compressor_vtable && pcc && *pcc) nta_compressor_vtable->ncv_compartment_unref(*pcc), *pcc = NULL; } @@ -10887,7 +10887,7 @@ /** Get compartment for connection, create it when needed. */ static struct sigcomp_compartment * -agent_compression_compartment(nta_agent_t *sa, +agent_compression_compartment(nta_agent_t *sa, tport_t *tp, tp_name_t const *tpn, int new_if_needed) @@ -10979,24 +10979,24 @@ for (i = oht->oht_size; i-- > 0;) /* while */ if (oht->oht_table[i]) { nta_outgoing_t *orq = oht->oht_table[i]; - + if (orq->orq_pending && orq->orq_tport) - tport_release(orq->orq_tport, orq->orq_pending, orq->orq_request, + tport_release(orq->orq_tport, orq->orq_pending, orq->orq_request, NULL, orq, 0); - + orq->orq_pending = 0; tport_unref(orq->orq_tport), orq->orq_tport = NULL; } - - + + for (i = iht->iht_size; i-- > 0;) /* while */ if (iht->iht_table[i]) { nta_incoming_t *irq = iht->iht_table[i]; tport_unref(irq->irq_tport), irq->irq_tport = NULL; - } - + } + tport_destroy(agent->sa_tports), agent->sa_tports = NULL; - + msg_header_free(agent->sa_home, (void *)agent->sa_vias); agent->sa_vias = NULL; msg_header_free(agent->sa_home, (void *)agent->sa_public_vias); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.docs Tue Dec 16 13:05:22 2008 @@ -17,28 +17,28 @@ * @LICENSE LGPL * * @section nta_objects NTA Objects - * + * * The NTA deals with a few kinds of objects: @e agent (#nta_agent_t), @e * call @e legs (#nta_leg_t), @e outgoing @e client @e requests * (#nta_outgoing_t), and @e incoming @e server @e requests * (#nta_incoming_t). - * + * * NTA also uses SIP message objects #msg_t and #sip_t for handling * messages, as defined in and , * respectively. The various SIP headers are also defined in * . - * + * * @section nta_agent_t Creating an NTA Agent - * + * * Most of the SIP entities, like @e user @e agent or @e proxy, consist of a * SIP server and a SIP client working together. The NTA provides a simple * interface to SIP server and client with the #nta_agent_t objects. - * + * * The #nta_agent_t object is created by calling nta_agent_create(). The * object listens for incoming connections, receives messages, parses them, * and pass them to the application. It also takes care of resolving the * domain names and sending the messages. - * + * * The agent needs a #su_root_t object to schedule its execution. A root * object is used to wait for the network events, schedule the timer * routines, and pass messages asyncronously. A root object can be created @@ -46,61 +46,61 @@ * own thread, or its main loop can be executed by an application thread by * calling the function su_root_run(). The main loop can be terminated by * calling the function su_root_break(). - * + * * A simple agent could be created as follows: * @code * registrar->reg_root = su_root_create(NULL); - * + * * if (registrar->reg_root) { * registrar->reg_agent = nta_agent_create(registrar->reg_root, * (url_string_t*)argv[1], * NULL, * NULL, * NULL); - * + * * if (registrar->reg_agent) { * su_root_run(registrar->reg_root); * nta_agent_destroy(registrar->reg_agent); * } - * + * * su_root_destroy(registrar->reg_root); * } * @endcode - * + * * @section nta_server SIP Server Action - * + * * A SIP server responds to the transactions sent by a client. The SIP * server can operate in two modes; it can be stateless or stateful. This * section describes how a stateful SIP server uses NTA. - * + * * @subsection nta_leg_t The NTA Legs - * + * * A leg is required for stateful transaction processing. A default * leg is created like this: * @code * default_leg = nta_leg_tcreate(agent, process_requests, context, - * URLTAG_URL(url), + * URLTAG_URL(url), * NTATAG_NO_DIALOG(1), * TAG_END()); - * @endcode - * + * @endcode + * * The @a url parameter is used to specify which URLs match to the leg. If * it is given, only requests with requestURI matching are processed by the * leg. The nta_leg_tcreate() is a @ref tagarg "tagarg" function, taking a * tagged argument list as its arguments. - * + * * Other, ordinary legs can be used to match incoming requests with existing * dialogs, calls or transaction contexts, or to provide outgoing requests * with consistent headers. When a call leg is created, it is provided with * @From and @To headers, and optionally with other headers like * @CallID, @Route, or @CSeq. - * + * * A new call leg can be created as follows: * @code * call_leg = nta_leg_tcreate(agent, * process_call_requests, call_context, * SIPTAG_CALL_ID(sip->sip_call_id), - * SIPTAG_TO(sip->sip_from), + * SIPTAG_TO(sip->sip_from), * SIPTAG_FROM(sip->sip_to), * TAG_END()); * @endcode @@ -112,9 +112,9 @@ * @note An existing leg can be used in any direction, however. If the leg * was created for an incoming INVITE transaction, it is also possible to * use the leg for an outgoing BYE transaction. - * + * * @subsection nta_leg_tag Tagging the Call Leg - * + * * All the SIP UAS elements are required to tag the @To header in their * final responses. The function nta_leg_tag() adds a tag to the leg's local * address. Local address is used as the @To header in the reply messages, @@ -126,34 +126,34 @@ * if (!nta_leg_tag(leg, nta_incoming_tag(irq, NULL))) * nta_incoming_treply(irq, SIP_500_INTERNAL_SERVER_ERROR, TAG_END()); * @endcode - * + * * @subsection nta_incoming_t Incoming Transactions - * + * * An incoming transaction object (nta_incoming_t) is created by NTA for * each unique incoming request message. When NTA has created the incoming - * transaction object, it invokes the callback function provided with - * nta_leg_tcreate(). - * + * transaction object, it invokes the callback function provided with + * nta_leg_tcreate(). + * * The simplest way to reply to the request is to return a valid status code * from the callback function. Valid status codes are in range of 100 to * 699, inclusive. If no automatic response is desired, the callback * function should return 0. - * + * * @note If the status code is final, the incoming transaction object will * be destroyed immediately after the callback function returns. It can not * be used afterwards. - * + * * @note It is not possible to respond with a 2xx status code to an incoming * INVITE transaction by returning the status code from the callback. - * + * * Valid return values for callback function are as follows: * @li 0, 100 .. 699 for requests other than INVITE, and * @li 0, 100 .. 199, 300..699 for INVITE requests. - * + * * All other return codes are interpreted as 500, that is, a @e 500 @e * Internal @e Server @e Error reply message is sent back to the client and * the request is immediately destroyed. - * + * * The simple registrar/redirect server may have a incoming request callback * as follows: * @code @@ -163,20 +163,20 @@ * sip_t const *sip) * { * sip_contact_t *m; - * + * * switch (sip->sip_request->rq_method) { * case sip_method_register: * return registrar_add(server, leg, reply, sip); - * + * * case sip_method_ack: * return 500; - * + * * case sip_method_cancel: * return 200; - * + * * default: * if (registrar_find(server, sip->sip_request->rq_url, &m) { - * nta_incoming_treply(irq, SIP_302_MOVED_TEMPORARILY, + * nta_incoming_treply(irq, SIP_302_MOVED_TEMPORARILY, * SIPTAG_CONTACT(m), TAG_END()); * return 302; * } @@ -187,37 +187,37 @@ * } * } * @endcode - * + * * The default reply message will contain the status line with default * phrase, then @Via, @To, @From, @CallID, @CSeq, and @ContentLength headers. * If a more complex response message is required, the application should - * respond using the function nta_incoming_treply(): + * respond using the function nta_incoming_treply(): * @code - * nta_incoming_treply(reply, SIP_200_OK, + * nta_incoming_treply(reply, SIP_200_OK, * SIPTAG_CONTACT(contact), * SIPTAG_CONTENT_TYPE_STR("application/sdp"), * SIPTAG_PAYLOAD(sdp), * TAG_END()); * @endcode - * + * * The nta_incoming_treply() is a @ref tagarg "tagarg" function, taking a * tagged argument list as its argument. - * + * * @note It is possible to send provisional replies (containing 1xx status * codes) several times with nta_incoming_treply(), but only one final * reply (containing status codes 2xx..6xx) can be sent. However, with * INVITE requests, a proxy can send a final 2xx reply even after an error * reply (3xx..6xx). - * + * * @section nta_100rel Reliable Provisional Responses - "100rel" - * + * * The 100rel SIP extension * provides reliable provisional responses, provisional responses that are * retransmitted until a special acknowledgement request, PRACK, is * received. In addition the PRACK method, the extension defines two * headers, @RSeq and @RAck, that are used to identify different * response messages. PRACK method is usable on INVITE requests only. - * + * * Using reliable responses is negotiated using the "100rel" option tag. The * UAC (party sending the INVITE) can include the option tag to the * @Supported or @Require header. In the first case, the UAC just @@ -236,11 +236,11 @@ * functions nta_reliable_treply() or nta_reliable_mreply(). These functions * return a pointer to a special object, nta_reliable_t, that is used to * keep track of unacknowledged responses and respond to the the PRACK - * acknowledgement request. - * + * acknowledgement request. + * * Both the functions nta_reliable_treply () and nta_reliable_mreply() take * a callback funtion pointer and an application context pointer as their - * arguments. The callback function is similar to the leg callback function. + * arguments. The callback function is similar to the leg callback function. * The callback is invoked when a corresponding PRACK request is received, * or when there is a timeout. * @@ -252,7 +252,7 @@ * nta_incoming_treply()/nta_incoming_mreply() functions, the @b nta creates * a reliable response object for each provisional response in behalf of * application. As the application can not provide a PRACK callback function - * to @b nta, the PRACK requests are not delivered to the application. + * to @b nta, the PRACK requests are not delivered to the application. * * @subsection early_dialog UAC Receives a Reliable Response * @@ -261,7 +261,7 @@ * early @e dialog with the UAS. In another view, a reliable response is * used to establish the early dialog. UAC establishes a leg object for the * early dialog by calling nta_leg_tcreate() with the parameters derived - * from the response message. + * from the response message. * * @code * int invite_callback(call_t *call, @@ -269,30 +269,30 @@ * sip_t const *sip) * { * int status = sip->sip_status->st_status; - * - * if (!call->has_dialog && + * + * if (!call->has_dialog && * (status >= 200 || (status > 100 && sip->sip_rseq))) { - * nta_leg_t *early = + * nta_leg_t *early = * nta_leg_tcreate(call->nta_agent, mid_dialog_request, call, * SIPTAG_TO(sip->sip_to), * SIPTAG_FROM(sip->sip_from), * SIPTAG_CALL_ID(sip->sip_call_id), * SIPTAG_CSEQ(sip->sip_cseq), * TAG_END()); - * - * nta_leg_client_route(early, + * + * nta_leg_client_route(early, * sip->sip_record_route, * sip->sip_contact); - * + * * fork = call_fork(call, leg = early); - * + * * if (!fork)?{ * handle error; * } * call = fork; - * } + * } * @endcode - * + * * The original dialog object and client transaction object are used to * process other call forks. For instance, if the early dialog is * established with an announcement server it will never lead to an fully @@ -306,14 +306,14 @@ * transaction object by calling nta_outgoing_prack() * * @section nta_client SIP Client Action - * + * * A SIP client initiates the transactions. In some cases, a SIP client is * also required to invoke additional transactions, like @b ACK or @b * CANCEL, to finalize the original transaction. This section describes how * a SIP client uses NTA to make transactions. - * + * * @subsection client_nta_leg_t Creating the Call Leg - * + * * If the client does not have a suitable call leg, it must create it by * calling the function nta_leg_tcreate(): * @code @@ -324,15 +324,15 @@ * SIPTAG_TO(to), * TAG_END()); * @endcode - * + * * The @p callback function and @p context pointer are used for incoming * transactions, and they may be @c NULL if no such transactions are * expected. If the callback is @c NULL, NTA responds to incoming * transactions with status @e 403 @e Forbidden. - * + * * The @a call_id may be @c NULL or left out. In that case, NTA generates a * new call ID. - * + * * The @a from and @a to are used in outgoing transactions. They are also * used to select which incoming messages belong to this leg. * @@ -341,11 +341,11 @@ * * The additional parameters (after @a to) are included in outgoing messages * using this leg. Currently, only @c SIPTAG_ROUTE() is supported. - * + * * @note Additional tagged parameters are ignored. - * + * * @subsection nta_outgoing_t Outgoing requests - * + * * The outgoing request is created and sent by nta_outgoing_tcreate(). It * can be used as follows: * @code @@ -356,31 +356,31 @@ * SIPTAG_CONTACT(my_contact), * TAG_END()); * @endcode - * + * * NTA invokes the callback function response_to_register() each time a * provisional answer is received, and when a final answer is received. - * + * * @note There may be multiple final answers to the INVITE request. - * + * * If NTA does not receive answer in timely manner, it will generate a - * @e 408 @e Timeout response and hand that back to the application. - * + * @e 408 @e Timeout response and hand that back to the application. + * * @note After a provisional answer to the INVITE request, no timeout will * occur inside NTA. Application must itself timeout the INVITE * transactions if any answer has been received. - * + * * The request can be destroyed with NTA function nta_outgoing_destroy(). * If no final answer has been received, the request is cancelled when it is * destroyed, too. The application can also cancel the outgoing request by * calling nta_outgoing_cancel(). - * + * * @subsection nta_ack Acknowledging Answers to INVITE - * + * * The final answers to the INVITE request must be acknowledged. NTA takes * care of acknowledging automatically the 3xx..6xx answers; the appliction * must explicitly create a separate acknowledge transaction to final 2xx - * answers. - * + * answers. + * * The final answer can be acknowledged like this: * @code * url = sip->sip_contact ? sip->sip_contact->m_url : original_url; @@ -391,10 +391,10 @@ * SIPTAG_PAYLOAD(sdp), * TAG_END()); * @endcode - * - * @note The ACK transaction should be sent to the @Contact specified in the - * 2xx reply. - * + * + * @note The ACK transaction should be sent to the @Contact specified in the + * 2xx reply. + * * * @section nta_stateless_callback Stateless Processing of SIP Messages * @@ -427,27 +427,27 @@ * parsed contents (@a sip) the callback function gets the * application-specific context pointer (in this case, @a registrar) and a * pointer to the NTA agent (@a agent) as its arguments: - * - * @code + * + * @code * int process_message(nta_agent_context_t *registrar, * nta_agent_t *agent, * msg_t *msg, * sip_t *sip); * @endcode - * + * * The application has three functions that can be used to process the * messages in stateless manner: * @li nta_msg_discard() ignores and destroys the message, * @li nta_msg_tsend() forwards a request or response message, and * @li nta_msg_treply() replies to a request message in a stateless way. - * + * * Additionally, it is possible to process a request message statefully with * nta_incoming_create(). * * The functionality of the stateless callback function can vary greatly, * depending the purpose of the application. An user-agent, a proxy or a * registrar/redirect server each have very different callback functions. - * + * * A simple redirect server could have a message callback function as * follows. * @@ -459,15 +459,15 @@ * { * sip_contact_t *m; * sip_unsupported_t *u; - * + * * @endcode * * The incoming response messages are simply ignored. The @b ACK requests can * safely be discarded, too, because the redirect server keeps no state. - * + * * @code * if (!sip->sip_request || sip->sip_request->rq_method == sip_method_ack) { - * nta_msg_discard(agent, msg); + * nta_msg_discard(agent, msg); * return 0; * } * @endcode @@ -477,7 +477,7 @@ * @code * u = sip_unsupported(msg_home(msg), sip->sip_require, r->r_supported); * if (u) { - * nta_msg_treply(agent, msg, SIP_420_BAD_EXTENSION, + * nta_msg_treply(agent, msg, SIP_420_BAD_EXTENSION, * SIPTAG_SUPPORTED(r->r_supported), * SIPTAG_UNSUPPORTED(u), * TAG_END()); @@ -495,17 +495,17 @@ * } * @endcode * - * All other requests are answered normally with a 302 response. + * All other requests are answered normally with a 302 response. * The location service is * searched for the request uri, and if a matching address was found, a * list of active bindings is returned to the client. * @code * m = location_find(redirect, sip->sip_request->rq_url); * if (m) { - * nta_msg_treply(agent, msg, SIP_302_MOVED_TEMPORARILY, + * nta_msg_treply(agent, msg, SIP_302_MOVED_TEMPORARILY, * SIPTAG_CONTACT(m), * TAG_END()); - * } + * } * @endcode * * Otherwise, @e 404 @e Not @e Found is sent: @@ -513,22 +513,22 @@ * else { * nta_msg_treply(agent, msg, SIP_404_NOT_FOUND, TAG_END()); * } - * + * * return 0; * } * @endcode - * + * */ /**@page internal NTA Semantics and Internal Data Flows - * + * * NTA implements simple state machines at transaction level. The figure * below illustrates how a message is processed by NTA. - * - * @image html nta-receiving-message.gif "NTA processing incoming messages." - * @image latex nta-receiving-message.eps "NTA processing incoming messages." - * - * + * + * @image html nta-receiving-message.gif "NTA processing incoming messages." + * @image latex nta-receiving-message.eps "NTA processing incoming messages." + * + * */ int invite_callback(call_t *call, @@ -538,9 +538,9 @@ int status = sip->sip_status->st_status; nta_leg_t *leg = call->leg; - if (!call->has_dialog && + if (!call->has_dialog && (status >= 200 || (status > 100 && sip->sip_rseq))) { - nta_leg_t *early = + nta_leg_t *early = nta_leg_tcreate(call->nta_agent, mid_dialog_request, call, SIPTAG_TO(sip->sip_to), SIPTAG_FROM(sip->sip_from), @@ -548,7 +548,7 @@ SIPTAG_CSEQ(sip->sip_cseq), TAG_END()); - nta_leg_client_route(early, + nta_leg_client_route(early, sip->sip_record_route, sip->sip_contact); @@ -558,16 +558,16 @@ handle error; } call = fork; - } - + } + if (status > 100 && status < 200 && sip->sip_rseq) { - nta_outgoing_t *prack = + nta_outgoing_t *prack = nta_outgoing_prack(leg, orq, NULL, NULL, NULL, - sip, + sip, TAG_END()); nta_outgoing_destroy(prack); return 0; } - + ... } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef NTA_INTERNAL_H /** Defined when has been included. */ -#define NTA_INTERNAL_H +#define NTA_INTERNAL_H /**@internal @file nta_internal.h * @@ -562,13 +562,13 @@ int ncv_size; char const *ncv_name; - nta_compressor_t *(*ncv_init_agent)(nta_agent_t *sa, + nta_compressor_t *(*ncv_init_agent)(nta_agent_t *sa, char const * const *options); void (*ncv_deinit_agent)(nta_agent_t *sa, nta_compressor_t *); struct sigcomp_compartment *(*ncv_compartment)(nta_agent_t *sa, - tport_t *tport, + tport_t *tport, nta_compressor_t *msc, tp_name_t const *tpn, char const * const *options, @@ -589,7 +589,7 @@ (struct sigcomp_compartment *); void (*ncv_compartment_unref)(struct sigcomp_compartment *); - + } nta_compressor_vtable_t; extern nta_compressor_vtable_t *nta_compressor_vtable; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_tag.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_tag.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_tag.c Tue Dec 16 13:05:22 2008 @@ -25,7 +25,7 @@ /**@CFILE nta_tag.c * @brief Tags for Nokia SIP Transaction API * - * @note This file is used to automatically generate + * @note This file is used to automatically generate * nta_tag_ref.c and nta_tag_dll.c * * @author Pekka Pessi @@ -51,7 +51,7 @@ /**@def NTATAG_MCLASS(x) * - * Message class used by NTA. + * Message class used by NTA. * * The nta can use a custom or extended parser created with * msg_mclass_clone(). @@ -76,15 +76,15 @@ /**@def NTATAG_BAD_REQ_MASK(x) * - * Mask for bad request messages. - * + * Mask for bad request messages. + * * If an incoming request has erroneous headers matching with the mask, nta - * automatically returns a 400 Bad Message response to them. + * automatically returns a 400 Bad Message response to them. * * If mask ~0U (all bits set) is specified, all requests with any bad header * are dropped. By default only the requests with bad headers essential for * request processing or proxying are dropped. - * + * * @par Used with * nua_create(), nua_set_params(), * nta_agent_create(), nta_agent_set_params() @@ -104,22 +104,22 @@ * @ContentEncoding, @Supported, @Contact, @Require, @RecordRoute, @RAck, * @RSeq, @Event, @Expires, @SubscriptionState, @SessionExpires, * @MinSE, @SIPETag, and @SIPIfMatch. - * + * * @sa enum #sip_bad_mask, NTATAG_BAD_RESP_MASK() */ tag_typedef_t ntatag_bad_req_mask = UINTTAG_TYPEDEF(bad_req_mask); /**@def NTATAG_BAD_RESP_MASK(x) * - * Mask for bad response messages. - * + * Mask for bad response messages. + * * If an incoming response has erroneous headers matching with the mask, nta - * drops the response message. + * drops the response message. * * If mask ~0U (all bits set) is specified, all responses with any bad header * are dropped. By default only the responses with bad headers essential for * response processing or proxying are dropped. - * + * * @par Used with * nua_create(), nua_set_params(), * nta_agent_create(), nta_agent_set_params() @@ -139,7 +139,7 @@ * - @ref sip_status \"status line\"", @From, @To, @CSeq, @CallID, * @ContentLength, @Via, @ContentType, @ContentDisposition, * @ContentEncoding, @Supported, @Contact, @Require, @RecordRoute, @RAck, - * @RSeq, @Event, @Expires, @SubscriptionState, @SessionExpires, + * @RSeq, @Event, @Expires, @SubscriptionState, @SessionExpires, * @MinSE, @SIPETag, and @SIPIfMatch. */ tag_typedef_t ntatag_bad_resp_mask = UINTTAG_TYPEDEF(bad_resp_mask); @@ -183,9 +183,9 @@ */ tag_typedef_t ntatag_target = SIPHDRTAG_NAMED_TYPEDEF(target, contact); -/** @def NTATAG_ALIASES(x) +/** @def NTATAG_ALIASES(x) * - * Aliases used by NTA. + * Aliases used by NTA. * @deprecated */ tag_typedef_t ntatag_aliases = SIPHDRTAG_NAMED_TYPEDEF(aliases, contact); @@ -208,7 +208,7 @@ * * @par Default Value * - None (i.e., all requests methods match with the leg) - * + * */ tag_typedef_t ntatag_method = STRTAG_TYPEDEF(method); @@ -230,7 +230,7 @@ * string * * @par Value - * - The "branch" ID to to insert into topmost @Via header of the + * - The "branch" ID to to insert into topmost @Via header of the * request to be sent * * @par Default Value @@ -244,7 +244,7 @@ /**@def NTATAG_ACK_BRANCH(x) * - * Branch of the transaction to ACK. + * Branch of the transaction to ACK. * * When creating a ACK transaction, the application should provide the * branch parameter from the original transaction to the stack. The ACK @@ -269,7 +269,7 @@ /**@def NTATAG_COMP(x) * - * Compression algorithm. + * Compression algorithm. * * Set compression algorithm for request as described in @RFC3486. * @@ -302,7 +302,7 @@ /**@def NTATAG_MSG(x) * - * Pass a SIP message to treply()/tcreate() functions. + * Pass a SIP message to treply()/tcreate() functions. * * @par Used with * nta_outgoing_tcreate(), nta_incoming_treply() @@ -327,7 +327,7 @@ * or response message(s). * * @par Used with - * nta_outgoing_tcreate(), nta_outgoing_mcreate(), nta_outgoing_tcancel(), + * nta_outgoing_tcreate(), nta_outgoing_mcreate(), nta_outgoing_tcancel(), * nta_incoming_create(), nta_msg_tsend(), nta_msg_mreply() * * @par Parameter type @@ -345,9 +345,9 @@ /**@def NTATAG_SMIME(x) * - * Provide S/MIME context to NTA. + * Provide S/MIME context to NTA. * - * @todo S/MIME is not implemented. + * @todo S/MIME is not implemented. */ tag_typedef_t ntatag_smime = PTRTAG_TYPEDEF(smime); @@ -367,7 +367,7 @@ * - uint32_t * * @par Values - * - Remote command sequence number + * - Remote command sequence number * * @par Default Value * - Initially 0, then determined by the received requests @@ -377,7 +377,7 @@ /**@def NTATAG_MAXSIZE(x) * - * Maximum size of incoming message. + * Maximum size of incoming message. * * If the size of an incoming request message would exceed the * given limit, the stack will automatically respond with 413 Request @@ -388,7 +388,7 @@ * nta_agent_create(), nta_agent_set_params() * * @par Parameter type - * - #usize_t + * - #usize_t * * @par Values * - Maximum acceptable size of an incoming request message. @@ -402,10 +402,10 @@ /**@def NTATAG_MAX_PROCEEDING(x) * - * Maximum size of proceeding queue. + * Maximum size of proceeding queue. * * If the size of the proceedng message queue would exceed the - * given limit, the stack will automatically respond with 503 + * given limit, the stack will automatically respond with 503 * Service Unavailable. * * @par Used with @@ -413,7 +413,7 @@ * nta_agent_create(), nta_agent_set_params() * * @par Parameter type - * - #usize_t + * - #usize_t * * @par Values * - Maximum acceptable size of a queue (size_t). @@ -423,7 +423,7 @@ /**@def NTATAG_UDP_MTU(x) * - * Maximum size of outgoing UDP request. + * Maximum size of outgoing UDP request. * * The maximum UDP request size is used to control use of UDP with overtly * large messages. The IETF requires that the SIP requests over 1300 bytes @@ -450,7 +450,7 @@ /**@def NTATAG_MAX_FORWARDS(x) * - * Default value for @MaxForwards header. + * Default value for @MaxForwards header. * * The default value of @MaxForwards header added to the requests. The * initial value recommended by @RFC3261 is 70, but usually SIP proxies use @@ -475,7 +475,7 @@ /**@def NTATAG_SIP_T1(x) * - * Initial retransmission interval (in milliseconds) + * Initial retransmission interval (in milliseconds) * * Set the T1 retransmission interval used by the SIP transaction engine. The * T1 is the initial duration used by request retransmission timers A and E @@ -489,7 +489,7 @@ * unsigned int * * @par Values - * - Value of SIP T1 in milliseconds + * - Value of SIP T1 in milliseconds * * @par Default Value * - #NTA_SIP_T1 or 500 (milliseconds) @@ -500,13 +500,13 @@ /**@def NTATAG_SIP_T1X64(x) * - * Transaction timeout (defaults to T1 * 64). + * Transaction timeout (defaults to T1 * 64). * * Set the T1x64 timeout value used by the SIP transaction engine. The T1x64 is - * duration used for timers B, F, H, and J (UDP) by the SIP transaction engine. + * duration used for timers B, F, H, and J (UDP) by the SIP transaction engine. * The timeout value T1x64 can be adjusted separately from the initial * retransmission interval T1, which is set with NTATAG_SIP_T1(). - * + * * The default value for T1x64 is 64 times value of T1, or 32000 milliseconds. * * @par Used with @@ -529,11 +529,11 @@ /**@def NTATAG_SIP_T2(x) * - * Maximum retransmission interval (in milliseconds) + * Maximum retransmission interval (in milliseconds) * * Set the maximum retransmission interval used by the SIP transaction * engine. The T2 is the maximum duration used for the timers E (UDP) and G - * by the SIP transaction engine. Note that the timer A is not capped by T2. + * by the SIP transaction engine. Note that the timer A is not capped by T2. * Retransmission interval of INVITE requests grows exponentially until the * timer B fires. * @@ -545,7 +545,7 @@ * unsigned int * * @par Values - * - Value of SIP T2 in milliseconds + * - Value of SIP T2 in milliseconds * * @par Default Value * - #NTA_SIP_T2 or 4000 (milliseconds) @@ -556,7 +556,7 @@ /**@def NTATAG_SIP_T4(x) * - * Transaction lifetime (in milliseconds) + * Transaction lifetime (in milliseconds) * * Set the lifetime for completed transactions used by the SIP transaction * engine. A completed transaction is kept around for the duration of T4 in @@ -696,11 +696,11 @@ /**@def NTATAG_DEBUG_DROP_PROB(x) * - * Packet drop probability for debugging. + * Packet drop probability for debugging. * * The packet drop probability parameter is useful mainly for debugging * purposes. The stack drops an incoming message received over an unreliable - * transport (such as UDP) with the given probability. The range is in 0 .. + * transport (such as UDP) with the given probability. The range is in 0 .. * 1000, 500 means p=0.5. * * @par Used with @@ -733,7 +733,7 @@ * nta_agent_add_tport() * * @par Parameter type - * string + * string * * @par Values * - semicolon-separated parameter-value pairs, passed to the SigComp plugin @@ -771,7 +771,7 @@ /**@def NTATAG_SIGCOMP_AWARE(x) * - * Indicate that the application is SigComp-aware. + * Indicate that the application is SigComp-aware. * * @note This tag is has no effect without a SigComp plugin. * @@ -794,7 +794,7 @@ /**@def NTATAG_SIGCOMP_ALGORITHM(x) * - * Specify SigComp algorithm. + * Specify SigComp algorithm. * * @note This tag is has no effect without a SigComp plugin. * @@ -804,7 +804,7 @@ * nta_agent_add_tport() * * @par Parameter type - * string + * string * * @par Values * - opaque string passed to the SigComp plugin @@ -827,7 +827,7 @@ * - silently discard duplicate final responses to INVITE * - retransmit preliminary responses (101..199) to INVITE request in regular * intervals ("timer N2") - * - retransmit 2XX response to INVITE request with exponential intervals + * - retransmit 2XX response to INVITE request with exponential intervals * - handle ACK sent in 2XX response to an INVITE using the * #nta_ack_cancel_f callback bound to #nta_incoming_t with * nta_incoming_bind() @@ -844,12 +844,12 @@ * or false (zero or NULL pointer) * * @par Values - * - true - act as an UA - * - false - act as an proxy + * - true - act as an UA + * - false - act as an proxy * * @par Default Value * - 0 (false) - * + * * @sa NTATAG_MERGE_482() */ tag_typedef_t ntatag_ua = BOOLTAG_TYPEDEF(ua); @@ -964,7 +964,7 @@ * to a request within half of the SIP T2 (the default value for T2 is 4000 * milliseconds, so the extra 100 Trying would be sent after 2 seconds). * - * @par Used with + * @par Used with * nua_create(), nua_set_params(), * nta_agent_create(), nta_agent_set_params() * @@ -985,7 +985,7 @@ /**@def NTATAG_TIMEOUT_408(x) * - * Generate "408 Request Timeout" response when request times out. + * Generate "408 Request Timeout" response when request times out. * * This tag is used to prevent stack from generating extra 408 response * messages to non-INVITE requests upon timeout. As per recommended by @@ -1013,12 +1013,12 @@ /**@def NTATAG_PASS_408(x) * - * Pass "408 Request Timeout" responses to the client. + * Pass "408 Request Timeout" responses to the client. * * As per recommended by @RFC4320, the 408 Request Timeout responses * to non-INVITE transaction are not sent over the network to the client by * default. The application can ask stack to pass the 408 responses with - * NTATAG_PASS_408(1). + * NTATAG_PASS_408(1). * * Note that unlike NTATAG_PASS_100(), this tags changes the way server side * works. @@ -1032,7 +1032,7 @@ * or false (zero or NULL pointer) * * @par Values - * - true - pass superfluous 408 responses + * - true - pass superfluous 408 responses * - false - discard superfluous 408 responses * * @sa @RFC4320, NTATAG_EXTRA_100(), NTATAG_TIMEOUT_408() @@ -1042,7 +1042,7 @@ /**@def NTATAG_MERGE_482(x) * - * Merge requests, send 482 to other requests. + * Merge requests, send 482 to other requests. * * If an User-Agent receives a duplicate request with same @CallID, @CSeq, * @From tag but different topmost @Via header (see @RFC3261 section 8.2.2.2 @@ -1111,7 +1111,7 @@ /**@def NTATAG_CANCEL_408(x) * - * Do not send a CANCEL but just timeout the request. + * Do not send a CANCEL but just timeout the request. * * Calling nta_outgoing_tcancel() with this tag set marks request as * canceled but does not actually send a CANCEL request. If @@ -1142,7 +1142,7 @@ * Terminated response to the client after returning from the * #nta_incoming_f callback bound to the transaction with * nta_incoming_bind() - * + * * The application can delay sending the response to the original request * when NTATAG_CANCEL_408(0) is used. This is useful, for instance, with a * proxy that forwards the CANCEL downstream and the forwards the response @@ -1166,7 +1166,7 @@ /**@def NTATAG_TAG_3261(x) * - * When responding to requests, use unique tags. + * When responding to requests, use unique tags. * * If set the UA would generate an unique @From/@To tag for all dialogs. If * unset UA would reuse same tag in order to make it easier to re-establish @@ -1190,7 +1190,7 @@ /**@def NTATAG_REL100(x) * - * Include rel100 in INVITE requests. + * Include rel100 in INVITE requests. * * Include feature tag "100rel" in @Supported header of the INVITE requests. * @@ -1217,14 +1217,14 @@ /**@def NTATAG_USE_TIMESTAMP(x) * - * Use @Timestamp header. + * Use @Timestamp header. * * If set, a @Timestamp header would be added to stateful requests. The * header can be used to calculate the roundtrip transport latency between * client and server. * * @par Used with - * nua_create(), + * nua_create(), * nta_agent_create(), * nta_agent_set_params(), * nta_outgoing_mcreate(), nta_outgoing_tcreate(), @@ -1244,14 +1244,14 @@ /**@def NTATAG_SIPFLAGS(x) * - * Set SIP parser flags. + * Set SIP parser flags. * * The SIP parser flags affect how the messages are parsed and the result * presented to the application. They also control encoding of messages. * The most important flags are as follows: - * - MSG_FLG_COMPACT - use compact form + * - MSG_FLG_COMPACT - use compact form * (single-letter header names, minimum whitespace) - * - MSG_FLG_EXTRACT_COPY - cache printable copy of headers when parsing. + * - MSG_FLG_EXTRACT_COPY - cache printable copy of headers when parsing. * Using this flag can speed up proxy processing considerably. It is * implied when the parsed messages are logged (because #TPORT_LOG * environment variable is set, or TPTAG_LOG() is used. @@ -1261,7 +1261,7 @@ * nta_agent_create(), nta_agent_set_params() * * @par Parameter type - * unsigned int + * unsigned int * * @par Values * - Bitwise OR of SIP parser flags (enum #msg_flg_user) @@ -1272,13 +1272,13 @@ /**@def NTATAG_CLIENT_RPORT(x) * - * Enable client-side "rport". + * Enable client-side "rport". * * This tag controls @RFC3581 support on client side. The "rport" parameter * is used when the response has to be routed symmetrically through a NAT box. * * The client-side support involves just adding the "rport" parameter to the topmost - * @Via header before the request is sent. + * @Via header before the request is sent. * * @note By default, the client "rport" is disabled when nta is used, and * enabled when nua is used. @@ -1340,7 +1340,7 @@ /**@def NTATAG_TCP_RPORT(x) * - * Use rport with TCP, too. + * Use rport with TCP, too. * * @par Used with * nua_create(), nua_set_params(), @@ -1351,7 +1351,7 @@ * or false (zero or NULL pointer) * * @par Values - * - true - include rport parameter in the TCP via line on client side + * - true - include rport parameter in the TCP via line on client side * - false - do not include rport parameter in the TCP via line on client side * * @sa @RFC3581, NTATAG_CLIENT_RPORT(), NTATAG_SERVER_RPORT(), @Via @@ -1360,12 +1360,12 @@ /**@def NTATAG_PRELOAD(x) * - * Preload by N bytes. + * Preload by N bytes. * * When the memory block is allocated for an incoming request by the stack, * the stack can allocate some extra memory for the parser in addition to - * the memory used by the actual message contents. - * + * the memory used by the actual message contents. + * * While wasting some memory, this can speed up parsing considerably. * Recommended amount of preloading per packet is 1500 bytes. * @@ -1385,7 +1385,7 @@ /**@def NTATAG_USE_NAPTR(x) * - * If true, try to use NAPTR records when resolving. + * If true, try to use NAPTR records when resolving. * * The application can disable NTA from using NAPTR records when resolving * SIP URIs. @@ -1433,7 +1433,7 @@ /**@def NTATAG_RSEQ(x) * - * @RSeq value for nta_outgoing_prack(). + * @RSeq value for nta_outgoing_prack(). * * @par Used with * nta_outgoing_prack() @@ -1576,7 +1576,7 @@ * * Return number of bad SIP messages that has been received. * - * @sa nta_agent_get_stats(), NTATAG_S_RECV_MSG_REF(), + * @sa nta_agent_get_stats(), NTATAG_S_RECV_MSG_REF(), * NTATAG_S_BAD_REQUEST_REF(), NTATAG_S_BAD_RESPONSE_REF(). */ tag_typedef_t ntatag_s_bad_message = USIZETAG_TYPEDEF(s_bad_message); @@ -1612,7 +1612,7 @@ * * @sa nta_agent_get_stats(), NTATAG_DEBUG_DROP_PROB(), * NTATAG_S_DROP_RESPONSE_REF() - * + * * @note The value was not calculated before @VERSION_1_12_7. */ tag_typedef_t ntatag_s_drop_request = USIZETAG_TYPEDEF(s_drop_request); @@ -1626,7 +1626,7 @@ * * @sa nta_agent_get_stats(), NTATAG_DEBUG_DROP_PROB(), * NTATAG_S_DROP_REQUEST_REF() - * + * * @note The value was not calculated before @VERSION_1_12_7. */ tag_typedef_t ntatag_s_drop_response = USIZETAG_TYPEDEF(s_drop_response); @@ -1651,7 +1651,7 @@ * * Get number of server transactions created. * - * Return number of server transactions created. + * Return number of server transactions created. * * @sa nta_agent_get_stats(), NTATAG_S_RECV_RESPONSE_REF(), * NTATAG_S_CLIENT_TR_REF(), NTATAG_S_DIALOG_TR_REF(), Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/portbind.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/portbind.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/portbind.c Tue Dec 16 13:05:22 2008 @@ -24,9 +24,9 @@ /**@internal @file portbind.c * @brief Bind a socket to an UDP/TCP port and return the port number - * + * * @author Pekka Pessi - * + * * @date Created: Thu Mar 25 12:12:25 2004 ppessi */ @@ -123,7 +123,7 @@ else if (strcmp(opt, "4") == 0) o_ip4 = 0; #endif - else + else usage(1); } @@ -166,7 +166,7 @@ names[N] = pent->p_name, protos[N] = pent->p_proto, types[N++] = SOCK_RAW; } - if (o_tcp) + if (o_tcp) names[N] = "TCP", protos[N] = IPPROTO_TCP, types[N++] = SOCK_STREAM; if (o_udp) names[N] = "UDP", protos[N] = IPPROTO_UDP, types[N++] = SOCK_DGRAM; @@ -186,7 +186,7 @@ #endif if (s == INVALID_SOCKET) { - fprintf(stderr, "%s: socket(AF_INET%s, 0, %s): %s\n", + fprintf(stderr, "%s: socket(AF_INET%s, 0, %s): %s\n", name, af == AF_INET ? "" : "6", names[n], strerror(errno)); exit(1); } @@ -212,7 +212,7 @@ continue; } } - + fprintf(stderr, "%s: bind(%s): %s\n", name, o_port, strerror(errno)); exit(1); } @@ -221,7 +221,7 @@ struct sockaddr_storage ss[1]; struct sockaddr *sa = (void *)ss; struct sockaddr_in *sin = (void *)ss; - + salen = sizeof *ss; if (getsockname(s, sa, &salen) == -1) { fprintf(stderr, "%s: getsockname(): %s\n", name, strerror(errno)); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/run_test_nta ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/run_test_nta (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/run_test_nta Tue Dec 16 13:05:22 2008 @@ -70,7 +70,7 @@ port=$(./portbind $v6flag $((port + 1))) bind=$port port=$(./portbind $v6flag $((port + 1))) contact=$port -# Disable IPv6 resolver for now +# Disable IPv6 resolver for now if false && eval $ipv6 ; then listen="listen-on-v6 port $bind { any; };" ns=$me6 @@ -151,11 +151,11 @@ ; No sensible NAPTR match (and we get 503) na503 NAPTR 20 15 "S" "SIP+D2F" "" a2 -; No SIP NAPTR match +; No SIP NAPTR match nona NAPTR 20 15 "S" "ZIP+D2U" "" a2 _sip._udp.nona SRV 1 10 $contact ip4 -; No SIP SRV match +; No SIP SRV match nosrv NAPTR 20 1 "s" "SIP+D2U" "" _sip._udp.nosrv NAPTR 20 2 "s" "SIP+D2U" "" _sip._udp.srv @@ -189,7 +189,7 @@ named -f -c $namedfile & pid=$! while ! test -r $pidfile && kill -0 $! -do +do sleep 1 done Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_read_payload.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_read_payload.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_read_payload.c Tue Dec 16 13:05:22 2008 @@ -22,13 +22,13 @@ * */ -/**@ingroup sl_utils +/**@ingroup sl_utils * @CFILE sl_read_payload.c * * @brief Functions for reading SIP message payload from a file. - * + * * @author Pekka Pessi - * + * * @date Created: Thu Sep 5 00:44:34 2002 ppessi */ @@ -112,10 +112,10 @@ if (buf == NULL) { perror(who); - su_free(home, pl); + su_free(home, pl); return NULL; } - + if (used < size) buf[used] = '\0'; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils.docs Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ /* -*- c -*- */ /**@defgroup sl_utils SIP Library Utilities - "sl_utils" - * + * * SIP library utilities provide some simple utility functions for printing * and managing SIP headers or messages. * Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils_log.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils_log.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils_log.c Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ /**@ingroup sl_utils * - * @CFILE sl_utils_log.c + * @CFILE sl_utils_log.c * @brief Implementation of SIP library utility logging functions. * * @author Pekka Pessi @@ -45,7 +45,7 @@ #include #include "sofia-sip/sl_utils.h" -/**Log a SIP message. +/**Log a SIP message. * * The function sl_message_log() logs shorthand information identifying * the SIP message to the given @a log at level @a level. The shorthand @@ -60,8 +60,8 @@ */ void sl_sip_log(su_log_t *log, int level, - char const *prefix, - sip_t const *sip, + char const *prefix, + sip_t const *sip, int details) { sip_cseq_t const *cs = sip->sip_cseq; @@ -70,7 +70,7 @@ log = su_log_default; assert(cs); - + if (sip->sip_request) { su_llog(log, level, "%s%s "URL_FORMAT_STRING" (CSeq %d %s)\n", @@ -114,19 +114,19 @@ sl_to_log(log, level, "\tTo: %s\n", sip->sip_to); } -/**Log a @From header. +/**Log a @From header. * * The function sl_from_log() logs the contents of @a from header to * the output @a log. The @a fmt specifies the output format, where %s * is replaced with header contents. If @a fmt is @c NULL, only the header * contents are logged. - * + * * @param log output log * @param level logging level of output - * @param fmt output format + * @param fmt output format * @param from @From header */ -void sl_from_log(su_log_t *log, int level, +void sl_from_log(su_log_t *log, int level, char const *fmt, sip_from_t const *from) { sip_addr_t a[1]; @@ -137,7 +137,7 @@ memcpy(a, from, sizeof a); a->a_params = NULL; if (!a->a_display) a->a_display = ""; - + sl_header_log(log, level, fmt, (sip_header_t *)a); } @@ -147,10 +147,10 @@ * log @a log with given @a level. The @a fmt specifies the output format, * where %s is replaced with header contents. If @a fmt is @c NULL, only the * header contents are logged. - * + * * @param log output log * @param level logging level of output - * @param fmt output format + * @param fmt output format * @param to @To header */ void sl_to_log(su_log_t *log, int level, char const *fmt, sip_to_t const *to) @@ -158,51 +158,51 @@ sl_from_log(log, level, fmt, (sip_from_t const *)to); } -/**Log a @Contact header. +/**Log a @Contact header. * * The function sl_contact_log() logs the contents of @a contact header * to the log @a log with given @a level. The @a fmt specifies the output * format, where %s is replaced with header contents. If @a fmt is @c NULL, * only the header contents are logged. - * + * * @param log output log * @param level logging level of output - * @param fmt output format + * @param fmt output format * @param contact @Contact header */ -void sl_contact_log(su_log_t *log, int level, +void sl_contact_log(su_log_t *log, int level, char const *fmt, sip_contact_t const *m) { sl_from_log(log, level, fmt, (sip_from_t const *)m); } -/**Log an @Allow header(s). +/**Log an @Allow header(s). * * The function sl_allow_log() logs the contents of @a allow header to * the log @a log with given @a level. The @a fmt specifies the output * format, where %s is replaced with header contents. If @a fmt is @c NULL, * only the header contents are logged. - * + * * @param log output log * @param level logging level of output - * @param fmt output format + * @param fmt output format * @param allow @Allow header * */ -void sl_allow_log(su_log_t *log, int level, +void sl_allow_log(su_log_t *log, int level, char const *fmt, sip_allow_t const *allow) { sl_header_log(log, level, fmt, (sip_header_t *)allow); } -/**Log a @Via header. +/**Log a @Via header. * * The function sl_via_log() logs the contents of @a via header to * the @a log. The @a fmt specifies the output format, where %s * is replaced with header contents. If @a fmt is @c NULL, only the header * contents are logged. - * + * * @param log output log * @param fmt format used when logging * @param v via header @@ -213,21 +213,21 @@ } -/**Log message payload. +/**Log message payload. * * The function sl_payload_log() logs the contents of @a payload object * to the output @a log. Each line in the payload is prepended with the * @a prefix. If @a prefix is @c NULL, only the header contents are logged. * For each line in payload, only first 70 charactes are logged, rest is * replaced with "...". - * + * * @param log output log * @param level logging level of output - * @param prefix prefix appended to each payload line + * @param prefix prefix appended to each payload line * @param pl payload object */ -void sl_payload_log(su_log_t *log, int level, - char const *prefix, +void sl_payload_log(su_log_t *log, int level, + char const *prefix, sip_payload_t const *pl) { char *s = pl->pl_data, *end = pl->pl_data + pl->pl_len; @@ -252,14 +252,14 @@ } } -/** Log a header. +/** Log a header. * * Logs the contents of an header to the output @a stream. The @a fmt - * specifies the output format, where %s is replaced with header contents. + * specifies the output format, where %s is replaced with header contents. * If @a fmt is @c NULL, only the header contents are logged. - * + * * @param stream output stream - * @param fmt output format + * @param fmt output format * @param h a SIP header object */ void sl_header_log(su_log_t *log, int level, char const *fmt, @@ -275,7 +275,7 @@ if ((size_t)len >= sizeof b) { s = malloc(len + 1); if (!s) return; sip_header_field_e(s, len + 1, h, 0); - } + } s[len] = '\0'; if (fmt == NULL) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils_print.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils_print.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sl_utils_print.c Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ /**@ingroup sl_utils * - * @CFILE sl_utils_print.c + * @CFILE sl_utils_print.c * @brief Implementation of SIP library utility print functions. * * @author Pekka Pessi @@ -42,7 +42,7 @@ #include #include "sofia-sip/sl_utils.h" -/**Print a SIP message. +/**Print a SIP message. * * The function sl_message_log() prints shorthand information identifying * the SIP message to the given output @a stream. The shorthand information @@ -54,7 +54,7 @@ *?@param sip message to be logged. * @param details flag specifying if detailed output is desired. */ -void sl_message_log(FILE *stream, +void sl_message_log(FILE *stream, char const *prefix, sip_t const *sip, int details) { sip_cseq_t const *cs = sip->sip_cseq; @@ -63,7 +63,7 @@ stream = stdout; assert(cs); - + if (sip->sip_request) { fprintf(stream, "%s%s "URL_FORMAT_STRING" (CSeq %d %s)\n", @@ -100,18 +100,18 @@ sl_to_print(stream, "\tTo: %s\n", sip->sip_to); } -/** Print @From header. +/** Print @From header. * * The function sl_from_print() prints the contents of @a from header to * the output @a stream. The @a fmt specifies the output format, where %s * is replaced with header contents. If @a fmt is @c NULL, only the header * contents are printed. - * + * * @param stream output stream - * @param fmt output format + * @param fmt output format * @param from header object - * - * @return + * + * @return * The function sl_from_print() returns number of bytes printed, * or -1 upon an error. */ @@ -125,7 +125,7 @@ memcpy(a, from, sizeof a); a->a_params = NULL; if (!a->a_display) a->a_display = ""; - + return sl_header_print(stream, fmt, (sip_header_t *)a); } @@ -135,12 +135,12 @@ * the output @a stream. The @a fmt specifies the output format, where %s * is replaced with header contents. If @a fmt is @c NULL, only the header * contents are printed. - * + * * @param stream output stream - * @param fmt output format + * @param fmt output format * @param to header object - * - * @return + * + * @return * The function sl_to_print() returns number of bytes printed, * or -1 upon an error. */ @@ -149,18 +149,18 @@ return sl_from_print(stream, fmt, (sip_from_t const *)to); } -/** Print @Contact header. +/** Print @Contact header. * * The function sl_contact_print() prints the contents of @a contact * header to the output @a stream. The @a fmt specifies the output format, * where %s is replaced with header contents. If @a fmt is @c NULL, only the * header contents are printed. - * + * * @param stream output stream - * @param fmt output format + * @param fmt output format * @param contact header object - * - * @return + * + * @return * The function sl_contact_print() returns number of bytes printed, * or -1 upon an error. */ @@ -170,18 +170,18 @@ return sl_from_print(stream, fmt, (sip_from_t const *)m); } -/** Print @Allow header(s). +/** Print @Allow header(s). * * The function sl_allow_print() prints the contents of @a allow header to * the output @a stream. The @a fmt specifies the output format, where %s * is replaced with header contents. If @a fmt is @c NULL, only the header * contents are printed. - * + * * @param stream output stream - * @param fmt output format + * @param fmt output format * @param allow header object - * - * @return + * + * @return * The function sl_allow_print() returns number of bytes printed, * or -1 upon an error. */ @@ -193,25 +193,25 @@ } -/** Print message payload. +/** Print message payload. * * The function sl_payload_print() prints the contents of @a payload * object to the output @a stream. The @a fmt specifies the output format, * where %s is replaced with header contents. If @a fmt is @c NULL, only the * header contents are printed. - * + * * @param stream output stream - * @param prefix prefix appended to each payload line + * @param prefix prefix appended to each payload line * @param pl payload object - * - * @return + * + * @return * The function sl_payload_print() returns number of bytes printed, * or -1 upon an error. */ issize_t sl_payload_print(FILE *stream, char const *prefix, sip_payload_t const *pl) { char *s = pl->pl_data, *end = pl->pl_data + pl->pl_len; - size_t n, total = 0, crlf = 1; + size_t n, total = 0, crlf = 1; while (s < end && *s != '\0') { n = strncspn(s, end - s, "\r\n"); @@ -228,18 +228,18 @@ return (issize_t)total; } -/** Print @Via header. +/** Print @Via header. * * The function sl_via_print() prints the contents of @a via header to * the output @a stream. The @a fmt specifies the output format, where %s * is replaced with header contents. If @a fmt is @c NULL, only the header * contents are printed. - * + * * @param stream output stream - * @param fmt output format + * @param fmt output format * @param v header object - * - * @return + * + * @return * The function sl_via_print() returns number of bytes printed, * or -1 upon an error. */ @@ -257,17 +257,17 @@ return -1; } -/** Print a header. +/** Print a header. * * Prints the contents of an header to the output @a stream. The @a fmt - * specifies the output format, where %s is replaced with header contents. + * specifies the output format, where %s is replaced with header contents. * If @a fmt is @c NULL, only the header contents are printed. - * + * * @param stream output stream - * @param fmt output format + * @param fmt output format * @param v header object - * - * @return + * + * @return * Number of bytes logged, or -1 upon an error. */ issize_t sl_header_print(FILE *stream, char const *fmt, sip_header_t const *h) @@ -282,7 +282,7 @@ if ((size_t)len >= sizeof b) { s = malloc(len + 1); if (!s) return -1; sip_header_field_e(s, len + 1, h, 0); - } + } s[len] = '\0'; if (fmt != NULL && strcmp(fmt, "%s") != 0) @@ -292,6 +292,6 @@ if (s != b) free(s); - + return len; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta.h Tue Dec 16 13:05:22 2008 @@ -48,7 +48,7 @@ SOFIA_BEGIN_DECLS /* ---------------------------------------------------------------------- - * 1) Types + * 1) Types */ /** NTA agent */ @@ -95,7 +95,7 @@ typedef NTA_INCOMING_MAGIC_T nta_incoming_magic_t; /* ---------------------------------------------------------------------- - * 2) Constants + * 2) Constants */ /** NTA API version number */ @@ -122,7 +122,7 @@ msg_t *msg, sip_t *sip); -SOFIAPUBFUN +SOFIAPUBFUN nta_agent_t *nta_agent_create(su_root_t *root, url_string_t const *name, nta_message_f *callback, @@ -148,12 +148,12 @@ SOFIAPUBFUN char const *nta_agent_newtag(su_home_t *, char const *fmt, nta_agent_t *); -SOFIAPUBFUN int nta_agent_set_params(nta_agent_t *agent, +SOFIAPUBFUN int nta_agent_set_params(nta_agent_t *agent, tag_type_t tag, tag_value_t value, ...); -SOFIAPUBFUN int nta_agent_get_params(nta_agent_t *agent, +SOFIAPUBFUN int nta_agent_get_params(nta_agent_t *agent, tag_type_t tag, tag_value_t value, ...); -SOFIAPUBFUN int nta_agent_get_stats(nta_agent_t *agent, +SOFIAPUBFUN int nta_agent_get_stats(nta_agent_t *agent, tag_type_t tag, tag_value_t value, ...); /* ---------------------------------------------------------------------- @@ -164,9 +164,9 @@ SOFIAPUBFUN int nta_msg_complete(msg_t *msg); -SOFIAPUBFUN int nta_msg_request_complete(msg_t *msg, - nta_leg_t *leg, - sip_method_t method, +SOFIAPUBFUN int nta_msg_request_complete(msg_t *msg, + nta_leg_t *leg, + sip_method_t method, char const *method_name, url_string_t const *req_url); @@ -176,13 +176,13 @@ /* ---------------------------------------------------------------------- * 5) Leg-level prototypes */ -typedef int nta_request_f(nta_leg_magic_t *lmagic, +typedef int nta_request_f(nta_leg_magic_t *lmagic, nta_leg_t *leg, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip); -SOFIAPUBFUN -nta_leg_t *nta_leg_tcreate(nta_agent_t *agent, +SOFIAPUBFUN +nta_leg_t *nta_leg_tcreate(nta_agent_t *agent, nta_request_f *req_callback, nta_leg_magic_t *magic, tag_type_t tag, tag_value_t value, ...); @@ -217,18 +217,18 @@ SOFIAPUBFUN uint32_t nta_leg_get_rseq(nta_leg_t const *leg); /** Set UAC route. */ -SOFIAPUBFUN int nta_leg_client_route(nta_leg_t *leg, - sip_record_route_t const *route, +SOFIAPUBFUN int nta_leg_client_route(nta_leg_t *leg, + sip_record_route_t const *route, sip_contact_t const *contact); /** Set UAS route */ -SOFIAPUBFUN int nta_leg_server_route(nta_leg_t *leg, - sip_record_route_t const *route, +SOFIAPUBFUN int nta_leg_server_route(nta_leg_t *leg, + sip_record_route_t const *route, sip_contact_t const *contact); /** Get route */ -SOFIAPUBFUN int nta_leg_get_route(nta_leg_t *leg, - sip_route_t const **return_route, +SOFIAPUBFUN int nta_leg_get_route(nta_leg_t *leg, + sip_route_t const **return_route, sip_contact_t const **return_target); /** Get leg by destination */ @@ -237,7 +237,7 @@ /** Get leg by dialog */ SOFIAPUBFUN -nta_leg_t *nta_leg_by_dialog(nta_agent_t const *agent, +nta_leg_t *nta_leg_by_dialog(nta_agent_t const *agent, url_t const *request_uri, sip_call_id_t const *call_id, char const *from_tag, @@ -258,7 +258,7 @@ nta_leg_t *nta_leg_by_call_id(nta_agent_t *sa, const char *call_id); /* ---------------------------------------------------------------------- - * 6) Prototypes for incoming transactions + * 6) Prototypes for incoming transactions */ SOFIAPUBFUN @@ -271,19 +271,19 @@ SOFIAPUBFUN nta_incoming_t *nta_incoming_default(nta_agent_t *agent); typedef int nta_ack_cancel_f(nta_incoming_magic_t *imagic, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip); -SOFIAPUBFUN void nta_incoming_bind(nta_incoming_t *irq, +SOFIAPUBFUN void nta_incoming_bind(nta_incoming_t *irq, nta_ack_cancel_f *callback, nta_incoming_magic_t *imagic); SOFIAPUBFUN -nta_incoming_magic_t *nta_incoming_magic(nta_incoming_t *irq, +nta_incoming_magic_t *nta_incoming_magic(nta_incoming_t *irq, nta_ack_cancel_f *callback); SOFIAPUBFUN -nta_incoming_t *nta_incoming_find(nta_agent_t const *agent, +nta_incoming_t *nta_incoming_find(nta_agent_t const *agent, sip_t const *sip, sip_via_t const *v); @@ -307,7 +307,7 @@ SOFIAPUBFUN int nta_incoming_complete_response(nta_incoming_t *irq, msg_t *msg, - int status, + int status, char const *phrase, tag_type_t tag, tag_value_t value, ...); @@ -315,8 +315,8 @@ msg_t *nta_incoming_create_response(nta_incoming_t *irq, int status, char const *phrase); SOFIAPUBFUN -int nta_incoming_treply(nta_incoming_t *ireq, - int status, char const *phrase, +int nta_incoming_treply(nta_incoming_t *ireq, + int status, char const *phrase, tag_type_t tag, tag_value_t value, ...); SOFIAPUBFUN int nta_incoming_mreply(nta_incoming_t *irq, msg_t *msg); @@ -378,7 +378,7 @@ nta_outgoing_t *nta_outgoing_mcreate(nta_agent_t *agent, nta_response_f *callback, nta_outgoing_magic_t *magic, - url_string_t const *route_url, + url_string_t const *route_url, msg_t *msg, tag_type_t tag, tag_value_t value, ...); @@ -405,7 +405,7 @@ SOFIAPUBFUN msg_t *nta_outgoing_getrequest(nta_outgoing_t *orq); SOFIAPUBFUN -nta_outgoing_t *nta_outgoing_tagged(nta_outgoing_t *orq, +nta_outgoing_t *nta_outgoing_tagged(nta_outgoing_t *orq, nta_response_f *callback, nta_outgoing_magic_t *magic, char const *to_tag, @@ -414,7 +414,7 @@ SOFIAPUBFUN int nta_outgoing_cancel(nta_outgoing_t *); SOFIAPUBFUN -nta_outgoing_t *nta_outgoing_tcancel(nta_outgoing_t *orq, +nta_outgoing_t *nta_outgoing_tcancel(nta_outgoing_t *orq, nta_response_f *callback, nta_outgoing_magic_t *magic, tag_type_t, tag_value_t, ...); @@ -424,7 +424,7 @@ SOFIAPUBFUN nta_outgoing_t *nta_outgoing_find(nta_agent_t const *sa, msg_t const *msg, - sip_t const *sip, + sip_t const *sip, sip_via_t const *v); SOFIAPUBFUN int nta_tport_keepalive(nta_outgoing_t *orq); @@ -464,19 +464,19 @@ typedef int nta_prack_f(nta_reliable_magic_t *rmagic, nta_reliable_t *rel, - nta_incoming_t *prack, + nta_incoming_t *prack, sip_t const *sip); SOFIAPUBFUN nta_reliable_t *nta_reliable_treply(nta_incoming_t *ireq, nta_prack_f *callback, nta_reliable_magic_t *rmagic, - int status, char const *phrase, - tag_type_t tag, + int status, char const *phrase, + tag_type_t tag, tag_value_t value, ...); SOFIAPUBFUN -nta_reliable_t *nta_reliable_mreply(nta_incoming_t *irq, +nta_reliable_t *nta_reliable_mreply(nta_incoming_t *irq, nta_prack_f *callback, nta_reliable_magic_t *rmagic, msg_t *msg); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_stateless.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_stateless.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_stateless.h Tue Dec 16 13:05:22 2008 @@ -24,9 +24,9 @@ #ifndef NTA_STATELESS_H /** Defined when has been included. */ -#define NTA_STATELESS_H +#define NTA_STATELESS_H -/**@file sofia-sip/nta_stateless.h +/**@file sofia-sip/nta_stateless.h * @brief NTA functions for stateless SIP processing. * * @author Pekka Pessi @@ -46,18 +46,18 @@ * sip_t *sip); * * Callback for incoming messages. - * + * * The typedef nta_message_f() defines prototype for the callback functions * invoked by NTA when it has received an incoming message that will be * processed statelessly. - * + * * The application can either discard the message by calling * nta_msg_discard(), forward it by calling nta_msg_tsend() or reply to the * message by calling nta_msg_treply(). When application wants to process a * request statefully, it passes the message to a leg with the function * nta_leg_stateful(). A new leg can be created by calling the function * nta_leg_tcreate(). - * + * * @par Prototype * @code * int message_callback(nta_agent_magic_t *context, @@ -65,7 +65,7 @@ * msg_t *msg, * sip_t *sip); * @endcode - * + * * @param context agent context * @param agent agent handle * @param msg received message @@ -90,7 +90,7 @@ /** Reply to a request message. */ SOFIAPUBFUN -int nta_msg_treply(nta_agent_t *self, +int nta_msg_treply(nta_agent_t *self, msg_t *msg, int status, char const *phrase, tag_type_t tag, tag_value_t value, ...); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tag.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tag.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tag.h Tue Dec 16 13:05:22 2008 @@ -26,7 +26,7 @@ /** Defined when has been included. */ #define NTA_TAG_H -/**@file sofia-sip/nta_tag.h +/**@file sofia-sip/nta_tag.h * @brief NTA tags * * @author Pekka Pessi @@ -142,7 +142,7 @@ NTA_DLL extern tag_typedef_t ntatag_smime_ref; #define NTATAG_SMIME_REF(x) ntatag_smime_ref, tag_ptr_vr(&(x), (x)) - + NTA_DLL extern tag_typedef_t ntatag_maxsize; #define NTATAG_MAXSIZE(x) ntatag_maxsize, tag_usize_v((x)) @@ -341,13 +341,13 @@ NTA_DLL extern tag_typedef_t ntatag_rel100_ref; #define NTATAG_REL100_REF(x) ntatag_rel100_ref, tag_bool_vr(&(x)) - + NTA_DLL extern tag_typedef_t ntatag_sipflags; #define NTATAG_SIPFLAGS(x) ntatag_sipflags, tag_uint_v((x)) NTA_DLL extern tag_typedef_t ntatag_sipflags_ref; #define NTATAG_SIPFLAGS_REF(x) ntatag_sipflags_ref, tag_uint_vr(&(x)) - + NTA_DLL extern tag_typedef_t ntatag_client_rport; #define NTATAG_CLIENT_RPORT(x) ntatag_client_rport, tag_bool_v((x)) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tport.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tport.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tport.h Tue Dec 16 13:05:22 2008 @@ -29,11 +29,11 @@ /** * @file sofia-sip/nta_tport.h * @brief Transport and SigComp handling - * + * * @author Pekka Pessi - * + * * @date Created: Thu Oct 7 20:04:39 2004 ppessi - * + * */ #ifndef NTA_H Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/sl_utils.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/sl_utils.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/sl_utils.h Tue Dec 16 13:05:22 2008 @@ -24,10 +24,10 @@ #ifndef SL_UTILS_H /** Defined when has been included. */ -#define SL_UTILS_H +#define SL_UTILS_H -/**@ingroup sl_utils - * +/**@ingroup sl_utils + * * @file sofia-sip/sl_utils.h @brief Prototypes for SIP helper functions. * * @author Pekka Pessi @@ -57,7 +57,7 @@ SOFIAPUBFUN sip_payload_t *sl_fread_payload(su_home_t *home, FILE *); /* Printing functions */ -SOFIAPUBFUN void +SOFIAPUBFUN void sl_message_log(FILE *, char const *prefix, sip_t const *, int details); SOFIAPUBFUN issize_t sl_header_print(FILE *, char const *fmt, sip_header_t const *h), @@ -69,7 +69,7 @@ sl_via_print(FILE *, char const *fmt, sip_via_t const *v); /* Logging functions */ -SOFIAPUBFUN void +SOFIAPUBFUN void sl_sip_log(su_log_t*, int lvl, char const *, sip_t const *, int details), sl_header_log(su_log_t *, int lvl, char const *, sip_header_t const *h), sl_from_log(su_log_t *, int lvl, char const *, sip_from_t const *from), Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta.c Tue Dec 16 13:05:22 2008 @@ -200,14 +200,14 @@ static int test_fix_467(agent_t *ag); static int test_for_ack(agent_t *ag, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip); static int test_for_ack_or_timeout(agent_t *ag, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip); static int wait_for_ack_or_cancel(agent_t *ag, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip); int agent_callback(agent_t *ag, @@ -218,14 +218,14 @@ if (tstflags & tst_verbatim) { if (sip->sip_request) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } else { - printf("%s: %s: %s %03d %s\n", name, __func__, - sip->sip_status->st_version, - sip->sip_status->st_status, + printf("%s: %s: %s %03d %s\n", name, __func__, + sip->sip_status->st_version, + sip->sip_status->st_status, sip->sip_status->st_phrase); } } @@ -245,14 +245,14 @@ if (leg == ag->ag_default_leg) match = "ag_default_leg"; - else if (leg == ag->ag_server_leg) + else if (leg == ag->ag_server_leg) match = "ag_server_leg"; else if (leg == ag->ag_alice_leg) match = "ag_alice_leg"; else if (leg == ag->ag_bob_leg) match = "ag_bob_leg"; - printf("%s: %s: %smatched with %s\n", name, func, + printf("%s: %s: %smatched with %s\n", name, func, always ? "mis" : "", match); } @@ -261,14 +261,14 @@ { if (leg == ag->ag_default_leg) ag->ag_default_leg = NULL; - else if (leg == ag->ag_server_leg) + else if (leg == ag->ag_server_leg) ag->ag_server_leg = NULL; else if (leg == ag->ag_alice_leg) ag->ag_alice_leg = NULL; else if (leg == ag->ag_bob_leg) ag->ag_bob_leg = NULL; - else - printf("%s:%u: %s: did not exist\n", + else + printf("%s:%u: %s: did not exist\n", __FILE__, __LINE__, __func__); nta_leg_destroy(leg); @@ -282,7 +282,7 @@ { if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -320,7 +320,7 @@ { if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -336,7 +336,7 @@ { if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -407,9 +407,9 @@ if (tstflags & tst_verbatim) { if (sip) - printf("%s: %s: response %s %03d %s\n", name, ctx->c_name, - sip->sip_status->st_version, - sip->sip_status->st_status, + printf("%s: %s: response %s %03d %s\n", name, ctx->c_name, + sip->sip_status->st_version, + sip->sip_status->st_status, sip->sip_status->st_phrase); else printf("%s: %s: callback %03d\n", name, ctx->c_name, @@ -439,7 +439,7 @@ } /** Deinit client. Return nonzero if client checks failed. */ -static +static int client_deinit(client_t *c) { int errors = c->c_errors; @@ -449,14 +449,14 @@ if (c->c_orq) nta_outgoing_destroy(c->c_orq), c->c_orq = NULL; - c->c_errors = 0; + c->c_errors = 0; c->c_status = 0; return errors; } -static +static void nta_test_run(agent_t *ag) { for (ag->ag_running = 1; ag->ag_running;) { @@ -469,7 +469,7 @@ /** Run client test. Return nonzero if client checks failed. */ -static +static int client_run_with(client_t *c, int expected, void (*runner)(client_t *c)) { int resulting; @@ -489,7 +489,7 @@ return 0; } -static +static void until_final_received(client_t *c) { for (c->c_final = 0; !c->c_final; ) { @@ -500,7 +500,7 @@ } } -static +static int client_run(client_t *c, int expected) { return client_run_with(c, expected, until_final_received); @@ -519,13 +519,13 @@ } } -static +static int client_run_until_acked(client_t *c, int expected) { return client_run_with(c, expected, until_server_acked); } -void +void until_server_canceled(client_t *c) { agent_t *ag = c->c_ag; @@ -538,7 +538,7 @@ } } -static +static int client_run_until_canceled(client_t *c, int expected) { return client_run_with(c, expected, until_server_canceled); @@ -552,7 +552,7 @@ char const *contact = "sip:*:*;comp=sigcomp"; su_sockaddr_t su; socklen_t sulen, sulen0; - su_socket_t s; + su_socket_t s; int af, err = -1; BEGIN(); @@ -607,7 +607,7 @@ } TEST_1(bind(s, &su.su_sa, sulen) < 0 ? (perror("bind"), 0) : 1); ag->ag_down_socket = s; - + /* Create agent */ ag->ag_agent = nta_agent_create(ag->ag_root, (url_string_t *)contact, @@ -680,7 +680,7 @@ TEST_1(ag->ag_alice = sip_from_dup(ag->ag_home, from)); } { - char const data[] = + char const data[] = "v=0\r\n" "o=- 425432 423412 IN IP4 127.0.0.1\r\n" "s= \r\n" @@ -694,7 +694,7 @@ { sip_contact_t *m; - ag->ag_aliases = + ag->ag_aliases = sip_contact_make(ag->ag_home, "sip:127.0.0.1, sip:localhost, sip:[::1]"); TEST_1(ag->ag_aliases); TEST_1(ag->ag_aliases->m_next); @@ -709,43 +709,43 @@ m->m_next = ag->ag_aliases; ag->ag_aliases = m; - err = nta_agent_set_params(ag->ag_agent, + err = nta_agent_set_params(ag->ag_agent, NTATAG_ALIASES(ag->ag_aliases), NTATAG_REL100(1), - NTATAG_UA(1), - NTATAG_MERGE_482(1), + NTATAG_UA(1), + NTATAG_MERGE_482(1), NTATAG_USE_NAPTR(1), NTATAG_USE_SRV(1), NTATAG_MAX_FORWARDS(20), TAG_END()); TEST(err, 7); - err = nta_agent_set_params(ag->ag_agent, + err = nta_agent_set_params(ag->ag_agent, NTATAG_ALIASES(ag->ag_aliases), NTATAG_DEFAULT_PROXY("sip:127.0.0.1"), TAG_END()); TEST(err, 2); - err = nta_agent_set_params(ag->ag_agent, + err = nta_agent_set_params(ag->ag_agent, NTATAG_ALIASES(ag->ag_aliases), NTATAG_DEFAULT_PROXY(NULL), TAG_END()); TEST(err, 2); - err = nta_agent_set_params(ag->ag_agent, + err = nta_agent_set_params(ag->ag_agent, NTATAG_DEFAULT_PROXY("tel:+35878008000"), TAG_END()); TEST(err, -1); } - + { url_t url[1]; /* Create the server leg */ *url = *ag->ag_aliases->m_url; url->url_user = "%"; - ag->ag_server_leg = nta_leg_tcreate(ag->ag_agent, + ag->ag_server_leg = nta_leg_tcreate(ag->ag_agent, leg_callback_200, ag, NTATAG_NO_DIALOG(1), @@ -755,14 +755,14 @@ } END(); -} +} int test_reinit(agent_t *ag) { BEGIN(); /* Create a new default leg */ nta_leg_destroy(ag->ag_default_leg), ag->ag_default_leg = NULL; - TEST_1(ag->ag_default_leg = nta_leg_tcreate(ag->ag_agent, + TEST_1(ag->ag_default_leg = nta_leg_tcreate(ag->ag_agent, leg_callback_200, ag, NTATAG_NO_DIALOG(1), @@ -795,7 +795,7 @@ free(ag->ag_mclass), ag->ag_mclass = NULL; END(); -} +} static int readfile(FILE *f, void **contents) @@ -804,13 +804,13 @@ char *buffer = NULL; long size; size_t len; - + /* Read whole file in */ if (fseek(f, 0, SEEK_END) < 0 || (size = ftell(f)) < 0 || fseek(f, 0, SEEK_SET) < 0 || (long)(len = (size_t)size) != size) { - fprintf(stderr, "%s: unable to determine file size (%s)\n", + fprintf(stderr, "%s: unable to determine file size (%s)\n", __func__, strerror(errno)); return -1; } @@ -832,7 +832,7 @@ #if HAVE_DIRENT_H #include -#endif +#endif static int test_bad_messages(agent_t *ag) { @@ -860,13 +860,13 @@ } if (dir == NULL) { - fprintf(stderr, "test_nta: cannot find sip torture messages\n"); - fprintf(stderr, "test_nta: tried %s\n", name); + fprintf(stderr, "test_nta: cannot find sip torture messages\n"); + fprintf(stderr, "test_nta: tried %s\n", name); } offset = strlen(name); - TEST_1(ag->ag_default_leg = nta_leg_tcreate(ag->ag_agent, + TEST_1(ag->ag_default_leg = nta_leg_tcreate(ag->ag_agent, leg_callback_500, ag, NTATAG_NO_DIALOG(1), @@ -882,10 +882,10 @@ memset(hints, 0, sizeof hints); hints->ai_socktype = SOCK_DGRAM; hints->ai_protocol = IPPROTO_UDP; - + TEST(su_getaddrinfo(host, port, hints, &ai), 0); TEST_1(ai); s = su_socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); TEST_1(s != -1); - memset(su, 0, sulen = ai->ai_addrlen); + memset(su, 0, sulen = ai->ai_addrlen); su->su_len = sizeof su; su->su_family = ai->ai_family; TEST_1(bind(s, &su->su_sa, sulen) == 0); TEST_1(getsockname(s, &su->su_sa, &sulen) == 0); @@ -945,7 +945,7 @@ END(); } -static unsigned char const code[] = +static unsigned char const code[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; #include @@ -957,7 +957,7 @@ if (pl) { size_t i; char *data = (char *)pl->pl_data; - + for (i = 0; i < size; i++) { if ((i & 63) != 63) data[i] = code[su_randint(0, 63)]; @@ -969,15 +969,15 @@ return pl; } -static +static int client_check_to_tag(client_t *ctx, nta_outgoing_t *orq, sip_t const *sip) { - if (sip) + if (sip) TEST_1(sip->sip_to && sip->sip_to->a_tag); return 0; } -static +static int check_magic_branch(client_t *ctx, nta_outgoing_t *orq, sip_t const *sip) { if (sip) { @@ -1069,7 +1069,7 @@ url->url_params = "transport=udp"; - TEST_1(nta_agent_add_tport(ag->ag_agent, (url_string_t *)url, + TEST_1(nta_agent_add_tport(ag->ag_agent, (url_string_t *)url, TAG_END()) == 0); TEST_1(v = nta_agent_via(ag->ag_agent)); @@ -1103,7 +1103,7 @@ { /* Test 0.1 - * Send a message from default leg to default leg + * Send a message from default leg to default leg */ char const p_acid[] = "P-Access-Network-Info: IEEE-802.11g\n"; url_t url[1]; @@ -1113,8 +1113,8 @@ url->url_params = NULL; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = - nta_outgoing_tcreate(ag->ag_default_leg, + ctx->c_orq = + nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1144,15 +1144,15 @@ url_t url[1]; sip_t *sip; client_t ctx[1] = {{ ag, "Test 0.1.2", check_via_without_sigcomp }}; - + *url = *ag->ag_contact->m_url; /* Test that method parameter is stripped and headers in query are used */ url->url_params = "method=MESSAGE;user=IP"; url->url_headers = "organization=United%20Testers"; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = - nta_outgoing_tcreate(ag->ag_default_leg, + ctx->c_orq = + nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1171,7 +1171,7 @@ TEST_1(sip->sip_organization); TEST_S(sip->sip_organization->g_string, "United Testers"); TEST_S(sip->sip_request->rq_url->url_params, "user=IP"); - + nta_leg_bind(ag->ag_default_leg, leg_callback_200, ag); } @@ -1195,7 +1195,7 @@ ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1218,7 +1218,7 @@ /* Test 0.2 * Send a message from Bob to Alice - * This time specify a TCP URI, and include a large payload + * This time specify a TCP URI, and include a large payload * of 512 kB */ if (tcp) { @@ -1236,7 +1236,7 @@ TEST_1(pl = test_payload(ag->ag_home, size)); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, NULL, SIP_METHOD_MESSAGE, @@ -1257,16 +1257,16 @@ if (tcp_tport) { /* Test 0.2.1 - always use transport connection from NTATAG_TPORT() * - * Test bug reported by geaaru + * Test bug reported by geaaru * - NTATAG_TPORT() is not used if NTATAG_DEFAULT_PROXY() is given */ client_t ctx[1] = {{ ag, "Test 0.2.1", save_and_check_tcp }}; url_t url[1]; sip_payload_t *pl; tport_t *used_tport = NULL; - + ctx->c_extra = &used_tport; - + *url = *ag->ag_aliases->m_url; url->url_user = "alice"; @@ -1275,7 +1275,7 @@ TEST_1(pl = test_payload(ag->ag_home, 512)); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, NULL, SIP_METHOD_MESSAGE, @@ -1311,7 +1311,7 @@ url_t url[1]; sip_payload_t *pl; tport_t *used_tport = NULL; - + ctx->c_extra = &used_tport; TEST_1(tport_is_primary(tcp_tport)); @@ -1324,7 +1324,7 @@ url->url_params = NULL; /* No sigcomp */ ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, (url_string_t *)url, SIP_METHOD_MESSAGE, @@ -1363,7 +1363,7 @@ TEST_1(pl = test_payload(ag->ag_home, size)); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1395,7 +1395,7 @@ TEST_1(pl = test_payload(ag->ag_home, size)); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1436,7 +1436,7 @@ su_free(ag->ag_home, ag->ag_in_via), ag->ag_in_via = NULL; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1474,7 +1474,7 @@ TEST_1(pl = test_payload(ag->ag_home, size)); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1495,7 +1495,7 @@ if (udp) { /* Test 0.6 - * Send a message from default leg to server leg + * Send a message from default leg to server leg * using a prefilled Via header */ client_t ctx[1] = {{ ag, "Test 0.6", check_magic_branch }}; @@ -1505,19 +1505,19 @@ sip_via_init(via); via->v_protocol = sip_transport_udp; - + via->v_host = ag->ag_contact->m_url->url_host; via->v_port = ag->ag_contact->m_url->url_port; - + sip_via_add_param(ag->ag_home, via, "branch=MagicalBranch"); - nta_agent_set_params(ag->ag_agent, + nta_agent_set_params(ag->ag_agent, NTATAG_ALIASES(ag->ag_aliases), NTATAG_USER_VIA(1), TAG_END()); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1531,13 +1531,13 @@ TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_server_leg); - nta_agent_set_params(ag->ag_agent, + nta_agent_set_params(ag->ag_agent, NTATAG_USER_VIA(0), TAG_END()); } /* Test 0.7 - * Send a message from Bob to Alice using SCTP + * Send a message from Bob to Alice using SCTP */ if (sctp) { url_t url[1]; @@ -1557,7 +1557,7 @@ TEST_1(pl = test_payload(ag->ag_home, size)); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1580,7 +1580,7 @@ usize_t size = 128 * 1024; client_t ctx[1] = {{ ag, "Test 0.8" }}; - nta_agent_set_params(ag->ag_agent, + nta_agent_set_params(ag->ag_agent, NTATAG_MAXSIZE(65536), TAG_END()); @@ -1591,7 +1591,7 @@ ag->ag_expect_leg = ag->ag_server_leg; ag->ag_latest_leg = NULL; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1606,7 +1606,7 @@ TEST_1(!client_run(ctx, 413)); TEST_P(ag->ag_latest_leg, NULL); - nta_agent_set_params(ag->ag_agent, + nta_agent_set_params(ag->ag_agent, NTATAG_MAXSIZE(2 * 1024 * 1024), TAG_END()); } @@ -1619,10 +1619,10 @@ printf("%s: starting MESSAGE timeout test, completing in 4 seconds\n", name); - nta_agent_set_params(ag->ag_agent, + nta_agent_set_params(ag->ag_agent, NTATAG_TIMEOUT_408(1), - NTATAG_SIP_T1(25), - NTATAG_SIP_T1X64(64 * 25), + NTATAG_SIP_T1(25), + NTATAG_SIP_T1X64(64 * 25), NTATAG_SIP_T2(8 * 25), NTATAG_SIP_T4(10 * 25), TAG_END()); @@ -1633,7 +1633,7 @@ ag->ag_expect_leg = ag->ag_server_leg; ag->ag_latest_leg = NULL; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1654,7 +1654,7 @@ NTATAG_SIP_T4(NTA_SIP_T4), TAG_END()); } - + END(); } @@ -1666,7 +1666,7 @@ { if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -1685,7 +1685,7 @@ { if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -1711,14 +1711,14 @@ client_t ctx[1] = {{ ag, "Test 3.1" }}; /* Test 3.1 - * Check that when a incoming request is destroyed in callback, + * Check that when a incoming request is destroyed in callback, * a 500 response is sent */ ag->ag_expect_leg = ag->ag_default_leg; nta_leg_bind(ag->ag_default_leg, leg_callback_destroy, ag); - - ctx->c_orq = - nta_outgoing_tcreate(ag->ag_default_leg, + + ctx->c_orq = + nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1738,9 +1738,9 @@ client_t ctx[1] = {{ ag, "Test 3.2" }}; nta_leg_bind(ag->ag_default_leg, leg_callback_save, ag); - - ctx->c_orq = - nta_outgoing_tcreate(ag->ag_default_leg, + + ctx->c_orq = + nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1778,9 +1778,9 @@ nta_leg_bind(ag->ag_default_leg, leg_callback_200, ag); - nta_agent_set_params(ag->ag_agent, - NTATAG_SIP_T1(8 * 25), - NTATAG_SIP_T1X64(64 * 25), + nta_agent_set_params(ag->ag_agent, + NTATAG_SIP_T1(8 * 25), + NTATAG_SIP_T1X64(64 * 25), NTATAG_SIP_T4(10 * 25), TAG_END()); @@ -1805,7 +1805,7 @@ */ client_t ctx[1] = {{ ag, "Test 1.1" }}; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1826,7 +1826,7 @@ client_t ctx[1] = {{ ag, "Test 1.2" }}; url->url_host = "srv.example.org"; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1847,7 +1847,7 @@ client_t ctx[1] = {{ ag, "Test 1.3" }}; url->url_host = "ipv.example.org"; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1868,7 +1868,7 @@ client_t ctx[1] = {{ ag, "Test 1.4.1" }}; url->url_host = "down.example.org"; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1890,7 +1890,7 @@ client_t ctx[1] = {{ ag, "Test 1.4.2" }}; url->url_host = "na503.example.org"; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1911,7 +1911,7 @@ client_t ctx[1] = {{ ag, "Test 1.4.3" }}; url->url_host = "nona.example.org"; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1934,7 +1934,7 @@ client_t ctx[1] = {{ ag, "Test 1.4.4" }}; url->url_host = "nosrv.example.org"; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1949,7 +1949,7 @@ } { - /* Test 1.5.1 + /* Test 1.5.1 * Send a message to sip:srv.example.org;transport=tcp * Test outgoing_make_srv_query() */ @@ -1957,7 +1957,7 @@ url->url_host = "srv.example.org"; url->url_params = "transport=tcp"; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -1982,7 +1982,7 @@ url->url_host = "srv.example.org"; url->url_params = "transport=udp"; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -2007,7 +2007,7 @@ url->url_host = "srv2.example.org"; url->url_params = "transport=udp"; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -2032,7 +2032,7 @@ url->url_host = "srv.example.org"; url->url_port = ag->ag_contact->m_url->url_port; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -2056,7 +2056,7 @@ url->url_host = "a.example.org"; url->url_port = ag->ag_contact->m_url->url_port; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -2081,7 +2081,7 @@ url->url_host = "na.example.org"; ag->ag_expect_leg = ag->ag_default_leg; - TEST_1(ctx->c_orq = + TEST_1(ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -2106,7 +2106,7 @@ url->url_host = "down2.example.org"; url->url_port = ag->ag_contact->m_url->url_port; ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -2142,15 +2142,15 @@ nta_leg_bind(ag->ag_default_leg, leg_callback_200, ag); - nta_agent_set_params(ag->ag_agent, + nta_agent_set_params(ag->ag_agent, NTATAG_MAXSIZE(2 * 1024 * 1024), TAG_END()); BEGIN(); { - /* - * Send a message from default leg to default leg + /* + * Send a message from default leg to default leg * * We are now using url with an explicit port that does not match with * our own port number. @@ -2162,7 +2162,7 @@ url2->url_port = "9"; /* discard service */ ag->ag_expect_leg = ag->ag_default_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, (url_string_t *)url, SIP_METHOD_MESSAGE, @@ -2192,7 +2192,7 @@ * Alice to Bob. */ - ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, + ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, leg_callback_200, ag, SIPTAG_FROM(ag->ag_alice), @@ -2208,7 +2208,7 @@ /* Send message from Alice to Bob establishing the dialog */ ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_alice_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -2231,7 +2231,7 @@ ag->ag_expect_leg = ag->ag_alice_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_bob_leg, outgoing_callback, ctx, NULL, SIP_METHOD_MESSAGE, @@ -2246,7 +2246,7 @@ /* Send again message from Alice to Bob */ client_t ctx[1] = {{ ag, "Test 2.3" }}; ag->ag_expect_leg = ag->ag_bob_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_alice_leg, outgoing_callback, ctx, NULL, SIP_METHOD_MESSAGE, @@ -2256,14 +2256,14 @@ TEST_1(!client_run(ctx, 200)); TEST_P(ag->ag_latest_leg, ag->ag_bob_leg); } - + { /* Send message from Bob to Alice - * This time, however, specify request URI + * This time, however, specify request URI */ client_t ctx[1] = {{ ag, "Test 2.4" }}; ag->ag_expect_leg = ag->ag_alice_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_bob_leg, outgoing_callback, ctx, NULL, SIP_METHOD_MESSAGE, @@ -2289,7 +2289,7 @@ ssize_t n; memset(b, 0, size); - + for (;;) { su_root_step(ag->ag_root, 10L); if (su_wait(ag->ag_sink_wait, 1, 0) == 0) { @@ -2306,14 +2306,14 @@ BEGIN(); /* - * Test merging: send two messages with same + * Test merging: send two messages with same * from tag/call-id/cseq number to nta, * expect 200 and 408. */ char const rfc3261prefix[] = "z9hG4bK"; - char const template[] = + char const template[] = "%s " URL_PRINT_FORMAT " SIP/2.0\r\n" "Via: SIP/2.0/UDP 127.0.0.1:%s;branch=%s.%p\r\n" "Via: SIP/2.0/TCP fake.address.for.via.example.net;branch=z9hG4bK.%p\r\n" @@ -2357,9 +2357,9 @@ *u1 = *ag->ag_m_bob->m_url; snprintf(m1, sizeof m1, - template, + template, "MESSAGE", URL_PRINT_ARGS(u1), - /* Via */ ag->ag_sink_port, rfc3261prefix, (void *)m1, + /* Via */ ag->ag_sink_port, rfc3261prefix, (void *)m1, /* 2nd Via */ (void *)ag, /* CSeq */ 13, "MESSAGE", /* Call-ID */ (void *)ag, @@ -2370,7 +2370,7 @@ *u2 = *ag->ag_m_bob->m_url; snprintf(m2, sizeof m2, - template, + template, "MESSAGE", URL_PRINT_ARGS(u2), /* Via */ ag->ag_sink_port, rfc3261prefix, (void *)m2, /* 2nd Via */ (void *)ag, @@ -2398,7 +2398,7 @@ { /* - * Check that request with same call-id, cseq and from-tag + * Check that request with same call-id, cseq and from-tag * are not merged if the method is different. */ nta_leg_bind(ag->ag_server_leg, leg_callback_200, ag); @@ -2407,9 +2407,9 @@ *u1 = *ag->ag_m_bob->m_url; snprintf(m1, sizeof m1, - template, + template, "MESSAGE", URL_PRINT_ARGS(u1), - /* Via */ ag->ag_sink_port, rfc3261prefix, (void *)m1, + /* Via */ ag->ag_sink_port, rfc3261prefix, (void *)m1, /* 2nd Via */ (void *)ag, /* CSeq */ 14, "MESSAGE", /* Call-ID */ (void *)ag, @@ -2420,7 +2420,7 @@ *u2 = *ag->ag_m_bob->m_url; snprintf(m2, sizeof m2, - template, + template, "OPTIONS", URL_PRINT_ARGS(u2), /* Via */ ag->ag_sink_port, rfc3261prefix, (void *)m2, /* 2nd Via */ (void *)ag, @@ -2450,9 +2450,9 @@ /* test with rfc2543 */ snprintf(m1, sizeof m1, - template, + template, "MASSAGE", URL_PRINT_ARGS(u1), - /* Via */ ag->ag_sink_port, "0.", (void *)0, + /* Via */ ag->ag_sink_port, "0.", (void *)0, /* 2nd Via */ (void *)ag, /* CSeq */ 14, "MASSAGE", /* Call-ID */ (void *)(ag + 1), @@ -2463,7 +2463,7 @@ u2->url_user = "bob+2"; snprintf(m2, sizeof m2, - template, + template, "MASSAGE", URL_PRINT_ARGS(u2), /* Via */ ag->ag_sink_port, "0.", (void *)0, /* 2nd Via */ (void *)ag, @@ -2493,9 +2493,9 @@ /* test with to-tag */ snprintf(m1, sizeof m1, - template, + template, "MESSAGE", URL_PRINT_ARGS(u1), - /* Via */ ag->ag_sink_port, rfc3261prefix, (void *)m1, + /* Via */ ag->ag_sink_port, rfc3261prefix, (void *)m1, /* 2nd Via */ (void *)ag, /* CSeq */ 15, "MESSAGE", /* Call-ID */ (void *)(ag + 2), @@ -2506,7 +2506,7 @@ u2->url_user = "bob+2"; snprintf(m2, sizeof m2, - template, + template, "MESSAGE", URL_PRINT_ARGS(u2), /* Via */ ag->ag_sink_port, rfc3261prefix, (void *)m2, /* 2nd Via */ (void *)ag, @@ -2536,9 +2536,9 @@ /* test with rfc2543 and to-tag */ snprintf(m1, sizeof m1, - template, + template, "MESSAGE", URL_PRINT_ARGS(u1), - /* Via */ ag->ag_sink_port, "0.", (void *)0, + /* Via */ ag->ag_sink_port, "0.", (void *)0, /* 2nd Via */ (void *)ag, /* CSeq */ 15, "MESSAGE", /* Call-ID */ (void *)(ag + 2), @@ -2547,7 +2547,7 @@ l1 = strlen(m1); snprintf(m2, sizeof m2, - template, + template, "MESSAGE", URL_PRINT_ARGS(u2), /* Via */ ag->ag_sink_port, "0.", (void *)0, /* 2nd Via */ (void *)ag, @@ -2575,7 +2575,7 @@ { /* test INVITE/CANCEL with rfc2543 */ - char const template2[] = + char const template2[] = "%s " URL_PRINT_FORMAT " SIP/2.0\r\n" "Via: SIP/2.0/UDP 127.0.0.1:%s;x-kuik=%p\r\n" "CSeq: %u %s\r\n" @@ -2588,9 +2588,9 @@ nta_leg_bind(ag->ag_server_leg, new_leg_callback_180, ag); snprintf(m1, sizeof m1, - template2, + template2, "INVITE", URL_PRINT_ARGS(u1), - /* Via */ ag->ag_sink_port, m1, + /* Via */ ag->ag_sink_port, m1, /* CSeq */ 15, "INVITE", /* Call-ID */ (void *)(ag + 2), /* From tag */ "2.6.1", @@ -2606,7 +2606,7 @@ nta_incoming_bind(ag->ag_irq, wait_for_ack_or_cancel, ag); snprintf(m2, sizeof m2, - template2, + template2, "CANCEL", URL_PRINT_ARGS(u1), /* Via */ ag->ag_sink_port, m1, /* CSeq */ 15, "CANCEL", @@ -2629,7 +2629,7 @@ TEST_1(nta_incoming_status(ag->ag_irq) == 487); snprintf(m2, sizeof m2, - template2, + template2, "ACK", URL_PRINT_ARGS(u1), /* Via */ ag->ag_sink_port, m1, /* CSeq */ 15, "ACK", @@ -2651,7 +2651,7 @@ static int wait_for_ack_or_cancel(agent_t *ag, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip) { sip_method_t method; @@ -2671,7 +2671,7 @@ ag->ag_irq = NULL; ag->ag_running = 0; } - + return 0; } @@ -2681,7 +2681,7 @@ static int test_for_ack(agent_t *ag, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip) { sip_method_t method; @@ -2695,7 +2695,7 @@ ag->ag_irq = NULL; TEST(method, sip_method_ack); - + ag->ag_running = 0; END(); @@ -2709,13 +2709,13 @@ { sip_method_t method = sip ? sip->sip_request->rq_method : sip_method_unknown; - nta_incoming_treply(ag->ag_irq, - SIP_200_OK, + nta_incoming_treply(ag->ag_irq, + SIP_200_OK, SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST(method, sip_method_prack); - + return 200; } @@ -2728,7 +2728,7 @@ if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -2752,11 +2752,11 @@ nta_incoming_bind(irq, test_for_ack, ag); nta_incoming_treply(irq, SIP_100_TRYING, TAG_END()); - nta_agent_set_params(ag->ag_agent, + nta_agent_set_params(ag->ag_agent, NTATAG_DEBUG_DROP_PROB(ag->ag_drop), TAG_END()); - ag->ag_reliable = + ag->ag_reliable = nta_reliable_treply(irq, NULL, NULL, SIP_183_SESSION_PROGRESS, @@ -2765,14 +2765,14 @@ SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(ag->ag_reliable); - ag->ag_reliable = + ag->ag_reliable = nta_reliable_treply(irq, NULL, NULL, 184, "Next", SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(ag->ag_reliable); - ag->ag_reliable = + ag->ag_reliable = nta_reliable_treply(irq, test_for_prack, ag, 185, "Last", @@ -2781,7 +2781,7 @@ TEST_1(ag->ag_reliable); ag->ag_irq = irq; return 0; - } + } if (sip->sip_request->rq_method == sip_method_bye) { leg_zap(ag, leg); @@ -2802,7 +2802,7 @@ if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -2834,15 +2834,15 @@ TEST_1(nta_leg_tag(ag->ag_bob_leg, NULL)); TEST_1(nta_leg_get_tag(ag->ag_bob_leg)); TEST_1(nta_incoming_tag(irq, nta_leg_get_tag(ag->ag_bob_leg))); - TEST(nta_leg_server_route(ag->ag_bob_leg, - sip->sip_record_route, + TEST(nta_leg_server_route(ag->ag_bob_leg, + sip->sip_record_route, sip->sip_contact), 0); } if (sip->sip_request->rq_method != sip_method_invite) { return 200; } else { - nta_incoming_bind(irq, test_for_ack, ag); + nta_incoming_bind(irq, test_for_ack, ag); #if 1 nta_incoming_treply(irq, SIP_180_RINGING, @@ -2877,7 +2877,7 @@ return 0; } -static +static int check_prack_sending(client_t *ctx, nta_outgoing_t *orq, sip_t const *sip) { agent_t *ag = ctx->c_ag; @@ -2888,10 +2888,10 @@ nta_outgoing_t *prack = NULL; TEST_1(sip->sip_rseq); - + prack = nta_outgoing_prack(ag->ag_call_leg, orq, NULL, NULL, NULL, - sip, + sip, TAG_END()); nta_outgoing_destroy(prack); TEST_1(prack != NULL); @@ -2901,7 +2901,7 @@ } -static +static int check_leg_tagging(client_t *ctx, nta_outgoing_t *orq, sip_t const *sip) { agent_t *ag = ctx->c_ag; @@ -2909,8 +2909,8 @@ if (200 <= status && status < 300) { TEST_1(nta_leg_rtag(ag->ag_call_leg, sip->sip_to->a_tag)); - - TEST(nta_leg_client_route(ag->ag_call_leg, + + TEST(nta_leg_client_route(ag->ag_call_leg, sip->sip_record_route, sip->sip_contact), 0); } @@ -2919,7 +2919,7 @@ } -static +static int check_tu_ack(client_t *ctx, nta_outgoing_t *orq, sip_t const *sip) { agent_t *ag = ctx->c_ag; @@ -2946,7 +2946,7 @@ { agent_t *ag = ctx->c_ag; int status = ctx->c_status; - + if (status >= 300) ag->ag_call_leg = NULL; @@ -3006,21 +3006,21 @@ * * Alice sends a INVITE to Bob, then Bob sends 200 Ok. */ - ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, + ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, alice_leg_callback, ag, SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), TAG_END()); TEST_1(ag->ag_alice_leg); - + TEST_1(nta_leg_tag(ag->ag_alice_leg, NULL)); nta_leg_bind(ag->ag_server_leg, bob_leg_callback, ag); - + /* Send INVITE */ ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = - nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, + ctx->c_orq = + nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_INVITE, @@ -3036,7 +3036,7 @@ TEST_1(ctx->c_orq); /* Try to CANCEL it immediately */ TEST_1(nta_outgoing_cancel(ctx->c_orq) == 0); - /* As Bob immediately answers INVITE with 200 Ok, + /* As Bob immediately answers INVITE with 200 Ok, cancel should be answered with 481 and 200 Ok is returned to INVITE. */ TEST_1(!client_run(ctx, 200)); @@ -3068,8 +3068,8 @@ * waits for PRACKs, then sends 200, waits for ACK. */ ag->ag_expect_leg = ag->ag_alice_leg; - ctx->c_orq = - nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_bob_leg, + ctx->c_orq = + nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_bob_leg, outgoing_callback, ctx, NULL, SIP_METHOD_INVITE, @@ -3087,13 +3087,13 @@ { client_t ctx[1] = {{ ag, "Hangup" }}; - nta_agent_set_params(ag->ag_agent, + nta_agent_set_params(ag->ag_agent, NTATAG_DEBUG_DROP_PROB(0), TAG_END()); /* Send BYE from Bob to Alice */ old_leg = ag->ag_expect_leg = ag->ag_alice_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_bob_leg, outgoing_callback, ctx, NULL, SIP_METHOD_BYE, @@ -3121,7 +3121,7 @@ /* Test early dialogs, PRACK */ int test_for_ack_or_timeout(agent_t *ag, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip) { BEGIN(); @@ -3159,7 +3159,7 @@ if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -3188,16 +3188,16 @@ TEST_1(nta_leg_tag(ag->ag_bob_leg, NULL)); TEST_1(nta_leg_get_tag(ag->ag_bob_leg)); TEST_1(nta_incoming_tag(irq, nta_leg_get_tag(ag->ag_bob_leg))); - TEST(nta_leg_server_route(ag->ag_bob_leg, - sip->sip_record_route, + TEST(nta_leg_server_route(ag->ag_bob_leg, + sip->sip_record_route, sip->sip_contact), 0); } if (sip->sip_request->rq_method != sip_method_invite) { return 200; - } + } - nta_incoming_bind(irq, test_for_ack_or_timeout, ag); + nta_incoming_bind(irq, test_for_ack_or_timeout, ag); nta_incoming_treply(irq, SIP_183_SESSION_PROGRESS, SIPTAG_CONTENT_TYPE(ag->ag_content_type), @@ -3225,7 +3225,7 @@ int check_orq_tagging(client_t *ctx, nta_outgoing_t *orq, sip_t const *sip) -{ +{ agent_t *ag = ctx->c_ag; int status = ctx->c_status; invite_client_t *ic = (invite_client_t *)ctx; @@ -3235,21 +3235,21 @@ TEST_1(sip->sip_to->a_tag); TEST_1(orq == ctx->c_orq); - + TEST_1(ic); TEST_1(ic->ic_orq == NULL); TEST_1(ic->ic_tag == NULL); - + ic->ic_orq = orq; ic->ic_tag = su_strdup(ag->ag_home, sip->sip_to->a_tag); TEST_1(ic->ic_tag); ic->ic_tag_status = status; - + TEST_S(nta_leg_rtag(ag->ag_call_leg, ic->ic_tag), ic->ic_tag); - - TEST(nta_leg_client_route(ag->ag_call_leg, + + TEST(nta_leg_client_route(ag->ag_call_leg, sip->sip_record_route, sip->sip_contact), 0); - - orq = nta_outgoing_tagged(orq, + + orq = nta_outgoing_tagged(orq, outgoing_callback, ctx, ic->ic_tag, @@ -3289,7 +3289,7 @@ return 200; } else if (ag->ag_irq) { - nta_incoming_treply(ag->ag_irq, + nta_incoming_treply(ag->ag_irq, 504, "Reliable Response Timeout", TAG_END()); nta_incoming_destroy(ag->ag_irq); @@ -3309,7 +3309,7 @@ if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -3338,8 +3338,8 @@ TEST_1(nta_leg_tag(ag->ag_bob_leg, NULL)); TEST_1(nta_leg_get_tag(ag->ag_bob_leg)); TEST_1(nta_incoming_tag(irq, nta_leg_get_tag(ag->ag_bob_leg))); - TEST(nta_leg_server_route(ag->ag_bob_leg, - sip->sip_record_route, + TEST(nta_leg_server_route(ag->ag_bob_leg, + sip->sip_record_route, sip->sip_contact), 0); } @@ -3388,7 +3388,7 @@ ag->ag_expect_leg = ag->ag_server_leg; ag->ag_latest_leg = NULL; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_PRACK, @@ -3403,14 +3403,14 @@ TEST_P(ag->ag_latest_leg, NULL); } - ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, + ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, alice_leg_callback, ag, SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), TAG_END()); TEST_1(ag->ag_alice_leg); - + TEST_1(nta_leg_tag(ag->ag_alice_leg, NULL)); /* Send INVITE */ @@ -3421,8 +3421,8 @@ nta_leg_bind(ag->ag_server_leg, bob_leg_callback2, ag); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = - nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, + ctx->c_orq = + nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_INVITE, @@ -3447,7 +3447,7 @@ /* Send BYE from Bob to Alice */ old_leg = ag->ag_expect_leg = ag->ag_alice_leg; - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_bob_leg, outgoing_callback, ctx, NULL, SIP_METHOD_BYE, @@ -3469,14 +3469,14 @@ ag->ag_call_leg = NULL; /* Test CANCELing a call after receiving 100rel response */ - ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, + ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, alice_leg_callback, ag, SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), TAG_END()); TEST_1(ag->ag_alice_leg); - + TEST_1(nta_leg_tag(ag->ag_alice_leg, NULL)); { @@ -3490,8 +3490,8 @@ /* Send INVITE */ nta_leg_bind(ag->ag_server_leg, bob_leg_callback3, ag); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = - nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, + ctx->c_orq = + nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_INVITE, @@ -3515,20 +3515,20 @@ if (EXPENSIVE_CHECKS) { printf("%s: starting 100rel timeout test, test will complete in 4 seconds\n", name); - + TEST(nta_agent_set_params(ag->ag_agent, NTATAG_SIP_T1(25), NTATAG_SIP_T1X64(64 * 25), TAG_END()), 2); - ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, + ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, alice_leg_callback, ag, SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), TAG_END()); TEST_1(ag->ag_alice_leg); - + TEST_1(nta_leg_tag(ag->ag_alice_leg, NULL)); { @@ -3536,15 +3536,15 @@ {{{{ ag, "Call 3", NULL, checks_for_invite, invite_client_deinit }}}}; client_t *ctx = ic->ic_client; - /* Send INVITE, + /* Send INVITE, * send precious provisional response - * do not send PRACK, + * do not send PRACK, * timeout (after 64 * t1 ~ 3.2 seconds), */ nta_leg_bind(ag->ag_server_leg, bob_leg_callback2, ag); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = - nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, + ctx->c_orq = + nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, outgoing_callback, ctx, ag->ag_obp, SIP_METHOD_INVITE, @@ -3556,7 +3556,7 @@ SIPTAG_PAYLOAD(sdp), TAG_END()); TEST_1(ctx->c_orq); - + nta_test_run(ag); TEST(ctx->c_status, 503); TEST_P(ctx->c_orq, NULL); @@ -3564,16 +3564,16 @@ TEST_1(ag->ag_bob_leg == NULL); } - TEST(nta_agent_set_params(ag->ag_agent, - NTATAG_SIP_T1(500), - NTATAG_SIP_T1X64(64 * 500), + TEST(nta_agent_set_params(ag->ag_agent, + NTATAG_SIP_T1(500), + NTATAG_SIP_T1X64(64 * 500), TAG_END()), 2); } if (EXPENSIVE_CHECKS || 1) { /* - * client sends INVITE, - * server sends provisional response, + * client sends INVITE, + * server sends provisional response, * client PRACKs it, * client timeouts after timer C */ @@ -3584,12 +3584,12 @@ printf("%s: starting timer C, test will complete in 1 seconds\n", name); - + TEST(nta_agent_set_params(ag->ag_agent, NTATAG_TIMER_C(1000), TAG_END()), 1); - TEST_1(ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, + TEST_1(ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, alice_leg_callback, ag, SIPTAG_FROM(ag->ag_alice), @@ -3599,8 +3599,8 @@ nta_leg_bind(ag->ag_server_leg, bob_leg_callback3, ag); ag->ag_expect_leg = ag->ag_server_leg; - TEST_1(ctx->c_orq = - nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, + TEST_1(ctx->c_orq = + nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, outgoing_callback, ic->ic_client, ag->ag_obp, SIP_METHOD_INVITE, @@ -3615,13 +3615,13 @@ /* Run until 1) server gets CANCEL and 2) client gets 408 */ TEST_1(!client_run_until_canceled(ctx, 408)); - TEST_1(ag->ag_canceled != 0); + TEST_1(ag->ag_canceled != 0); TEST_P(ag->ag_latest_leg, ag->ag_server_leg); TEST_1(ag->ag_bob_leg); nta_leg_destroy(ag->ag_bob_leg), ag->ag_bob_leg = NULL; TEST(nta_agent_set_params(ag->ag_agent, - NTATAG_TIMER_C(185 * 1000), + NTATAG_TIMER_C(185 * 1000), TAG_END()), 1); nta_leg_destroy(ag->ag_bob_leg), ag->ag_bob_leg = NULL; @@ -3641,7 +3641,7 @@ if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -3665,10 +3665,10 @@ nta_incoming_bind(irq, test_for_ack, ag); nta_incoming_treply(irq, SIP_100_TRYING, TAG_END()); - nta_agent_set_params(ag->ag_agent, + nta_agent_set_params(ag->ag_agent, NTATAG_DEBUG_DROP_PROB(ag->ag_drop), TAG_END()); - ag->ag_reliable = + ag->ag_reliable = nta_reliable_treply(irq, NULL, NULL, SIP_183_SESSION_PROGRESS, @@ -3677,14 +3677,14 @@ SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(ag->ag_reliable); - ag->ag_reliable = + ag->ag_reliable = nta_reliable_treply(irq, NULL, NULL, 184, "Next", SIPTAG_CONTACT(ag->ag_m_alice), TAG_END()); TEST_1(ag->ag_reliable); - ag->ag_reliable = + ag->ag_reliable = nta_reliable_treply(irq, NULL, NULL, 185, "Last", @@ -3694,7 +3694,7 @@ TEST(nta_incoming_treply(irq, SIP_200_OK, TAG_END()), 0); ag->ag_irq = irq; return 0; - } + } if (sip->sip_request->rq_method == sip_method_bye) { leg_zap(ag, leg); @@ -3721,14 +3721,14 @@ BEGIN(); - ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, + ag->ag_alice_leg = nta_leg_tcreate(ag->ag_agent, alice_leg_callback2, ag, SIPTAG_FROM(ag->ag_alice), SIPTAG_TO(ag->ag_bob), TAG_END()); TEST_1(ag->ag_alice_leg); - + TEST_1(nta_leg_tag(ag->ag_alice_leg, NULL)); ag->ag_bob_leg = NULL; @@ -3740,8 +3740,8 @@ /* Send INVITE */ nta_leg_bind(ag->ag_server_leg, bob_leg_callback2, ag); ag->ag_expect_leg = ag->ag_server_leg; - ctx->c_orq = - nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, + ctx->c_orq = + nta_outgoing_tcreate(ag->ag_call_leg = ag->ag_alice_leg, outgoing_callback, ic->ic_client, ag->ag_obp, SIP_METHOD_INVITE, @@ -3766,7 +3766,7 @@ client_t ctx[1] = {{ ag, "Hangup" }}; /* Send BYE from Bob to Alice */ - ctx->c_orq = + ctx->c_orq = nta_outgoing_tcreate(ag->ag_bob_leg, outgoing_callback, ctx, NULL, SIP_METHOD_BYE, @@ -3803,7 +3803,7 @@ #endif static -char const nta_test_usage[] = +char const nta_test_usage[] = "usage: %s OPTIONS\n" "where OPTIONS are\n" " -v | --verbose be verbose\n" @@ -3882,7 +3882,7 @@ if (rest == NULL || *rest) usage(1); - + su_log_set_level(nta_log, level); su_log_set_level(tport_log, level); } @@ -3942,7 +3942,7 @@ do { fflush(stdout); \ if (retval && quit_on_single_failure) { su_deinit(); return retval; } \ } while(0) - + retval |= test_init(ag, argv[i]); SINGLE_FAILURE_CHECK(); if (retval == 0) { retval |= test_bad_messages(ag); SINGLE_FAILURE_CHECK(); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c Tue Dec 16 13:05:22 2008 @@ -143,14 +143,14 @@ static int incoming_callback_1(agent_t *ag, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip) { return 0; } static int incoming_callback_2(agent_t *ag, - nta_incoming_t *irq, + nta_incoming_t *irq, sip_t const *sip) { return 0; @@ -173,10 +173,10 @@ BEGIN(); msg_t *msg; char const *tag; - + if (tstflags & tst_verbatim) { printf("%s: %s: %s " URL_PRINT_FORMAT " %s\n", - name, __func__, sip->sip_request->rq_method_name, + name, __func__, sip->sip_request->rq_method_name, URL_PRINT_ARGS(sip->sip_request->rq_url), sip->sip_request->rq_version); } @@ -188,7 +188,7 @@ TEST_VOID(nta_incoming_bind(irq, incoming_callback_1, ag)); TEST_P(nta_incoming_magic(irq, incoming_callback_1), ag); TEST_P(nta_incoming_magic(irq, incoming_callback_2), 0); - + TEST_1(tag = nta_incoming_tag(irq, "tag=foofaa")); TEST_S(nta_incoming_gettag(irq), tag); TEST_S(tag, "foofaa"); @@ -199,9 +199,9 @@ TEST_S(nta_incoming_method_name(irq), "MESSAGE"); TEST_1(nta_incoming_url(irq) != NULL); TEST_1(nta_incoming_cseq(irq) != 0); - + TEST(nta_incoming_set_params(irq, TAG_END()), 0); - + TEST_1(msg = nta_incoming_getrequest(irq)); msg_destroy(msg); TEST_P(nta_incoming_getrequest_ackcancel(irq), NULL); TEST_P(nta_incoming_getresponse(irq), NULL); @@ -225,9 +225,9 @@ int status = sip->sip_status->st_status; if (tstflags & tst_verbatim) { - printf("%s: %s: %s %03d %s\n", name, __func__, - sip->sip_status->st_version, - sip->sip_status->st_status, + printf("%s: %s: %s %03d %s\n", name, __func__, + sip->sip_status->st_version, + sip->sip_status->st_status, sip->sip_status->st_phrase); } @@ -246,14 +246,14 @@ TEST_S(nta_outgoing_method_name(orq), "MESSAGE"); TEST(nta_outgoing_cseq(orq), sip->sip_cseq->cs_seq); TEST_1(nta_outgoing_delay(orq) < UINT_MAX); - + TEST_1(msg = nta_outgoing_getresponse(orq)); msg_destroy(msg); - + TEST_1(msg = nta_outgoing_getrequest(orq)); msg_destroy(msg); - nta_outgoing_destroy(orq); + nta_outgoing_destroy(orq); /* Call it twice */ nta_outgoing_destroy(orq); @@ -262,7 +262,7 @@ END(); } -void +void nta_test_run(agent_t *ag) { time_t now = time(NULL); @@ -307,7 +307,7 @@ NTATAG_PRELOAD(2048), TAG_END())); /* Create a default leg */ - TEST_1(ag->ag_default_leg = nta_leg_tcreate(ag->ag_agent, + TEST_1(ag->ag_default_leg = nta_leg_tcreate(ag->ag_agent, leg_callback, ag, NTATAG_NO_DIALOG(1), @@ -352,7 +352,7 @@ } { - char const data[] = + char const data[] = "v=0\r\n" "o=- 425432 423412 IN IP4 127.0.0.1\r\n" "s= \r\n" @@ -366,7 +366,7 @@ { sip_contact_t *m; - ag->ag_aliases = + ag->ag_aliases = sip_contact_make(ag->ag_home, "sip:127.0.0.1, sip:localhost, sip:[::1]"); TEST_1(ag->ag_aliases); TEST_1(ag->ag_aliases->m_next); @@ -381,38 +381,38 @@ m->m_next = ag->ag_aliases; ag->ag_aliases = m; - TEST(nta_agent_set_params(ag->ag_agent, + TEST(nta_agent_set_params(ag->ag_agent, NTATAG_ALIASES(ag->ag_aliases), NTATAG_REL100(1), - NTATAG_UA(1), + NTATAG_UA(1), NTATAG_USE_NAPTR(1), NTATAG_USE_SRV(1), TAG_END()), 5); - TEST(nta_agent_set_params(ag->ag_agent, + TEST(nta_agent_set_params(ag->ag_agent, NTATAG_ALIASES(ag->ag_aliases), NTATAG_DEFAULT_PROXY("sip:127.0.0.1"), TAG_END()), 2); - TEST(nta_agent_set_params(ag->ag_agent, + TEST(nta_agent_set_params(ag->ag_agent, NTATAG_ALIASES(ag->ag_aliases), NTATAG_DEFAULT_PROXY(NULL), TAG_END()), 2); - TEST(nta_agent_set_params(ag->ag_agent, + TEST(nta_agent_set_params(ag->ag_agent, NTATAG_DEFAULT_PROXY("tel:+35878008000"), TAG_END()), -1); } - + { url_t url[1]; /* Create the server leg */ *url = *ag->ag_aliases->m_url; url->url_user = "%"; - TEST_1(ag->ag_server_leg = nta_leg_tcreate(ag->ag_agent, + TEST_1(ag->ag_server_leg = nta_leg_tcreate(ag->ag_agent, leg_callback, ag, NTATAG_NO_DIALOG(1), @@ -421,7 +421,7 @@ } END(); -} +} int api_test_deinit(agent_t *ag) { @@ -443,7 +443,7 @@ free(ag->ag_mclass), ag->ag_mclass = NULL; END(); -} +} static int api_test_destroy(agent_t *ag) { @@ -468,12 +468,12 @@ NULL, NULL, TAG_END())); - TEST_1(leg = nta_leg_tcreate(nta, NULL, NULL, + TEST_1(leg = nta_leg_tcreate(nta, NULL, NULL, NTATAG_NO_DIALOG(1), TAG_END())); /* This creates a delayed response message */ orq = nta_outgoing_tcreate(leg, outgoing_callback, ag, NULL, - SIP_METHOD_MESSAGE, + SIP_METHOD_MESSAGE, URL_STRING_MAKE("sip:foo.bar;transport=none"), SIPTAG_FROM_STR(""), SIPTAG_TO_STR(""), @@ -482,7 +482,7 @@ TEST_VOID(nta_outgoing_destroy(orq)); TEST_VOID(nta_leg_destroy(leg)); - TEST_VOID(nta_agent_destroy(nta)); + TEST_VOID(nta_agent_destroy(nta)); } TEST_VOID(su_root_destroy(root)); @@ -573,9 +573,9 @@ NTATAG_USE_NAPTR_REF(use_naptr), NTATAG_USE_SRV_REF(use_srv), NTATAG_USE_TIMESTAMP_REF(use_timestamp), - TAG_END()), + TAG_END()), /* Number of parameters */ 33); - + TEST_P(mclass, sip_default_mclass()); TEST_P(aliases, NULL); TEST_1(contact != (void *)-1 && contact != NULL); @@ -611,32 +611,32 @@ TEST_1(use_timestamp != -1); TEST_1(user_via == 0); - TEST(nta_agent_set_params(NULL, + TEST(nta_agent_set_params(NULL, NTATAG_PRELOAD(2048), TAG_END()), -1); - TEST(nta_agent_get_params(NULL, + TEST(nta_agent_get_params(NULL, NTATAG_PRELOAD_REF(preload), TAG_END()), -1); - TEST(nta_agent_set_params(nta, + TEST(nta_agent_set_params(nta, NTATAG_PRELOAD(2048), TAG_END()), 1); - TEST(nta_agent_get_params(nta, + TEST(nta_agent_get_params(nta, NTATAG_PRELOAD_REF(preload), TAG_END()), 1); TEST(preload, 2048); - TEST(nta_agent_set_params(nta, + TEST(nta_agent_set_params(nta, NTATAG_SIGCOMP_OPTIONS("sip"), TAG_END()), 1); - TEST(nta_agent_set_params(nta, + TEST(nta_agent_set_params(nta, NTATAG_SIGCOMP_OPTIONS(","), TAG_END()), -1); - TEST(nta_agent_set_params(nta, + TEST(nta_agent_set_params(nta, NTATAG_SIGCOMP_OPTIONS("sip;dms=16384"), TAG_END()), 1); s = NONE; - TEST(nta_agent_get_params(nta, + TEST(nta_agent_get_params(nta, NTATAG_SIGCOMP_OPTIONS_REF(s), TAG_END()), 1); TEST_S(s, "sip;dms=16384"); @@ -767,7 +767,7 @@ TEST_1(m = nta_agent_contact(agent)); TEST_S(m->m_url->url_params, "transport=tcp"); - TEST_1(nta_agent_add_tport(agent, (url_string_t *)url, + TEST_1(nta_agent_add_tport(agent, (url_string_t *)url, TPTAG_SERVER(0), TAG_END()) == 0); TEST_1(v = nta_agent_public_via(agent)); TEST_1(!v->v_next); TEST(strcasecmp(v->v_protocol, sip_transport_tcp), 0); @@ -794,9 +794,9 @@ TEST_1(agent = nta_agent_create(ag->ag_root, NONE, NULL, NULL, TAG_END())); TEST_1(nta_agent_add_tport(agent, (url_string_t *)url, TAG_END()) == 0); - TEST_1(v = nta_agent_via(agent)); + TEST_1(v = nta_agent_via(agent)); TEST(strcasecmp(v->v_protocol, sip_transport_tcp), 0); - TEST_1(v = v->v_next); + TEST_1(v = v->v_next); TEST(strcasecmp(v->v_protocol, sip_transport_udp), 0); TEST_1(m = nta_agent_contact(agent)); TEST_1(!m->m_url->url_params); @@ -806,7 +806,7 @@ TEST_1(agent = nta_agent_create(ag->ag_root, NONE, NULL, NULL, TAG_END())); TEST_1(nta_agent_add_tport(agent, (url_string_t *)url, TAG_END()) == 0); - TEST_1(v = nta_agent_via(agent)); + TEST_1(v = nta_agent_via(agent)); TEST(strcasecmp(v->v_protocol, sip_transport_udp), 0); TEST_1(v = v->v_next); TEST(strcasecmp(v->v_protocol, sip_transport_tcp), 0); @@ -824,15 +824,15 @@ #if 0 { /* Test 0.1 - * Send a message from default leg to default leg + * Send a message from default leg to default leg */ char const p_acid[] = "P-Access-Network-Info: IEEE-802.11g\n"; msg_t *msg; ag->ag_expect_leg = ag->ag_default_leg; - TEST_1(ag->ag_orq = - nta_outgoing_tcreate(ag->ag_default_leg, + TEST_1(ag->ag_orq = + nta_outgoing_tcreate(ag->ag_default_leg, outgoing_callback, ag, ag->ag_obp, SIP_METHOD_MESSAGE, @@ -887,7 +887,7 @@ TEST_S(nta_outgoing_method_name(orq), "*"); TEST(nta_outgoing_cseq(orq), 0); TEST_1(nta_outgoing_delay(orq) == UINT_MAX); - + TEST_1(msg = nta_outgoing_getresponse(orq)); if (ag->ag_response == NULL) ag->ag_response = msg; @@ -916,7 +916,7 @@ TEST_VOID(nta_incoming_bind(irq, incoming_callback_1, ag)); TEST_P(nta_incoming_magic(irq, incoming_callback_1), ag); TEST_P(nta_incoming_magic(irq, incoming_callback_2), 0); - + TEST_P(nta_incoming_tag(irq, NULL), NULL); TEST_P(nta_incoming_gettag(irq), NULL); @@ -929,18 +929,18 @@ TEST(nta_incoming_received(irq, &nano), nano / 1000000000); TEST(nta_incoming_set_params(irq, TAG_END()), 0); - + TEST_P(nta_incoming_getrequest(irq), NULL); TEST_P(nta_incoming_getrequest_ackcancel(irq), NULL); TEST_P(nta_incoming_getresponse(irq), NULL); - + TEST(nta_incoming_complete_response(irq, NULL, SIP_200_OK, TAG_END()), -1); TEST(nta_incoming_treply(irq, SIP_200_OK, TAG_END()), -1); TEST(nta_incoming_mreply(irq, NULL), -1); - + TEST_VOID(nta_incoming_destroy(irq)); - + TEST_1(orq = nta_outgoing_default(nta, outgoing_default, ag)); TEST(nta_outgoing_status(orq), 0); @@ -960,7 +960,7 @@ TEST_P(nta_outgoing_tcancel(orq, NULL, NULL, TAG_END()), NULL); TEST_VOID(nta_outgoing_destroy(orq)); - + TEST_1(irq = nta_incoming_default(nta)); TEST_1(orq = nta_outgoing_default(nta, outgoing_default, ag)); @@ -968,7 +968,7 @@ via->v_next = NULL; TEST_1(nta_incoming_treply - (irq, + (irq, SIP_200_OK, SIPTAG_VIA(via), SIPTAG_CALL_ID_STR("oishciucnkrcoihciunskcisj"), @@ -985,7 +985,7 @@ TEST_VOID(nta_outgoing_destroy(orq)); TEST_VOID(nta_incoming_destroy(irq)); - + END(); } @@ -1054,7 +1054,7 @@ TEST_1(msg = nta_msg_create(nta, 0)); TEST(nta_msg_complete(msg), -1); - TEST(nta_msg_request_complete(msg, NULL, + TEST(nta_msg_request_complete(msg, NULL, sip_method_unknown, "FOO", NULL), -1); TEST(nta_is_internal_msg(NULL), 0); TEST(nta_is_internal_msg(msg), 0); @@ -1084,7 +1084,7 @@ TEST_VOID(nta_incoming_bind(NULL, NULL, NULL)); TEST_P(nta_incoming_magic(NULL, NULL), NULL); - + TEST_P(nta_incoming_find(NULL, NULL, NULL), NULL); TEST_P(nta_incoming_find(nta, NULL, NULL), NULL); @@ -1111,14 +1111,14 @@ TEST(nta_incoming_mreply(NULL, NULL), -1); TEST_VOID(nta_incoming_destroy(NULL)); - - TEST_P(nta_outgoing_tcreate(NULL, outgoing_callback, ag, + + TEST_P(nta_outgoing_tcreate(NULL, outgoing_callback, ag, URL_STRING_MAKE("sip:localhost"), SIP_METHOD_MESSAGE, URL_STRING_MAKE("sip:localhost"), TAG_END()), NULL); - TEST_P(nta_outgoing_mcreate(NULL, outgoing_callback, ag, + TEST_P(nta_outgoing_mcreate(NULL, outgoing_callback, ag, URL_STRING_MAKE("sip:localhost"), NULL, TAG_END()), NULL); @@ -1166,7 +1166,7 @@ TEST_P(nta_reliable_mreply(NULL, NULL, NULL, NULL), NULL); TEST_VOID(nta_reliable_destroy(NULL)); - TEST_VOID(nta_agent_destroy(nta)); + TEST_VOID(nta_agent_destroy(nta)); TEST_VOID(su_root_destroy(root)); TEST_VOID(su_home_deinit(home)); @@ -1196,17 +1196,17 @@ NULL, TAG_END())); - TEST_1(dst = nta_leg_tcreate(nta, NULL, NULL, + TEST_1(dst = nta_leg_tcreate(nta, NULL, NULL, NTATAG_NO_DIALOG(1), URLTAG_URL("sip:joe at localhost"), TAG_END())); - TEST_1(defdst = nta_leg_tcreate(nta, NULL, NULL, + TEST_1(defdst = nta_leg_tcreate(nta, NULL, NULL, NTATAG_NO_DIALOG(1), TAG_END())); - TEST_1(dialog1 = - nta_leg_tcreate(nta, NULL, NULL, + TEST_1(dialog1 = + nta_leg_tcreate(nta, NULL, NULL, URLTAG_URL("sip:pc.al.us"), SIPTAG_CALL_ID_STR("foobarbaz"), /* local */ @@ -1219,8 +1219,8 @@ TEST_1(a2 = sip_from_make(home, ";tag=al")); TEST_1(i = sip_call_id_make(home, "foobarbaz")); - TEST_1(dialog2 = - nta_leg_tcreate(nta, NULL, NULL, + TEST_1(dialog2 = + nta_leg_tcreate(nta, NULL, NULL, SIPTAG_CALL_ID(i), /* local */ SIPTAG_FROM(a2), @@ -1228,81 +1228,81 @@ SIPTAG_TO(a1), TAG_END())); - TEST_1(!nta_leg_by_dialog(nta, NULL, NULL, + TEST_1(!nta_leg_by_dialog(nta, NULL, NULL, a1->a_tag, a1->a_url, a2->a_tag, a2->a_url)); - TEST_1(!nta_leg_by_dialog(NULL, NULL, i, + TEST_1(!nta_leg_by_dialog(NULL, NULL, i, a1->a_tag, a1->a_url, a2->a_tag, a2->a_url)); - TEST_1(!nta_leg_by_dialog(nta, (void *)"sip:no.such.url", i, + TEST_1(!nta_leg_by_dialog(nta, (void *)"sip:no.such.url", i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url)); - TEST_1(!nta_leg_by_dialog(nta, a2->a_url, i, + TEST_1(!nta_leg_by_dialog(nta, a2->a_url, i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url)); - TEST_P(leg = nta_leg_by_dialog(nta, NULL, i, - /* local */ a1->a_tag, a1->a_url, + TEST_P(leg = nta_leg_by_dialog(nta, NULL, i, + /* local */ a1->a_tag, a1->a_url, /* remote */ a2->a_tag, a2->a_url), dialog2); - TEST_P(leg = nta_leg_by_dialog(nta, (void *)"sip:no.such.url", i, - /* local */ a1->a_tag, a1->a_url, + TEST_P(leg = nta_leg_by_dialog(nta, (void *)"sip:no.such.url", i, + /* local */ a1->a_tag, a1->a_url, /* remote */ a2->a_tag, a2->a_url), dialog2); - TEST_P(leg = nta_leg_by_dialog(nta, a2->a_url, i, + TEST_P(leg = nta_leg_by_dialog(nta, a2->a_url, i, a1->a_tag, a1->a_url, a2->a_tag, a2->a_url), dialog2); - TEST_P(leg = nta_leg_by_dialog(nta, NULL, i, + TEST_P(leg = nta_leg_by_dialog(nta, NULL, i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url), dialog1); - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url), dialog1); /* local tag is required because there is tag */ - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, "xyzzy", a1->a_url), NULL); /* local URI is ignored because we have tag */ - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, a1->a_tag, a2->a_url), dialog1); /* remote tag is ignored because there is no tag */ - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, "xyzzy", a2->a_url, a1->a_tag, a1->a_url), dialog1); #if nomore /* remote url is required */ - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a1->a_url, a1->a_tag, a1->a_url), NULL); #endif - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, NULL, a1->a_tag, a1->a_url), dialog1); /* local url is used if there is no local tag */ /* XXX - not really */ - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, NULL, NULL), NULL); nta_leg_tag(dialog1, "al"); - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url), dialog1); - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, "xyzzy", a1->a_url), NULL); - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url), dialog1); - TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, + TEST_P(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, NULL, a1->a_url), NULL); - + nta_leg_destroy(defdst); nta_leg_destroy(dst); nta_leg_destroy(dialog1); nta_leg_destroy(dialog2); - - TEST_VOID(nta_agent_destroy(nta)); + + TEST_VOID(nta_agent_destroy(nta)); TEST_VOID(su_root_destroy(root)); TEST_VOID(su_home_deinit(home)); @@ -1371,7 +1371,7 @@ if (rest == NULL || *rest) usage(1); - + su_log_set_level(nta_log, level); su_log_set_level(tport_log, level); } @@ -1427,7 +1427,7 @@ retval |= api_test_dialogs(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_default(ag); SINGLE_FAILURE_CHECK(); } - retval |= api_test_deinit(ag); fflush(stdout); + retval |= api_test_deinit(ag); fflush(stdout); su_home_deinit(ag->ag_home); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/Doxyfile.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/Doxyfile.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/Doxyfile.in Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ PROJECT_NAME = "nth" OUTPUT_DIRECTORY = ../docs/html/nth -INPUT = @srcdir@/nth.docs @srcdir@/sofia-sip @srcdir@ . +INPUT = @srcdir@/nth.docs @srcdir@/sofia-sip @srcdir@ . @INCLUDE_PATH = . @srcdir@ @INCLUDE = ../docs/Doxyfile.conf Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/http-client.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/http-client.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/http-client.c Tue Dec 16 13:05:22 2008 @@ -32,7 +32,7 @@ #include "config.h" /**@page http_client Make HTTP request - * + * * @par Name???? * http-client - HTTP request tool * @@ -41,10 +41,10 @@ * http-client [OPTIONS] url * * @par Description - * + * * The @em http-client utility sends a HTTP request to an HTTP server or proxy. * - * @par + * @par * * The @em http-client tool will print out status line and interesting * headers from the response. The message body is also printed. @@ -142,7 +142,7 @@ return 0; } -static +static char *read_file(FILE *stream) { int n; @@ -179,7 +179,7 @@ return buf; } -char const _usage[] = +char const _usage[] = "usage: %s [OPTIONS] url\n" " where OPTIONS are as follows\n" " --method=name\n" @@ -206,15 +206,15 @@ su_home_t *home; context_t context[1] = {{{SU_HOME_INIT(context)}}}; http_method_t method; - char - *o_proxy = NULL, + char + *o_proxy = NULL, *o_user = NULL, *o_max_forwards = NULL, *o_method_name = "GET", *o_user_agent = "http-client/1.0 " "nth/" NTH_VERSION; - int + int o_pipe = 0, o_extra = 0; - + char *extra = NULL; char *v; @@ -239,7 +239,7 @@ else if (MATCH(v, "--pipe")) { o_pipe = 1; continue; } else if (MATCH(v, "--extra")) { o_extra = 1; continue; } else if (MATCH(v, "--help")) { usage(0); continue; } - else + else usage(1); } @@ -259,8 +259,8 @@ su_home_init(home = context->c_home); if (o_extra) { - if (isatty(0)) - fprintf(stderr, + if (isatty(0)) + fprintf(stderr, "Type extra HTTP headers, empty line then HTTP message body " "(^D when complete):\n"); fflush(stderr); @@ -271,8 +271,8 @@ context->c_root = su_root_create(context); if (context->c_root) { - context->c_engine = - nth_engine_create(context->c_root, + context->c_engine = + nth_engine_create(context->c_root, NTHTAG_ERROR_MSG(0), TAG_END()); @@ -280,7 +280,7 @@ while ((v = argv++[1])) { nth_client_t *clnt; clnt = nth_client_tcreate(context->c_engine, - response, context, + response, context, method, o_method_name, URL_STRING_MAKE(v), NTHTAG_PROXY(o_proxy), @@ -294,7 +294,7 @@ } if (context->c_pending) - su_root_run(context->c_root); + su_root_run(context->c_root); nth_engine_destroy(context->c_engine), context->c_engine = NULL; } @@ -320,7 +320,7 @@ } else { status = nth_client_status(clnt); fprintf(stderr, "HTTP/1.1 %u Error\n", status); - } + } if (http && (c->c_pre || status >= 200)) { http_header_t *h = (http_header_t *)http->http_status; @@ -335,9 +335,9 @@ header_print(stdout, NULL, h); else if (h->sh_class->hc_name[0]) { snprintf(hname, sizeof hname, "%s: %%s\n", h->sh_class->hc_name); - header_print(stdout, hname, h); + header_print(stdout, hname, h); } else { - header_print(stdout, "%s\n", h); + header_print(stdout, "%s\n", h); } } @@ -364,7 +364,7 @@ //if (user && pass && if ( - auc_challenge(&c->c_auth, c->c_home, + auc_challenge(&c->c_auth, c->c_home, http->http_www_authenticate, http_authorization_class) > 0) { char const *scheme = NULL; @@ -375,7 +375,7 @@ "realm="); if (auc_all_credentials(&c->c_auth, scheme, realm, user, pass) >= 0) - newclnt = nth_client_tcreate(c->c_engine, + newclnt = nth_client_tcreate(c->c_engine, NULL, NULL, HTTP_NO_METHOD, NULL, NTHTAG_AUTHENTICATION(&c->c_auth), NTHTAG_TEMPLATE(clnt), @@ -385,11 +385,11 @@ if (status == 302 && http->http_location) { url_t loc[1]; - + *loc = *http->http_location->loc_url; newclnt = nth_client_tcreate(c->c_engine, NULL, NULL, - HTTP_NO_METHOD, + HTTP_NO_METHOD, (url_string_t *)loc, NTHTAG_TEMPLATE(clnt), TAG_END()); @@ -398,7 +398,7 @@ if (newclnt) c->c_pending++; - + nth_client_destroy(clnt); if (c->c_pending-- == 1) su_root_break(c->c_root); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth.docs Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ /* -*- c -*- */ /**@MODULEPAGE "nth" - HTTP Transactions Module - * + * * @section nth_meta Module Meta Information * * NTH provides interface to simple HTTP transaction engines for both HTTP Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_client.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_client.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_client.c Tue Dec 16 13:05:22 2008 @@ -24,16 +24,16 @@ /**@CFILE nth_client.c * @brief HTTP Client implementhtion - * + * * Copyright (c) 2002 Nokia Research Center. All rights reserved. - * + * * This source file has been divided into following sections: * 1) engine * 2) tport handling * 3) client transactions - * + * * @author Pekka Pessi - * + * * @date Created: Tue Jun 13 02:57:51 2000 ppessi */ @@ -141,7 +141,7 @@ /* Attributes */ unsigned hc_streaming:1; /**< Enable streaming */ unsigned hc_error_msg:1; - unsigned /* pad */:0; + unsigned /* pad */:0; url_string_t const *hc_route_url; tp_name_t hc_tpn[1]; /**< Where to send requests */ @@ -531,7 +531,7 @@ if (msg_size(msg)) SU_DEBUG_3(("nth client: received extra data ("MOD_ZU" bytes) " "from %s/%s:%s\n", - (size_t)msg_size(msg), + (size_t)msg_size(msg), tpn->tpn_proto, tpn->tpn_host, tpn->tpn_port)); else SU_DEBUG_3(("nth client: received extra data from %s/%s:%s\n", @@ -649,7 +649,7 @@ NTHTAG_AUTHENTICATION_REF(auc), NTHTAG_MESSAGE_REF(msg), NTHTAG_EXPIRES_REF(expires), - HTTPTAG_VERSION_REF(version), + HTTPTAG_VERSION_REF(version), TAG_END()); if (msg == none) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_server.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_server.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_server.c Tue Dec 16 13:05:22 2008 @@ -24,9 +24,9 @@ /**@internal @file nth_server.c * @brief HTTP server. - * + * * @author Pekka Pessi - * + * * @date Created: Sat Oct 19 01:37:36 2002 ppessi */ @@ -55,7 +55,7 @@ /* We are customer of tport_t */ #define TP_STACK_T server_t #define TP_MAGIC_T void - + #include #include @@ -78,7 +78,7 @@ HTABLE_DECLARE(hc_htable, hct, nth_client_t); -struct server_s +struct server_s { su_home_t srv_home[1]; su_root_t *srv_root; @@ -109,7 +109,7 @@ http_server_t *srv_server; /**< Server header */ }; -struct nth_site_s +struct nth_site_s { nth_site_t *site_next, **site_prev; @@ -143,7 +143,7 @@ char const *req_method_name; url_t const *req_url; /**< RequestURI */ char const *req_version; - + tport_t *req_tport; msg_t *req_request; msg_t *req_response; @@ -171,7 +171,7 @@ * * The NTH_DEBUG environment variable is used to determine the debug * logging level for @b nth module. The default level is 1. - * + * * @sa , nth_server_log, SOFIA_DEBUG */ extern char const NTH_DEBUG[]; @@ -180,8 +180,8 @@ #define SU_DEBUG 1 #endif -/**Debug log for @b nth module. - * +/**Debug log for @b nth module. + * * The nth_server_log is the log object used by @b nth module. The level of * #nth_server_log is set using #NTH_DEBUG environment variable. */ @@ -211,11 +211,11 @@ static nth_site_t *site_get_subdir(nth_site_t *parent, char const *path, char const **res); static void server_tport_error(server_t *srv, tport_t *tport, int errcode, char const *remote); -static msg_t *server_msg_create(server_t *srv, int flags, +static msg_t *server_msg_create(server_t *srv, int flags, char const data[], usize_t dlen, tport_t const *tp, tp_client_t *tpc); -static void server_reply(server_t *srv, tport_t *tport, +static void server_reply(server_t *srv, tport_t *tport, msg_t *request, msg_t *response, int status, char const *phrase); @@ -232,13 +232,13 @@ * 5) Site functions */ -/** Create a http site object. +/** Create a http site object. * * The function nth_site_create() allocates and initializes a web site - * object. A web site object can be either + * object. A web site object can be either * - a primary http server (@a parent is NULL), - * - a virtual http server (@a address contains hostpart), or - * - a site within a server + * - a virtual http server (@a address contains hostpart), or + * - a site within a server * (@a address does not have hostpart, only path part). * * @param parent pointer to parent site @@ -259,7 +259,7 @@ * * @since Support for multiple sites was added to @VERSION_1_12_4 */ -nth_site_t *nth_site_create(nth_site_t *parent, +nth_site_t *nth_site_create(nth_site_t *parent, nth_request_f *callback, nth_site_magic_t *magic, url_string_t const *address, @@ -307,7 +307,7 @@ if (!url || !callback) return NULL; - + is_host = url->url_host != NULL; is_path = url->url_path != NULL; @@ -329,7 +329,7 @@ errno = EINVAL; goto error; } - + srv = parent->site_server; assert(srv); if (is_host) { prev = site_get_host(&srv->srv_sites, url->url_host, url->url_port); @@ -340,7 +340,7 @@ errno = EEXIST; goto error; } - } + } else { size_t i, j; @@ -370,7 +370,7 @@ prev = site_get_rslot(parent, path, &path); if (!prev || path[0] == '\0') { - SU_DEBUG_3(("nth_site_create(): directory \"%s\" already exists\n", + SU_DEBUG_3(("nth_site_create(): directory \"%s\" already exists\n", url->url_path)); errno = EEXIST; goto error; @@ -396,7 +396,7 @@ if (srv && (site = su_zalloc(srv->srv_home, (sizeof *site) + usize))) { site->site_url = (url_t *)(site + 1); - url_dup((void *)(site->site_url + 1), usize - sizeof(*url), + url_dup((void *)(site->site_url + 1), usize - sizeof(*url), site->site_url, url); assert(prev); @@ -423,7 +423,7 @@ site->site_wildcard = wildcard; site->site_callback = callback; site->site_magic = magic; - + if (parent) site->site_auth = parent->site_auth; @@ -457,8 +457,8 @@ } -void nth_site_bind(nth_site_t *site, - nth_request_f *callback, +void nth_site_bind(nth_site_t *site, + nth_request_f *callback, nth_site_magic_t *magic) { if (site) { @@ -517,7 +517,7 @@ TAG_IF(master, NTHTAG_MFLAGS_REF(mflags)), NTHTAG_AUTH_MODULE_REF(am), TAG_END()); - + if (n > 0) { if (mclass) server->srv_mclass = mclass; @@ -558,13 +558,13 @@ TAG_IF(master, NTHTAG_MCLASS(mclass)), TAG_IF(master, NTHTAG_MFLAGS(server->srv_mflags)), TAG_END()); - + ta_end(ta); return n; } -int nth_site_get_stats(nth_site_t const *site, +int nth_site_get_stats(nth_site_t const *site, tag_type_t tag, tag_value_t value, ...) { int n; @@ -577,7 +577,7 @@ n = tl_tgets(ta_args(ta), TAG_END()); - + ta_end(ta); return n; @@ -606,7 +606,7 @@ * When a resource */ static -nth_site_t **site_get_rslot(nth_site_t *parent, char *path, +nth_site_t **site_get_rslot(nth_site_t *parent, char *path, char **return_rest) { nth_site_t *site, **prev; @@ -626,7 +626,7 @@ continue; if (path[len] == '\0') { if (site->site_isdir) - return *return_rest = path, prev; + return *return_rest = path, prev; return errno = EEXIST, NULL; } if (path[len] != '/' || site->site_path[len] != '/') @@ -662,7 +662,7 @@ if (path[0] == '\0') return *return_rest = path, parent; - + for (site = parent->site_kids; site; site = site->site_next) { cmp = strncmp(path, site->site_path, len = site->site_path_len); if (cmp > 0) @@ -711,7 +711,7 @@ ta_list ta; ta_start(ta, tag, value); - tl_gets(ta_args(ta), + tl_gets(ta_args(ta), NTHTAG_ROOT_REF(root), NTHTAG_MCLASS_REF(mclass), TPTAG_REUSE_REF(persistent), @@ -719,7 +719,7 @@ HTTPTAG_SERVER_STR_REF(server_str), TAG_END()); - if (!root || !url || + if (!root || !url || (url->url_type != url_http && url->url_type != url_https) || !(srv = su_home_new(sizeof(*srv)))) { ta_end(ta); @@ -731,7 +731,7 @@ tpn->tpn_host = url->url_host; tpn->tpn_port = url_port(url); - srv->srv_tports = tport_tcreate(srv, nth_server_class, root, + srv->srv_tports = tport_tcreate(srv, nth_server_class, root, TPTAG_IDLE(600000), TPTAG_TIMEOUT(300000), ta_tags(ta)); @@ -757,9 +757,9 @@ TAG_END()); } else { - SU_DEBUG_1(("nth_server_create: cannot bind transports " + SU_DEBUG_1(("nth_server_create: cannot bind transports " URL_FORMAT_STRING "\n", - URL_PRINT_ARGS(url))); + URL_PRINT_ARGS(url))); server_destroy(srv), srv = NULL; } @@ -843,7 +843,7 @@ } else if (http && http->http_flags & MSG_FLG_TOOLARGE) { server_reply(srv, tport, request, response, HTTP_413_ENTITY_TOO_LARGE); return; - } else if (!http || !http->http_request || + } else if (!http || !http->http_request || (http->http_flags & MSG_FLG_ERROR)) { server_reply(srv, tport, request, response, HTTP_400_BAD_REQUEST); return; @@ -933,7 +933,7 @@ } /** Respond without creating a request structure */ -static void server_reply(server_t *srv, tport_t *tport, +static void server_reply(server_t *srv, tport_t *tport, msg_t *request, msg_t *response, int status, char const *phrase) { @@ -947,23 +947,23 @@ status = 500, phrase = http_500_internal_server; http = http_object(request); - + if (http && http->http_request) req_version = http->http_request->rq_version; - close = status >= 200 && + close = status >= 200 && (!srv->srv_persistent || status == 400 - || (http && http->http_request && + || (http && http->http_request && http->http_request->rq_version != http_version_1_1) - || (http && http->http_connection && + || (http && http->http_connection && msg_params_find(http->http_connection->k_items, "close"))); msg_destroy(request); http = http_object(response); - pl = http_payload_format(msg_home(response), + pl = http_payload_format(msg_home(response), "\n" "%u %s\n" "

%u %s

\n" @@ -976,7 +976,7 @@ st->st_version = http_version_1_1; st->st_status = status; st->st_phrase = phrase; - + http_add_tl(response, http, HTTPTAG_STATUS(st), HTTPTAG_SERVER(srv->srv_server), @@ -992,8 +992,8 @@ close = 1; } - if (tport_tqsend(tport, response, NULL, - TPTAG_CLOSE_AFTER(close), + if (tport_tqsend(tport, response, NULL, + TPTAG_CLOSE_AFTER(close), TAG_END()) == -1) { SU_DEBUG_3(("server_reply(): cannot queue response\n")); tport_shutdown(tport, 2); @@ -1004,7 +1004,7 @@ /** Create a new message for transport */ static -msg_t *server_msg_create(server_t *srv, int flags, +msg_t *server_msg_create(server_t *srv, int flags, char const data[], usize_t dlen, tport_t const *tp, tp_client_t *tpc) { @@ -1014,7 +1014,7 @@ } /* ---------------------------------------------------------------------- - * 6) Server transactions + * 6) Server transactions */ struct auth_info @@ -1044,12 +1044,12 @@ int status; req = su_zalloc(srv->srv_home, size); - + if (req == NULL) { server_reply(srv, tport, request, response, HTTP_500_INTERNAL_SERVER); return; } - + if (am) as = auth_status_init(req + 1, sizeof *as), ai = (void *)(as + 1); else @@ -1066,27 +1066,27 @@ req->req_response = response; req->req_status = 100; - req->req_close = + req->req_close = !srv->srv_persistent || http->http_request->rq_version != http_version_1_1 - || (http->http_connection && + || (http->http_connection && msg_params_find(http->http_connection->k_items, "close")); if (am) { - static auth_challenger_t const http_server_challenger[] = + static auth_challenger_t const http_server_challenger[] = {{ HTTP_401_UNAUTHORIZED, http_www_authenticate_class }}; req->req_as = as; as->as_method = http->http_request->rq_method_name; as->as_uri = path; - + if (http->http_payload) { as->as_body = http->http_payload->pl_data; as->as_bodylen = http->http_payload->pl_len; } - auth_mod_check_client(am, as, + auth_mod_check_client(am, as, http->http_authorization, http_server_challenger); @@ -1143,13 +1143,13 @@ if (as->as_status != 0) { assert(as->as_status >= 300); - nth_request_treply(req, status = as->as_status, as->as_phrase, - HTTPTAG_HEADER((http_header_t *)as->as_response), + nth_request_treply(req, status = as->as_status, as->as_phrase, + HTTPTAG_HEADER((http_header_t *)as->as_response), TAG_END()); } else { req->req_in_callback = 1; - status = ai->site->site_callback(ai->site->site_magic, + status = ai->site->site_callback(ai->site->site_magic, ai->site, ai->req, ai->http, @@ -1178,7 +1178,7 @@ req->req_destroyed = 1; - if (req->req_in_callback) + if (req->req_in_callback) return; if (req->req_as) @@ -1193,7 +1193,7 @@ /** Return request authentication status. * * @param req pointer to HTTP request object - * + * * @retval Status code * * @since New in @VERSION_1_12_4 @@ -1206,7 +1206,7 @@ /** Return request authentication status. * * @param req pointer to HTTP request object - * + * * @retval Pointer to authentication status struct * * @note The authentication status struct is freed when the #nth_request_t @@ -1236,8 +1236,8 @@ return retval; } -int nth_request_treply(nth_request_t *req, - int status, char const *phrase, +int nth_request_treply(nth_request_t *req, + int status, char const *phrase, tag_type_t tag, tag_value_t value, ...) { msg_t *response, *next = NULL; @@ -1261,14 +1261,14 @@ http_add_tl(response, http, HTTPTAG_SERVER(req->req_server->srv_server), - HTTPTAG_HEADER(as_info), + HTTPTAG_HEADER(as_info), ta_tags(ta)); if (http->http_payload && !http->http_content_length) { http_content_length_t *l; http_payload_t *pl; size_t len = 0; - + for (pl = http->http_payload; pl; pl = pl->pl_next) len += pl->pl_len; @@ -1282,12 +1282,12 @@ if (req->req_method == http_method_head && http->http_payload) { http_payload_t *pl; - + for (pl = http->http_payload; pl; pl = pl->pl_next) msg_header_remove(response, (msg_pub_t *)http, (msg_header_t *)pl); } - http_complete_response(response, status, phrase, + http_complete_response(response, status, phrase, http_object(req->req_request)); if (!http->http_date) { @@ -1303,9 +1303,9 @@ else { req_close = req->req_close; - close = (http->http_connection && + close = (http->http_connection && msg_params_find(http->http_connection->k_items, "close")); - + if (req_close && !close && status >= 200) { close = 1; http_add_tl(response, http, HTTPTAG_CONNECTION_STR("close"), TAG_END()); @@ -1314,13 +1314,13 @@ msg_serialize(response, (msg_pub_t *)http); - retval = tport_tqsend(req->req_tport, response, next, + retval = tport_tqsend(req->req_tport, response, next, TAG_IF(close, TPTAG_CLOSE_AFTER(1)), ta_tags(ta)); fail: ta_end(ta); - + if (retval == 0) req->req_status = status; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_tag.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_tag.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/nth_tag.c Tue Dec 16 13:05:22 2008 @@ -25,7 +25,7 @@ /**@CFILE nth_tag.c * @brief Tags for HTTP Transaction API * - * @note This file is used to automatically generate + * @note This file is used to automatically generate * nth_tag_ref.c and nth_tag_dll.c * * @author Pekka Pessi Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/sofia-sip/nth.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/sofia-sip/nth.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/sofia-sip/nth.h Tue Dec 16 13:05:22 2008 @@ -31,10 +31,10 @@ */ /* ---------------------------------------------------------------------- - * 1) Types + * 1) Types */ -#ifndef NTH_H_TYPES +#ifndef NTH_H_TYPES #define NTH_H_TYPES /** NTH engine */ @@ -74,7 +74,7 @@ #define NTH_H /* ---------------------------------------------------------------------- - * 2) Constants + * 2) Constants */ /** Version number */ @@ -108,11 +108,11 @@ tag_type_t tag, tag_value_t value, ...); NTH_DLL void nth_engine_destroy(nth_engine_t *engine); -NTH_DLL int nth_engine_set_params(nth_engine_t *engine, +NTH_DLL int nth_engine_set_params(nth_engine_t *engine, tag_type_t tag, tag_value_t value, ...); -NTH_DLL int nth_engine_get_params(nth_engine_t const *engine, +NTH_DLL int nth_engine_get_params(nth_engine_t const *engine, tag_type_t tag, tag_value_t value, ...); -NTH_DLL int nth_engine_get_stats(nth_engine_t const *engine, +NTH_DLL int nth_engine_get_stats(nth_engine_t const *engine, tag_type_t tag, tag_value_t value, ...); NTH_DLL msg_t *nth_engine_msg_create(nth_engine_t *he, int flags); @@ -147,15 +147,15 @@ * 5) Server side prototypes */ -typedef int nth_request_f(nth_site_magic_t *lmagic, +typedef int nth_request_f(nth_site_magic_t *lmagic, nth_site_t *server, - nth_request_t *req, + nth_request_t *req, http_t const *http, char const *path); char const *nth_site_server_version(void); -NTH_DLL nth_site_t *nth_site_create(nth_site_t *parent, +NTH_DLL nth_site_t *nth_site_create(nth_site_t *parent, nth_request_f *req_callback, nth_site_magic_t *magic, url_string_t const *address, @@ -166,13 +166,13 @@ NTH_DLL nth_site_magic_t *nth_site_magic(nth_site_t const *site); -NTH_DLL void nth_site_bind(nth_site_t *site, - nth_request_f *callback, +NTH_DLL void nth_site_bind(nth_site_t *site, + nth_request_f *callback, nth_site_magic_t *); NTH_DLL su_time_t nth_site_access_time(nth_site_t const *site); -NTH_DLL int nth_site_set_params(nth_site_t *site, +NTH_DLL int nth_site_set_params(nth_site_t *site, tag_type_t tag, tag_value_t value, ...); NTH_DLL int nth_site_get_params(nth_site_t const *site, tag_type_t tag, tag_value_t value, ...); @@ -182,15 +182,15 @@ NTH_DLL url_t const *nth_site_url(nth_site_t const *site); /* ---------------------------------------------------------------------- - * 6) Prototypes for server transactions + * 6) Prototypes for server transactions */ NTH_DLL int nth_request_status(nth_request_t const *req); NTH_DLL http_method_t nth_request_method(nth_request_t const *req); NTH_DLL msg_t *nth_request_message(nth_request_t *req); -NTH_DLL int nth_request_treply(nth_request_t *ireq, - int status, char const *phrase, +NTH_DLL int nth_request_treply(nth_request_t *ireq, + int status, char const *phrase, tag_type_t tag, tag_value_t value, ...); NTH_DLL void nth_request_destroy(nth_request_t *req); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/sofia-sip/nth_tag.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/sofia-sip/nth_tag.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/sofia-sip/nth_tag.h Tue Dec 16 13:05:22 2008 @@ -28,9 +28,9 @@ /**@file sofia-sip/nth_tag.h * @brief Tags for @b nth, HTTP engine module. - * + * * @author Pekka Pessi - * + * * @date Created: Sun Oct 13 22:23:48 2002 ppessi */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/test_nth.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/test_nth.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nth/test_nth.c Tue Dec 16 13:05:22 2008 @@ -24,9 +24,9 @@ /**@file test_nth.c * @brief Tests for nth module - * + * * @author Pekka Pessi - * + * * @date Created: Tue Oct 22 20:52:37 2002 ppessi */ @@ -85,7 +85,7 @@ static int test_requests(tester_t *t); static int init_engine(tester_t *t); -struct site +struct site { site_t *s_next, *s_parent; tester_t *s_tester; @@ -125,9 +125,9 @@ site_t *t_master; }; -static int test_site(site_t *t, +static int test_site(site_t *t, nth_site_t *server, - nth_request_t *req, + nth_request_t *req, http_t const *http, char const *path); @@ -155,15 +155,15 @@ ta_start(ta, tag, value); - s->s_tags = tl_adup(t->t_home, ta_args(ta)); + s->s_tags = tl_adup(t->t_home, ta_args(ta)); if (s->s_tags) s->s_ns = nth_site_create(pns, test_site, s, - (url_string_t *)s->s_url, + (url_string_t *)s->s_url, NTHTAG_ROOT(t->t_root), ta_tags(ta)); ta_end(ta); - + if (s->s_ns == NULL) return NULL; @@ -179,14 +179,14 @@ BEGIN(); t->t_root = su_root_create(t); TEST_1(t->t_root); - t->t_mclass = msg_mclass_clone(http_default_mclass(), 0, 0); + t->t_mclass = msg_mclass_clone(http_default_mclass(), 0, 0); TEST_1(t->t_mclass); t->t_addr->su_len = (sizeof t->t_addr->su_sin); s = su_socket(t->t_addr->su_family = AF_INET, SOCK_STREAM, 0); TEST_1(s != INVALID_SOCKET); TEST_1(su_inet_pton(AF_INET, "127.0.0.1", &t->t_addr->su_sin.sin_addr) >= 0); - TEST_1(bind(s, &t->t_addr->su_sa, + TEST_1(bind(s, &t->t_addr->su_sa, t->t_addrlen = (sizeof t->t_addr->su_sin)) != -1); TEST_1(getsockname(s, &t->t_addr->su_sa, &t->t_addrlen) != -1); TEST_1(t->t_addr->su_port != 0); @@ -227,7 +227,7 @@ BEGIN(); - s = nth_engine_version(); + s = nth_engine_version(); TEST_1(s); TEST_1(strlen(s)); TEST_S(s, "sofia-http-client/" NTH_CLIENT_VERSION); TEST_1(nth_engine_create(NULL, TAG_END()) == NULL); @@ -235,9 +235,9 @@ TEST_VOID(nth_engine_destroy(NULL)); TEST_1(nth_engine_get_params(NULL, TAG_END()) == -1); TEST_1(nth_engine_set_params(NULL, TAG_END()) == -1); - TEST_1(!nth_client_tcreate(NULL, NULL, NULL, - HTTP_METHOD_OPTIONS, - URL_STRING_MAKE("*"), + TEST_1(!nth_client_tcreate(NULL, NULL, NULL, + HTTP_METHOD_OPTIONS, + URL_STRING_MAKE("*"), TAG_END())); TEST(nth_client_status(NULL), 400); TEST(nth_client_method(NULL), http_method_invalid); @@ -247,7 +247,7 @@ TEST_P(nth_client_response(NULL), NULL); TEST_VOID(nth_client_destroy(NULL)); - t->t_engine = nth_engine_create(t->t_root, + t->t_engine = nth_engine_create(t->t_root, NTHTAG_ERROR_MSG(2), NTHTAG_MCLASS(t->t_mclass), NTHTAG_MFLAGS(MSG_DO_CANONIC|MSG_DO_COMPACT), @@ -255,7 +255,7 @@ NTHTAG_PROXY("http://localhost:8888"), TAG_END()); TEST_1(t->t_engine); - + { int error_msg = -1; msg_mclass_t const *mclass = (void *)-1; @@ -266,14 +266,14 @@ char *proxy_str; - TEST(nth_engine_get_params(t->t_engine, + TEST(nth_engine_get_params(t->t_engine, NTHTAG_ERROR_MSG_REF(error_msg), NTHTAG_MCLASS_REF(mclass), NTHTAG_MFLAGS_REF(mflags), NTHTAG_EXPIRES_REF(expires), NTHTAG_STREAMING_REF(streaming), NTHTAG_PROXY_REF(proxy), - TAG_END()), + TAG_END()), 6); TEST(error_msg, 1); @@ -287,14 +287,14 @@ proxy = URL_STRING_MAKE("http://127.0.0.1:80"); - TEST(nth_engine_set_params(t->t_engine, + TEST(nth_engine_set_params(t->t_engine, NTHTAG_ERROR_MSG(0), NTHTAG_MCLASS(http_default_mclass()), NTHTAG_MFLAGS(0), NTHTAG_EXPIRES(10000), NTHTAG_STREAMING(2), NTHTAG_PROXY(proxy), - TAG_END()), + TAG_END()), 6); error_msg = -1; @@ -304,14 +304,14 @@ streaming = -1; proxy = (void *)-1; - TEST(nth_engine_get_params(t->t_engine, + TEST(nth_engine_get_params(t->t_engine, NTHTAG_ERROR_MSG_REF(error_msg), NTHTAG_MCLASS_REF(mclass), NTHTAG_MFLAGS_REF(mflags), NTHTAG_EXPIRES_REF(expires), NTHTAG_STREAMING_REF(streaming), NTHTAG_PROXY_REF(proxy), - TAG_END()), + TAG_END()), 6); TEST(error_msg, 0); @@ -319,13 +319,13 @@ TEST(mflags, 0); TEST(expires, 10000); TEST(streaming, 1); - TEST_1(proxy != NULL); + TEST_1(proxy != NULL); TEST_1(proxy_str = url_as_string(t->t_home, proxy->us_url)); TEST_S(proxy_str, "http://127.0.0.1:80"); } TEST_1(nth_engine_get_stats(NULL, TAG_END()) == -1); - + { msg_t *msg; http_t *http; @@ -349,9 +349,9 @@ END(); } -static int site_check_all(site_t *t, +static int site_check_all(site_t *t, nth_site_t *server, - nth_request_t *req, + nth_request_t *req, http_t const *http, char const *path); @@ -360,12 +360,12 @@ { char const *v; site_t s[1]; - + BEGIN(); memset(s, 0, sizeof s); - v = nth_site_server_version(); + v = nth_site_server_version(); TEST_1(v); TEST_1(strlen(v)); TEST_S(v, "nth/" NTH_SERVER_VERSION); /* Fails because no parent site, no root */ @@ -374,8 +374,8 @@ TAG_END())); /* Fails because url specifies both host and path */ - TEST_1(!nth_site_create(NULL, site_check_all, s, - URL_STRING_MAKE("http://127.0.0.1:8888/foo/"), + TEST_1(!nth_site_create(NULL, site_check_all, s, + URL_STRING_MAKE("http://127.0.0.1:8888/foo/"), NTHTAG_ROOT(t->t_root), TAG_END())); TEST_VOID(nth_site_destroy(NULL)); @@ -393,9 +393,9 @@ END(); } -static int test_site(site_t *s, +static int test_site(site_t *s, nth_site_t *ns, - nth_request_t *req, + nth_request_t *req, http_t const *http, char const *path) { @@ -411,9 +411,9 @@ } -static int site_check_all(site_t *s, +static int site_check_all(site_t *s, nth_site_t *ns, - nth_request_t *req, + nth_request_t *req, http_t const *http, char const *path) { @@ -462,45 +462,45 @@ auth_mod_t *am; int temp; - TEST_1(t->t_master = m = + TEST_1(t->t_master = m = site_create(t, NULL, - su_sprintf(t->t_home, "HTTP://127.0.0.1:%u", + su_sprintf(t->t_home, "HTTP://127.0.0.1:%u", htons(t->t_addr->su_port)), - HTTP_200_OK, + HTTP_200_OK, HTTPTAG_CONTENT_TYPE_STR("text/html"), HTTPTAG_PAYLOAD_STR("Hello\n"), TPTAG_CERTIFICATE(t->t_pem), TAG_END())); TEST_1(site_create(t, m, "/sub/sub", - HTTP_200_OK, + HTTP_200_OK, HTTPTAG_CONTENT_TYPE_STR("text/html"), HTTPTAG_PAYLOAD_STR ("sub/sub\n"), TAG_END())); TEST_1(site_create(t, m, "/sub/", - HTTP_200_OK, + HTTP_200_OK, HTTPTAG_CONTENT_TYPE_STR("text/html"), HTTPTAG_PAYLOAD_STR("sub/\n"), TAG_END())); TEST_1(site_create(t, m, "/sub/sub/", - HTTP_200_OK, + HTTP_200_OK, HTTPTAG_CONTENT_TYPE_STR("text/html"), HTTPTAG_PAYLOAD_STR ("sub/sub/\n"), TAG_END())); - TEST_1(sub2 = + TEST_1(sub2 = site_create(t, m, "/sub2/", - HTTP_200_OK, + HTTP_200_OK, HTTPTAG_CONTENT_TYPE_STR("text/html"), HTTPTAG_PAYLOAD_STR("sub2/\n"), TAG_END())); TEST_1(site_create(t, sub2, "sub/", - HTTP_200_OK, + HTTP_200_OK, HTTPTAG_CONTENT_TYPE_STR("text/html"), HTTPTAG_PAYLOAD_STR ("sub2/sub/\n"), @@ -519,15 +519,15 @@ TEST_1(close(temp) == 0); - am = auth_mod_create(t->t_root, - AUTHTAG_METHOD("Digest"), + am = auth_mod_create(t->t_root, + AUTHTAG_METHOD("Digest"), AUTHTAG_REALM("auth"), AUTHTAG_DB(passwd_name), TAG_END()); TEST_1(am); TEST_1(site_create(t, m, "auth/", - HTTP_200_OK, + HTTP_200_OK, HTTPTAG_CONTENT_TYPE_STR("text/html"), HTTPTAG_PAYLOAD_STR ("auth/\n"), @@ -537,15 +537,15 @@ auth_mod_unref(am); - am = auth_mod_create(t->t_root, - AUTHTAG_METHOD("Delayed+Basic"), + am = auth_mod_create(t->t_root, + AUTHTAG_METHOD("Delayed+Basic"), AUTHTAG_REALM("auth2"), AUTHTAG_DB(passwd_name), TAG_END()); TEST_1(am); TEST_1(site_create(t, m, "auth2/", - HTTP_200_OK, + HTTP_200_OK, HTTPTAG_CONTENT_TYPE_STR("text/html"), HTTPTAG_PAYLOAD_STR ("auth/\n"), @@ -604,12 +604,12 @@ END(); } -int sspace(char const *buffer) +int sspace(char const *buffer) { - int m = strcspn(buffer, " "); + int m = strcspn(buffer, " "); - if (buffer[m]) - m += 1 + strcspn(buffer + m + 1, " "); + if (buffer[m]) + m += 1 + strcspn(buffer + m + 1, " "); return m; } @@ -624,7 +624,7 @@ BEGIN(); { - static char const get[] = + static char const get[] = "GET / HTTP/1.1" CRLF "Host: 127.0.0.1" CRLF "User-Agent: Test-Tool" CRLF @@ -638,7 +638,7 @@ } { - static char const get[] = + static char const get[] = "GET / HTTP/1.1" CRLF "Host: 127.0.0.1" CRLF "User-Agent: Test-Tool" CRLF @@ -652,7 +652,7 @@ } { - static char const request[] = + static char const request[] = "GET %s HTTP/1.1" CRLF "Host: 127.0.0.1" CRLF "User-Agent: Test-Tool" CRLF @@ -724,7 +724,7 @@ } { - static char const get[] = + static char const get[] = "GET /auth2/ HTTP/1.1" CRLF "Host: 127.0.0.1" CRLF "User-Agent: Test-Tool" CRLF @@ -739,7 +739,7 @@ } { - static char const kuik[] = + static char const kuik[] = "kuik" CRLF CRLF; TEST(send_request(t, kuik, -1, 0, buffer, sizeof(buffer), &m), 0); @@ -748,7 +748,7 @@ } { - static char const kuik[] = + static char const kuik[] = "POST / HTTP/1.1" CRLF "Host: 127.0.0.1" CRLF "Content-Length: 4294967296" CRLF @@ -760,7 +760,7 @@ } { - static char const get[] = + static char const get[] = "GET / HTTP/10.10" CRLF "Host: 127.0.0.1" CRLF "User-Agent: Test-Tool" CRLF @@ -774,7 +774,7 @@ } { - static char const get[] = + static char const get[] = "GET /" CRLF; TEST(send_request(t, get, -1, 1, buffer, sizeof(buffer) - 1, &m), 0); @@ -785,7 +785,7 @@ if (0) { - static char const post[] = + static char const post[] = "POST /foo HTTP/1.1" CRLF "Host: 127.0.0.1" CRLF "User-Agent: Test-Tool" CRLF @@ -816,20 +816,20 @@ BEGIN(); su_socket_t s; - t->t_engine = nth_engine_create(t->t_root, + t->t_engine = nth_engine_create(t->t_root, NTHTAG_STREAMING(0), TAG_END()); TEST_1(t->t_engine); t->t_sink = s = su_socket(AF_INET, SOCK_STREAM, 0); TEST_1(s != -1); - TEST(bind(s, &t->t_sinkaddr->su_sa, + TEST(bind(s, &t->t_sinkaddr->su_sa, t->t_sinkaddrlen = (sizeof t->t_sinkaddr->su_sin)), 0); TEST_1(getsockname(s, &t->t_sinkaddr->su_sa, &t->t_sinkaddrlen) != -1); TEST(listen(t->t_sink, 5), 0); - + TEST_1(t->t_sinkuri = (url_string_t *) - su_sprintf(t->t_home, "HTTP://127.0.0.1:%u", + su_sprintf(t->t_home, "HTTP://127.0.0.1:%u", htons(t->t_sinkaddr->su_port))); END(); @@ -883,7 +883,7 @@ while (client->c_status == 0) su_root_step(t->t_root, 1); TEST(client->c_status, 408); nth_client_destroy(hc); - + END(); } #if HAVE_ALARM @@ -956,7 +956,7 @@ retval |= init_engine(t); retval |= test_client(t); retval |= deinit_test(t); - + su_deinit(); return retval; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/ChangeLog ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/ChangeLog (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/ChangeLog Tue Dec 16 13:05:22 2008 @@ -16,7 +16,7 @@ * Fixed call state events with UPDATE in nua. - Fixed the order the nua_i_update and nua_i_state events are sent. + Fixed the order the nua_i_update and nua_i_state events are sent. Now we are using session-timer headers in responses, too. * Added NUTAG_ALLOW() and NUTAG_ALLOW_REF() to nua. @@ -67,7 +67,7 @@ * Fixed response to 401. We are now not terminating call when application is expected to authenticate - request. Should we add + request. Should we add M ./libsofia-sip-ua/nua/nua_stack.c -10 +28 @@ -208,7 +208,7 @@ 2005-10-10 Pekka Pessi - * Fixed basic call test run. + * Fixed basic call test run. M ./libsofia-sip-ua/nua/test_nua.c -8 +11 @@ -217,7 +217,7 @@ M ./libsofia-sip-ua/nua/nua_common.c -1 +1 M ./libsofia-sip-ua/nua/nua_stack.c -1 +1 M ./libsofia-sip-ua/nua/test_nua.c -2 +2 - + * Running a basic call test case. M ./libsofia-sip-ua/nua/test_nua.c -24 +109 @@ -259,11 +259,11 @@ M ./libsofia-sip-ua/nua/nua.docs -1 +355 - * Used picture-mode here. + * Used picture-mode here. M ./libsofia-sip-ua/nua/nua.docs -227 +227 - * Fixed nua_set_hparams() documentation. + * Fixed nua_set_hparams() documentation. M ./libsofia-sip-ua/nua/nua.c -1 +1 @@ -444,7 +444,7 @@ * Do not pass soa handle to application. M ./libsofia-sip-ua/nua/nua_stack.c -3 +3 - + 2005-09-23 Kai Vehmanen * nua_stack.c: Fix delivering nua_i_active. @@ -457,7 +457,7 @@ * nua_tag.h: Removed NUTAG_MEDIA_SUBSYSTEM. - * nua.h: Added nua_i_state_change event. Removed + * nua.h: Added nua_i_state_change event. Removed nua_i_media_update (replaced by nua_i_state_change). 2005-09-21 Kai Vehmanen @@ -466,15 +466,15 @@ code related to old media subsystem interface (HAVE_MSS). Added nua_i_media_update event. Removed code related to ring-tone generation (HAVE_HERBIE). - + 2005-09-20 Kai Vehmanen * nua.h, nua.c: Removed implementation for obsolete media - param functions. Added dummy implementations that print + param functions. Added dummy implementations that print a warning to users of the removed interfaces. * nua_stack.c: Removed obsolete media param code. - + 2005-07-18 Kai Vehmanen * Initial import of the module to Sofia-SIP tree. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua.c Tue Dec 16 13:05:22 2008 @@ -99,14 +99,14 @@ * (but see also NUTAG_INITIAL_ROUTE()). * - NUTAG_URL() (and NUTAG_SIPS_URL(), listing URIs describing * transports) - * - NUTAG_CERTIFICATE_DIR(), specifying the location of the + * - NUTAG_CERTIFICATE_DIR(), specifying the location of the * root and client/server certificate files - * - NUTAG_SIP_PARSER(), providing customized parser used to + * - NUTAG_SIP_PARSER(), providing customized parser used to * parse received SIP messages * - All parameter tags, listed with nua_set_params() * - All NTATAG_* are passed to NTA documented in : - * see NTATAG_EXTRA_100(), - * - All tport tags are passed to tport. + * see NTATAG_EXTRA_100(), + * - All tport tags are passed to tport. * They are documented in * - All SOATAG_* are passed to the default SOA (media session) object which * is created by nua_create() unless NUTAG_MEDIA_ENABLE(0) is included in Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua.docs Tue Dec 16 13:05:22 2008 @@ -338,7 +338,7 @@ that uses services of NUA. The example is not complete but should present all relevant details of the basic use of NUA. -On sourceforge.net there is available an example application +On sourceforge.net there is available an example application sofisip_cli.c that can be studied for more complete example. @@ -591,7 +591,7 @@ NUTAG_CALLSTATE_REF(state), NUTAG__REF(state), - + state = (nua_callstate_t)t->t_value; printf("call %s\n", nua_callstate_name(state)); @@ -935,7 +935,7 @@ SOATAG_ACTIVE_VIDEO() are informational tags used to indicate what is the status of these media. -The #nua_i_state event is not sent, however, if the change is invoked by +The #nua_i_state event is not sent, however, if the change is invoked by application calling API functions like nua_bye() and there is no change in SDP offer/answer status. @@ -2089,7 +2089,7 @@ * #nua_r_unregister \n * #nua_r_unsubscribe \n * #nua_r_update - * + * * @sa nua_event_is_incoming_request(), nua_event_name() */ @@ -2175,7 +2175,7 @@ * @param tags empty * * @since Experimental in @VERSION_1_12_2. - * + * * @END_NUA_EVENT */ @@ -2276,7 +2276,7 @@ * @param hmagic operation magic associated with the notifier * @param sip NULL * @param tags empty - * + * * @sa nua_terminate(), nua_handle_destroy() * * @END_NUA_EVENT Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_common.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_common.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_common.c Tue Dec 16 13:05:22 2008 @@ -23,12 +23,12 @@ */ /**@CFILE nua_common.c - * @brief Function common to both stack and application side. - * + * @brief Function common to both stack and application side. + * * @author Pekka.Pessi at nokia.com - * + * * @date Created: Tue Apr 26 13:23:17 2005 ppessi - * + * */ #include "config.h" @@ -76,7 +76,7 @@ static void nh_destructor(void *arg); /**@internal - * Create an operation handle + * Create an operation handle * * Allocates a new operation handle and associated storage. * @@ -88,7 +88,7 @@ * @retval NULL Creation failed * * @par Related tags: - * Creates a copy of the provided tags which will + * Creates a copy of the provided tags which will * be used with every operation. * * @par Events: @@ -120,7 +120,7 @@ (void *)nua, (void *)nh)); su_home_unref(nh->nh_home), nh = NULL; } - + if (nh && su_home_is_threadsafe(nua->nua_home)) { if (su_home_threadsafe(nh->nh_home) < 0) { su_home_unref(nh->nh_home); @@ -128,13 +128,13 @@ } } - if (nh && _handle_lifetime) { + if (nh && _handle_lifetime) { /* This far, we have nothing real to destruct but - * when _NUA_HANDLE_DEBUG is set, we add destructor + * when _NUA_HANDLE_DEBUG is set, we add destructor * and get more entertaining debugging output */ if (_handle_lifetime == 1 && !getenv("_NUA_HANDLE_DEBUG")) { _handle_lifetime = 0; - } + } else { _handle_lifetime = 2; SU_DEBUG_0(("nh_handle_create(%p)\n", (void *)nh)); @@ -222,7 +222,7 @@ return (nua_handle_t *)su_home_ref(nh->nh_home); } -/** Destroy reference to handle. +/** Destroy reference to handle. * * The handles use reference counting for memory management. In addition to * the memory management, there is protocol state associated with the @@ -301,7 +301,7 @@ } } -/** Get name for a NUA event. +/** Get name for a NUA event. * * @sa #nua_event_e, #nua_event_t, nua_callstate_name(), nua_substate_name() */ @@ -374,7 +374,7 @@ } /** Return name of call state. - * + * * @sa enum #nua_callstate, nua_event_name(), nua_substate_name() */ char const *nua_callstate_name(enum nua_callstate state) @@ -395,7 +395,7 @@ } } -/** Return name of subscription state. @NEW_1_12_5. +/** Return name of subscription state. @NEW_1_12_5. * * @sa enum #nua_substate, nua_event_name(), nua_callstate_name() */ @@ -424,7 +424,7 @@ return nua_substate_terminated; else if (strcasecmp(sip_substate, "pending") == 0) return nua_substate_pending; - else /* if (strcasecmp(sip_substate, "active") == 0) */ + else /* if (strcasecmp(sip_substate, "active") == 0) */ return nua_substate_active; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.c Tue Dec 16 13:05:22 2008 @@ -59,7 +59,7 @@ /* ======================================================================== */ /* Dialog handling */ -static void nua_dialog_usage_remove_at(nua_owner_t*, nua_dialog_state_t*, +static void nua_dialog_usage_remove_at(nua_owner_t*, nua_dialog_state_t*, nua_dialog_usage_t**, nua_client_request_t *cr, nua_server_request_t *sr); @@ -75,9 +75,9 @@ * @param sip SIP message containing response used to update dialog * @param rtag if true, set remote tag within the leg */ -void nua_dialog_uas_route(nua_owner_t *own, +void nua_dialog_uas_route(nua_owner_t *own, nua_dialog_state_t *ds, - sip_t const *sip, + sip_t const *sip, int rtag) { int established = nua_dialog_is_established(ds); @@ -105,7 +105,7 @@ * @param sip SIP message containing response used to update dialog * @param rtag if true, set remote tag within the leg */ -void nua_dialog_uac_route(nua_owner_t *own, +void nua_dialog_uac_route(nua_owner_t *own, nua_dialog_state_t *ds, sip_t const *sip, int rtag) @@ -126,7 +126,7 @@ } /**@internal Store information from remote endpoint. */ -void nua_dialog_store_peer_info(nua_owner_t *own, +void nua_dialog_store_peer_info(nua_owner_t *own, nua_dialog_state_t *ds, sip_t const *sip) { @@ -190,7 +190,7 @@ nua_dialog_state_t *ds) { /* zap peer info */ - nua_dialog_store_peer_info(own, ds, NULL); + nua_dialog_store_peer_info(own, ds, NULL); /* Local Contact */ msg_header_free(own, (msg_header_t *)ds->ds_ltarget), ds->ds_ltarget = NULL; /* Leg */ @@ -216,7 +216,7 @@ /** @internal Get dialog usage slot. */ nua_dialog_usage_t ** -nua_dialog_usage_at(nua_dialog_state_t const *ds, +nua_dialog_usage_at(nua_dialog_state_t const *ds, nua_usage_class const *kind, sip_event_t const *event) { @@ -257,7 +257,7 @@ } /** @internal Get a dialog usage */ -nua_dialog_usage_t *nua_dialog_usage_get(nua_dialog_state_t const *ds, +nua_dialog_usage_t *nua_dialog_usage_get(nua_dialog_state_t const *ds, nua_usage_class const *kind, sip_event_t const *event) { @@ -270,11 +270,11 @@ if (du == NULL) return ""; return du->du_class->usage_name(du); -} +} /** @internal Add dialog usage */ -nua_dialog_usage_t *nua_dialog_usage_add(nua_owner_t *own, - struct nua_dialog_state *ds, +nua_dialog_usage_t *nua_dialog_usage_add(nua_owner_t *own, + struct nua_dialog_state *ds, nua_usage_class const *uclass, sip_event_t const *event) { @@ -286,9 +286,9 @@ du = *prev_du; if (du) { /* Already exists */ SU_DEBUG_5(("nua(%p): adding already existing %s usage%s%s\n", - (void *)own, nua_dialog_usage_name(du), + (void *)own, nua_dialog_usage_name(du), event ? " with event " : "", event ? event->o_type : "")); - + if (prev_du != &ds->ds_usage) { /* Move as a first usage in the list */ *prev_du = du->du_next; @@ -305,7 +305,7 @@ if (du) { su_home_ref(own); - du->du_dialog = ds; + du->du_dialog = ds; du->du_class = uclass; du->du_event = o; @@ -314,9 +314,9 @@ su_free(own, du); return NULL; } - + SU_DEBUG_5(("nua(%p): adding %s usage%s%s\n", - (void *)own, nua_dialog_usage_name(du), + (void *)own, nua_dialog_usage_name(du), o ? " with event " : "", o ? o->o_type :"")); du->du_next = ds->ds_usage, ds->ds_usage = du; @@ -331,7 +331,7 @@ } /** @internal Remove dialog usage. */ -void nua_dialog_usage_remove(nua_owner_t *own, +void nua_dialog_usage_remove(nua_owner_t *own, nua_dialog_state_t *ds, nua_dialog_usage_t *du, nua_client_request_t *cr, @@ -350,9 +350,9 @@ nua_dialog_usage_remove_at(own, ds, at, cr, sr); } -/** @internal Remove dialog usage. +/** @internal Remove dialog usage. * - * Zap dialog state (leg, tag and route) if no usages remain. + * Zap dialog state (leg, tag and route) if no usages remain. */ static void nua_dialog_usage_remove_at(nua_owner_t *own, @@ -372,7 +372,7 @@ o = du->du_event; SU_DEBUG_5(("nua(%p): removing %s usage%s%s\n", - (void *)own, nua_dialog_usage_name(du), + (void *)own, nua_dialog_usage_name(du), o ? " with event " : "", o ? o->o_type :"")); du->du_class->usage_remove(own, ds, du, cr0, sr0); @@ -423,7 +423,7 @@ char buffer[160]; size_t l = 0, N = sizeof buffer; ssize_t n; - + buffer[0] = '\0'; for (du = ds->ds_usage; du; du = du->du_next) { @@ -441,9 +441,9 @@ l += 2; } } - + SU_DEBUG_3(("nua(%p): handle with %s%s%s\n", (void *)own, - ds->ds_has_session ? "session and " : "", + ds->ds_has_session ? "session and " : "", ds->ds_has_events ? "events " : "", buffer)); } @@ -486,7 +486,7 @@ } /**@internal - * Set refresh value suitably. + * Set refresh value suitably. * * The refresh time is set either around half of the @a delta interval or, * if @a delta is less than 5 minutes but longer than 90 seconds, 30..60 @@ -512,7 +512,7 @@ } /**@internal Set refresh in range min..max seconds in the future. */ -void nua_dialog_usage_set_refresh_range(nua_dialog_usage_t *du, +void nua_dialog_usage_set_refresh_range(nua_dialog_usage_t *du, unsigned min, unsigned max) { sip_time_t now = sip_now(), target; @@ -546,7 +546,7 @@ SU_DEBUG_7(("nua(): refresh %s after %lu seconds\n", nua_dialog_usage_name(du), target - sip_now())); du->du_refresh = target; -} +} /**@internal Do not refresh. */ void nua_dialog_usage_reset_refresh(nua_dialog_usage_t *du) @@ -560,7 +560,7 @@ /** @internal Refresh usage. */ void nua_dialog_usage_refresh(nua_owner_t *owner, nua_dialog_state_t *ds, - nua_dialog_usage_t *du, + nua_dialog_usage_t *du, sip_time_t now) { assert(du && du->du_class->usage_refresh); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h Tue Dec 16 13:05:22 2008 @@ -26,7 +26,7 @@ /** Defined when has been included. */ #define NUA_DIALOG_H -/**@IFILE nua_dialog.h +/**@IFILE nua_dialog.h * @brief Dialog and dialog usage handling * * @author Pekka Pessi @@ -42,7 +42,7 @@ #endif typedef struct { - sip_method_t sm_method; + sip_method_t sm_method; char const *sm_method_name; int sm_event; @@ -80,7 +80,7 @@ nua_dialog_usage_t *sr_usage; /**< Backpointer to usage */ nta_incoming_t *sr_irq; /**< Server transaction object */ - + struct { msg_t *msg; /**< Request message */ sip_t const *sip; /**< Headers in request message */ @@ -133,7 +133,7 @@ #define SR_HAS_SAVED_SIGNAL(sr) ((sr)->sr_signal[0] != NULL) -su_inline +su_inline int sr_status(nua_server_request_t *sr, int status, char const *phrase) { return (void)(sr->sr_phrase = phrase), (sr->sr_status = status); @@ -160,7 +160,7 @@ msg_t **return_msg, tagi_t const *tags); - /**@a crm_init is called when a client request is sent first time. + /**@a crm_init is called when a client request is sent first time. * * @retval 1 when request has been responded * @retval 0 when request should be sent in normal fashion @@ -278,9 +278,9 @@ uint32_t cr_seq; unsigned cr_refs; /**< References to client request */ - + /* Flags used with offer-answer */ - unsigned short cr_answer_recv; /**< Recv answer in response + unsigned short cr_answer_recv; /**< Recv answer in response * with this status. */ unsigned cr_offer_sent:1; /**< Sent offer in this request */ @@ -305,7 +305,7 @@ unsigned cr_restarting:1; /**< Request is being restarted */ unsigned cr_reporting:1; /**< Reporting in progress */ unsigned cr_terminating:1; /**< Request terminates the usage */ - signed int cr_terminated:2; /**< Response terminated usage (1) or + signed int cr_terminated:2; /**< Response terminated usage (1) or whole dialog (-1) */ unsigned cr_graceful:1; /**< Graceful termination required */ }; @@ -347,11 +347,11 @@ sip_to_t const *ds_remote; /**< Remote address */ nta_leg_t *ds_leg; sip_contact_t *ds_ltarget; /**< Local target */ - char const *ds_remote_tag; /**< Remote tag (if any). - * Should be non-NULL + char const *ds_remote_tag; /**< Remote tag (if any). + * Should be non-NULL * if dialog is established. */ - + struct nua_dialog_peer_info { sip_allow_t *nr_allow; sip_accept_t *nr_accept; @@ -364,10 +364,10 @@ /* Virtual function pointer table for dialog usage. */ typedef struct { unsigned usage_size, usage_class_size; - int (*usage_add)(nua_owner_t *, + int (*usage_add)(nua_owner_t *, nua_dialog_state_t *ds, nua_dialog_usage_t *du); - void (*usage_remove)(nua_owner_t *, + void (*usage_remove)(nua_owner_t *, nua_dialog_state_t *ds, nua_dialog_usage_t *du, nua_client_request_t *cr, @@ -382,7 +382,7 @@ sip_t const *sip); void (*usage_refresh)(nua_owner_t *, nua_dialog_state_t *ds, nua_dialog_usage_t *, sip_time_t now); - int (*usage_shutdown)(nua_owner_t *, nua_dialog_state_t *ds, + int (*usage_shutdown)(nua_owner_t *, nua_dialog_state_t *ds, nua_dialog_usage_t *); } nua_usage_class; @@ -428,16 +428,16 @@ char const *nua_dialog_usage_name(nua_dialog_usage_t const *du); -nua_dialog_usage_t *nua_dialog_usage_add(nua_owner_t *, +nua_dialog_usage_t *nua_dialog_usage_add(nua_owner_t *, struct nua_dialog_state *ds, nua_usage_class const *uclass, sip_event_t const *event); -nua_dialog_usage_t *nua_dialog_usage_get(nua_dialog_state_t const *ds, +nua_dialog_usage_t *nua_dialog_usage_get(nua_dialog_state_t const *ds, nua_usage_class const *uclass, sip_event_t const *event); -void nua_dialog_usage_remove(nua_owner_t *, +void nua_dialog_usage_remove(nua_owner_t *, nua_dialog_state_t *ds, nua_dialog_usage_t *du, nua_client_request_t *cr, @@ -463,17 +463,17 @@ void nua_dialog_usage_set_refresh(nua_dialog_usage_t *du, unsigned delta); -void nua_dialog_usage_set_refresh_range(nua_dialog_usage_t *du, +void nua_dialog_usage_set_refresh_range(nua_dialog_usage_t *du, unsigned min, unsigned max); -void nua_dialog_usage_set_refresh_at(nua_dialog_usage_t *du, +void nua_dialog_usage_set_refresh_at(nua_dialog_usage_t *du, sip_time_t target); void nua_dialog_usage_reset_refresh(nua_dialog_usage_t *du); void nua_dialog_usage_refresh(nua_owner_t *owner, nua_dialog_state_t *ds, - nua_dialog_usage_t *du, + nua_dialog_usage_t *du, sip_time_t now); int nua_dialog_usage_shutdown(nua_owner_t *owner, @@ -513,12 +513,12 @@ nua_client_methods_t const *methods, tagi_t const *tags); -int nua_client_tcreate(nua_owner_t *nh, +int nua_client_tcreate(nua_owner_t *nh, int event, nua_client_methods_t const *methods, tag_type_t tag, tag_value_t value, ...); -su_inline +su_inline void *nua_private_client_request(nua_client_request_t const *cr) { return (void *)(cr + 1); @@ -654,14 +654,14 @@ nua_refer_server_methods, /**< REFER */ nua_publish_server_methods; /**< PUBLISH */ -/** Return true if we have not sent final response to request */ -su_inline +/** Return true if we have not sent final response to request */ +su_inline int nua_server_request_is_pending(nua_server_request_t const *sr) { return sr && sr->sr_response.msg; } -su_inline +su_inline int nua_server_request_status(nua_server_request_t const *sr) { return sr ? nta_incoming_status(sr->sr_irq) : 500; @@ -694,7 +694,7 @@ int nua_server_report(nua_server_request_t *sr); -int nua_base_server_treport(nua_server_request_t *sr, +int nua_base_server_treport(nua_server_request_t *sr, tag_type_t tag, tag_value_t value, ...); int nua_base_server_report(nua_server_request_t *sr, tagi_t const *tags); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_event_server.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_event_server.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_event_server.c Tue Dec 16 13:05:22 2008 @@ -54,8 +54,8 @@ /* Event server */ static -nea_event_t *nh_notifier_event(nua_handle_t *nh, - su_home_t *home, +nea_event_t *nh_notifier_event(nua_handle_t *nh, + su_home_t *home, sip_event_t const *event, tagi_t const *tags); @@ -81,8 +81,8 @@ nua_stack_init_handle(nua, nh, tags); - tl_gets(tags, - NUTAG_URL_REF(url), + tl_gets(tags, + NUTAG_URL_REF(url), SIPTAG_EVENT_REF(event), SIPTAG_EVENT_STR_REF(event_s), SIPTAG_CONTENT_TYPE_STR_REF(ct_s), @@ -93,16 +93,16 @@ if (!event && !event_s) status = 400, phrase = "Missing Event"; - else if (!ct && !ct_s) + else if (!ct && !ct_s) status = 400, phrase = "Missing Content-Type"; else if (!nh->nh_notifier && - !(nh->nh_notifier = + !(nh->nh_notifier = nea_server_create(nua->nua_nta, nua->nua_root, url->us_url, - NH_PGET(nh, max_subscriptions), + NH_PGET(nh, max_subscriptions), NULL, nh, - TAG_NEXT(tags)))) + TAG_NEXT(tags)))) status = 900, phrase = nua_internal_error; else if (!event && !(event = sip_event_make(home, event_s))) @@ -117,12 +117,12 @@ else if (nea_server_notify(nh->nh_notifier, ev) < 0) status = 900, phrase = "Error when notifying watchers"; - else - nua_stack_tevent(nua, nh, NULL, e, status = SIP_200_OK, + else + nua_stack_tevent(nua, nh, NULL, e, status = SIP_200_OK, SIPTAG_EVENT(event), SIPTAG_CONTENT_TYPE(ct), TAG_END()); - + if (status != 200) nua_stack_event(nua, nh, NULL, e, status, phrase, NULL); @@ -132,8 +132,8 @@ /* Create a event view for notifier */ static -nea_event_t *nh_notifier_event(nua_handle_t *nh, - su_home_t *home, +nea_event_t *nh_notifier_event(nua_handle_t *nh, + su_home_t *home, sip_event_t const *event, tagi_t const *tags) { @@ -150,13 +150,13 @@ if (o_subtype) *o_subtype++ = '\0'; - tl_gets(tags, + tl_gets(tags, SIPTAG_ACCEPT_REF(accept), SIPTAG_ACCEPT_STR_REF(accept_s), SIPTAG_CONTENT_TYPE_REF(ct), SIPTAG_CONTENT_TYPE_STR_REF(ct_s), TAG_END()); - + /* * XXX - We really should build accept header when we add new content * types @@ -168,7 +168,7 @@ if (accept_s == NULL && ct_s) accept_s = ct_s; - ev = nea_event_create(nh->nh_notifier, + ev = nea_event_create(nh->nh_notifier, authorize_watcher, nh, o_type, o_subtype, ct ? ct->c_type : ct_s, @@ -196,8 +196,8 @@ /* OK. In nhp (nua_handle_preferences_t) structure we have the current default action (or state) for incoming - subscriptions. - Action can now be modified by the application with NUTAG_SUBSTATE(). + subscriptions. + Action can now be modified by the application with NUTAG_SUBSTATE(). */ irq = nea_sub_get_request(sn->sn_subscriber); msg = nta_incoming_getrequest(irq); @@ -220,7 +220,7 @@ what = "active"; } - SU_DEBUG_7(("nua(%p): authorize_watcher: %s\n", (void *)nh, what)); + SU_DEBUG_7(("nua(%p): authorize_watcher: %s\n", (void *)nh, what)); nea_sub_auth(sn->sn_subscriber, substate, TAG_IF(substate == nua_substate_pending, NEATAG_FAKE(1)), @@ -231,8 +231,8 @@ else if (sn->sn_state == nea_terminated || sn->sn_expires == 0) { substate = nua_substate_terminated; nea_server_flush(nes, NULL); - SU_DEBUG_7(("nua(%p): authorize_watcher: %s\n", - (void *)nh, "watcher is removed")); + SU_DEBUG_7(("nua(%p): authorize_watcher: %s\n", + (void *)nh, "watcher is removed")); } nua_stack_tevent(nua, nh, msg, nua_i_subscription, status, phrase, @@ -269,7 +269,7 @@ /** @internal Shutdown notifier object */ int nh_notifier_shutdown(nua_handle_t *nh, nea_event_t *ev, - tag_type_t t, + tag_type_t t, tag_value_t v, ...) { nea_server_t *nes = nh->nh_notifier; @@ -286,17 +286,17 @@ ta_list ta; ta_start(ta, t, v); - + for (i = 0; subs[i]; i++) nea_sub_auth(subs[i]->sn_subscriber, nea_terminated, ta_tags(ta)); - + ta_end(ta); busy++; } nea_server_free_subscribers(nes, subs); - + nea_server_flush(nh->nh_notifier, NULL); if (ev == NULL) @@ -323,7 +323,7 @@ return; } - tl_gets(tags, + tl_gets(tags, SIPTAG_EVENT_REF(event), SIPTAG_EVENT_STR_REF(event_s), SIPTAG_CONTENT_TYPE_REF(ct), @@ -332,15 +332,15 @@ SIPTAG_PAYLOAD_STR_REF(pl_s), TAG_END()); - nev = nea_event_get(nh->nh_notifier, + nev = nea_event_get(nh->nh_notifier, event ? event->o_type : event_s); if (nev && (pl || pl_s) && (ct || ct_s)) { nea_server_update(nh->nh_notifier, nev, TAG_NEXT(tags)); } - nh_notifier_shutdown(nh, NULL, - NEATAG_REASON("noresource"), + nh_notifier_shutdown(nh, NULL, + NEATAG_REASON("noresource"), TAG_NEXT(tags)); nua_stack_event(nua, nh, NULL, e, SIP_200_OK, NULL); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_extension.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_extension.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_extension.c Tue Dec 16 13:05:22 2008 @@ -45,7 +45,7 @@ #include "nua_stack.h" -/**Send a request message with an extension method. +/**Send a request message with an extension method. * * Send a request message with the request method specified with * NUTAG_METHOD(). @@ -53,7 +53,7 @@ * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * Note that it is possible to send a request with any method (except @@ -91,9 +91,9 @@ NULL, /* crm_complete */ }; -int +int nua_stack_method(nua_t *nua, nua_handle_t *nh, nua_event_t e, tagi_t const *tags) -{ +{ return nua_client_create(nh, e, &nua_method_client_methods, tags); } @@ -109,7 +109,7 @@ * @param nh operation handle associated with the method * @param hmagic application context associated with the handle * @param sip response to the extension request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive method in @a phrase parameters) * @param tags empty * @@ -148,11 +148,11 @@ * @END_NUA_EVENT */ -nua_server_methods_t const nua_extension_server_methods = +nua_server_methods_t const nua_extension_server_methods = { SIP_METHOD_UNKNOWN, nua_i_method, /* Event */ - { + { 1, /* Do create dialog */ 0, /* Can be an initial request */ 1, /* Perhaps a target refresh request? */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_message.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_message.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_message.c Tue Dec 16 13:05:22 2008 @@ -51,14 +51,14 @@ /**@fn void nua_message( \ * nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); * - * Send an instant message. + * Send an instant message. * * Send an instant message using SIP MESSAGE method. * * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -72,7 +72,7 @@ * @sa #nua_i_message, @RFC3428 */ -static int nua_message_client_init(nua_client_request_t *cr, +static int nua_message_client_init(nua_client_request_t *cr, msg_t *, sip_t *, tagi_t const *tags); @@ -95,16 +95,16 @@ }; -int +int nua_stack_message(nua_t *nua, nua_handle_t *nh, nua_event_t e, tagi_t const *tags) -{ +{ return nua_client_create(nh, e, &nua_message_client_methods, tags); } -static int nua_message_client_init(nua_client_request_t *cr, +static int nua_message_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags) { @@ -125,7 +125,7 @@ * @param nh operation handle associated with the message * @param hmagic application context associated with the handle * @param sip response to MESSAGE request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * @@ -159,11 +159,11 @@ int nua_message_server_init(nua_server_request_t *sr); int nua_message_server_params(nua_server_request_t *, tagi_t const *); -nua_server_methods_t const nua_message_server_methods = +nua_server_methods_t const nua_message_server_methods = { SIP_METHOD_MESSAGE, nua_i_message, /* Event */ - { + { 0, /* Do not create dialog */ 0, /* Can be initial request */ 0, /* Perhaps a target refresh request? */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c Tue Dec 16 13:05:22 2008 @@ -70,10 +70,10 @@ }; static char const *nua_notify_usage_name(nua_dialog_usage_t const *du); -static int nua_notify_usage_add(nua_handle_t *nh, +static int nua_notify_usage_add(nua_handle_t *nh, nua_dialog_state_t *ds, nua_dialog_usage_t *du); -static void nua_notify_usage_remove(nua_handle_t *nh, +static void nua_notify_usage_remove(nua_handle_t *nh, nua_dialog_state_t *ds, nua_dialog_usage_t *du, nua_client_request_t *cr, @@ -103,8 +103,8 @@ return "notify"; } -static -int nua_notify_usage_add(nua_handle_t *nh, +static +int nua_notify_usage_add(nua_handle_t *nh, nua_dialog_state_t *ds, nua_dialog_usage_t *du) { @@ -113,15 +113,15 @@ return 0; } -static -void nua_notify_usage_remove(nua_handle_t *nh, +static +void nua_notify_usage_remove(nua_handle_t *nh, nua_dialog_state_t *ds, nua_dialog_usage_t *du, nua_client_request_t *cr, nua_server_request_t *sr) { - ds->ds_has_events--; - ds->ds_has_notifys--; + ds->ds_has_events--; + ds->ds_has_notifys--; } /* ====================================================================== */ @@ -173,14 +173,14 @@ * subscriber terminates the subscription, it times out or the application * terminates the usage with nua_notify() call containing the tag * NUTAG_SUBSTATE(nua_substate_terminated) or @SubscriptionState header with - * state "terminated" and/or expiration time 0. + * state "terminated" and/or expiration time 0. * * When the subscriber terminates the subscription, the application is * notified of an termination by a #nua_i_subscribe event with * NUTAG_SUBSTATE(nua_substate_terminated) tag. When the subscription times * out, nua automatically initiates a NOTIFY transaction. When it is * terminated, the application is sent a #nua_r_notify event with - * NUTAG_SUBSTATE(nua_substate_terminated) tag. + * NUTAG_SUBSTATE(nua_substate_terminated) tag. * * @sa @RFC3265, nua_notify(), NUTAG_SUBSTATE(), @SubscriptionState, * @Event, nua_subscribe(), #nua_r_subscribe, #nua_i_refer, nua_refer() @@ -193,11 +193,11 @@ static int nua_subscribe_server_respond(nua_server_request_t*, tagi_t const *); static int nua_subscribe_server_report(nua_server_request_t*, tagi_t const *); -nua_server_methods_t const nua_subscribe_server_methods = +nua_server_methods_t const nua_subscribe_server_methods = { SIP_METHOD_SUBSCRIBE, nua_i_subscribe, /* Event */ - { + { 1, /* Create dialog */ 0, /* Initial request */ 1, /* Target refresh request */ @@ -218,7 +218,7 @@ sip_t const *sip = sr->sr_request.sip; sip_event_t *o = sip->sip_event; char const *event = o ? o->o_type : NULL; - + if (sr->sr_initial || !nua_dialog_usage_get(ds, nua_notify_usage, o)) { if (event && str0cmp(event, "refer") == 0) /* refer event subscription should be initiated with REFER */ @@ -246,7 +246,7 @@ sip_time_t now = sip_now(); assert(nh && nh->nh_nua->nua_dhandle != nh); - + du = nua_dialog_usage_get(ds, nua_notify_usage, o); if (du == NULL) { @@ -271,7 +271,7 @@ nu->nu_requested = SIP_TIME_MAX - 1; #if SU_HAVE_EXPERIMENTAL - nu->nu_etags = + nu->nu_etags = sip_suppress_body_if_match(sip) || sip_suppress_notify_if_match(sip) || sip_has_feature(sr->sr_request.sip->sip_supported, "etags"); @@ -294,7 +294,7 @@ sip_t *sip = sr->sr_response.sip; if (200 <= sr->sr_status && sr->sr_status < 300) { - sip_expires_t ex[1]; + sip_expires_t ex[1]; sip_expires_init(ex); @@ -304,7 +304,7 @@ if (nu->nu_requested) { if (sip->sip_expires) { /* Expires in response can only shorten the expiration time */ - if (nu->nu_requested > now + sip->sip_expires->ex_delta) + if (nu->nu_requested > now + sip->sip_expires->ex_delta) nu->nu_requested = now + sip->sip_expires->ex_delta; } else { @@ -357,14 +357,14 @@ sip_t const *sip = sr->sr_request.sip; sip_suppress_notify_if_match_t *snim = sip_suppress_notify_if_match(sip); sip_suppress_body_if_match_t *sbim = sip_suppress_body_if_match(sip); - + if (!nu->nu_tag) notify = 1; else if (snim && !strcasecmp(snim->snim_tag, nu->nu_tag)) notify = 0; else if (sbim && !strcasecmp(snim->snim_tag, nu->nu_tag)) notify = 1, nu->nu_no_body = 1; - else + else #endif notify = 1; @@ -375,12 +375,12 @@ if (retval >= 2 || du == NULL) return retval; - + if (notify) { /* Send NOTIFY (and terminate subscription, when needed) */ nua_dialog_usage_refresh(nh, ds, du, sip_now()); } - + return retval; } @@ -399,7 +399,7 @@ * * @bug If the @Event is not given by application, stack uses the @Event * header from the first subscription usage on handle. - * + * * If there is no active notifier dialog usage or no notifier dialog * usage matches the @Event header given by the application the nua_notify() * request is rejected locally by the stack with status code 481. The local @@ -413,7 +413,7 @@ * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -428,7 +428,7 @@ * @sa @RFC3265, #nua_i_subscribe, #nua_i_refer, NUTAG_ALLOW_EVENTS() */ -static int nua_notify_client_init(nua_client_request_t *cr, +static int nua_notify_client_init(nua_client_request_t *cr, msg_t *, sip_t *, tagi_t const *tags); static int nua_notify_client_init_etag(nua_client_request_t *cr, @@ -480,7 +480,7 @@ sip_event_t const *o = sip->sip_event; sip_subscription_state_t *ss = sip->sip_subscription_state; sip_time_t now = sip_now(); - + if (o == NULL && nh->nh_ds->ds_has_notifys == 1) o = NONE; @@ -519,7 +519,7 @@ /* We can change the lifetime of unsolicited subscription at will */ if (nu->nu_requested == 0) nu->nu_expires = nu->nu_requested = now + expires; - /* Notifier can only shorten the subscribed time */ + /* Notifier can only shorten the subscribed time */ else if (nu->nu_requested >= now + expires) nu->nu_expires = nu->nu_requested = now + expires; } @@ -617,7 +617,7 @@ sip_suppress_body_if_match_t *sbim; sip_suppress_notify_if_match_t *snim; - + if (cr->cr_usage->du_ready) { snim = sip_suppress_notify_if_match(sip); @@ -643,7 +643,7 @@ msg_t *msg, sip_t *sip, tagi_t const *tags) { - nua_dialog_usage_t *du = cr->cr_usage; + nua_dialog_usage_t *du = cr->cr_usage; struct notifier_usage *nu = nua_dialog_usage_private(du); su_home_t *home = msg_home(msg); sip_time_t now = sip_now(); @@ -674,7 +674,7 @@ if (nu->nu_substate == nua_substate_terminated) expires = nu->nu_expires > now ? "noresource" : "timeout"; - ss = sip_subscription_state_format(home, "%s;%s", + ss = sip_subscription_state_format(home, "%s;%s", nua_substate_name(nu->nu_substate), expires); @@ -737,8 +737,8 @@ * @param phrase a short textual description of @a status code * @param nh operation handle associated with the subscription * @param hmagic application context associated with the handle - * @param sip response to @b NOTIFY request or NULL upon an error - * (status code is in @a status and + * @param sip response to @b NOTIFY request or NULL upon an error + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags NUTAG_SUBSTATE() indicating subscription state * SIPTAG_EVENT() indicating subscription event @@ -762,7 +762,7 @@ if (nu && !cr->cr_terminated) substate = nu->nu_substate; - nua_stack_tevent(nh->nh_nua, nh, + nua_stack_tevent(nh->nh_nua, nh, nta_outgoing_getresponse(orq), cr->cr_event, status, phrase, @@ -816,7 +816,7 @@ nua_dialog_usage_remove(nh, ds, du, NULL, NULL); } -/** @interal Shut down NOTIFY usage. +/** @interal Shut down NOTIFY usage. * * @retval >0 shutdown done * @retval 0 shutdown in progress @@ -836,8 +836,8 @@ return 0; } else { - if (nua_client_tcreate(nh, nua_r_notify, - &nua_notify_client_methods, + if (nua_client_tcreate(nh, nua_r_notify, + &nua_notify_client_methods, SIPTAG_EVENT(du->du_event), NUTAG_SUBSTATE(nua_substate_terminated), TAG_END()) >= 0) @@ -857,11 +857,11 @@ static int nua_refer_server_respond(nua_server_request_t*, tagi_t const *); static int nua_refer_server_report(nua_server_request_t*, tagi_t const *); -nua_server_methods_t const nua_refer_server_methods = +nua_server_methods_t const nua_refer_server_methods = { SIP_METHOD_REFER, nua_i_refer, /* Event */ - { + { 1, /* Create dialog */ 0, /* Initial request */ 1, /* Target refresh request */ @@ -914,7 +914,7 @@ if (sr->sr_status < 200 || nu == NULL) { } - else if (sr->sr_status < 300 && + else if (sr->sr_status < 300 && /* Application included Refer-Sub: false in response */ (rs == NULL || str0casecmp("false", rs->rs_value))) { sr->sr_usage->du_ready = 1; @@ -942,7 +942,7 @@ * REFER. The @ReferredBy structure contained in the tag is constructed from * the @From header if the @ReferredBy header was not present in the REFER * request. - * + * * The application can let the nua to send NOTIFYs from the call it * initiates with nua_invite() if it includes in the nua_invite() arguments * both the NUTAG_NOTIFY_REFER() with the handle with which nua_i_refer was @@ -956,8 +956,8 @@ * @param sip incoming REFER request * @param tags NUTAG_REFER_EVENT() \n * SIPTAG_REFERRED_BY() - * - * @sa nua_refer(), #nua_r_refer, @ReferTo, NUTAG_REFER_EVENT(), + * + * @sa nua_refer(), #nua_r_refer, @ReferTo, NUTAG_REFER_EVENT(), * SIPTAG_REFERRED_BY(), @ReferredBy, NUTAG_NOTIFY_REFER(), * NUTAG_REFER_WITH_ID(), @RFC3515. * Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_options.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_options.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_options.c Tue Dec 16 13:05:22 2008 @@ -54,7 +54,7 @@ * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -78,7 +78,7 @@ * @param nh operation handle associated with the incoming OPTIONS request * @param hmagic application context associated with the handle * @param sip response to OPTIONS request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * @@ -109,6 +109,6 @@ nua_handle_t *nh, nua_event_t e, tagi_t const *tags) -{ +{ return nua_client_create(nh, e, &nua_options_client_methods, tags); } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c Tue Dec 16 13:05:22 2008 @@ -84,7 +84,7 @@ a->nhp_set_.set_unsigned[1] |= b->nhp_set_.set_unsigned[1]; } -static int nhp_set_tags(su_home_t *home, +static int nhp_set_tags(su_home_t *home, nua_handle_preferences_t *nhp, nua_global_preferences_t *ngp, tagi_t const *tags); @@ -127,7 +127,7 @@ "MESSAGE, SUBSCRIBE, NOTIFY, REFER, UPDATE"; /** @internal Set default parameters */ -int nua_stack_set_defaults(nua_handle_t *nh, +int nua_stack_set_defaults(nua_handle_t *nh, nua_handle_preferences_t *nhp) { su_home_t *home = (su_home_t *)nh; @@ -222,7 +222,7 @@ sip_contact_t const *m; m = nua_stack_get_contact(nua->nua_registrations); - + if (m) { f0->a_display = m->m_display; *f0->a_url = *m->m_url; @@ -233,7 +233,7 @@ if (!f) return -1; - + nua->nua_from_is_set = set; *nua->nua_from = *f; return 0; @@ -269,7 +269,7 @@ * * @par Related tags: * NUTAG_ALLOW(), SIPTAG_ALLOW(), and SIPTAG_ALLOW_STR() \n - * NUTAG_ALLOW_EVENTS(), SIPTAG_ALLOW_EVENTS(), and + * NUTAG_ALLOW_EVENTS(), SIPTAG_ALLOW_EVENTS(), and * SIPTAG_ALLOW_EVENTS_STR() \n * NUTAG_AUTOACK() \n * NUTAG_AUTOALERT() \n @@ -323,7 +323,7 @@ * * nua_set_params() also accepts any soa tags, defined in * , and nta tags, defined in . - * + * * @par Events: * #nua_r_set_params * @@ -335,7 +335,7 @@ * @par * When multiple tags for the same header are specified, the behaviour * depends on the header type. If only a single header field can be included - * in a SIP message, the latest non-NULL value is used, e.g., @Organization. + * in a SIP message, the latest non-NULL value is used, e.g., @Organization. * However, if the SIP header can consist of multiple lines or header fields * separated by comma, in this case, @Allow and @Supported, all the tagged * values are concatenated. @@ -390,7 +390,7 @@ * * @par Tags Used to Set Handle-Specific Parameters: * NUTAG_ALLOW(), SIPTAG_ALLOW(), and SIPTAG_ALLOW_STR() \n - * NUTAG_ALLOW_EVENTS(), SIPTAG_ALLOW_EVENTS(), and + * NUTAG_ALLOW_EVENTS(), SIPTAG_ALLOW_EVENTS(), and * SIPTAG_ALLOW_EVENTS_STR() \n * NUTAG_AUTH_CACHE() \n * NUTAG_AUTOACK() \n @@ -437,9 +437,9 @@ * Any soa tags are also considered as handle-specific parameters. They are * defined in . * - * The global parameters that can not be set by nua_set_hparams() include + * The global parameters that can not be set by nua_set_hparams() include * NUTAG_DETECT_NETWORK_UPDATES(), NUTAG_SMIME_* tags, and all NTA tags. - * + * * @par Events: * #nua_r_set_params */ @@ -453,12 +453,12 @@ * @param nh NULL when responding to nua_set_params(), * operation handle when responding to nua_set_hparams() * @param hmagic NULL when responding to nua_set_params(), - * application contact associated with the operation handle + * application contact associated with the operation handle * when responding to nua_set_hparams() * @param sip NULL * @param tags None * - * @sa nua_set_params(), nua_set_hparams(), + * @sa nua_set_params(), nua_set_hparams(), * #nua_r_get_params, nua_get_params(), nua_get_hparams() * * @END_NUA_EVENT @@ -468,7 +468,7 @@ tagi_t const *tags) { nua_handle_t *dnh = nua->nua_dhandle; - + int status; char const *phrase; @@ -486,8 +486,8 @@ *tmp = *nhp; NHP_UNSET_ALL(tmp); /* - * Supported features, allowed methods and events are merged - * with previous or default settings. + * Supported features, allowed methods and events are merged + * with previous or default settings. * * Here we just copy pointers from default settings. However when saving * settings we have to be extra careful so that we @@ -495,20 +495,20 @@ * 2) do not free pointer if the setting has been modified * See NHP_ZAP_OVERRIDEN() below for gorier details. */ - if (!NHP_ISSET(nhp, supported)) + if (!NHP_ISSET(nhp, supported)) tmp->nhp_supported = dnhp->nhp_supported; - if (!NHP_ISSET(nhp, allow)) + if (!NHP_ISSET(nhp, allow)) tmp->nhp_allow = dnhp->nhp_allow; - if (!NHP_ISSET(nhp, allow_events)) + if (!NHP_ISSET(nhp, allow_events)) tmp->nhp_allow_events = dnhp->nhp_allow_events; - if (!NHP_ISSET(nhp, appl_method)) + if (!NHP_ISSET(nhp, appl_method)) tmp->nhp_appl_method = dnhp->nhp_appl_method; - + if (nh == dnh) /* nua_set_params() call, save stack-wide params, too */ ngp = gtmp, *gtmp = *nua->nua_prefs; /* Set and save parameters to tmp */ - if (!nh->nh_used_ptags && + if (!nh->nh_used_ptags && nhp_set_tags(tmphome, tmp, NULL, nh->nh_ptags) < 0) status = 900, phrase = "Error storing default handle parameters"; else if (nhp_set_tags(tmphome, tmp, ngp, tags) < 0) @@ -531,9 +531,9 @@ if (dnh->nh_soa) nh->nh_soa = soa_clone(dnh->nh_soa, nua->nua_root, nh); - else + else nh->nh_soa = soa_create(soa_name, nua->nua_root, nh); - + if (!nh->nh_soa) status = 900, phrase = "Error Creating SOA Object"; else if (soa_set_params(nh->nh_soa, TAG_NEXT(nh->nh_ptags)) < 0) @@ -544,8 +544,8 @@ soa_destroy(nh->nh_soa), nh->nh_soa = NULL; } - if (status == 200 && tags && nh->nh_soa && - soa_set_params(nh->nh_soa, TAG_NEXT(tags)) < 0) + if (status == 200 && tags && nh->nh_soa && + soa_set_params(nh->nh_soa, TAG_NEXT(tags)) < 0) status = 900, phrase = "Error Setting SOA Parameters"; } @@ -598,7 +598,7 @@ * @param ngp structure to store global preferences * @param tags list of tags to parse */ -static int nhp_set_tags(su_home_t *home, +static int nhp_set_tags(su_home_t *home, nua_handle_preferences_t *nhp, nua_global_preferences_t *ngp, tagi_t const *tags) @@ -828,12 +828,12 @@ /* SIPTAG_SUPPORTED_STR(supported_str) */ /* SIPTAG_SUPPORTED(supported) */ else if (tag == nutag_supported || - tag == siptag_supported || + tag == siptag_supported || tag == siptag_supported_str) { int ok; sip_supported_t *supported = NULL; - ok = nhp_merge_lists(home, + ok = nhp_merge_lists(home, sip_supported_class, &supported, nhp->nhp_supported, NHP_ISSET(nhp, supported), /* already set by tags */ tag == siptag_supported, /* dup it, don't make */ @@ -853,7 +853,7 @@ int ok; msg_list_t *allow = NULL; - ok = nhp_merge_lists(home, + ok = nhp_merge_lists(home, sip_allow_class, &allow, (msg_list_t const *)nhp->nhp_allow, @@ -875,9 +875,9 @@ int ok; sip_allow_events_t *allow_events = NULL; - ok = nhp_merge_lists(home, + ok = nhp_merge_lists(home, sip_allow_events_class, - &allow_events, + &allow_events, nhp->nhp_allow_events, NHP_ISSET(nhp, allow_events), /* already set */ tag == siptag_allow_events, /* dup it, don't make */ @@ -902,7 +902,7 @@ &appl_method, (msg_list_t const *)nhp->nhp_appl_method, /* already set by tags? */ - NHP_ISSET(nhp, appl_method), + NHP_ISSET(nhp, appl_method), 0, /* dup it, don't make */ 1, /* merge with old value */ t->t_value); @@ -1036,7 +1036,7 @@ return 0; } - if (already_parsed) + if (already_parsed) elems = (void *)msg_header_dup_as(home, hc, (msg_header_t *)value); else elems = (void *)msg_header_make(home, hc, (char const *)value); @@ -1065,8 +1065,8 @@ if (msg_params_join(home, (msg_param_t **)&list->k_items, elems->k_items, 2 /* prune */, 0 /* don't dup */) < 0) return -1; - - *return_new_list = + + *return_new_list = (msg_list_t *)msg_header_dup_as(home, hc, (msg_header_t *)list); if (!*return_new_list) return -1; @@ -1083,9 +1083,9 @@ * @retval 0 - no changes in parameters * @retval -1 - an error */ -static +static int nhp_save_params(nua_handle_t *nh, - su_home_t *tmphome, + su_home_t *tmphome, nua_global_preferences_t *gsrc, nua_handle_preferences_t *src) { @@ -1112,12 +1112,12 @@ /* Move allocations from tmphome to home */ su_home_move(nh->nh_home, tmphome); - + /* Copy parameters that are set from src to dst */ nhp_or_set(dst, src); /* Handle pointer items. Free changed ones and zap unset ones. */ - /* Note that pointer items where !NHP_ISSET(old, pref) are not freed + /* Note that pointer items where !NHP_ISSET(old, pref) are not freed (because they were just on loan from the default preference set) */ #define NHP_ZAP_OVERRIDEN(old, dst, free, pref) \ (((NHP_ISSET(old, pref) && \ @@ -1142,7 +1142,7 @@ NHP_ZAP_OVERRIDEN(old, dst, msg_header_free, initial_route); nh->nh_prefs = dst; - + return memcmp(dst, old, sizeof *dst) != 0; } @@ -1239,17 +1239,17 @@ else if (to_str) p_to = sip_to_make(tmphome, to_str); else if (url) - p_to = sip_to_create(tmphome, url), + p_to = sip_to_create(tmphome, url), p_to ? sip_aor_strip((url_t*)p_to->a_url) : 0; else p_to = SIP_NONE; - + if (p_to == NULL || p_from == NULL) { su_home_deinit(tmphome); return -1; } - nh->nh_tags = + nh->nh_tags = tl_filtered_tlist(nh->nh_home, tagfilter, TAG_IF(p_from != SIP_NONE, SIPTAG_FROM(p_from)), TAG_IF(p_from != SIP_NONE, TAG_FILTER(nua_handle_tags_filter)), @@ -1257,7 +1257,7 @@ TAG_IF(p_to != SIP_NONE, TAG_FILTER(nua_handle_tags_filter)), TAG_NEXT(tags)); - nh->nh_ptags = + nh->nh_ptags = tl_filtered_tlist(nh->nh_home, paramfilter, TAG_NEXT(tags)); error = nh->nh_tags == NULL || nh->nh_ptags == NULL; @@ -1270,7 +1270,7 @@ if (nh->nh_ptags && nh->nh_ptags->t_tag == NULL) su_free(nh->nh_home, nh->nh_ptags), nh->nh_ptags = NULL; - + if (identity) nh->nh_identity = nua_handle_ref(identity); @@ -1287,12 +1287,12 @@ if (!t || !t->t_tag) return 0; - if (t->t_tag == nutag_url || + if (t->t_tag == nutag_url || t->t_tag == nutag_sips_url || t->t_tag == nutag_identity) return 0; - ns = t->t_tag->tt_ns; + ns = t->t_tag->tt_ns; if (!ns) return 0; @@ -1311,12 +1311,12 @@ if (tag == tag_filter) return 0; - + /* Accept @From or @To only when they are followed by TAG_FILTER(nua_handle_tags_filter) */ if (tag == siptag_from || tag == siptag_to) { t = tl_next(t); - return t && t->t_tag == tag_filter && + return t && t->t_tag == tag_filter && t->t_value == (tag_value_t)nua_handle_tags_filter; } @@ -1371,7 +1371,7 @@ return n; /* XXX - all other S/MIME parameters? */ - return sm_set_params(nua->sm, smime_enable, smime_opt, + return sm_set_params(nua->sm, smime_enable, smime_opt, smime_protection_mode, smime_path); #endif @@ -1404,7 +1404,7 @@ */ /**@fn void nua_get_hparams(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...) - * + * * Get values of handle-specific parameters in #nua_r_get_params event. * * Application will specify either expilicit list of tags it is interested @@ -1443,7 +1443,7 @@ * @param nh NULL when responding to nua_get_params(), * operation handle when responding to nua_get_hparams() * @param hmagic NULL when responding to nua_get_params(), - * application contact associated with the operation handle + * application contact associated with the operation handle * when responding to nua_get_hparams() * @param sip NULL * @param tags @@ -1588,7 +1588,7 @@ TAG_IF(nhp->nhp_set.nhb_##pref, TAG(nhp->nhp_##pref)) /* Include tag in the list returned to user - * if it has been earlier set (by user) + * if it has been earlier set (by user) * but always include in the default parameters */ #define TIFD(TAG, pref) \ TAG_IF(nh == dnh || nhp->nhp_set.nhb_##pref, TAG(nhp->nhp_##pref)) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c Tue Dec 16 13:05:22 2008 @@ -168,7 +168,7 @@ * @param nh operation handle associated with the publication * @param hmagic application context associated with the handle * @param sip response to PUBLISH request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * @@ -206,8 +206,8 @@ * * @par Events: * #nua_r_unpublish - * - * @sa #nua_r_unpublish, @RFC3903, @SIPIfMatch, + * + * @sa #nua_r_unpublish, @RFC3903, @SIPIfMatch, * #nua_i_publish, nua_publish(), #nua_r_publish */ @@ -223,7 +223,7 @@ * @param nh operation handle associated with the publication * @param hmagic application context associated with the handle * @param sip response to PUBLISH request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * @@ -369,7 +369,7 @@ ; else if (status == 412) restarting = phrase; - else if (200 <= status && status < 300 && + else if (200 <= status && status < 300 && sip->sip_expires && sip->sip_expires->ex_delta == 0) restarting = "Immediate re-PUBLISH"; @@ -473,7 +473,7 @@ * * In order to receive #nua_i_publish events, the application must enable * both the PUBLISH method with NUTAG_ALLOW() tag and the acceptable SIP - * events with nua_set_params() tag NUTAG_ALLOW_EVENTS(). + * events with nua_set_params() tag NUTAG_ALLOW_EVENTS(). * * The nua_response() call responding to a PUBLISH request must have * NUTAG_WITH() (or NUTAG_WITH_THIS()/NUTAG_WITH_SAVED()) tag. Note that @@ -495,8 +495,8 @@ * @param tags empty * * @sa @RFC3903, nua_respond(), - * @Expires, @SIPETag, @SIPIfMatch, @Event, - * nua_subscribe(), #nua_i_subscribe, + * @Expires, @SIPETag, @SIPIfMatch, @Event, + * nua_subscribe(), #nua_i_subscribe, * nua_notifier(), #nua_i_subscription, * * @since First used in @VERSION_1_12_4 @@ -506,11 +506,11 @@ int nua_publish_server_init(nua_server_request_t *sr); -nua_server_methods_t const nua_publish_server_methods = +nua_server_methods_t const nua_publish_server_methods = { SIP_METHOD_PUBLISH, nua_i_publish, /* Event */ - { + { 0, /* Do not create dialog */ 0, /* Initial request */ 0, /* Not a target refresh request */ @@ -528,7 +528,7 @@ sip_allow_events_t *allow_events = NH_PGET(sr->sr_owner, allow_events); sip_event_t *o = sr->sr_request.sip->sip_event; char const *event = o ? o->o_type : NULL; - + if (!allow_events) return SR_STATUS1(sr, SIP_501_NOT_IMPLEMENTED); else if (!event || !msg_header_find_param(allow_events->k_common, event)) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c Tue Dec 16 13:05:22 2008 @@ -76,7 +76,7 @@ /* Registrations and contacts */ int nua_registration_from_via(nua_registration_t **list, - nua_handle_t *nh, + nua_handle_t *nh, sip_via_t const *via, int public); @@ -150,7 +150,7 @@ unsigned nr_by_stack:1; unsigned:0; - + int nr_error_report_id; /**< ID used to ask for error reports from tport */ sip_route_t *nr_route; /**< Outgoing Service-Route */ @@ -285,8 +285,8 @@ }; /**@fn void nua_register(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); - * - * Send SIP REGISTER request to the registrar. + * + * Send SIP REGISTER request to the registrar. * * Request status will be delivered to the application using #nua_r_register * event. When successful the registration will be updated periodically. @@ -306,7 +306,7 @@ * * @par Events: * #nua_r_register, #nua_i_outbound - * + * * @par Generating Contact Header * * If the application did not specify the Contact header in the tags, @@ -314,10 +314,10 @@ * for the host and port number for the Contact URI from the transport * socket. The diplay name is taken from NUTAG_M_DISPLAY(), URL username * part is taken from NUTAG_M_USERNAME(), URI parameters from - * NUTAG_M_PARAMS(), and Contact header parameters from NUTAG_M_FEATURES(). + * NUTAG_M_PARAMS(), and Contact header parameters from NUTAG_M_FEATURES(). * If NUTAG_CALLEE_CAPS(1) is specified, additional Contact header * parameters are generated based on SDP capabilities and SIP @Allow header. - * + * * Note that @b nua may append a identifier of its own to the @Contact URI * username. Such nua-generated identifier trailer always starts with "=" * (equal sign), rest of the nua-generated identifier may contain any @@ -349,7 +349,7 @@ * by NUTAG_M_USERNAME() and the non-transport parameters of the request URI * set by NUTAG_M_PARAMS() when determining to which registration the * incoming request belongs. - * + * * For example, a request line correspoding to the @Contact in above example * may look like: * @code @@ -363,17 +363,17 @@ * * Normally, @b nua will start start a protocol engine for outbound * connections used for NAT and firewall traversal and connectivity checks - * when registering. + * when registering. * * @note If the application provides @b nua with a * @Contact header of its own (or includes a SIPTAG_CONTACT(NULL) tag in * nua_register() tags), the outbound protocol engine is not started. It is * assumed that the application knows better what it is doing when it sets - * the @Contact, or it is using experimental CPL upload as specified in + * the @Contact, or it is using experimental CPL upload as specified in * * draft-lennox-sip-reg-payload-01.txt. * - * First, outbound engine will probe for NATs in between UA and registrar. + * First, outbound engine will probe for NATs in between UA and registrar. * It will send a REGISTER request as usual. Upon receiving the response it * checks for the presence of "received" and "rport" parameters in the Via * header returned by registrar. The presence of NAT is determined from the @@ -416,14 +416,14 @@ * * You can disable this kind of NAT traversal by setting "no-natify" into * NUTAG_OUTBOUND() options string. - * + * * @par GRUU and Service-Route * * After a successful response to the REGISTER request has been received, * nua_register() will update the information about the registration based * on it. If there is a "gruu" parameter included in the response, * nua_register() will save it and use the gruu URI in the Contact header - * fields of dialog-establishing messages, such as INVITE or SUBSCRIBE. + * fields of dialog-establishing messages, such as INVITE or SUBSCRIBE. * Also, if the registrar has included a Service-Route header in the * response, and the service route feature has not been disabled using * NUTAG_SERVICE_ROUTE_ENABLE(), the route URIs from the Service-Route @@ -444,8 +444,8 @@ * You can disable validation by inserting "no-validate" into * NUTAG_OUTBOUND() string. * - * The keepalive mechanism depends on the network features detected earlier. - * If @a outbound extension is used, the STUN keepalives will be used. + * The keepalive mechanism depends on the network features detected earlier. + * If @a outbound extension is used, the STUN keepalives will be used. * Otherwise, NUA stack will repeatedly send OPTIONS requests to itself. In * order to save bandwidth, it will include Max-Forwards: 0 in the * keep-alive requests, however. The keepalive interval is determined by @@ -462,18 +462,18 @@ * * As alternative to OPTIONS/STUN keepalives, the client can propose * a more frequent registration refresh interval with - * NUTAG_M_FEATURES() (e.g. NUTAG_M_FEATURES("expires=120") given as + * NUTAG_M_FEATURES() (e.g. NUTAG_M_FEATURES("expires=120") given as * parameter to nua_register()). - * - * @sa #nua_r_register, nua_unregister(), #nua_r_unregister, + * + * @sa #nua_r_register, nua_unregister(), #nua_r_unregister, * #nua_i_register, * @RFC3261 section 10, * @Expires, @Contact, @CallID, @CSeq, * @Path, @RFC3327, @ServiceRoute, @RFC3608, @RFC3680, * NUTAG_REGISTRAR(), NUTAG_INSTANCE(), NUTAG_OUTBOUND(), - * NUTAG_KEEPALIVE(), NUTAG_KEEPALIVE_STREAM(), + * NUTAG_KEEPALIVE(), NUTAG_KEEPALIVE_STREAM(), * SIPTAG_CONTACT(), SIPTAG_CONTACT_STR(), NUTAG_M_USERNAME(), - * NUTAG_M_DISPLAY(), NUTAG_M_PARAMS(), NUTAG_M_FEATURES(), + * NUTAG_M_DISPLAY(), NUTAG_M_PARAMS(), NUTAG_M_FEATURES(), */ /** @NUA_EVENT nua_r_register @@ -481,8 +481,8 @@ * Response to an outgoing REGISTER. * * The REGISTER may be sent explicitly by nua_register() or implicitly by - * NUA state machines. - * + * NUA state machines. + * * When REGISTER request has been restarted the @a status may be 100 even * while the real response status returned is different. * @@ -494,23 +494,23 @@ * @param nh operation handle associated with the registration * @param hmagic application context associated with the registration * @param sip response message to REGISTER request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * * @sa nua_register(), nua_unregister(), #nua_r_unregister, * @Contact, @CallID, @CSeq, @RFC3261 section 10, * @Path, @RFC3327, @ServiceRoute, @RFC3608, @RFC3680 - * + * * @END_NUA_EVENT */ /**@fn void nua_unregister(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); - * Unregister. + * Unregister. * - * Send a REGISTER request with expiration time 0. This removes the - * registration from the registrar. If the handle was earlier used - * with nua_register() the periodic updates will be terminated. + * Send a REGISTER request with expiration time 0. This removes the + * registration from the registrar. If the handle was earlier used + * with nua_register() the periodic updates will be terminated. * * If a SIPTAG_CONTACT_STR() with argument "*" is used, all the * registrations will be removed from the registrar otherwise only the @@ -534,9 +534,9 @@ * @Expires, @Contact, @CallID, @CSeq, @RFC3261 section 10, * @Path, @RFC3327, @ServiceRoute, @RFC3608, @RFC3680, * NUTAG_REGISTRAR(), NUTAG_INSTANCE(), NUTAG_OUTBOUND(), - * NUTAG_KEEPALIVE(), NUTAG_KEEPALIVE_STREAM(), + * NUTAG_KEEPALIVE(), NUTAG_KEEPALIVE_STREAM(), * SIPTAG_CONTACT(), SIPTAG_CONTACT_STR(), NUTAG_M_USERNAME(), - * NUTAG_M_DISPLAY(), NUTAG_M_PARAMS(), NUTAG_M_FEATURES(), + * NUTAG_M_DISPLAY(), NUTAG_M_PARAMS(), NUTAG_M_FEATURES(), */ /** @NUA_EVENT nua_r_unregister @@ -551,14 +551,14 @@ * @param nh operation handle associated with the registration * @param hmagic application context associated with the registration * @param sip response message to REGISTER request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * * @sa nua_unregister(), nua_register(), #nua_r_register, * @Contact, @CallID, @CSeq, @RFC3261 section 10, * @Path, @RFC3327, @ServiceRoute, @RFC3608, @RFC3680 - * + * * @END_NUA_EVENT */ @@ -692,7 +692,7 @@ for (m = sip->sip_contact; m; m = m->m_next) if (!m->m_expires || strtoul(m->m_expires, NULL, 10) != 0) break; - + if (m == NULL) unreg = 1; /* All contacts have expires=0 */ } @@ -754,7 +754,7 @@ outbound_get_contacts(nr->nr_ob, &m, &previous); sip_add_dup(msg, sip, (sip_header_t *)m); - /* previous is an outdated contact generated by stack + /* previous is an outdated contact generated by stack * and it is now unregistered */ if (previous) sip_add_dup(msg, sip, (sip_header_t *)previous); @@ -780,10 +780,10 @@ /* Remove the expire parameters from contacts */ msg_header_remove_param(m->m_common, "expires"); } - else if (nr && nr->nr_min_expires && + else if (nr && nr->nr_min_expires && strtoul(m->m_expires, 0, 10) < nr->nr_min_expires) { - if (min_expires == NULL) - min_expires = su_sprintf(msg_home(msg), "expires=%lu", + if (min_expires == NULL) + min_expires = su_sprintf(msg_home(msg), "expires=%lu", nr->nr_min_expires); msg_header_replace_param(msg_home(msg), m->m_common, min_expires); } @@ -815,7 +815,7 @@ req, sip); restart = retry >= ob_reregister_now; - + if (retry == ob_reregister) /* outbound restarts REGISTER later */; @@ -835,7 +835,7 @@ /* Restart only if nua_base_client_check_restart() did not try to restart */ if (restart && retry_count == cr->cr_retry_count) return nua_client_restart(cr, 100, "Outbound NAT Detected"); - + return 0; } @@ -874,7 +874,7 @@ } #endif - /* XXX - if store/remove, remove + /* XXX - if store/remove, remove Content-Disposition Content-Type body @@ -886,7 +886,7 @@ reqdelta = req->sip_expires ? req->sip_expires->ex_delta : 0; for (m = sip->sip_contact; m; m = m->m_next) { - if (m->m_url->url_type != url_sip && + if (m->m_url->url_type != url_sip && m->m_url->url_type != url_sips) continue; @@ -901,7 +901,7 @@ if (mdelta == 0) mdelta = 3600; - + delta = sip_contact_expires(m, sip->sip_expires, sip->sip_date, mdelta, now); if (delta > 0 && delta < mindelta) @@ -975,7 +975,7 @@ if (tport_is_secondary(tport)) { tport_set_params(tport, TPTAG_SDWN_ERROR(1), TAG_END()); - nr->nr_error_report_id = + nr->nr_error_report_id = tport_pend(tport, NULL, nua_register_connection_closed, nr); } } @@ -1033,7 +1033,7 @@ tpn = tport_name(nr->nr_tport); - SU_DEBUG_5(("nua_register(%p): tport to %s/%s:%s%s%s closed %s\n", + SU_DEBUG_5(("nua_register(%p): tport to %s/%s:%s%s%s closed %s\n", du->du_dialog->ds_owner, tpn->tpn_proto, tpn->tpn_host, tpn->tpn_port, tpn->tpn_comp ? ";comp=" : "", @@ -1162,13 +1162,13 @@ contact1 = contact2, contact2 = NULL; if (contact1 && - (url_is_string(contact1) + (url_is_string(contact1) ? strncasecmp(contact1->us_str, "sips:", 5) == 0 : contact1->us_url->url_type == url_sips)) name1 = "sips"; - if (contact2 && - (url_is_string(contact2) + if (contact2 && + (url_is_string(contact2) ? strncasecmp(contact2->us_str, "sips:", 5) == 0 : contact2->us_url->url_type == url_sips)) name2 = "sips"; @@ -1205,7 +1205,7 @@ nta_agent_add_tport(nua->nua_nta, contact2, TPTAG_IDENT(name2), TPTAG_CERTIFICATE(certificate_dir), - TAG_NEXT(nua->nua_args)) < 0) + TAG_NEXT(nua->nua_args)) < 0) return -1; } @@ -1238,7 +1238,7 @@ case NUA_NW_DETECT_ONLY_INFO: nua_stack_event(nua, NULL, NULL, nua_i_network_changed, SIP_200_OK, NULL); break; - + case NUA_NW_DETECT_TRY_FULL: /* 1) Shutdown all tports */ @@ -1254,7 +1254,7 @@ SIP_200_OK, NULL); break; - + default: break; } @@ -1270,7 +1270,7 @@ nua->nua_api_root, nua_network_changed_cb, nua); - + if (!snc) return -1; @@ -1394,13 +1394,13 @@ } /* if more than one candidate, ignore local entries */ - if (v && (*vv || nr_items > 0) && + if (v && (*vv || nr_items > 0) && host_is_local(v->v_host)) { - SU_DEBUG_9(("nua_register: ignoring contact candidate %s:%s.\n", + SU_DEBUG_9(("nua_register: ignoring contact candidate %s:%s.\n", v->v_host, v->v_port ? v->v_port : "")); continue; } - + nr = su_zalloc(home, sizeof *nr); if (!nr) break; @@ -1494,7 +1494,7 @@ continue; if (nr->nr_ip6 && ip4) continue; - if (sips_uri ? nr->nr_secure : !nr->nr_secure) + if (sips_uri ? nr->nr_secure : !nr->nr_secure) return (nua_registration_t *)nr; if (!registered && nr->nr_aor) registered = nr; @@ -1528,7 +1528,7 @@ namewise = nr; } - if (!sipswise && ((sips_aor || sips_uri) ? + if (!sipswise && ((sips_aor || sips_uri) ? nr->nr_secure : !nr->nr_secure)) sipswise = nr; if (!registered) @@ -1545,8 +1545,8 @@ return (nua_registration_t *)sipswise; if (registered) return (nua_registration_t *)registered; - - /* XXX - + + /* XXX - should we do some policing whether sips_aor or sips_uri can be used with sip contact? */ @@ -1572,7 +1572,7 @@ } nua_registration_t * -nua_registration_for_response(nua_registration_t const *list, +nua_registration_for_response(nua_registration_t const *list, sip_t const *sip, sip_record_route_t const *record_route, sip_contact_t const *remote_contact) @@ -1583,7 +1583,7 @@ if (sip) aor = sip->sip_to; - + if (record_route) uri = record_route->r_url; else if (sip && sip->sip_record_route) @@ -1647,8 +1647,8 @@ if (nr == NULL) nr = nua_registration_for_request(nh->nh_nua->nua_registrations, sip); - return nua_registration_add_contact_and_route(nh, nr, msg, sip, - add_contact, + return nua_registration_add_contact_and_route(nh, nr, msg, sip, + add_contact, add_service_route); } @@ -1678,13 +1678,13 @@ nr = nua_registration_for_response(nh->nh_nua->nua_registrations, sip, record_route, remote_contact); - return nua_registration_add_contact_and_route(nh, nr, msg, sip, + return nua_registration_add_contact_and_route(nh, nr, msg, sip, 1, 0); } /** Add a Contact (and Route) header to request */ -static +static int nua_registration_add_contact_and_route(nua_handle_t *nh, nua_registration_t *nr, msg_t *msg, @@ -1825,7 +1825,7 @@ return -1; uri = nr->nr_aor ? nr->nr_aor->a_url : NULL; - + previous = nr->nr_contact; if (application_contact) { @@ -1836,7 +1836,7 @@ } else { nua_registration_t *nr0; - + nr0 = nua_registration_by_aor(*nr->nr_list, NULL, uri, 1); if (nr0 && nr0->nr_via) { @@ -1920,12 +1920,12 @@ * @param phrase a short textual description of @a status code * @param nh operation handle associated with the outbound engine * @param hmagic application context associated with the handle - * @param sip NULL or response message to an keepalive message or + * @param sip NULL or response message to an keepalive message or * registration probe * (error code and message are in status an phrase parameters) * @param tags empty * - * @sa NUTAG_OUTBOUND(), NUTAG_KEEPALIVE(), NUTAG_KEEPALIVE_STREAM(), + * @sa NUTAG_OUTBOUND(), NUTAG_KEEPALIVE(), NUTAG_KEEPALIVE_STREAM(), * nua_register(), #nua_r_register, nua_unregister(), #nua_r_unregister * * @END_NUA_EVENT @@ -1967,7 +1967,7 @@ } /** @internal Callback for obtaining credentials for keepalive */ -static int nua_stack_outbound_credentials(nua_handle_t *nh, +static int nua_stack_outbound_credentials(nua_handle_t *nh, auth_client_t **auc) { return auc_copy_credentials(auc, nh->nh_auth); @@ -2080,12 +2080,12 @@ su_strlst_append(l, s[0] == ';' ? "" : ";"); su_strlst_append(l, s); } - + va_end(va); if (!in_dialog) { s = NH_PGET(nh, m_features); - if (s) + if (s) s[0] == ';' ? "" : su_strlst_append(l, ";"), su_strlst_append(l, s); if (NH_PGET(nh, callee_caps)) { @@ -2106,7 +2106,7 @@ if (nh->nh_soa) { char **media = soa_media_features(nh->nh_soa, 0, home); - + while (*media) { if (su_strlst_len(l)) su_strlst_append(l, ";"); @@ -2117,8 +2117,8 @@ } m = sip_contact_make(home, su_strlst_join(l, su_strlst_home(l), "")); - + su_strlst_destroy(l); - + return m; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_registrar.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_registrar.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_registrar.c Tue Dec 16 13:05:22 2008 @@ -93,11 +93,11 @@ * @END_NUA_EVENT */ -nua_server_methods_t const nua_register_server_methods = +nua_server_methods_t const nua_register_server_methods = { SIP_METHOD_REGISTER, nua_i_register, /* Event */ - { + { 0, /* Do not create dialog */ 0, /* Initial request */ 0, /* Not a target refresh request */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c Tue Dec 16 13:05:22 2008 @@ -92,7 +92,7 @@ typedef struct nua_ee_data { nua_t *ee_nua; nua_event_data_t ee_data[1]; -} nua_ee_data_t; +} nua_ee_data_t; /** @internal Linked stack frames from nua event callback */ struct nua_event_frame_s { @@ -170,7 +170,7 @@ dnh->nh_prefs = (void *)(dnh + 1); dnh->nh_valid = nua_valid_handle_cookie; dnh->nh_nua = nua; - nua_handle_ref(dnh); dnh->nh_ref_by_stack = 1; + nua_handle_ref(dnh); dnh->nh_ref_by_stack = 1; nua_handle_ref(dnh); dnh->nh_ref_by_user = 1; nh_append(nua, dnh); dnh->nh_identity = dnh; @@ -201,7 +201,7 @@ TAG_END()); if (nua->nua_nta == NULL || - dnh->nh_ds->ds_leg == NULL || + dnh->nh_ds->ds_leg == NULL || nta_agent_set_params(nua->nua_nta, NTATAG_UA(1), TAG_END()) < 0 || nua_stack_init_transport(nua, nua->nua_args) < 0) { SU_DEBUG_1(("nua: initializing SIP stack failed\n")); @@ -295,7 +295,7 @@ if ((event > nua_r_authenticate && event <= nua_r_ack) || event < nua_i_error || (nh && !nh->nh_valid) - || (nua->nua_shutdown && event != nua_r_shutdown && + || (nua->nua_shutdown && event != nua_r_shutdown && !nua->nua_prefs->ngp_shutdown_events)) { if (msg) msg_destroy(msg); @@ -380,7 +380,7 @@ if (!nh->nh_ref_by_user) { /* Application must now call nua_handle_destroy() */ nh->nh_ref_by_user = 1; - nua_handle_ref(nh); + nua_handle_ref(nh); } } else if (!nh->nh_valid) { /* Handle has been destroyed */ @@ -398,7 +398,7 @@ if (nua->nua_callback) { nua_event_frame_t frame[1]; - + su_msg_save(frame->nf_saved, sumsg); frame->nf_next = nua->nua_current, nua->nua_current = frame; @@ -429,9 +429,9 @@ return NULL; } -/** Get request message from saved nua event. @NEW_1_12_4. +/** Get request message from saved nua event. @NEW_1_12_4. * - * @sa nua_save_event(), nua_respond(), NUTAG_WITH_SAVED(), + * @sa nua_save_event(), nua_respond(), NUTAG_WITH_SAVED(), */ msg_t *nua_saved_event_request(nua_saved_event_t const *saved) { @@ -514,7 +514,7 @@ e->e_phrase = phrase; su_msg_deinitializer(sumsg, nua_event_deinit); - + retval = su_msg_send_to(sumsg, nua->nua_server, nua_stack_signal); if (retval == 0){ @@ -649,7 +649,7 @@ case nua_r_respond: nua_stack_respond(nua, nh, e->e_status, e->e_phrase, tags); break; - case nua_r_destroy: + case nua_r_destroy: nua_stack_destroy_handle(nua, nh, tags); su_msg_destroy(nua->nua_signal); return; @@ -1102,7 +1102,7 @@ return 0; } -sip_replaces_t *nua_stack_handle_make_replaces(nua_handle_t *nh, +sip_replaces_t *nua_stack_handle_make_replaces(nua_handle_t *nh, su_home_t *home, int early_only) { @@ -1184,7 +1184,7 @@ /** @NUA_EVENT nua_r_authenticate * * Response to nua_authenticate(). Under normal operation, this event is - * never sent but rather the unauthenticated operation is completed. + * never sent but rather the unauthenticated operation is completed. * However, if there is no operation to authentication or if there is an * authentication error the #nua_r_authenticate event is sent to the * application with the status code as follows: @@ -1195,16 +1195,16 @@ * There was internal problem updating authenticator. * - 904 No matching challenge:\n * There was no challenge matching with the credentials provided by - * nua_authenticate(), e.g., their realm did not match with the one + * nua_authenticate(), e.g., their realm did not match with the one * received with the challenge. - * - * @param status status code from authentication + * + * @param status status code from authentication * @param phrase a short textual description of @a status code * @param nh operation handle authenticated * @param hmagic application context associated with the handle * @param sip NULL * @param tags empty - * + * * @sa nua_terminate(), nua_handle_destroy() * * @END_NUA_EVENT @@ -1223,14 +1223,14 @@ nua_client_restart_request(cr, cr->cr_terminating, tags); } else { - nua_stack_event(nua, nh, NULL, e, + nua_stack_event(nua, nh, NULL, e, 202, "No operation to restart", NULL); } } else if (cr && cr->cr_wait_for_cred) { cr->cr_waiting = cr->cr_wait_for_cred = 0; - + if (status < 0) nua_client_response(cr, 900, "Operation cannot add credentials", NULL); else @@ -1349,7 +1349,7 @@ } else if (initial && sip->sip_to->a_tag) { /* RFC 3261 section 12.2.2: - + If the UAS wishes to reject the request because it does not wish to recreate the dialog, it MUST respond to the request with a 481 (Call/Transaction Does Not Exist) status code and pass that to the @@ -1465,7 +1465,7 @@ return 0; return 501; -} +} #undef nua_base_server_init #undef nua_base_server_preprocess @@ -1506,7 +1506,7 @@ } /**@fn void nua_respond(nua_handle_t *nh, int status, char const *phrase, tag_type_t tag, tag_value_t value, ...); - * + * * Respond to a request with given status code and phrase. * * The stack returns a SIP response message with given status code and @@ -1526,7 +1526,7 @@ * @param phrase free text (default response phrase is used if NULL) * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Responses by Protocol Engine @@ -1642,7 +1642,7 @@ #undef nua_base_server_params -int nua_base_server_params(nua_server_request_t *sr, tagi_t const *tags) +int nua_base_server_params(nua_server_request_t *sr, tagi_t const *tags) { return 0; } @@ -1714,7 +1714,7 @@ sip_add_dup(msg, sip, (sip_header_t *)NH_PGET(nh, supported)) < 0) ; else if (!sip->sip_user_agent && NH_PGET(nh, user_agent) && - sip_add_make(msg, sip, sip_user_agent_class, + sip_add_make(msg, sip, sip_user_agent_class, NH_PGET(nh, user_agent)) < 0) ; else if (!sip->sip_organization && NH_PGET(nh, organization) && @@ -1724,10 +1724,10 @@ else if (!sip->sip_allow && NH_PGET(nh, allow) && sip_add_dup(msg, sip, (void *)NH_PGET(nh, allow)) < 0) ; - else if (!sip->sip_allow_events && + else if (!sip->sip_allow_events && NH_PGET(nh, allow_events) && (method == sip_method_publish || method == sip_method_subscribe || - method == sip_method_options || method == sip_method_refer || + method == sip_method_options || method == sip_method_refer || (sr->sr_initial && (method == sip_method_invite || method == sip_method_notify))) && @@ -1735,8 +1735,8 @@ ; else if (!sip->sip_contact && sr->sr_status < 300 && sr->sr_add_contact && (user_contact = 0, - ds->ds_ltarget - ? sip_add_dup(msg, sip, (sip_header_t *)ds->ds_ltarget) + ds->ds_ltarget + ? sip_add_dup(msg, sip, (sip_header_t *)ds->ds_ltarget) : nua_registration_add_contact_to_response(nh, msg, sip, NULL, m)) < 0) ; @@ -1748,7 +1748,7 @@ sr->sr_terminating = (term < 0) ? -1 : (term > 0 || sr->sr_terminating); - if (sr->sr_target_refresh && sr->sr_status < 300 && !sr->sr_terminating && + if (sr->sr_target_refresh && sr->sr_status < 300 && !sr->sr_terminating && user_contact && sip->sip_contact) { /* Save Contact given by application */ ltarget = sip_contact_dup(nh->nh_home, sip->sip_contact); @@ -1756,7 +1756,7 @@ retval = sr->sr_methods->sm_respond(sr, next_tags); - if (sr->sr_status < 200) + if (sr->sr_status < 200) sr->sr_response.msg = next.msg, sr->sr_response.sip = next.sip; else if (next.msg) msg_destroy(next.msg); @@ -1767,9 +1767,9 @@ if (sr->sr_status < 300) { nua_dialog_state_t *ds = nh->nh_ds; msg_header_free(nh->nh_home, (msg_header_t *)ds->ds_ltarget); - ds->ds_ltarget = ltarget; + ds->ds_ltarget = ltarget; } - else + else msg_header_free(nh->nh_home, (msg_header_t *)ltarget); } @@ -1807,7 +1807,7 @@ (msg_header_t *)sip->sip_status); nta_incoming_complete_response(sr->sr_irq, response, sr->sr_status, - sr->sr_phrase, + sr->sr_phrase, TAG_END()); } @@ -1927,17 +1927,17 @@ * exception is the client requests bound to a dialog usage: they are saved * and re-used when the dialog usage is refreshed (and sometimes when the * usage is terminated). - * + * * The client request is subclassed and its behaviour modified using virtual * function table in #nua_client_methods_t. - * + * * The first three methods (crm_template(), crm_init(), crm_send()) are * called when the request is sent first time. - * + * * The crm_template() is called if a template request message is needed (for * example, in case of unregister, unsubscribe and unpublish, the template * message is taken from the request establishing the usage). - * + * * The crm_init() is called when the template message and dialog leg has * been created and populated by the tags procided by the application. Its * parameters msg and sip are pointer to the template request message that @@ -1966,7 +1966,7 @@ * * @par Terminating Dialog Usages and Dialogs * - * The response is marked as terminating with nua_client_set_terminating(). + * The response is marked as terminating with nua_client_set_terminating(). * When a terminating request completes the dialog usage is removed and the * dialog is destroyed (unless there is an another active usage). */ @@ -1985,7 +1985,7 @@ * @retval > 0 if error event has been sent * @retval < 0 upon an error */ -int nua_client_create(nua_handle_t *nh, +int nua_client_create(nua_handle_t *nh, int event, nua_client_methods_t const *methods, tagi_t const * const tags) @@ -2004,7 +2004,7 @@ cr = su_zalloc(home, sizeof *cr + methods->crm_extra); if (!cr) { - return nua_stack_event(nh->nh_nua, nh, + return nua_stack_event(nh->nh_nua, nh, NULL, event, NUA_ERROR_AT(__FILE__, __LINE__), @@ -2052,7 +2052,7 @@ return nua_client_init_request(cr); } -int nua_client_tcreate(nua_handle_t *nh, +int nua_client_tcreate(nua_handle_t *nh, int event, nua_client_methods_t const *methods, tag_type_t tag, tag_value_t value, ...) @@ -2203,7 +2203,7 @@ nua_client_request_destroy(nua_client_request_t *cr) { nua_handle_t *nh; - + if (cr == NULL) return; @@ -2237,7 +2237,7 @@ nua_handle_unref(nh); } -/** Bind client request to a dialog usage */ +/** Bind client request to a dialog usage */ int nua_client_bind(nua_client_request_t *cr, nua_dialog_usage_t *du) { assert(cr); @@ -2301,7 +2301,7 @@ tagi_t const *t; int has_contact = 0; int error = 0; - + if (!cr->cr_method_name) return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), NULL); @@ -2382,7 +2382,7 @@ if (cr->cr_method == sip_method_register && url == NULL) url = (url_string_t const *)NH_PGET(nh, registrar); - + if ((t = cr->cr_tags)) { if (sip_add_tagis(msg, sip, &t) < 0) return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg); @@ -2403,11 +2403,11 @@ */ if (!ds->ds_leg) { - if (ds->ds_remote_tag && ds->ds_remote_tag[0] && + if (ds->ds_remote_tag && ds->ds_remote_tag[0] && sip_to_tag(nh->nh_home, sip->sip_to, ds->ds_remote_tag) < 0) return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg); - if (sip->sip_from == NULL && + if (sip->sip_from == NULL && sip_add_dup(msg, sip, (sip_header_t *)nua->nua_from) < 0) return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg); @@ -2475,7 +2475,7 @@ if (nh->nh_tags) { tagi_t const *t = nh->nh_tags; - /* Use the From header from the dialog. + /* Use the From header from the dialog. If From is set, it is always first tag in the handle */ if (ds->ds_leg && t->t_tag == siptag_from) t++; @@ -2619,8 +2619,8 @@ if (initial_route) { initial_route = sip_route_dup(msg_home(msg), initial_route); if (!initial_route) return -1; - msg_header_prepend(msg, (msg_pub_t*)sip, - /* This should be + msg_header_prepend(msg, (msg_pub_t*)sip, + /* This should be (msg_header_t **)&sip->sip_route * but directly casting pointer &sip->sip_route gives * spurious type-punning warning */ @@ -2629,14 +2629,14 @@ } } - + /** * For in-dialog requests, the request URI is taken from the @Contact - * header received from the remote party during dialog establishment, + * header received from the remote party during dialog establishment, * and the NUTAG_URL() is ignored. * * Also, the @CallID and @CSeq headers and @From and @To tags are - * generated based on the dialog information and added to the request. + * generated based on the dialog information and added to the request. * If the dialog has a route, it is added to the request, too. */ if (nta_msg_request_complete(msg, leg, method, name, url) < 0) @@ -2659,15 +2659,15 @@ */ if (!sip->sip_allow) sip_add_dup(msg, sip, (sip_header_t*)NH_PGET(nh, allow)); - + if (!sip->sip_supported && NH_PGET(nh, supported)) sip_add_dup(msg, sip, (sip_header_t *)NH_PGET(nh, supported)); - + if (method == sip_method_register && NH_PGET(nh, path_enable) && !sip_has_feature(sip->sip_supported, "path") && !sip_has_feature(sip->sip_require, "path")) sip_add_make(msg, sip, sip_supported_class, "path"); - + if (!sip->sip_organization && NH_PGET(nh, organization)) sip_add_make(msg, sip, sip_organization_class, NH_PGET(nh, organization)); @@ -2704,7 +2704,7 @@ if (cr->cr_method != sip_method_register) { if (cr->cr_contactize && cr->cr_has_contact) { sip_contact_t *ltarget = sip_contact_dup(nh->nh_home, sip->sip_contact); - if (ds->ds_ltarget) + if (ds->ds_ltarget) msg_header_free(nh->nh_home, (msg_header_t *)ds->ds_ltarget); ds->ds_ltarget = ltarget; } @@ -2728,7 +2728,7 @@ return nua_base_client_request(cr, msg, sip, NULL); } -/**Add tags to request message and send it, +/**Add tags to request message and send it, * * @retval 0 success * @retval -1 if error occurred, but event has not been sent @@ -2764,7 +2764,7 @@ url_string_t * proxy = NH_PGET(nh, proxy); if (nh->nh_auth) { - if (cr->cr_challenged || + if (cr->cr_challenged || NH_PGET(nh, auth_cache) == nua_auth_cache_dialog) { if (auc_authorize(&nh->nh_auth, msg, sip) < 0) return nua_client_return(cr, 900, "Cannot add credentials", msg); @@ -2895,7 +2895,7 @@ terminated = 0, graceful = 1; if (terminated < 0) - cr->cr_terminated = terminated; + cr->cr_terminated = terminated; else if (cr->cr_terminating || terminated) cr->cr_terminated = 1; else if (graceful) @@ -2908,7 +2908,7 @@ else nua_base_client_response(cr, status, phrase, sip, NULL); cr->cr_phrase = NULL; - } + } else { if (cr->cr_methods->crm_recv) retval = cr->cr_methods->crm_recv(cr, status, phrase, sip); @@ -2951,7 +2951,7 @@ char const *phrase, sip_t const *sip) { - nua_handle_t *nh = cr->cr_owner; + nua_handle_t *nh = cr->cr_owner; nta_outgoing_t *orq; if (status == 302 || status == 305) { @@ -2983,7 +2983,7 @@ if (status == 423) { unsigned my_expires = 0; - + if (cr->cr_sip->sip_expires) my_expires = cr->cr_sip->sip_expires->ex_delta; @@ -3024,7 +3024,7 @@ SU_DEBUG_7(("nua(%p): bad credentials, clearing them\n", (void *)nh)); auc_clear_credentials(&nh->nh_auth, NULL, NULL); } - else if (auc_has_authorization(&nh->nh_auth)) + else if (auc_has_authorization(&nh->nh_auth)) return nua_client_restart(cr, 100, "Request Authorized by Cache"); orq = cr->cr_orq, cr->cr_orq = NULL; @@ -3039,8 +3039,8 @@ } } - if (500 <= status && status < 600 && - sip->sip_retry_after && + if (500 <= status && status < 600 && + sip->sip_retry_after && sip->sip_retry_after->af_delta < 32) { su_timer_t *timer; char phrase[18]; /* Retry After XXXX\0 */ @@ -3055,7 +3055,7 @@ cr->cr_timer = timer; /* This takes over reference from orq */ - snprintf(phrase, sizeof phrase, "Retry After %u", + snprintf(phrase, sizeof phrase, "Retry After %u", (unsigned)sip->sip_retry_after->af_delta); orq = cr->cr_orq, cr->cr_orq = NULL; @@ -3073,7 +3073,7 @@ static void nua_client_restart_after(su_root_magic_t *magic, su_timer_t *timer, - nua_client_request_t *cr) + nua_client_request_t *cr) { cr->cr_waiting = 0; su_timer_destroy(cr->cr_timer), cr->cr_timer = NULL; @@ -3165,7 +3165,7 @@ /**@internal * Relay response event to the application. * - * @todo + * @todo * If handle has already been marked as destroyed by nua_handle_destroy(), * release the handle with nh_destroy(). * @@ -3194,7 +3194,7 @@ /**@internal * Relay response event to the application. * - * @todo + * @todo * If handle has already been marked as destroyed by nua_handle_destroy(), * release the handle with nh_destroy(). * @@ -3220,7 +3220,7 @@ auc_info(&nh->nh_auth, sip->sip_authentication_info, sip_authorization_class); - if (sip->sip_proxy_authentication_info) + if (sip->sip_proxy_authentication_info) auc_info(&nh->nh_auth, sip->sip_proxy_authentication_info, sip_proxy_authorization_class); @@ -3288,8 +3288,8 @@ return cr->cr_methods->crm_report(cr, status, phrase, sip, orq, tags); nh = cr->cr_owner; - - nua_stack_event(nh->nh_nua, nh, + + nua_stack_event(nh->nh_nua, nh, nta_outgoing_getresponse(orq), cr->cr_event, status, phrase, @@ -3316,8 +3316,8 @@ for (; cr; cr = cr->cr_next) { if (cr->cr_method == sip_method_cancel) continue; - - if (invite + + if (invite ? cr->cr_method == sip_method_invite : cr->cr_method != sip_method_invite) break; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h Tue Dec 16 13:05:22 2008 @@ -25,7 +25,7 @@ #ifndef NUA_STACK_H /** Defined when has been included. */ #define NUA_STACK_H -/**@IFILE nua_stack.h +/**@IFILE nua_stack.h * @brief Sofia-SIP User Agent Engine - internal stack interface * * @author Pekka Pessi @@ -103,10 +103,10 @@ TAG_IF((include) && (soa) && soa_is_remote_chat_active(soa) >= 0, \ SOATAG_ACTIVE_CHAT(soa_is_remote_chat_active(soa))) -/** @internal @brief NUA handle. +/** @internal @brief NUA handle. * */ -struct nua_handle_s +struct nua_handle_s { su_home_t nh_home[1]; /**< Memory home */ nua_handle_t *nh_next; @@ -205,7 +205,7 @@ unsigned nua_from_is_set; unsigned :0; - + /**< Local SIP address. Contents are kept around for ever. */ sip_from_t nua_from[1]; @@ -261,12 +261,12 @@ #endif su_inline nua_t *nua_stack_ref(nua_t *nua) -{ +{ return (nua_t *)su_home_ref(nua->nua_home); } su_inline void nua_stack_unref(nua_t *nua) -{ +{ su_home_unref(nua->nua_home); } @@ -289,25 +289,25 @@ nta_incoming_t *irq, sip_t const *sip); -void nua_stack_post_signal(nua_handle_t *nh, nua_event_t event, +void nua_stack_post_signal(nua_handle_t *nh, nua_event_t event, tag_type_t tag, tag_value_t value, ...); -typedef int nua_stack_signal_handler(nua_t *, - nua_handle_t *, - nua_event_t, +typedef int nua_stack_signal_handler(nua_t *, + nua_handle_t *, + nua_event_t, tagi_t const *); void nua_move_signal(nua_saved_signal_t a[1], nua_saved_signal_t b[1]); nua_signal_data_t const *nua_signal_data(nua_saved_signal_t const saved[1]); void nua_destroy_signal(nua_saved_signal_t saved[1]); -nua_stack_signal_handler +nua_stack_signal_handler nua_stack_set_params, nua_stack_get_params, - nua_stack_register, - nua_stack_invite, nua_stack_ack, nua_stack_cancel, + nua_stack_register, + nua_stack_invite, nua_stack_ack, nua_stack_cancel, nua_stack_bye, nua_stack_info, nua_stack_update, nua_stack_prack, - nua_stack_options, nua_stack_publish, nua_stack_message, + nua_stack_options, nua_stack_publish, nua_stack_message, nua_stack_subscribe, nua_stack_notify, nua_stack_refer, nua_stack_method; @@ -358,7 +358,7 @@ nua_handle_t *nh_validate(nua_t *nua, nua_handle_t *maybe); -sip_replaces_t *nua_stack_handle_make_replaces(nua_handle_t *handle, +sip_replaces_t *nua_stack_handle_make_replaces(nua_handle_t *handle, su_home_t *home, int early_only); @@ -386,7 +386,7 @@ sip_contact_t const *nua_stack_get_contact(nua_registration_t const *nr); int nua_registration_add_contact_to_request(nua_handle_t *nh, - msg_t *msg, + msg_t *msg, sip_t *sip, int add_contact, int add_service_route); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c Tue Dec 16 13:05:22 2008 @@ -69,10 +69,10 @@ }; static char const *nua_subscribe_usage_name(nua_dialog_usage_t const *du); -static int nua_subscribe_usage_add(nua_handle_t *nh, +static int nua_subscribe_usage_add(nua_handle_t *nh, nua_dialog_state_t *ds, nua_dialog_usage_t *du); -static void nua_subscribe_usage_remove(nua_handle_t *nh, +static void nua_subscribe_usage_remove(nua_handle_t *nh, nua_dialog_state_t *ds, nua_dialog_usage_t *du, nua_client_request_t *cr, @@ -102,8 +102,8 @@ return "subscribe"; } -static -int nua_subscribe_usage_add(nua_handle_t *nh, +static +int nua_subscribe_usage_add(nua_handle_t *nh, nua_dialog_state_t *ds, nua_dialog_usage_t *du) { @@ -113,15 +113,15 @@ return 0; } -static -void nua_subscribe_usage_remove(nua_handle_t *nh, +static +void nua_subscribe_usage_remove(nua_handle_t *nh, nua_dialog_state_t *ds, nua_dialog_usage_t *du, nua_client_request_t *cr, nua_server_request_t *sr) { - ds->ds_has_events--; - ds->ds_has_subscribes--; + ds->ds_has_events--; + ds->ds_has_subscribes--; } /* ====================================================================== */ @@ -129,17 +129,17 @@ /**@fn void nua_subscribe(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); * - * Subscribe to a SIP event. + * Subscribe to a SIP event. * - * Subscribe a SIP event using the SIP SUBSCRIBE request. If the - * SUBSCRBE is successful a subscription state is established and + * Subscribe a SIP event using the SIP SUBSCRIBE request. If the + * SUBSCRBE is successful a subscription state is established and * the subscription is refreshed regularly. The refresh requests will * generate #nua_r_subscribe events. * * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -155,17 +155,17 @@ /**@fn void nua_unsubscribe(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); * - * Unsubscribe an event. + * Unsubscribe an event. * - * Unsubscribe an active or pending subscription with SUBSCRIBE request - * containing Expires: header with value 0. The dialog associated with - * subscription will be destroyed if there is no other subscriptions or + * Unsubscribe an active or pending subscription with SUBSCRIBE request + * containing Expires: header with value 0. The dialog associated with + * subscription will be destroyed if there is no other subscriptions or * call using this dialog. * * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -173,12 +173,12 @@ * Header tags defined in except SIPTAG_EXPIRES() or SIPTAG_EXPIRES_STR() * * @par Events: - * #nua_r_unsubscribe + * #nua_r_unsubscribe * * @sa NUTAG_SUBSTATE(), @RFC3265 */ -static int nua_subscribe_client_init(nua_client_request_t *cr, +static int nua_subscribe_client_init(nua_client_request_t *cr, msg_t *, sip_t *, tagi_t const *tags); static int nua_subscribe_client_request(nua_client_request_t *cr, @@ -231,7 +231,7 @@ /* Add Event header */ sip_add_dup(msg, sip, (sip_header_t *)du->du_event); } - else if (cr->cr_event == nua_r_subscribe) { + else if (cr->cr_event == nua_r_subscribe) { /* Create dialog usage */ du = nua_dialog_usage_add(nh, nh->nh_ds, nua_subscribe_usage, o); /* Note that we allow SUBSCRIBE without event */ @@ -246,7 +246,7 @@ msg_t *msg, sip_t *sip, tagi_t const *tags) { - nua_dialog_usage_t *du = cr->cr_usage; + nua_dialog_usage_t *du = cr->cr_usage; sip_time_t expires = 0; if (cr->cr_event == nua_r_destroy || !du || du->du_shutdown) @@ -275,7 +275,7 @@ #endif nua_dialog_usage_reset_refresh(du); /* during SUBSCRIBE transaction */ - + if (cr->cr_terminating || cr->cr_event != nua_r_subscribe) expires = eu->eu_delta = 0; else if (sip->sip_expires) @@ -318,7 +318,7 @@ * @param nh operation handle associated with the subscription * @param hmagic application context associated with the handle * @param sip response to SUBSCRIBE request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags NUTAG_SUBSTATE() * @@ -339,7 +339,7 @@ * @param nh operation handle associated with the subscription * @param hmagic application context associated with the handle * @param sip response to SUBSCRIBE request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags NUTAG_SUBSTATE() * @@ -368,9 +368,9 @@ du->du_ready = 1; if (eu->eu_substate != nua_substate_terminated) - /* If there is no @Expires header, + /* If there is no @Expires header, use default value stored in eu_delta */ - delta = sip_contact_expires(NULL, sip->sip_expires, sip->sip_date, + delta = sip_contact_expires(NULL, sip->sip_expires, sip->sip_date, eu->eu_delta, now); else delta = 0; @@ -379,14 +379,14 @@ delta = eu->eu_delta; if (win_messenger_enable && !nua_dialog_is_established(nh->nh_ds)) { - /* Notify from messanger does not match with dialog tag */ + /* Notify from messanger does not match with dialog tag */ nh->nh_ds->ds_remote_tag = su_strdup(nh->nh_home, ""); } if (delta > 0) { nua_dialog_usage_set_refresh(du, delta); eu->eu_expires = du->du_refquested + delta; - } + } else { if (eu->eu_substate == nua_substate_terminated) { if (!eu->eu_notified) @@ -396,7 +396,7 @@ if (eu->eu_substate != nua_substate_terminated) { /* Wait 32 seconds for NOTIFY. */ delta = 64 * NTA_SIP_T1 / 1000; - + eu->eu_final_wait = 1; if (!eu->eu_notified && win_messenger_enable) @@ -405,7 +405,7 @@ nua_dialog_usage_set_refresh_range(du, delta, delta); } else { - nua_dialog_usage_reset_refresh(du); + nua_dialog_usage_reset_refresh(du); } eu->eu_expires = du->du_refquested; @@ -418,7 +418,7 @@ cr->cr_terminated = 1; } - return nua_base_client_tresponse(cr, status, phrase, sip, + return nua_base_client_tresponse(cr, status, phrase, sip, NUTAG_SUBSTATE(substate), SIPTAG_EVENT(du ? du->du_event : NULL), TAG_END()); @@ -432,9 +432,9 @@ { nua_client_request_t *cr = du->du_cr; struct event_usage *eu = nua_dialog_usage_private(du); - + assert(eu); - + if (eu->eu_final_wait) { /* Did not receive NOTIFY for fetch */ sip_event_t const *o = du->du_event; @@ -445,7 +445,7 @@ id ? "; id=" : "", id ? id : "")); nua_stack_tevent(nh->nh_nua, nh, NULL, - nua_i_notify, 408, "Fetch Timeouts without NOTIFY", + nua_i_notify, 408, "Fetch Timeouts without NOTIFY", NUTAG_SUBSTATE(nua_substate_terminated), SIPTAG_EVENT(du->du_event), TAG_END()); @@ -494,7 +494,7 @@ if (nua_client_resend_request(cr, 1) >= 0) return 0; } - + nua_dialog_usage_remove(nh, ds, du, NULL, NULL); return 200; } @@ -514,7 +514,7 @@ * @param tags NUTAG_SUBSTATE() indicating the subscription state * * @sa nua_subscribe(), nua_unsubscribe(), @RFC3265, #nua_i_subscribe - * + * * @END_NUA_EVENT */ @@ -522,11 +522,11 @@ int nua_notify_server_preprocess(nua_server_request_t *sr); int nua_notify_server_report(nua_server_request_t *, tagi_t const *); -nua_server_methods_t const nua_notify_server_methods = +nua_server_methods_t const nua_notify_server_methods = { SIP_METHOD_NOTIFY, nua_i_notify, /* Event */ - { + { /* create_dialog: */ 1, /* Do create dialog */ /* in_dialog: */ 0, /* Not always in-dialog request */ /* target_refresh: */ 1, /* Target refresh request */ @@ -546,15 +546,15 @@ nua_dialog_state_t *ds = sr->sr_owner->nh_ds; /* Check for forked subscription. */ - if (ds->ds_remote_tag && ds->ds_remote_tag[0] && + if (ds->ds_remote_tag && ds->ds_remote_tag[0] && str0cmp(ds->ds_remote_tag, sr->sr_request.sip->sip_from->a_tag)) { sip_contact_t const *m = NULL; m = nua_stack_get_contact(sr->sr_owner->nh_nua->nua_registrations); - + if (m) { sip_warning_t w[1]; - + sip_warning_init(w)->w_code = 399; w->w_host = m->m_url->url_host; w->w_port = m->m_url->url_port; @@ -593,17 +593,17 @@ if (!du) return SR_STATUS1(sr, SIP_500_INTERNAL_SERVER_ERROR); } - + sr->sr_usage = du; eu = nua_dialog_usage_private(du); assert(eu); eu->eu_notified++; - if (!o || !o->o_id) + if (!o || !o->o_id) eu->eu_no_id = 1; if (subs == NULL) { /* Compatibility */ unsigned long delta = eu->eu_delta; - if (sip->sip_expires) + if (sip->sip_expires) delta = sip->sip_expires->ex_delta; if (delta == 0) @@ -616,7 +616,7 @@ reason = subs->ss_reason; if (str0casecmp(reason, "deactivated") == 0 || - str0casecmp(reason, "probation") == 0) + str0casecmp(reason, "probation") == 0) substate = nua_substate_embryonic; } else if (strcasecmp(subs->ss_substate, what = "pending") == 0) { @@ -632,7 +632,7 @@ if (!solicited) eu->eu_unsolicited = 1; - SU_DEBUG_5(("nua(%p): %s: %s (%s)\n", + SU_DEBUG_5(("nua(%p): %s: %s (%s)\n", (void *)sr->sr_owner, "nua_notify_server_preprocess", what, reason ? reason : "")); @@ -672,7 +672,7 @@ if (subs && subs->ss_reason) { if (str0casecmp(subs->ss_reason, "deactivated") == 0) { retry = 0; /* retry immediately */ - } + } else if (str0casecmp(subs->ss_reason, "probation") == 0) { retry = 30; if (subs->ss_retry_after) @@ -686,11 +686,11 @@ sr->sr_terminating = 1; } } - + retval = nua_base_server_treport(sr, /* can destroy sr */ NUTAG_SUBSTATE(substate), SIPTAG_EVENT(o), - TAG_NEXT(tags)); + TAG_NEXT(tags)); if (retval != 1 || du == NULL) return retval; @@ -719,9 +719,9 @@ /**@fn void nua_refer(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); * - * Transfer a call. - * - * Send a REFER request asking the recipient to transfer the call. + * Transfer a call. + * + * Send a REFER request asking the recipient to transfer the call. * * The REFER request also establishes an implied subscription to the "refer" * event. The "refer" event can have an "id" parameter, which has the value @@ -745,7 +745,7 @@ * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -776,7 +776,7 @@ * @param nh operation handle associated with the REFER request * @param hmagic application context associated with the handle * @param sip response to REFER request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags NUTAG_REFER_EVENT() \n * NUTAG_SUBSTATE() @@ -787,7 +787,7 @@ * @END_NUA_EVENT */ -static int nua_refer_client_init(nua_client_request_t *cr, +static int nua_refer_client_init(nua_client_request_t *cr, msg_t *, sip_t *, tagi_t const *tags); static int nua_refer_client_request(nua_client_request_t *cr, @@ -901,15 +901,15 @@ int status, char const *phrase, sip_t const *sip) { - nua_dialog_usage_t *du = cr->cr_usage; + nua_dialog_usage_t *du = cr->cr_usage; enum nua_substate substate = nua_substate_terminated; if (du) { struct event_usage *eu = nua_dialog_usage_private(du); if (status < 200) { - substate = eu->eu_substate; - } + substate = eu->eu_substate; + } else if (status < 300) { sip_refer_sub_t const *rs = sip_refer_sub(sip); @@ -920,8 +920,8 @@ substate = eu->eu_substate; } } - - return nua_base_client_tresponse(cr, status, phrase, sip, + + return nua_base_client_tresponse(cr, status, phrase, sip, NUTAG_SUBSTATE(substate), SIPTAG_EVENT(du ? du->du_event : NULL), TAG_END()); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c Tue Dec 16 13:05:22 2008 @@ -462,15 +462,15 @@ * int (boolean: nonzero is true, zero is false) * * @par Values - * - 0 (false) - include 100rel in all preliminary responses + * - 0 (false) - include 100rel in all preliminary responses * - 1 (true) - include 100rel only in 183 responses * - * @note + * @note * This tag takes only effect when NUTAG_EARLY_MEDIA(1) has been used, too. * * Corresponding tag taking reference parameter is NUTAG_ONLY183_100REL_REF(). * - * @sa + * @sa */ tag_typedef_t nutag_only183_100rel = BOOLTAG_TYPEDEF(only183_100rel); @@ -527,7 +527,7 @@ * * @par Values * - 0 (false) - do not include extra SDP on 200 OK - * - 1 (true) - include SDP in 200 OK even if it has been sent + * - 1 (true) - include SDP in 200 OK even if it has been sent * a 100rel response, too * * Corresponding tag taking reference parameter is Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_types.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_types.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_types.h Tue Dec 16 13:05:22 2008 @@ -26,7 +26,7 @@ /** Defined when has been included. */ #define NUA_TYPES_H -/**@internal @file nua_types.h +/**@internal @file nua_types.h * @brief Internal types for nua. * * @author Pekka Pessi @@ -42,8 +42,8 @@ typedef struct nua_dialog_state nua_dialog_state_t; typedef struct nua_dialog_usage nua_dialog_usage_t; -typedef struct nua_server_request nua_server_request_t; -typedef struct nua_client_request nua_client_request_t; +typedef struct nua_server_request nua_server_request_t; +typedef struct nua_client_request nua_client_request_t; typedef struct nua_dialog_peer_info nua_dialog_peer_info_t; #ifndef NUA_SAVED_SIGNAL_T Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c Tue Dec 16 13:05:22 2008 @@ -200,7 +200,7 @@ return NULL; ob = su_home_clone((su_home_t *)owner, sizeof *ob); - + if (ob) { su_md5_t md5[1]; uint8_t digest[SU_MD5_DIGEST_SIZE]; @@ -224,7 +224,7 @@ su_md5_update(md5, (void *)guid, sizeof guid); su_md5_digest(md5, digest); token64_e(ob->ob_cookie, sizeof ob->ob_cookie, digest, sizeof digest); - + if (instance && !ob->ob_instance) su_home_unref(ob->ob_home), ob = NULL; } @@ -310,7 +310,7 @@ su_free(NULL, options); if (invalid) { - SU_DEBUG_1(("outbound(%p): invalid options \"%s\"\n", + SU_DEBUG_1(("outbound(%p): invalid options \"%s\"\n", (void *)ob->ob_owner, options)); return -1; } @@ -354,8 +354,8 @@ /* ---------------------------------------------------------------------- */ /** Obtain contacts for REGISTER */ -int outbound_get_contacts(outbound_t *ob, - sip_contact_t **return_current_contact, +int outbound_get_contacts(outbound_t *ob, + sip_contact_t **return_current_contact, sip_contact_t **return_previous_contact) { if (ob) { @@ -396,7 +396,7 @@ if (terminating) { ob->ob_registering = ob->ob_registered = 0; return 0; /* Cleanup is done separately */ - } + } if (!response || !request) return 0; @@ -449,7 +449,7 @@ if (!ob->ob_by_stack) return ob_no_nat; - /* Application does not want us to do any NAT traversal */ + /* Application does not want us to do any NAT traversal */ if (!ob->ob_prefs.natify) return ob_no_nat; @@ -615,7 +615,7 @@ } gruu = (char *)msg_header_find_param(m->m_common, "pub-gruu="); - + if (gruu == NULL || gruu[0] == '\0') gruu = (char *)msg_header_find_param(m->m_common, "gruu="); @@ -692,7 +692,7 @@ ob->ob_keepalive.interval = interval; - if (!ob->ob_validated && ob->ob_keepalive.sipstun + if (!ob->ob_validated && ob->ob_keepalive.sipstun && 0 /* Stun is disabled for now */) { nta_tport_keepalive(register_transaction); } @@ -754,7 +754,7 @@ s = su_strdup(msg_home(msg), s); msg_header_add_param(msg_home(msg), ac->cp_common, s); } - + if (features) msg_header_insert(msg, NULL, (void *)ac); else @@ -917,36 +917,36 @@ if (status < 300 && ob->ob_keepalive.validated) { loglevel = 5; - if (ob->ob_validated) + if (ob->ob_validated) loglevel = 99; /* only once */ ob->ob_validated = ob->ob_once_validated = 1; } - else if (status == 401 || status == 407 || status == 403) + else if (status == 401 || status == 407 || status == 403) loglevel = 5, failed = 1; else loglevel = 3, failed = 1; - + if (loglevel >= SU_LOG->log_level) { sip_contact_t const *m = ob->ob_rcontact; if (m) - su_llog(SU_LOG, loglevel, + su_llog(SU_LOG, loglevel, "outbound(%p): %s <" URL_PRINT_FORMAT ">\n", (void *)ob->ob_owner, failed ? "FAILED to validate" : "validated", URL_PRINT_ARGS(m->m_url)); else - su_llog(SU_LOG, loglevel, + su_llog(SU_LOG, loglevel, "outbound(%p): %s registration\n", (void *)ob->ob_owner, failed ? "FAILED to validate" : "validated"); if (failed) - su_llog(SU_LOG, loglevel, "outbound(%p): FAILED with %u %s\n", + su_llog(SU_LOG, loglevel, "outbound(%p): FAILED with %u %s\n", (void *)ob->ob_owner, status, phrase); } - if (failed) + if (failed) ob->ob_oo->oo_probe_error(ob->ob_owner, ob, status, phrase, TAG_END()); } else if (status == 408) { @@ -1027,7 +1027,7 @@ /** Check if request should be processed by outbound */ int outbound_targeted_request(sip_t const *sip) { - return + return sip && sip->sip_request && sip->sip_request->rq_method == sip_method_options && sip->sip_accept && @@ -1036,7 +1036,7 @@ } /** Answer to the connectivity probe OPTIONS */ -int outbound_process_request(outbound_t *ob, +int outbound_process_request(outbound_t *ob, nta_incoming_t *irq, sip_t const *sip) { @@ -1045,7 +1045,7 @@ return 0; if (ob->ob_keepalive.validating) { - SU_DEBUG_5(("outbound(%p): registration check OPTIONS received\n", + SU_DEBUG_5(("outbound(%p): registration check OPTIONS received\n", (void *)ob->ob_owner)); ob->ob_keepalive.validated = 1; } @@ -1063,7 +1063,7 @@ /**@internal * Create contacts for outbound. * - * There are two contacts: + * There are two contacts: * one suitable for registrations (ob_rcontact) and another that can be used * in dialogs (ob_dcontact). */ @@ -1082,16 +1082,16 @@ v = v0; *v0 = *via; v0->v_next = NULL; - dcontact = ob->ob_oo->oo_contact(ob->ob_owner, home, 1, + dcontact = ob->ob_oo->oo_contact(ob->ob_owner, home, 1, v, v->v_protocol, NULL); if (ob->ob_instance && ob->ob_reg_id != 0) snprintf(reg_id_param, sizeof reg_id_param, ";reg-id=%u", ob->ob_reg_id); rcontact = ob->ob_oo->oo_contact(ob->ob_owner, home, 0, - v, v->v_protocol, + v, v->v_protocol, ob->ob_instance, reg_id_param, NULL); - + v = sip_via_dup(home, v); if (!rcontact || !dcontact || !v) { @@ -1171,14 +1171,14 @@ if (terminating) { if (ob->ob_by_stack && application_contact == NULL) return 0; - + if (ob->ob_contacts) previous = ob->ob_rcontact; } else if (application_contact) { rcontact = sip_contact_dup(home, application_contact); - if (!ob->ob_rcontact || + if (!ob->ob_rcontact || url_cmp_all(ob->ob_rcontact->m_url, application_contact->m_url)) { contact_uri_changed = 1; previous = ob->ob_contacts ? ob->ob_rcontact : NULL; @@ -1188,10 +1188,10 @@ return 0; /* Xyzzy - nothing happens */ } else if (v) { - char const *tport = !v->v_next ? v->v_protocol : NULL; + char const *tport = !v->v_next ? v->v_protocol : NULL; char reg_id_param[20]; - dcontact = ob->ob_oo->oo_contact(ob->ob_owner, home, 1, + dcontact = ob->ob_oo->oo_contact(ob->ob_owner, home, 1, v, tport, NULL); if (!dcontact) return -1; @@ -1200,18 +1200,18 @@ snprintf(reg_id_param, sizeof reg_id_param, ";reg-id=%u", ob->ob_reg_id); rcontact = ob->ob_oo->oo_contact(ob->ob_owner, home, 0, - v, v->v_protocol, + v, v->v_protocol, ob->ob_instance, reg_id_param, NULL); if (!rcontact) return -1; - if (!ob->ob_rcontact || + if (!ob->ob_rcontact || url_cmp_all(ob->ob_rcontact->m_url, rcontact->m_url)) { contact_uri_changed = 1; previous = ob->ob_contacts ? ob->ob_rcontact : NULL; } } - + ob->ob_by_stack = application_contact == NULL; ob->ob_contacts = rcontact != NULL; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.h Tue Dec 16 13:05:22 2008 @@ -25,7 +25,7 @@ #ifndef OUTBOUND_H /** Defined when has been included. */ #define OUTBOUND_H -/**@IFILE outbound.h +/**@IFILE outbound.h * * @brief Interface to SIP NAT traversal and outbound * @@ -73,8 +73,8 @@ int outbound_set_proxy(outbound_t *ob, url_string_t *proxy); -int outbound_get_contacts(outbound_t *ob, - sip_contact_t **return_current_contact, +int outbound_get_contacts(outbound_t *ob, + sip_contact_t **return_current_contact, sip_contact_t **return_previous_contact); int outbound_start_registering(outbound_t *ob); @@ -110,7 +110,7 @@ int outbound_targeted_request(sip_t const *sip); -int outbound_process_request(outbound_t *ob, +int outbound_process_request(outbound_t *ob, nta_incoming_t *irq, sip_t const *sip); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ * */ -/**@file sofia-sip/nua.h +/**@file sofia-sip/nua.h * @brief Sofia-SIP User Agent Library API * * @author Pekka Pessi @@ -53,13 +53,13 @@ SOFIA_BEGIN_DECLS -#ifndef NUA_MAGIC_T +#ifndef NUA_MAGIC_T #define NUA_MAGIC_T void #endif /** Application context for NUA agent. */ typedef NUA_MAGIC_T nua_magic_t; -#ifndef NUA_HMAGIC_T +#ifndef NUA_HMAGIC_T #define NUA_HMAGIC_T void #endif /** Application context for NUA handle. */ @@ -112,9 +112,9 @@ nua_i_media_error, /**< Offer-answer error indication */ /* Responses */ - nua_r_set_params, /**< Answer to nua_set_params() or + nua_r_set_params, /**< Answer to nua_set_params() or * nua_get_hparams(). */ - nua_r_get_params, /**< Answer to nua_get_params() or + nua_r_get_params, /**< Answer to nua_get_params() or * nua_get_hparams(). */ nua_r_shutdown, /**< Answer to nua_shutdown() */ nua_r_notifier, /**< Answer to nua_notifier() */ @@ -140,7 +140,7 @@ nua_r_unsubscribe, /**< Answer to outgoing un-SUBSCRIBE */ nua_r_notify, /**< Answer to outgoing NOTIFY */ nua_r_method, /**< Answer to unknown outgoing method */ - + nua_r_authenticate, /**< Answer to nua_authenticate() */ /* Internal events: nua hides them from application */ @@ -152,7 +152,7 @@ /* NOTE: Post 1.12 release events come here (below) to keep ABI compatibility! */ - nua_i_network_changed, /**< Local IP(v6) address has changed. + nua_i_network_changed, /**< Local IP(v6) address has changed. @NEW_1_12_2 */ nua_i_register /**< Incoming REGISTER. @NEW_1_12_4. */ } nua_event_t; @@ -269,16 +269,16 @@ /** Convert string to enum nua_substate. @NEW_1_12_5. */ SOFIAPUBFUN enum nua_substate nua_substate_make(char const *sip_substate); -/** Send SIP REGISTER request to the registrar. */ +/** Send SIP REGISTER request to the registrar. */ SOFIAPUBFUN void nua_register(nua_handle_t *nh, tag_type_t, tag_value_t, ...); -/** Unregister. */ +/** Unregister. */ SOFIAPUBFUN void nua_unregister(nua_handle_t *nh, tag_type_t, tag_value_t, ...); /** Place a call using SIP INVITE method. */ SOFIAPUBFUN void nua_invite(nua_handle_t *nh, tag_type_t, tag_value_t, ...); -/** Acknowledge a succesfull response to INVITE request. */ +/** Acknowledge a succesfull response to INVITE request. */ SOFIAPUBFUN void nua_ack(nua_handle_t *nh, tag_type_t, tag_value_t, ...); /** Acknowledge a reliable preliminary response to INVITE request. */ @@ -320,7 +320,7 @@ /** Transfer a call. */ SOFIAPUBFUN void nua_refer(nua_handle_t *, tag_type_t, tag_value_t, ...); -/** Update a call */ +/** Update a call */ SOFIAPUBFUN void nua_update(nua_handle_t *, tag_type_t, tag_value_t, ...); /** Hangdown a call. */ @@ -342,9 +342,9 @@ SOFIAPUBFUN void nua_method(nua_handle_t *, tag_type_t, tag_value_t, ...); /** Respond to a request with given status code and phrase. */ -SOFIAPUBFUN void nua_respond(nua_handle_t *nh, +SOFIAPUBFUN void nua_respond(nua_handle_t *nh, int status, char const *phrase, - tag_type_t, tag_value_t, + tag_type_t, tag_value_t, ...); /** Check if event can be responded with nua_respond() */ @@ -377,7 +377,7 @@ /** Get current request message. */ SOFIAPUBFUN msg_t *nua_current_request(nua_t const *nua); -SOFIAPUBFUN sip_replaces_t *nua_handle_make_replaces(nua_handle_t *nh, +SOFIAPUBFUN sip_replaces_t *nua_handle_make_replaces(nua_handle_t *nh, su_home_t *home, int early_only); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c Tue Dec 16 13:05:22 2008 @@ -62,8 +62,8 @@ /* -- Module prototypes ------------------------------------------------- */ static msg_t *s2_msg(int flags); -static int s2_complete_response(msg_t *response, - int status, char const *phrase, +static int s2_complete_response(msg_t *response, + int status, char const *phrase, msg_t *request); static char *s2_generate_tag(su_home_t *home); @@ -132,7 +132,7 @@ e->prev = NULL, e->next = NULL; - return e; + return e; } void s2_free_event(struct event *e) @@ -163,7 +163,7 @@ su_root_step(s2->root, 100); } -} +} struct event *s2_wait_for_event(nua_event_t event, int status) { @@ -180,7 +180,7 @@ su_root_step(s2->root, 100); } -} +} int s2_check_event(nua_event_t event, int status) { @@ -206,7 +206,7 @@ return retval; } -static void +static void s2_nua_callback(nua_event_t event, int status, char const *phrase, nua_t *nua, nua_magic_t *_t, @@ -218,7 +218,7 @@ if (event == nua_i_active || event == nua_i_terminated) return; - + e = calloc(1, sizeof *e); nua_save_event(nua, e->event); e->nh = nua_handle_ref(nh); @@ -241,7 +241,7 @@ m->prev = NULL, m->next = NULL; - return m; + return m; } void @@ -294,10 +294,10 @@ if (method == sip_method_unknown && name == NULL) break; - + if (m->sip->sip_cseq == NULL) continue; - + if (m->sip->sip_cseq->cs_method != method) continue; if (name == NULL) @@ -311,7 +311,7 @@ su_root_step(s2->root, 100); } -} +} int s2_check_response(int status, sip_method_t method, char const *name) @@ -335,9 +335,9 @@ su_root_step(s2->root, 100); } - + return NULL; -} +} struct message * s2_wait_for_request(sip_method_t method, char const *name) @@ -358,9 +358,9 @@ su_root_step(s2->root, 100); } - + return NULL; -} +} int s2_check_request(sip_method_t method, char const *name) @@ -425,7 +425,7 @@ *tpn = *tport_name(m->tport); - rport = su_sprintf(home, "rport=%u", + rport = su_sprintf(home, "rport=%u", ntohs(((su_sockaddr_t *) msg_addrinfo(m->msg)->ai_addr)->su_port)); @@ -433,7 +433,7 @@ sip->sip_via->v_rport && sip->sip_via->v_rport[0] == '\0') { msg_header_add_param(home, sip->sip_via->v_common, rport); - } + } tpn->tpn_port = rport + strlen("rport="); @@ -446,9 +446,9 @@ } /** Add headers from the request to the response message. */ -static int -s2_complete_response(msg_t *response, - int status, char const *phrase, +static int +s2_complete_response(msg_t *response, + int status, char const *phrase, msg_t *request) { su_home_t *home = msg_home(response); @@ -469,7 +469,7 @@ if (!response_sip->sip_to) response_sip->sip_to = sip_to_dup(home, request_sip->sip_to); if (!response_sip->sip_call_id) - response_sip->sip_call_id = + response_sip->sip_call_id = sip_call_id_dup(home, request_sip->sip_call_id); if (!response_sip->sip_cseq) response_sip->sip_cseq = sip_cseq_dup(home, request_sip->sip_cseq); @@ -496,11 +496,11 @@ return 0; } -/* Send request (updating dialog). +/* Send request (updating dialog). * * Return zero upon success, nonzero upon failure. */ -int +int s2_request_to(struct dialog *d, sip_method_t method, char const *name, tport_t *tport, @@ -546,7 +546,7 @@ if (!d->local && sip->sip_from) d->local = sip_from_dup(d->home, sip->sip_from); - if (!d->contact && sip->sip_contact) + if (!d->contact && sip->sip_contact) d->contact = sip_contact_dup(d->home, sip->sip_contact); if (!d->remote && sip->sip_to) d->remote = sip_to_dup(d->home, sip->sip_to); @@ -558,7 +558,7 @@ d->call_id = sip_call_id_dup(d->home, sip->sip_call_id); if (!d->lseq && sip->sip_cseq) d->lseq = sip->sip_cseq->cs_seq; - + if (!d->local) d->local = sip_from_dup(d->home, s2->local); if (!d->contact) @@ -643,7 +643,7 @@ } } - sip_add_tl(msg, sip, + sip_add_tl(msg, sip, TAG_IF(!sip->sip_from, SIPTAG_FROM(d->local)), TAG_IF(!sip->sip_contact, SIPTAG_CONTACT(d->contact)), TAG_IF(!sip->sip_to, SIPTAG_TO(d->remote)), @@ -670,7 +670,7 @@ } return tport ? 0 : -1; - + error: ta_end(ta); return -1; @@ -809,7 +809,7 @@ /* ---------------------------------------------------------------------- */ /* tport interface */ -static void +static void s2_stack_recv(struct tester *s2, tport_t *tp, msg_t *msg, @@ -844,16 +844,16 @@ int errcode, char const *remote) { - fprintf(stderr, "%s(%p): error %d (%s) from %s\n", + fprintf(stderr, "%s(%p): error %d (%s) from %s\n", "nua_tester_error", - (void *)tp, errcode, su_strerror(errcode), + (void *)tp, errcode, su_strerror(errcode), remote ? remote : ""); } static msg_t * s2_stack_alloc(struct tester *s2, int flags, char const data[], usize_t size, - tport_t const *tport, + tport_t const *tport, tp_client_t *tpc) { return msg_create(s2->mclass, flags | s2->flags); @@ -890,7 +890,7 @@ s2->local = sip_from_format(s2->home, "Bob ", hostname ? hostname : "example.net"); - + if (hostname == NULL) hostname = "127.0.0.1"; @@ -952,8 +952,8 @@ if (protocols == NULL) protocols = default_protocols; - - bound = tport_tbind(s2->master, tpn, protocols, + + bound = tport_tbind(s2->master, tpn, protocols, TPTAG_SERVER(1), ta_tags(ta)); assert(bound != -1); @@ -979,7 +979,7 @@ v = sip_via_format(s2->home, "SIP/2.0/%s %s:%s", tpn->tpn_proto, - tpn->tpn_host, + tpn->tpn_host, tpn->tpn_port); assert(v != NULL); if (strncasecmp(tpn->tpn_proto, "tls", 3)) { @@ -988,11 +988,11 @@ tpn->tpn_port, tpn->tpn_proto); if (s2->udp.contact == NULL && strcasecmp(tpn->tpn_proto, "udp") == 0) { - s2->udp.tport = tport_ref(tp); + s2->udp.tport = tport_ref(tp); s2->udp.contact = m; } if (s2->tcp.contact == NULL && strcasecmp(tpn->tpn_proto, "tcp") == 0) { - s2->tcp.tport = tport_ref(tp); + s2->tcp.tport = tport_ref(tp); s2->tcp.contact = m; } } @@ -1007,7 +1007,7 @@ tpn->tpn_host, tpn->tpn_port); if (s2->tls.contact == NULL) { - s2->tls.tport = tport_ref(tp); + s2->tls.tport = tport_ref(tp); s2->tls.contact = m; } } @@ -1519,7 +1519,7 @@ NULL); ta_start(ta, tag, value); - s2->nua = + s2->nua = nua_create(s2->root, s2_nua_callback, s2, @@ -1534,7 +1534,7 @@ #endif ta_tags(ta)); ta_end(ta); - + return s2->nua; } @@ -1600,7 +1600,7 @@ struct message *m; nua_unregister(nh, TAG_END()); - + m = s2_wait_for_request(SIP_METHOD_REGISTER); assert(m); s2_save_register(m); s2_respond_to(m, NULL, Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.h Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ */ #ifndef S2TESTER_H -#define S2TESTER_H +#define S2TESTER_H #define TP_STACK_T struct tester #define SU_ROOT_MAGIC_T struct tester Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/ChangeLog ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/ChangeLog (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/ChangeLog Tue Dec 16 13:05:22 2008 @@ -17,7 +17,7 @@ * sdp_print.c (sdp_printing_error): Fixed return for success to be NULL as defined in function documentation. - + 2005-09-29 Pekka Pessi * Added SDPTAG_TYPEDEF(). Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/errata ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/errata (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/errata Tue Dec 16 13:05:22 2008 @@ -6,7 +6,7 @@ but example (RTP/AVP!) contains also "/" * bwtype is restricted to alpha-numeric, but the RFC text discusses - extensions like b=x-y:100 + extensions like b=x-y:100 * att-field is restricted to alpha-numeric, but the RFC text discusses extensions like a=x-nokia-foo Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/run_test_sdp ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/run_test_sdp (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/run_test_sdp Tue Dec 16 13:05:22 2008 @@ -12,12 +12,12 @@ if test -r $tests/message-1.sdp ; then for n in 1 2 3 4 5 6 7 8 9 10 11; -do +do echo -n "$n: " "$test_sdp" < "$tests/message-$n.sdp" && echo OK done -else +else echo "sdp run-tests: no tests found in $tests, skipping." exit 77 fi Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.c Tue Dec 16 13:05:22 2008 @@ -99,37 +99,37 @@ static size_t list_xtra_all(xtra_f *xtra, void const *v); static void *list_dup_all(dup_f *dup, char **bb, void const *vsrc); -static size_t session_xtra(sdp_session_t const *o); +static size_t session_xtra(sdp_session_t const *o); static sdp_session_t *session_dup(char **pp, sdp_session_t const *o); -static size_t origin_xtra(sdp_origin_t const *o); +static size_t origin_xtra(sdp_origin_t const *o); static sdp_origin_t *origin_dup(char **pp, sdp_origin_t const *o); -static size_t connection_xtra(sdp_connection_t const *o); +static size_t connection_xtra(sdp_connection_t const *o); static sdp_connection_t *connection_dup(char **pp, sdp_connection_t const *o); -static size_t bandwidth_xtra(sdp_bandwidth_t const *o); +static size_t bandwidth_xtra(sdp_bandwidth_t const *o); static sdp_bandwidth_t *bandwidth_dup(char **pp, sdp_bandwidth_t const *o); -static size_t time_xtra(sdp_time_t const *o); +static size_t time_xtra(sdp_time_t const *o); static sdp_time_t *time_dup(char **pp, sdp_time_t const *o); -static size_t repeat_xtra(sdp_repeat_t const *o); +static size_t repeat_xtra(sdp_repeat_t const *o); static sdp_repeat_t *repeat_dup(char **pp, sdp_repeat_t const *o); -static size_t zone_xtra(sdp_zone_t const *o); +static size_t zone_xtra(sdp_zone_t const *o); static sdp_zone_t *zone_dup(char **pp, sdp_zone_t const *o); -static size_t key_xtra(sdp_key_t const *o); +static size_t key_xtra(sdp_key_t const *o); static sdp_key_t *key_dup(char **pp, sdp_key_t const *o); -static size_t attribute_xtra(sdp_attribute_t const *o); +static size_t attribute_xtra(sdp_attribute_t const *o); static sdp_attribute_t *attribute_dup(char **pp, sdp_attribute_t const *o); -static size_t list_xtra(sdp_list_t const *o); +static size_t list_xtra(sdp_list_t const *o); static sdp_list_t *list_dup(char **pp, sdp_list_t const *o); -static size_t rtpmap_xtra(sdp_rtpmap_t const *o); +static size_t rtpmap_xtra(sdp_rtpmap_t const *o); static sdp_rtpmap_t *rtpmap_dup(char **pp, sdp_rtpmap_t const *o); static size_t media_xtra(sdp_media_t const *o); @@ -182,12 +182,12 @@ * @note The duplicated structure is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_origin_t structure is * returned, otherwise NULL is returned. */ sdp_origin_t *sdp_origin_dup(su_home_t *h, sdp_origin_t const *o) -{ +{ SDP_DUP(origin, o); } @@ -202,12 +202,12 @@ * @note The duplicated list is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_connection_t structure is * returned, otherwise NULL is returned. */ sdp_connection_t *sdp_connection_dup(su_home_t *h, sdp_connection_t const *c) -{ +{ SDP_LIST_DUP(connection, c); } @@ -222,12 +222,12 @@ * @note The duplicated list is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_bandwidth_t structure is * returned, otherwise NULL is returned. */ sdp_bandwidth_t *sdp_bandwidth_dup(su_home_t *h, sdp_bandwidth_t const *b) -{ +{ SDP_LIST_DUP(bandwidth, b); } @@ -242,12 +242,12 @@ * @note The duplicated list is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_time_t structure is * returned, otherwise NULL is returned. */ sdp_time_t *sdp_time_dup(su_home_t *h, sdp_time_t const *t) -{ +{ SDP_LIST_DUP(time, t); } @@ -262,12 +262,12 @@ * @note The duplicated structure is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_repeat_t structure is * returned, otherwise NULL is returned. */ sdp_repeat_t *sdp_repeat_dup(su_home_t *h, sdp_repeat_t const *r) -{ +{ SDP_DUP(repeat, r); } @@ -282,12 +282,12 @@ * @note The duplicated structure is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_zone_t structure is * returned, otherwise NULL is returned. */ sdp_zone_t *sdp_zone_dup(su_home_t *h, sdp_zone_t const *z) -{ +{ SDP_DUP(zone, z); } @@ -302,12 +302,12 @@ * @note The duplicated structure is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_key_t structure is * returned, otherwise NULL is returned. */ sdp_key_t *sdp_key_dup(su_home_t *h, sdp_key_t const *k) -{ +{ SDP_DUP(key, k); } @@ -322,12 +322,12 @@ * @note The duplicated structure is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_attribute_t structure is * returned, otherwise NULL is returned. */ sdp_attribute_t *sdp_attribute_dup(su_home_t *h, sdp_attribute_t const *a) -{ +{ SDP_LIST_DUP(attribute, a); } @@ -342,12 +342,12 @@ * @note The duplicated structure is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_list_t structure is * returned, otherwise NULL is returned. */ sdp_list_t *sdp_list_dup(su_home_t *h, sdp_list_t const *l) -{ +{ SDP_LIST_DUP(list, l); } @@ -362,12 +362,12 @@ * @note The duplicated structure is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_rtpmap_t structure is * returned, otherwise NULL is returned. */ sdp_rtpmap_t *sdp_rtpmap_dup(su_home_t *h, sdp_rtpmap_t const *rm) -{ +{ SDP_LIST_DUP(rtpmap, rm); } @@ -384,11 +384,11 @@ * @note The duplicated structure is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_media_t structure is * returned, otherwise NULL is returned. */ -sdp_media_t *sdp_media_dup(su_home_t *h, sdp_media_t const *m, +sdp_media_t *sdp_media_dup(su_home_t *h, sdp_media_t const *m, sdp_session_t *sdp) { sdp_media_t *rv; size_t size; char *p, *end; @@ -412,11 +412,11 @@ * @note The duplicated list is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to a newly allocated list of sdp_media_t * structures is returned, otherwise NULL is returned. */ -sdp_media_t *sdp_media_dup_all(su_home_t *h, sdp_media_t const *m, +sdp_media_t *sdp_media_dup_all(su_home_t *h, sdp_media_t const *m, sdp_session_t *sdp) { sdp_media_t *rv; size_t size; char *p, *end; @@ -441,14 +441,14 @@ * @param dst_c Connection description used instead of duplicate of @a src_c. * @param src_c Connection description not to be duplicated - * @return + * @return * If successful, a pointer to newly allocated sdp_media_t structure is * returned, otherwise NULL is returned. * * @deprecated * This function is deprecated. Use sdp_media_dup() instead. */ -sdp_media_t *sdp_media_dup_ex(su_home_t *home, +sdp_media_t *sdp_media_dup_ex(su_home_t *home, sdp_media_t const *src, sdp_session_t *sdp, sdp_connection_t *dst_c, @@ -479,7 +479,7 @@ char *p; sdp_origin_t *o; - p = *pp; + p = *pp; STRUCT_DUP(p, o, src); STR_DUP(p, o, src, o_username); PTR_DUP(p, o, src, o_address, connection_dup); @@ -502,8 +502,8 @@ char *p; sdp_connection_t *c; - p = *pp; - STRUCT_DUP(p, c, src); + p = *pp; + STRUCT_DUP(p, c, src); c->c_next = NULL; STR_DUP(p, c, src, c_address); @@ -666,12 +666,12 @@ LST_XTRA(rv, m->m_bandwidths, bandwidth_xtra); PTR_XTRA(rv, m->m_key, key_xtra); LST_XTRA(rv, m->m_attributes, attribute_xtra); - + return rv; } static -sdp_media_t *media_dup(char **pp, +sdp_media_t *media_dup(char **pp, sdp_media_t const *src, sdp_session_t *sdp) { @@ -692,11 +692,11 @@ PTR_DUP(p, m, src, m_key, key_dup); LST_DUP(p, m, src, m_attributes, attribute_dup); - /* note! we must not implicitly use 'src->m_session' as it + /* note! we must not implicitly use 'src->m_session' as it might point to a temporary session */ m->m_session = sdp; - - m->m_rejected = src->m_rejected; + + m->m_rejected = src->m_rejected; m->m_mode = src->m_mode; assert((size_t)(p - *pp) == media_xtra(src)); @@ -730,7 +730,7 @@ } static -sdp_media_t *media_dup_ex(char **pp, +sdp_media_t *media_dup_ex(char **pp, sdp_media_t const *src, sdp_session_t *sdp, sdp_connection_t *dst_c, @@ -759,12 +759,12 @@ LST_DUP(p, m, src, m_bandwidths, bandwidth_dup); PTR_DUP(p, m, src, m_key, key_dup); LST_DUP(p, m, src, m_attributes, attribute_dup); - - /* note! we must not implicitly use 'src->m_session' as it + + /* note! we must not implicitly use 'src->m_session' as it might point to a temporary session */ m->m_session = sdp; - - m->m_rejected = src->m_rejected; + + m->m_rejected = src->m_rejected; m->m_mode = src->m_mode; assert(m); @@ -793,7 +793,7 @@ } static -sdp_media_t *media_dup_all(char **pp, +sdp_media_t *media_dup_all(char **pp, sdp_media_t const *src, sdp_session_t *sdp) { @@ -827,7 +827,7 @@ char *p; sdp_list_t *l; - p = *pp; + p = *pp; STRUCT_DUP(p, l, src); l->l_next = NULL; STR_DUP(p, l, src, l_text); @@ -853,7 +853,7 @@ char *p; sdp_rtpmap_t *rm; - p = *pp; + p = *pp; STRUCT_DUP(p, rm, src); rm->rm_next = NULL; STR_DUP(p, rm, src, rm_encoding); @@ -954,7 +954,7 @@ char *p; sdp_session_t *sdp; - p = *pp; + p = *pp; STRUCT_DUP(p, sdp, src); sdp->sdp_next = NULL; @@ -988,13 +988,13 @@ * @note The duplicated structure is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_session_t structure is * returned, otherwise NULL is returned. */ sdp_session_t *sdp_session_dup(su_home_t *h, sdp_session_t const *sdp) -{ +{ SDP_DUP(session, sdp); } @@ -1026,7 +1026,7 @@ char *p; sdp_session_t *sdp; - p = *pp; + p = *pp; STRUCT_DUP(p, sdp, src); sdp->sdp_next = NULL; @@ -1044,7 +1044,7 @@ STR_DUP(p, sdp, src, sdp_charset); sdp->sdp_media = NULL; - + assert((size_t)(p - *pp) == session_without_media_xtra(src)); *pp = p; return sdp; @@ -1065,14 +1065,14 @@ * @note The duplicated structure is allocated using a single call to * su_alloc() and it can be freed with su_free(). * - * @return + * @return * If successful, a pointer to newly allocated sdp_session_t structure is * returned, otherwise NULL is returned. */ -sdp_session_t *sdp_session_dup_without_media(su_home_t *h, +sdp_session_t *sdp_session_dup_without_media(su_home_t *h, sdp_session_t const *sdp) -{ +{ SDP_DUP(session_without_media, sdp); } @@ -1085,7 +1085,7 @@ { sdp_session_t const *sdp = (sdp_session_t *)t->t_value; - if (sdp) + if (sdp) return STRUCT_ALIGN(offset) + session_xtra(sdp); else return 0; @@ -1097,7 +1097,7 @@ sdp_session_t const *srcsdp; char *b; - assert(src); assert(*bb); + assert(src); assert(*bb); b = *bb; b += STRUCT_ALIGN(b); @@ -1121,9 +1121,9 @@ assert(t); - if (!t || !t->t_value) { - if (size && b) b[0] = 0; - return 0; + if (!t || !t->t_value) { + if (size && b) b[0] = 0; + return 0; } sdp = (sdp_session_t const *)t->t_value; @@ -1131,14 +1131,14 @@ print = sdp_print(NULL, sdp, b, size, 0); retval = sdp_message_size(print); - + sdp_printer_free(print); return (int)retval; } /** Tag class for SDP tags. @HIDE */ -tag_class_t sdptag_session_class[1] = +tag_class_t sdptag_session_class[1] = {{ sizeof(sdptag_session_class), /* tc_next */ NULL, @@ -1157,7 +1157,7 @@ /* ---------------------------------------------------------------------- */ /* Compare two string pointers */ -su_inline +su_inline int str0cmp(char const *a, char const *b) { if (a == NULL) a = ""; @@ -1166,7 +1166,7 @@ } /* Compare two string pointers ignoring case. */ -su_inline +su_inline int str0casecmp(char const *a, char const *b) { if (a == NULL) a = ""; @@ -1174,16 +1174,16 @@ return strcasecmp(a, b); } -/** Compare two session descriptions +/** Compare two session descriptions */ int sdp_session_cmp(sdp_session_t const *a, sdp_session_t const *b) { - int rv; + int rv; sdp_bandwidth_t const *ab, *bb; sdp_attribute_t const *aa, *ba; sdp_media_t const *am, *bm; - - if ((rv = (a != NULL) - (b != NULL))) + + if ((rv = (a != NULL) - (b != NULL))) return rv; if (a == b) return 0; @@ -1204,8 +1204,8 @@ if ((rv = sdp_connection_cmp(a->sdp_connection, b->sdp_connection))) return rv; - for (ab = a->sdp_bandwidths, bb = b->sdp_bandwidths; - ab || bb; + for (ab = a->sdp_bandwidths, bb = b->sdp_bandwidths; + ab || bb; ab = ab->b_next, bb = bb->b_next) if ((rv = sdp_bandwidth_cmp(a->sdp_bandwidths, b->sdp_bandwidths))) return rv; @@ -1215,14 +1215,14 @@ if ((rv = sdp_key_cmp(a->sdp_key, b->sdp_key))) return rv; - for (aa = a->sdp_attributes, ba = b->sdp_attributes; - aa || bb; + for (aa = a->sdp_attributes, ba = b->sdp_attributes; + aa || bb; aa = aa->a_next, ba = ba->a_next) if ((rv = sdp_attribute_cmp(aa, ba))) return rv; - for (am = a->sdp_media, bm = b->sdp_media; - am || bm; + for (am = a->sdp_media, bm = b->sdp_media; + am || bm; am = am->m_next, bm = bm->m_next) if ((rv = sdp_media_cmp(am, bm))) return rv; @@ -1230,13 +1230,13 @@ return 0; } -/** Compare two origin fields +/** Compare two origin fields */ int sdp_origin_cmp(sdp_origin_t const *a, sdp_origin_t const *b) { int rv; - if ((rv = (a != NULL) - (b != NULL))) + if ((rv = (a != NULL) - (b != NULL))) return rv; if (a == b) return 0; @@ -1252,7 +1252,7 @@ return 0; } -/** Compare two connection fields +/** Compare two connection fields */ int sdp_connection_cmp(sdp_connection_t const *a, sdp_connection_t const *b) { @@ -1285,7 +1285,7 @@ if (a->b_modifier != b->b_modifier) return a->b_modifier < b->b_modifier ? -1 : 1; - if (a->b_modifier == sdp_bw_x && + if (a->b_modifier == sdp_bw_x && (rv = strcmp(a->b_modifier_name, b->b_modifier_name))) return rv; @@ -1298,9 +1298,9 @@ /** Compare two time fields */ int sdp_time_cmp(sdp_time_t const *a, sdp_time_t const *b) { - int rv; + int rv; - if ((rv = (a != NULL) - (b != NULL))) + if ((rv = (a != NULL) - (b != NULL))) return rv; if (a == b) return 0; @@ -1319,7 +1319,7 @@ int sdp_repeat_cmp(sdp_repeat_t const *a, sdp_repeat_t const *b) { int i, n; - + if (a == b) return 0; if ((a != NULL) != (b != NULL)) @@ -1329,12 +1329,12 @@ return a->r_interval < b->r_interval ? -1 : 1; if (a->r_duration != b->r_duration) return a->r_duration < b->r_duration ? -1 : 1; - n = a->r_number_of_offsets < b->r_number_of_offsets + n = a->r_number_of_offsets < b->r_number_of_offsets ? a->r_number_of_offsets : b->r_number_of_offsets; for (i = 0; i < n; i++) if (a->r_offsets[i] != b->r_offsets[i]) return a->r_offsets[i] < b->r_offsets[i] ? -1 : 1; - + if (a->r_number_of_offsets != b->r_number_of_offsets) return a->r_number_of_offsets < b->r_number_of_offsets ? -1 : 1; @@ -1345,7 +1345,7 @@ int sdp_zone_cmp(sdp_zone_t const *a, sdp_zone_t const *b) { int i, n; - + if (a == b) return 0; if ((a != NULL) != (b != NULL)) @@ -1379,7 +1379,7 @@ if (a->k_method != b->k_method) return a->k_method < b->k_method ? -1 : 1; - if (a->k_method == sdp_key_x && + if (a->k_method == sdp_key_x && (rv = str0cmp(a->k_method_name, b->k_method_name))) return rv; return str0cmp(a->k_material, b->k_material); @@ -1427,7 +1427,7 @@ a_param = a->rm_params; if (b->rm_params) b_param = b->rm_params; - + rv = strcasecmp(a_param, b_param); if (rv) @@ -1457,7 +1457,7 @@ /** Compare two media (m=) fields */ int sdp_media_cmp(sdp_media_t const *a, sdp_media_t const *b) { - int rv; + int rv; sdp_connection_t const *ac, *bc; sdp_bandwidth_t const *ab, *bb; @@ -1466,7 +1466,7 @@ if (a == b) return 0; - if ((rv = (a != NULL) - (b != NULL))) + if ((rv = (a != NULL) - (b != NULL))) return rv; if (a->m_type != b->m_type) @@ -1493,8 +1493,8 @@ if (a->m_mode != b->m_mode) return a->m_mode < b->m_mode ? -1 : 1; - for (arm = a->m_rtpmaps, brm = b->m_rtpmaps; - arm || brm; + for (arm = a->m_rtpmaps, brm = b->m_rtpmaps; + arm || brm; arm = arm->rm_next, brm = brm->rm_next) if ((rv = sdp_rtpmap_cmp(arm, brm))) return rv; @@ -1505,14 +1505,14 @@ if ((rv = str0cmp(a->m_information, b->m_information))) return rv; - for (ac = a->m_connections, bc = b->m_connections; - ac || bc; + for (ac = a->m_connections, bc = b->m_connections; + ac || bc; ac = ac->c_next, bc = bc->c_next) if ((rv = sdp_connection_cmp(ac, bc))) return rv; - for (ab = a->m_bandwidths, bb = b->m_bandwidths; - ab || bb; + for (ab = a->m_bandwidths, bb = b->m_bandwidths; + ab || bb; ab = ab->b_next, bb = bb->b_next) if ((rv = sdp_bandwidth_cmp(a->m_bandwidths, b->m_bandwidths))) return rv; @@ -1520,8 +1520,8 @@ if ((rv = sdp_key_cmp(a->m_key, b->m_key))) return rv; - for (aa = a->m_attributes, ba = b->m_attributes; - aa || bb; + for (aa = a->m_attributes, ba = b->m_attributes; + aa || bb; aa = aa->a_next, ba = ba->a_next) if ((rv = sdp_attribute_cmp(aa, ba))) return rv; @@ -1556,8 +1556,8 @@ } /** Find named attribute from given lists (a or a2). */ -sdp_attribute_t *sdp_attribute_find2(sdp_attribute_t const *a, - sdp_attribute_t const *a2, +sdp_attribute_t *sdp_attribute_find2(sdp_attribute_t const *a, + sdp_attribute_t const *a2, char const *name) { for (; a; a = a->a_next) { @@ -1607,7 +1607,7 @@ name = "sendrecv"; else return NULL; - + a = su_salloc(home, sizeof(*a)); if (a) a->a_name = name; @@ -1615,7 +1615,7 @@ return a; } -/** Find a mapped attribute. +/** Find a mapped attribute. * * A mapped attribute has form 'a=: ' where pt is a RTP * payload type, integer in range 0..127. For example, "a=atmmap" [@RFC3108] @@ -1627,7 +1627,7 @@ * @param pt payload type number (must be 0..127) * @param return_result return value parameter for mapped attribute value * - * @return Pointer to a matching attribute structure, or NULL. + * @return Pointer to a matching attribute structure, or NULL. * * If a matching attribute is found, @a return_result will point to part of * the attribute after the payload type and whitespace. @@ -1670,7 +1670,7 @@ } /** Append a (list of) attribute(s) to a list of attributes. */ -void sdp_attribute_append(sdp_attribute_t **list, +void sdp_attribute_append(sdp_attribute_t **list, sdp_attribute_t const *a) { assert(list); @@ -1684,13 +1684,13 @@ *list = (sdp_attribute_t *)a; } -/**Replace or append a attribute within a list of attributes. +/**Replace or append a attribute within a list of attributes. * * @retval 1 if replaced existing attribute * @retval 0 if attribute was appended * @retval -1 upon an error */ -int sdp_attribute_replace(sdp_attribute_t **list, +int sdp_attribute_replace(sdp_attribute_t **list, sdp_attribute_t *a, sdp_attribute_t **return_replaced) { @@ -1712,7 +1712,7 @@ } replaced = *list, *list = a; - + if (replaced) { a->a_next = replaced->a_next; replaced->a_next = NULL; @@ -1727,7 +1727,7 @@ } /** Remove a named attribute from a list of attributes. */ -sdp_attribute_t *sdp_attribute_remove(sdp_attribute_t **list, +sdp_attribute_t *sdp_attribute_remove(sdp_attribute_t **list, char const *name) { sdp_attribute_t *a; @@ -1876,7 +1876,7 @@ return 1; if (!aparam) aparam = "1"; if (!bparam) bparam = "1"; - + if (strcasecmp(aparam, bparam)) return 0; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.docs Tue Dec 16 13:05:22 2008 @@ -69,7 +69,7 @@ show_critical_error(sdp_printing_error(printer)); } sdp_printer_free(printer); - at endcode + at endcode @section sdp_example Example @@ -79,7 +79,7 @@ @a buf. @code -size_t increment_sdp_version(char buf[], size_t bsize, +size_t increment_sdp_version(char buf[], size_t bsize, char const *original, size_t osize) { su_home_t home[1] = { SU_HOME_INIT(home) }; @@ -89,7 +89,7 @@ if (sdp_session(parser)) { sdp_session_t *sdp = sdp_session(parser); - + sdp->sdp_origin->o_version++; printer = sdp_print(home, sdp, buf, bsize, 0); @@ -98,19 +98,19 @@ retval = sdp_message_size(printer); } else { - fprintf(stderr, "increment_sdp_version: %s\n", + fprintf(stderr, "increment_sdp_version: %s\n", sdp_printing_error(printer)); } sdp_printer_free(printer); } else { - fprintf(stderr, "increment_sdp_version: %s\n", + fprintf(stderr, "increment_sdp_version: %s\n", sdp_parsing_error(parser)); } sdp_parser_free(parser); - + su_home_deinit(home); return retval; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_parse.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_parse.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_parse.c Tue Dec 16 13:05:22 2008 @@ -23,7 +23,7 @@ */ /**@ingroup sdp_parser - * @CFILE sdp_parse.c + * @CFILE sdp_parse.c * @brief Simple SDP parser interface. * * @author Pekka Pessi @@ -46,7 +46,7 @@ #include #include -/** @typedef struct sdp_parser_s sdp_parser_t; +/** @typedef struct sdp_parser_s sdp_parser_t; * * SDP parser handle. * @@ -105,7 +105,7 @@ * The function sdp_parse() parses an SDP message @a msg of size @a * msgsize. Parsing is done according to the given @a flags. The SDP message * may not contain a NUL. - * + * * The parsing result is stored to an #sdp_session_t structure. * * @param home memory home @@ -115,7 +115,7 @@ * * The following flags are used by parser: * - * @li #sdp_f_strict Parser should accept only messages conforming strictly + * @li #sdp_f_strict Parser should accept only messages conforming strictly * to the specification. * @li #sdp_f_anynet Parser accepts unknown network or address types. * @li #sdp_f_insane Do not run sanity check. @@ -139,7 +139,7 @@ if (msgsize == -1 || msg == NULL) { p = su_home_clone(home, sizeof(*p)); - if (p) + if (p) parsing_error(p, "invalid input message"); else p = (sdp_parser_t*)&no_mem_error; @@ -172,7 +172,7 @@ p->pr_session_mode = sdp_sendrecv; parse_message(p); - + return p; } @@ -216,7 +216,7 @@ * * @param p SDP parser * - * @return + * @return * The function sdp_parsing_error() returns a C string describing parsing * error, or NULL if no error occurred. */ @@ -230,7 +230,7 @@ * The function sdp_parser_free() frees an SDP parser object along with * the memory blocks associated with it. * - * @param p pointer to the SDP parser to be freed + * @param p pointer to the SDP parser to be freed */ void sdp_parser_free(sdp_parser_t *p) { @@ -271,7 +271,7 @@ static void parse_session_attr(sdp_parser_t *p, char *r, sdp_attribute_t **result); static void parse_media(sdp_parser_t *p, char *r, sdp_media_t **result); static void parse_payload(sdp_parser_t *p, char *r, sdp_rtpmap_t **result); -static void parse_media_attr(sdp_parser_t *p, char *r, sdp_media_t *m, +static void parse_media_attr(sdp_parser_t *p, char *r, sdp_media_t *m, sdp_attribute_t **result); static int parse_rtpmap(sdp_parser_t *p, char *r, sdp_media_t *m); static int parse_fmtp(sdp_parser_t *p, char *r, sdp_media_t *m); @@ -279,13 +279,13 @@ static void parse_descs(sdp_parser_t *p, char *r, char *m, sdp_media_t **result); -static int parse_ul(sdp_parser_t *p, char **r, unsigned long *result, +static int parse_ul(sdp_parser_t *p, char **r, unsigned long *result, unsigned long max_value); -static int parse_ull(sdp_parser_t *p, char **r, uint64_t *result, +static int parse_ull(sdp_parser_t *p, char **r, uint64_t *result, uint64_t max_value); static void parse_alloc_error(sdp_parser_t *p, const char *typename); static char *next(char **message, const char *sep, const char *strip); -static char *token(char **message, const char *sep, const char *legal, +static char *token(char **message, const char *sep, const char *legal, const char *strip); #if 0 static void check_mandatory(sdp_parser_t *p, sdp_session_t *sdp); @@ -301,7 +301,7 @@ */ #define PARSE_ALLOC(p, t, v) \ t *v = su_salloc(p->pr_home, sizeof(*v)); \ - if (!v && (parse_alloc_error(p, #t), 1)) return; + if (!v && (parse_alloc_error(p, #t), 1)) return; /* ------------------------------------------------------------------------- * Macro PARSE_CHECK_REST @@ -314,10 +314,10 @@ return /* ------------------------------------------------------------------------- - * Function parse_message() - parse an SDP message + * Function parse_message() - parse an SDP message * * Description: - * This function parses an SDP message, which is copied into the + * This function parses an SDP message, which is copied into the * p->pr_message. The p->pr_message is modified during the parsing, * and parts of it are returned in p->pr_session. * @@ -384,7 +384,7 @@ for (; record && p->pr_ok; record = next(&message, CRLF, strip)) { - field = record[0]; + field = record[0]; rest = record + 2; rest += strspn(rest, strip); @@ -476,9 +476,9 @@ int sdp_connection_is_inaddr_any(sdp_connection_t const *c) { - return - c && - c->c_nettype == sdp_net_in && + return + c && + c->c_nettype == sdp_net_in && ((c->c_addrtype == sdp_addr_ip4 && strcmp(c->c_address, "0.0.0.0")) || (c->c_addrtype == sdp_addr_ip6 && strcmp(c->c_address, "::"))); } @@ -506,7 +506,7 @@ parsing_error(p, "Incorrect version"); return; } - + /* Go through all media and set mode */ for (m = sdp->sdp_media; m; m = m->m_next) { if (m->m_port == 0) { @@ -534,13 +534,13 @@ return; } -/** Validates that all mandatory fields exist +/** Validates that all mandatory fields exist * * Checks that all necessary fields (v=, o=) exists in the parsed sdp. If - * strict, check that all mandatory fields (c=, o=, s=, t=) are present. + * strict, check that all mandatory fields (c=, o=, s=, t=) are present. * This function also goes through all media, marks rejected media as such, * and updates the mode accordingly. - * + * * @retval 0 if parsed SDP description is valid * @retval -1 if some SDP line is missing * @retval -2 if c= line is missing @@ -626,7 +626,7 @@ sess-version = 1*(DIGIT) ;0 is a new session - + */ PARSE_ALLOC(p, sdp_origin_t, o); @@ -873,7 +873,7 @@ c->c_ttl = 0; c->c_groups = 1; } - else + else parsing_error(p, "invalid address"); } @@ -916,7 +916,7 @@ if (STRICT(p)) PARSE_CHECK_REST(p, r, "b"); - + { PARSE_ALLOC(p, sdp_bandwidth_t, b); *result = b; @@ -974,7 +974,7 @@ * @param p pointer to SDP parser object * @param r pointer to record data * @param result pointer to which parsed record is assigned - * + * */ static void parse_repeat(sdp_parser_t *p, char *d, sdp_repeat_t **result) { @@ -1013,7 +1013,7 @@ return; } if (!(r = su_salloc(p->pr_home, offsetof(sdp_repeat_t, r_offsets[N - 1])))) { - parse_alloc_error(p, "sdp_repeat_t"); + parse_alloc_error(p, "sdp_repeat_t"); return; } @@ -1035,7 +1035,7 @@ while (is_space(*d)) d++; - } + } *result = r; } @@ -1090,7 +1090,7 @@ return; } if (!(z = su_salloc(p->pr_home, offsetof(sdp_zone_t, z_adjustments[N])))) { - parse_alloc_error(p, "sdp_zone_t"); + parse_alloc_error(p, "sdp_zone_t"); return; } @@ -1109,7 +1109,7 @@ z->z_adjustments[n].z_at = at; z->z_adjustments[n].z_offset = offset; - } + } *result = z; } @@ -1205,7 +1205,7 @@ if (*r) value = r; - else + else PARSE_CHECK_REST(p, r, "a"); if (strcasecmp(name, "charset") == 0) { @@ -1213,7 +1213,7 @@ return; } - if (p->pr_mode_manual) + if (p->pr_mode_manual) ; else if (strcasecmp(name, "inactive") == 0) p->pr_session_mode = sdp_inactive; @@ -1316,10 +1316,10 @@ parsing_error(p, "m= missing protocol"); return; } - + if (!STRICT(p) && strcasecmp(s, "RTP") == 0) m->m_proto = sdp_proto_rtp, m->m_proto_name = "RTP/AVP"; - else + else sdp_media_transport(m, s); /* RTP format list */ @@ -1331,7 +1331,7 @@ /* "normal" format list */ if (*r) { sdp_list_t **fmt = &m->m_format; - + while (r && *r) { PARSE_ALLOC(p, sdp_list_t, l); *fmt = l; @@ -1382,7 +1382,7 @@ m->m_proto = sdp_proto_tcp, m->m_proto_name = "TCP"; else if (strcasecmp(s, "TLS") == 0) m->m_proto = sdp_proto_tls, m->m_proto_name = "TLS"; - else + else m->m_proto = sdp_proto_x, m->m_proto_name = s; } @@ -1560,10 +1560,10 @@ if (*r) value = r; - else + else PARSE_CHECK_REST(p, r, "a"); - if (p->pr_mode_manual) + if (p->pr_mode_manual) ; else if (strcasecmp(name, "inactive") == 0) { m->m_mode = sdp_inactive; @@ -1637,11 +1637,11 @@ return -2; } - if (*r == '/') + if (*r == '/') params = ++r; else params = 0; - + rm->rm_predef = 0; rm->rm_encoding = encoding; rm->rm_rate = rate; @@ -1690,12 +1690,12 @@ * Parameters: * p - pointer to SDP parser object * record - pointer to first media field - * message - pointer to rest + * message - pointer to rest * medias - pointer to which parsed media structures are assigned */ -static void parse_descs(sdp_parser_t *p, - char *record, - char *message, +static void parse_descs(sdp_parser_t *p, + char *record, + char *message, sdp_media_t **medias) { char *rest; @@ -1709,7 +1709,7 @@ strip = SPACE TAB; /* skip initial whitespace */ else strip = ""; - + for (; record && p->pr_ok; record = next(&message, CRLF, strip)) { @@ -1767,10 +1767,10 @@ /* * parse_ul: parse an unsigned long */ -static int parse_ul(sdp_parser_t *p, char **r, +static int parse_ul(sdp_parser_t *p, char **r, unsigned long *result, unsigned long max) { - char *ul = *r; + char *ul = *r; ul += strspn(ul, SPACE TAB); @@ -1790,12 +1790,12 @@ /* * parse_ull: parse an unsigned long long */ -static int parse_ull(sdp_parser_t *p, char **r, +static int parse_ull(sdp_parser_t *p, char **r, uint64_t *result, uint64_t max) { unsigned longlong ull; - char *s = *r; + char *s = *r; s += strspn(s, SPACE TAB); @@ -1810,9 +1810,9 @@ return -1; } -static char *token(char **message, - const char *sep, - const char *legal, +static char *token(char **message, + const char *sep, + const char *legal, const char *strip) { size_t n; @@ -1823,7 +1823,7 @@ if (legal) n = strspn(retval, legal); - else + else n = strcspn(retval, sep); if (n == 0) @@ -1872,8 +1872,8 @@ { int n; va_list ap; - va_start(ap, fmt); - + va_start(ap, fmt); + memset(p->pr_error, 0, sizeof(p->pr_error)); n = vsnprintf(p->pr_error, sizeof(p->pr_error), fmt, ap); va_end(ap); @@ -1885,6 +1885,6 @@ static void parse_alloc_error(sdp_parser_t *p, const char *typename) { - parsing_error(p, "memory exhausted (while allocating memory for %s)", + parsing_error(p, "memory exhausted (while allocating memory for %s)", typename); } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ * */ -/**@ingroup sdp_printer +/**@ingroup sdp_printer * * @CFILE sdp_print.c Simple SDP printer interface. * @@ -81,7 +81,7 @@ static struct sdp_printer_s printer_memory_error = { sizeof(printer_memory_error), NULL, - "memory exhausted", + "memory exhausted", sizeof(printer_memory_error.pr_buffer), sizeof(printer_memory_error.pr_buffer) }; @@ -90,14 +90,14 @@ /** Print a SDP description. * - * Encode the contents of the SDP session structure #sdp_session_t + * Encode the contents of the SDP session structure #sdp_session_t * to the @a msgbuf. The @a msgbuf has size @a msgsize * bytes. If @a msgbuf is @c NULL, the sdp_print() function allocates the * required buffer from the @a home heap. * * @param home Memory home (may be NULL). * @param session SDP session description structure to be encoded. - * @param msgbuf Buffer to which encoding is stored (may be NULL). + * @param msgbuf Buffer to which encoding is stored (may be NULL). * @param msgsize Size of @a msgbuf. * @param flags Flags specifying the encoding options. * @@ -117,17 +117,17 @@ * * @li #sdp_f_mode_manual - Do not generate mode attributes * - * @return + * @return * Always return a handle to an #sdp_printer_t object. * * @sa #sdp_printer_t, #sdp_session_t, sdp_printing_error(), * sdp_message(), sdp_message_size(), sdp_printer_free(), * sdp_parse(). */ -sdp_printer_t *sdp_print(su_home_t *home, - sdp_session_t const *session, - char msgbuf[], - isize_t msgsize, +sdp_printer_t *sdp_print(su_home_t *home, + sdp_session_t const *session, + char msgbuf[], + isize_t msgsize, int flags) { sdp_printer_t *p = su_salloc(home, sizeof(*p)); @@ -186,10 +186,10 @@ /** @brief Get encoded SDP message. * * Return a pointer to a C string containing the SDP message. - * + * * @param p Pointer to an #sdp_printer_t object. * - * @return + * @return * Return a pointer to a C string containing the encoded SDP message, or * NULL upon an error. */ @@ -207,7 +207,7 @@ * * @param p Pointer to an #sdp_printer_t object. * - * @return + * @return * Number of bytes in SDP message excluding final NUL or 0 upon an error. */ isize_t sdp_message_size(sdp_printer_t *p) @@ -253,10 +253,10 @@ static void print_key(sdp_printer_t *p, sdp_key_t const *k); static void print_attributes(sdp_printer_t *p, sdp_attribute_t const *a); static void print_charset(sdp_printer_t *p, sdp_text_t *charset); -static void print_media(sdp_printer_t *p, sdp_session_t const *, +static void print_media(sdp_printer_t *p, sdp_session_t const *, sdp_media_t const *m); -static void print_text_list(sdp_printer_t*, +static void print_text_list(sdp_printer_t*, const char *, sdp_list_t const *l); static void sdp_printf(sdp_printer_t *p, const char *fmt, ...); @@ -319,7 +319,7 @@ return; } - sdp_printf(p, "o=%s "LLU" "LLU" ", + sdp_printf(p, "o=%s "LLU" "LLU" ", o->o_username, (ull)o->o_id, (ull)o->o_version); @@ -411,7 +411,7 @@ sdp_printf(p, "%s%s%s", nettype, c->c_address); else sdp_printf(p, "%s", c->c_address); - + if (c->c_mcast || c->c_ttl) { sdp_printf(p, "/%u", c->c_ttl); if (c->c_groups > 1) @@ -424,13 +424,13 @@ { for (; b ; b = b->b_next) { char const *name; - + switch (b->b_modifier) { case sdp_bw_ct: name = "CT"; break; case sdp_bw_as: name = "AS"; break; default: name = b->b_modifier_name; break; } - + sdp_printf(p, "b=%s:%lu" CRLF, name, b->b_value); } } @@ -463,9 +463,9 @@ for (i = 0; i < z->z_number_of_adjustments; i++) { int negative = z->z_adjustments[i].z_offset < 0L; - sdp_printf(p, "%s%lu %s", + sdp_printf(p, "%s%lu %s", i > 0 ? " " : "", - z->z_adjustments[i].z_at, + z->z_adjustments[i].z_at, negative ? "-" : ""); if (negative) print_typed_time(p, -z->z_adjustments[i].z_offset); @@ -523,7 +523,7 @@ return; } - sdp_printf(p, "k=%s%s%s" CRLF, method, + sdp_printf(p, "k=%s%s%s" CRLF, method, have_material ? ":" : "", have_material ? k->k_material : ""); } @@ -537,7 +537,7 @@ } } -static void +static void print_attributes_without_mode(sdp_printer_t *p, sdp_attribute_t const *a) { for (;a; a = a->a_next) { @@ -559,7 +559,7 @@ sdp_printf(p, "a=charset%s%s" CRLF, charset ? ":" : "", charset ? charset : ""); } -static void print_media(sdp_printer_t *p, +static void print_media(sdp_printer_t *p, sdp_session_t const *sdp, sdp_media_t const *m) { @@ -582,7 +582,7 @@ case sdp_media_image : media = "image"; break; default: media = m->m_type_name; } - + switch (m->m_proto) { case sdp_proto_tcp: proto = "tcp"; break; case sdp_proto_udp: proto = "udp"; break; @@ -592,11 +592,11 @@ case sdp_proto_tls: proto = "tls"; break; default: proto = m->m_proto_name; break; } - + if (m->m_number_of_ports <= 1) sdp_printf(p, "m=%s %u %s", media, m->m_port, proto); else - sdp_printf(p, "m=%s %u/%u %s", + sdp_printf(p, "m=%s %u/%u %s", media, m->m_port, m->m_number_of_ports, proto); if (m->m_rtpmaps) { @@ -625,7 +625,7 @@ if (m->m_connections) #ifdef nomore if (m->m_connections != sdp->sdp_connection) -#endif +#endif print_connection_list(p, m->m_connections); if (m->m_bandwidths) print_bandwidths(p, m->m_bandwidths); @@ -636,10 +636,10 @@ if (!rm->rm_predef || p->pr_all_rtpmaps) sdp_printf(p, "a=rtpmap:%u %s/%lu%s%s" CRLF, rm->rm_pt, rm->rm_encoding, rm->rm_rate, - rm->rm_params ? "/" : "", + rm->rm_params ? "/" : "", rm->rm_params ? rm->rm_params : ""); if (rm->rm_fmtp) - sdp_printf(p, "a=fmtp:%u %s" CRLF, + sdp_printf(p, "a=fmtp:%u %s" CRLF, rm->rm_pt, rm->rm_fmtp); } @@ -670,7 +670,7 @@ } } -static void print_text_list(sdp_printer_t *p, +static void print_text_list(sdp_printer_t *p, const char *fmt, sdp_list_t const *l) { for (;l; l = l->l_next) { @@ -698,11 +698,11 @@ while (p->pr_ok) { int n; - - va_start(ap, fmt); + + va_start(ap, fmt); n = vsnprintf(p->pr_buffer + p->pr_used, p->pr_bsiz - p->pr_used, fmt, ap); va_end(ap); - + if (n > -1 && (size_t)n < p->pr_bsiz - p->pr_used) { p->pr_used += n; break; @@ -716,7 +716,7 @@ } p->pr_owns_buffer = 0; } - else if (p->pr_may_realloc) { + else if (p->pr_may_realloc) { char *buffer; size_t size; if (p->pr_bsiz < SDP_BLOCK) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_tag.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_tag.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_tag.c Tue Dec 16 13:05:22 2008 @@ -25,11 +25,11 @@ /**@internal * @file sdp_tag.c * @brief SDP Tags - * + * * @author Pekka Pessi - * + * * @date Created: Mon May 12 12:11:30 2003 ppessi - * + * */ #include "config.h" @@ -43,5 +43,5 @@ tag_typedef_t sdptag_any = NSTAG_TYPEDEF(*); tag_typedef_t sdptag_session = {{ - TAG_NAMESPACE, "session", sdptag_session_class + TAG_NAMESPACE, "session", sdptag_session_class }}; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sofia-sip/sdp.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sofia-sip/sdp.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sofia-sip/sdp.h Tue Dec 16 13:05:22 2008 @@ -98,7 +98,7 @@ sdp_media_t *sdp_media; /**< Media descriptors */ }; -/** Session description identification */ +/** Session description identification */ struct sdp_origin_s { int o_size; /**< sizeof sdp_origin_t */ @@ -150,7 +150,7 @@ { int b_size; /**< Size fo sdp_bandwidth_t */ sdp_bandwidth_t *b_next; /**< Next bw description in list */ - sdp_bandwidth_e b_modifier; /**< Meaning of value + sdp_bandwidth_e b_modifier; /**< Meaning of value (total, or per application). */ sdp_text_t *b_modifier_name; /**< Modifier if not well-known */ unsigned long b_value; /**< Bandwidth in kilobits per second */ @@ -197,7 +197,7 @@ sdp_key_clear, /**< Key is included untransformed */ sdp_key_base64, /**< Key is encoded with base64 */ sdp_key_uri, /**< URI used to obtain a key */ - sdp_key_prompt /**< No key is included, + sdp_key_prompt /**< No key is included, prompt user for key */ } sdp_key_method_e; @@ -249,19 +249,19 @@ /** Session mode. @note Identical to rtp_mode_t. */ typedef enum { - sdp_inactive = 0, - sdp_sendonly = 1, - sdp_recvonly = 2, + sdp_inactive = 0, + sdp_sendonly = 1, + sdp_recvonly = 2, sdp_sendrecv = sdp_sendonly | sdp_recvonly } sdp_mode_t; /** Media announcement. - * + * * This structure describes one media type, e.g., audio. The description * contains the transport address (IP address and port) used for the group, * the transport protocol used, the media formats or RTP payload types, and * optionally media-specific bandwidth specification, encryption key and - * attributes. + * attributes. * * There is a pointer (m_user) for the application data, too. */ @@ -286,9 +286,9 @@ sdp_attribute_t *m_attributes; /**< Media attributes */ void *m_user; /**< User data. */ - + /** Rejected media */ - unsigned m_rejected : 1; + unsigned m_rejected : 1; /** Inactive, recvonly, sendonly, sendrecv */ /* sdp_mode_t */ unsigned m_mode : 2; unsigned : 0; @@ -303,7 +303,7 @@ }; /** Mapping from RTP payload to codec. - * + * * The sdp_rtpmap_t() structure defines a mapping from an RTP payload to a * particular codec. In case of well-known payloads, the sdp_rtpmap_t() * structure may be predefined, that is, generated by SDP parser without @@ -437,8 +437,8 @@ char const *name); /** Find named attribute from given lists. */ -SOFIAPUBFUN sdp_attribute_t *sdp_attribute_find2(sdp_attribute_t const *a, - sdp_attribute_t const *a2, +SOFIAPUBFUN sdp_attribute_t *sdp_attribute_find2(sdp_attribute_t const *a, + sdp_attribute_t const *a2, char const *name); /** Get session mode from attribute list. */ @@ -446,26 +446,26 @@ sdp_mode_t defmode); /** Get session mode from attribute list. */ -SOFIAPUBFUN sdp_attribute_t *sdp_attribute_by_mode(su_home_t *, +SOFIAPUBFUN sdp_attribute_t *sdp_attribute_by_mode(su_home_t *, sdp_mode_t mode); /** Find a mapped attribute. */ -SOFIAPUBFUN +SOFIAPUBFUN sdp_attribute_t *sdp_attribute_mapped_find(sdp_attribute_t const *a, char const *name, int pt, char **return_result); /** Append a attribute to a list of attributes. */ -SOFIAPUBFUN void sdp_attribute_append(sdp_attribute_t **list, +SOFIAPUBFUN void sdp_attribute_append(sdp_attribute_t **list, sdp_attribute_t const *a); /** Replace a attribute within a list of attributes. */ -SOFIAPUBFUN int sdp_attribute_replace(sdp_attribute_t **list, +SOFIAPUBFUN int sdp_attribute_replace(sdp_attribute_t **list, sdp_attribute_t *a, sdp_attribute_t **return_replaced); /** Remove a named attribute from a list of attributes. */ -SOFIAPUBFUN sdp_attribute_t *sdp_attribute_remove(sdp_attribute_t **list, +SOFIAPUBFUN sdp_attribute_t *sdp_attribute_remove(sdp_attribute_t **list, char const *name); /* Return 1 if m= line struct matches with given type and name */ @@ -505,8 +505,8 @@ /** Accept only conforming SDP */ sdp_f_strict = 1, /** Accept any network type. */ - sdp_f_anynet = 2, - /** Reallocate message. */ + sdp_f_anynet = 2, + /** Reallocate message. */ sdp_f_realloc = 4, /** Include well-known rtpmaps in message, too */ sdp_f_all_rtpmaps = 8, Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sofia-sip/sdp_tag.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sofia-sip/sdp_tag.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sofia-sip/sdp_tag.h Tue Dec 16 13:05:22 2008 @@ -26,7 +26,7 @@ /** Defined when has been included. */ #define SDP_TAG_H -/**@file sofia-sip/sdp_tag.h +/**@file sofia-sip/sdp_tag.h * @brief SDP tags * * @author Pekka Pessi @@ -65,12 +65,12 @@ #if SU_HAVE_INLINE su_inline -tag_value_t sdptag_session_v(struct sdp_session_s const *v) { - return (tag_value_t)v; +tag_value_t sdptag_session_v(struct sdp_session_s const *v) { + return (tag_value_t)v; } su_inline -tag_value_t sdptag_session_vr(struct sdp_session_s const **vp) { - return (tag_value_t)vp; +tag_value_t sdptag_session_vr(struct sdp_session_s const **vp) { + return (tag_value_t)vp; } #else #define sdptag_session_v(v) (tag_value_t)(v) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/test_sdp.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/test_sdp.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/test_sdp.c Tue Dec 16 13:05:22 2008 @@ -62,7 +62,7 @@ char buffer[2048]; int n; su_home_t *home = su_home_create(); - int exitcode = 1; + int exitcode = 1; FILE *f; if (argv[1] && strcmp(argv[1], "-")) @@ -124,7 +124,7 @@ perror("test_sdp"); } else { - fprintf(stderr, "test_sdp: maximum length of sdp messages is %u bytes\n", + fprintf(stderr, "test_sdp: maximum length of sdp messages is %u bytes\n", (unsigned)sizeof(buffer)); } exit(1); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/torture_sdp.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/torture_sdp.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/torture_sdp.c Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ /**@internal * - * @CFILE sdp_torture.c + * @CFILE sdp_torture.c * * Torture testing sdp module. * @@ -59,10 +59,10 @@ FILE *null; -static char const e0_msg[] = +static char const e0_msg[] = "foo"; -static char const e1_msg[] = +static char const e1_msg[] = "v=1\n" "s=/sdp_torture\n" "o=sdp_torture 0 0 IN IP4 0.0.0.0\n" @@ -102,7 +102,7 @@ END(); } -static char const s0_msg[] = +static char const s0_msg[] = "v=0\n" "s=/sdp_torture\n" "o=sdp_torture 0 0 IN IP4 0.0.0.0\n" @@ -136,7 +136,7 @@ su_home_check(home2); TEST_1(home2); - + TEST_1((parser = sdp_parse(home, s0_msg, sizeof(s0_msg), sdp_f_config))); TEST_1((sdp_src = sdp_session(parser))); TEST_1(sdp_src->sdp_media); @@ -179,7 +179,7 @@ /* destroy the first home instance */ su_home_check(home); su_home_unref(home); - + /* access all cloned data by printing it */ printer = sdp_print(home2, sdp_target, buffer, sizeof(buffer), 0); if (printer != NULL) { @@ -188,7 +188,7 @@ if (tstflags & tst_verbatim) { printf("sdp_torture.c: parsed SDP message:\"%s\".\n", msg); } - + sdp_printer_free(printer); } @@ -224,7 +224,7 @@ END(); } -static char const s1_msg[] = +static char const s1_msg[] = "v=0\r\n" "o=- 2435697 2435697 IN IP4 172.21.137.44\r\n" "s=-\r\n" @@ -238,7 +238,7 @@ "a=fmtp:97 mode-set=\"0,1,2,3,4\"\r\n" "a=ptime:400\r\n"; -static char const s2_msg[] = +static char const s2_msg[] = "v=0\r\n" "o=- 308519342 2 IN IP4 172.168.1.55\r\n" "s=-\r\n" @@ -413,7 +413,7 @@ &sdp_rtpmap_cn_reserved); TEST_1(!rm->rm_next); } - + TEST_1((parser = sdp_parse(home, s2_msg, sizeof (s2_msg), 0))); TEST_1((sdp = sdp_session(parser))); TEST_1(m = sdp->sdp_media); @@ -438,7 +438,7 @@ END(); } -static char const s3_msg[] = +static char const s3_msg[] = "v=0\r\n" "o=- 2435697 2435697 IN IP4 172.21.137.44\r\n" "s=-\r\n" @@ -461,7 +461,7 @@ su_home_check(home); TEST_1(home); TEST_1((parser = sdp_parse(home, s3_msg, sizeof(s3_msg) - 1, 0))); - + TEST_1(sdp_sanity_check(parser) == 0); su_home_unref(home); @@ -469,7 +469,7 @@ END(); } -static char const pint_msg[] = +static char const pint_msg[] = "v=0\r\n" "o=- 2353687640 2353687640 IN IP4 128.3.4.5\r\n" "s=marketing\r\n" @@ -479,7 +479,7 @@ "m=audio 1 voice -\r\n" ; -static char const pint_torture_msg[] = +static char const pint_torture_msg[] = "v=0\r\n" "o=- 2353687640 2353687640 IN IP4 128.3.4.5\r\n" "s=marketing\r\n" @@ -514,7 +514,7 @@ TEST_1((parser = sdp_parse(home, pint_torture_msg, sizeof(pint_torture_msg) - 1, sdp_f_anynet))); TEST_1((sdp = sdp_session(parser))); - + su_home_check(home); su_home_unref(home); @@ -555,16 +555,16 @@ } static -sdp_rtpmap_t const rm0[1] = - {{ +sdp_rtpmap_t const rm0[1] = + {{ sizeof(rm0), NULL, "AMR", 8000, "1", "mode-set=4,5,6 interleaving crc use-redundancy=1", 0, 96, 0 }}; static -sdp_rtpmap_t const rm1[1] = - {{ +sdp_rtpmap_t const rm1[1] = + {{ sizeof(rm1), (sdp_rtpmap_t *)rm0, "PCMA", 8000, "1", NULL, 1, 8, 0, @@ -605,7 +605,7 @@ static sdp_attribute_t const a0[1] = {{ sizeof(a0), NULL, "foo", "2"}}; -static sdp_attribute_t const a1[1] = +static sdp_attribute_t const a1[1] = {{ sizeof(a1), (sdp_attribute_t *)a0, "bar", "1" }}; static int test_attribute(void) @@ -648,12 +648,12 @@ replaced = (void *)-1; TEST(sdp_attribute_replace(&list, NULL, &replaced), -1); TEST_P(replaced, NULL); - TEST(sdp_attribute_replace(&list, a, &replaced), 0); + TEST(sdp_attribute_replace(&list, a, &replaced), 0); TEST_P(replaced, NULL); - TEST(sdp_attribute_replace(&list, a_new, &replaced), 1); + TEST(sdp_attribute_replace(&list, a_new, &replaced), 1); TEST_P(replaced, a); - TEST_VOID(sdp_attribute_append(&list, a)); + TEST_VOID(sdp_attribute_append(&list, a)); TEST_P(sdp_attribute_remove(&list, "bAr"), a_new); TEST_P(sdp_attribute_remove(&list, "BAR"), a); @@ -672,7 +672,7 @@ END(); } -static char const media_msg[] = +static char const media_msg[] = "v=0\n" "s=/sdp_torture\n" "o=sdp_torture 0 0 IN IP4 1.2.3.4\n" @@ -689,13 +689,13 @@ "c=IN IP4 2.3.4.5\n"; static sdp_media_t const m0[1] = - {{ sizeof(m0), - NULL, + {{ sizeof(m0), + NULL, NULL, sdp_media_audio, - NULL, - 1234, - 5, + NULL, + 1234, + 5, sdp_proto_udp, "udp", }}; @@ -781,20 +781,20 @@ TEST_1(sdp_time_cmp(t1, t1) == 0); TEST_1(sdp_time_cmp(t1, t2) == 0); TEST_1(sdp_time_cmp(t2, t1) == 0); - TEST_1((t = t->t_next)); *t1 = *t; t1->t_next = NULL; + TEST_1((t = t->t_next)); *t1 = *t; t1->t_next = NULL; TEST_1(sdp_time_cmp(t1, t2) > 0); TEST_1(sdp_time_cmp(t2, t1) < 0); - TEST_1((t = t->t_next)); *t2 = *t; t2->t_next = NULL; + TEST_1((t = t->t_next)); *t2 = *t; t2->t_next = NULL; TEST_1(t2->t_zone); TEST_1(t2->t_repeat); TEST_1(sdp_time_cmp(t2, t2) == 0); TEST_1(sdp_time_cmp(t1, t2) > 0); TEST_1(sdp_time_cmp(t2, t1) < 0); - TEST_1((t = t->t_next)); *t1 = *t; t1->t_next = NULL; + TEST_1((t = t->t_next)); *t1 = *t; t1->t_next = NULL; TEST_1(t1->t_zone); TEST_1(t1->t_repeat); TEST_1(sdp_time_cmp(t1, t1) == 0); TEST_1(sdp_time_cmp(t2, t2) == 0); TEST_1(sdp_time_cmp(t1, t2) == 0); - + sdp_parser_free(parser); END(); @@ -829,9 +829,9 @@ TEST_1(home = su_home_create()); - /* + /* * Allocate an SDP structure using su_salloc(). - * su_salloc() puts memory area size to the beginning of structure + * su_salloc() puts memory area size to the beginning of structure * and zeroes rest of the structure. */ TEST_1(sdp = su_salloc(home, sizeof(*sdp))); @@ -850,7 +850,7 @@ o->o_id = rand(); o->o_version = 1; o->o_address = c; - + c->c_nettype = sdp_net_in; c->c_addrtype = sdp_addr_ip4; c->c_address = "172.21.40.40"; @@ -860,10 +860,10 @@ m->m_port = 5004; m->m_proto = sdp_proto_rtp; m->m_proto_name = "RTP/AVP"; m->m_rtpmaps = rm; - + rm->rm_predef = 1; rm->rm_pt = 8; - rm->rm_encoding = "PCMA"; + rm->rm_encoding = "PCMA"; rm->rm_rate = 8000; TEST_1(m1 = su_salloc(home, sizeof(*m1))); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/ADD-A-HEADER ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/ADD-A-HEADER (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/ADD-A-HEADER Tue Dec 16 13:05:22 2008 @@ -23,7 +23,7 @@ You should add a typedef line like this: typedef struct sip_example_s sip_example_t; - + Note that the typedefs are documented together with the implementation in the .c file. @@ -50,16 +50,16 @@ * Add entry to sip_extra_headers.txt: - In this case: example @NEW_2_0 /* Example header */ - - The first is the base C name used for functions and types related to + - The first is the base C name used for functions and types related to the type. The AWK script msg_parser.awk automatically creates the default prototypes and tags for the newly created header. It will complain about mismatches between header name and the base name. - - If the entry is before #### DEFAULT HEADER LIST ENDS HERE #### + - If the entry is before #### DEFAULT HEADER LIST ENDS HERE #### the new header is added to the default parser - If after, the new header is added only to the extended parser. - - The extended parser will be used after call to + - The extended parser will be used after call to sip_update_default_mclass(NULL) * Write parsing tests for your new headers in torture_sip.c: @@ -79,10 +79,10 @@ + sip_example_dup_xtra(), sip_example_dup_one() * If you added a .c file, add to the Makefile.am - - remember to run autogen.sh unless you have given --enable-maintainer-mode + - remember to run autogen.sh unless you have given --enable-maintainer-mode to configure script - * Run "make check" after you are ready + * Run "make check" after you are ready * Run "make check" after you are ready. Really. @@ -95,10 +95,10 @@ - There is an example package sofia-sip-2543.tar.gz, available from sofia-sip.sourceforge.net - See the extension package for 1) + See the extension package for 1) - - Create a header template for your header just like - sofia-sip/rfc2543.h.in (found in package), + - Create a header template for your header just like + sofia-sip/rfc2543.h.in (found in package), e.g, sip_example.h.in: ---8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<--- @@ -107,11 +107,11 @@ * Template for . */ -#ifndef SIP_EXAMPLE_H +#ifndef SIP_EXAMPLE_H /** Defined when has been included. */ -#define SIP_EXAMPLE_H +#define SIP_EXAMPLE_H -/**@file sip_example.h +/**@file sip_example.h * * @brief Example header. * Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/ChangeLog ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/ChangeLog (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/ChangeLog Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ 2006-01-25 Kai Vehmanen - * Doxyfile (INPUT): Missing sip_dll.c broke refdoc - build. Now changed so that individual are not listed + * Doxyfile (INPUT): Missing sip_dll.c broke refdoc + build. Now changed so that individual are not listed anymore in INPUT. 2006-01-10 Kai Vehmanen @@ -52,7 +52,7 @@ * sip_basic.c: Not encoding comment in Contact. Always using name-addr form for Route headers. - + 2005-07-18 Kai Vehmanen * Initial import of the module to Sofia-SIP tree. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/Doxyfile.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/Doxyfile.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/Doxyfile.in Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ PROJECT_NAME = "sip" OUTPUT_DIRECTORY = ../docs/html/sip -INPUT = @srcdir@/sofia-sip sofia-sip @srcdir@/sip.docs @srcdir@/sip_parser.docs @srcdir@ . +INPUT = @srcdir@/sofia-sip sofia-sip @srcdir@/sip.docs @srcdir@/sip_parser.docs @srcdir@ . @INCLUDE_PATH = . @srcdir@ @INCLUDE = ../docs/Doxyfile.conf Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/GRAMMAR ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/GRAMMAR (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/GRAMMAR Tue Dec 16 13:05:22 2008 @@ -1,19 +1,19 @@ /* SIP grammar from RFC3261 - * + * * alphanum = ALPHA / DIGIT - * + * * reserved = ";" / "/" / "?" / ":" / "@" / "&" / "=" / "+" * / "$" / "," * unreserved = alphanum / mark * mark = "-" / "_" / "." / "!" / "~" / "*" / "'" * / "(" / ")" * escaped = "%" HEXDIG HEXDIG - * + * * LWS = [*WSP CRLF] 1*WSP ; linear whitespace * SWS = [LWS] ; sep whitespace - * + * * HCOLON = *( SP / HTAB ) ":" SWS - * + * * TEXT-UTF8-TRIM = 1*TEXT-UTF8char *(*LWS TEXT-UTF8char) * TEXT-UTF8char = %x21-7E / UTF8-NONASCII * UTF8-NONASCII = %xC0-DF 1UTF8-CONT @@ -22,9 +22,9 @@ * / %xF8-Fb 4UTF8-CONT * / %xFC-FD 5UTF8-CONT * UTF8-CONT = %x80-BF - * + * * LHEX = DIGIT / %x61-66 ;lowercase a-f - * + * * token = 1*(alphanum / "-" / "." / "!" / "%" / "*" * / "_" / "+" / "`" / "'" / "~" ) * separators = "(" / ")" / "<" / ">" / "@" / @@ -37,7 +37,7 @@ * ":" / "\" / DQUOTE / * "/" / "[" / "]" / "?" / * "{" / "}" ) - * + * * STAR = SWS "*" SWS ; asterisk * SLASH = SWS "/" SWS ; slash * EQUAL = SWS "=" SWS ; equal @@ -50,18 +50,18 @@ * COLON = SWS ":" SWS ; colon * LDQUOT = SWS DQUOTE; open double quotation mark * RDQUOT = DQUOTE SWS ; close double quotation mark - * + * * comment = LPAREN *(ctext / quoted-pair / comment) RPAREN * ctext = %x21-27 / %x2A-5B / %x5D-7E / UTF8-NONASCII * / LWS - * + * * quoted-string = SWS DQUOTE *(qdtext / quoted-pair ) DQUOTE * qdtext = LWS / %x21 / %x23-5B / %x5D-7E * / UTF8-NONASCII - * + * * quoted-pair = "\" (%x00-09 / %x0B-0C * / %x0E-7F) - * + * * SIP-URI = "sip:" [ userinfo ] hostport * uri-parameters [ headers ] * SIPS-URI = "sips:" [ userinfo ] hostport @@ -84,7 +84,7 @@ * hexseq = hex4 *( ":" hex4) * hex4 = 1*4HEXDIG * port = 1*DIGIT - * + * * uri-parameters = *( ";" uri-parameter) * uri-parameter = transport-param / user-param / method-param * / ttl-param / maddr-param / lr-param / other-param @@ -103,13 +103,13 @@ * pvalue = 1*paramchar * paramchar = param-unreserved / unreserved / escaped * param-unreserved = "[" / "]" / "/" / ":" / "&" / "+" / "$" - * + * * headers = "?" header *( "&" header ) * header = hname "=" hvalue * hname = 1*( hnv-unreserved / unreserved / escaped ) * hvalue = *( hnv-unreserved / unreserved / escaped ) * hnv-unreserved = "[" / "]" / "/" / "?" / ":" / "+" / "$" - * + * * SIP-message = Request / Response * Request = Request-Line * *( message-header ) @@ -137,7 +137,7 @@ * / ";" / ":" / "@" / "&" / "=" / "+" ) * query = *uric * SIP-Version = "SIP" "/" 1*DIGIT "." 1*DIGIT - * + * * message-header = (Accept * / Accept-Encoding * / Accept-Language @@ -183,7 +183,7 @@ * / Warning * / WWW-Authenticate * / extension-header) CRLF - * + * * INVITEm = %x49.4E.56.49.54.45 ; INVITE in caps * ACKm = %x41.43.4B ; ACK in caps * OPTIONSm = %x4F.50.54.49.4F.4E.53 ; OPTIONS in caps @@ -198,7 +198,7 @@ * *( message-header ) * CRLF * [ message-body ] - * + * * Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF * Status-Code = Informational * / Redirection @@ -210,21 +210,21 @@ * extension-code = 3DIGIT * Reason-Phrase = *(reserved / unreserved / escaped * / UTF8-NONASCII / UTF8-CONT / SP / HTAB) - * + * * Informational = "100" ; Trying * / "180" ; Ringing * / "181" ; Call Is Being Forwarded * / "182" ; Queued * / "183" ; Session Progress - * + * * Success = "200" ; OK - * + * * Redirection = "300" ; Multiple Choices * / "301" ; Moved Permanently * / "302" ; Moved Temporarily * / "305" ; Use Proxy * / "380" ; Alternative Service - * + * * Client-Error = "400" ; Bad Request * / "401" ; Unauthorized * / "402" ; Payment Required @@ -253,7 +253,7 @@ * / "488" ; Not Acceptable Here * / "491" ; Request Pending * / "493" ; Undecipherable - * + * * Server-Error = "500" ; Internal Server Error * / "501" ; Not Implemented * / "502" ; Bad Gateway @@ -261,12 +261,12 @@ * / "504" ; Server Time-out * / "505" ; SIP Version not supported * / "513" ; Message Too Large - * + * * Global-Failure = "600" ; Busy Everywhere * / "603" ; Decline * / "604" ; Does not exist anywhere * / "606" ; Not Acceptable - * + * * Accept = "Accept" HCOLON * [ accept-range *(COMMA accept-range) ] * accept-range = media-range *(SEMI accept-param) @@ -280,23 +280,23 @@ * / ( "1" [ "." 0*3("0") ] ) * generic-param = token [ EQUAL gen-value ] * gen-value = token / host / quoted-string - * + * * Accept-Encoding = "Accept-Encoding" HCOLON * [ encoding *(COMMA encoding) ] * encoding = codings *(SEMI accept-param) * codings = content-coding / "*" * content-coding = token - * + * * Accept-Language = "Accept-Language" HCOLON * [ language *(COMMA language) ] * language = language-range *(SEMI accept-param) * language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) / "*" ) - * + * * Alert-Info = "Alert-Info" HCOLON alert-param *(COMMA alert-param) * alert-param = LAQUOT absoluteURI RAQUOT *( SEMI generic-param ) - * + * * Allow = "Allow" HCOLON [Method *(COMMA Method)] - * + * * Authorization = "Authorization" HCOLON credentials * credentials = ("Digest" LWS digest-response) * / other-response @@ -323,7 +323,7 @@ * other-response = auth-scheme LWS auth-param * *(COMMA auth-param) * auth-scheme = token - * + * * Authentication-Info = "Authentication-Info" HCOLON ainfo * *(COMMA ainfo) * ainfo = nextnonce / message-qop @@ -332,29 +332,29 @@ * nextnonce = "nextnonce" EQUAL nonce-value * response-auth = "rspauth" EQUAL response-digest * response-digest = LDQUOT *LHEX RDQUOT - * + * * Call-ID = ( "Call-ID" / "i" ) HCOLON callid * callid = word [ "@" word ] - * + * * Call-Info = "Call-Info" HCOLON info *(COMMA info) * info = LAQUOT absoluteURI RAQUOT *( SEMI info-param) * info-param = ( "purpose" EQUAL ( "icon" / "info" * / "card" / token ) ) / generic-param - * + * * Contact = ("Contact" / "m" ) HCOLON * ( STAR / (contact-param *(COMMA contact-param))) * contact-param = (name-addr / addr-spec) *(SEMI contact-params) * name-addr = [ display-name ] LAQUOT addr-spec RAQUOT * addr-spec = SIP-URI / SIPS-URI / absoluteURI * display-name = *(token LWS)/ quoted-string - * + * * contact-params = c-p-q / c-p-expires * / contact-extension * c-p-q = "q" EQUAL qvalue * c-p-expires = "expires" EQUAL delta-seconds * contact-extension = generic-param * delta-seconds = 1*DIGIT - * + * * Content-Disposition = "Content-Disposition" HCOLON * disp-type *( SEMI disp-param ) * disp-type = "render" / "session" / "icon" / "alert" @@ -365,16 +365,16 @@ * / other-handling ) * other-handling = token * disp-extension-token = token - * + * * Content-Encoding = ( "Content-Encoding" / "e" ) HCOLON * content-coding *(COMMA content-coding) - * + * * Content-Language = "Content-Language" HCOLON * language-tag *(COMMA language-tag) * language-tag = primary-tag *( "-" subtag ) * primary-tag = 1*8ALPHA * subtag = 1*8ALPHA - * + * * Content-Length = ( "Content-Length" / "l" ) HCOLON 1*DIGIT * Content-Type = ( "Content-Type" / "c" ) HCOLON media-type * media-type = m-type SLASH m-subtype *(SEMI m-parameter) @@ -390,9 +390,9 @@ * m-parameter = m-attribute EQUAL m-value * m-attribute = token * m-value = token / quoted-string - * + * * CSeq = "CSeq" HCOLON 1*DIGIT LWS Method - * + * * Date = "Date" HCOLON SIP-date * SIP-date = rfc1123-date * rfc1123-date = wkday "," SP date1 SP time SP "GMT" @@ -405,32 +405,32 @@ * month = "Jan" / "Feb" / "Mar" / "Apr" * / "May" / "Jun" / "Jul" / "Aug" * / "Sep" / "Oct" / "Nov" / "Dec" - * + * * Error-Info = "Error-Info" HCOLON error-uri *(COMMA error-uri) * error-uri = LAQUOT absoluteURI RAQUOT *( SEMI generic-param ) - * + * * Expires = "Expires" HCOLON delta-seconds * From = ( "From" / "f" ) HCOLON from-spec * from-spec = ( name-addr / addr-spec ) * *( SEMI from-param ) * from-param = tag-param / generic-param * tag-param = "tag" EQUAL token - * + * * In-Reply-To = "In-Reply-To" HCOLON callid *(COMMA callid) - * + * * Max-Forwards = "Max-Forwards" HCOLON 1*DIGIT - * + * * MIME-Version = "MIME-Version" HCOLON 1*DIGIT "." 1*DIGIT - * + * * Min-Expires = "Min-Expires" HCOLON delta-seconds - * + * * Organization = "Organization" HCOLON [TEXT-UTF8-TRIM] - * + * * Priority = "Priority" HCOLON priority-value * priority-value = "emergency" / "urgent" / "normal" * / "non-urgent" / other-priority * other-priority = token - * + * * Proxy-Authenticate = "Proxy-Authenticate" HCOLON challenge * challenge = ("Digest" LWS digest-cln *(COMMA digest-cln)) * / other-challenge @@ -453,53 +453,53 @@ * qop-options = "qop" EQUAL LDQUOT qop-value * *("," qop-value) RDQUOT * qop-value = "auth" / "auth-int" / token - * + * * Proxy-Authorization = "Proxy-Authorization" HCOLON credentials - * + * * Proxy-Require = "Proxy-Require" HCOLON option-tag * *(COMMA option-tag) * option-tag = token - * + * * Record-Route = "Record-Route" HCOLON rec-route *(COMMA rec-route) * rec-route = name-addr *( SEMI rr-param ) * rr-param = generic-param - * + * * Reply-To = "Reply-To" HCOLON rplyto-spec * rplyto-spec = ( name-addr / addr-spec ) * *( SEMI rplyto-param ) * rplyto-param = generic-param * Require = "Require" HCOLON option-tag *(COMMA option-tag) - * + * * Retry-After = "Retry-After" HCOLON delta-seconds * [ comment ] *( SEMI retry-param ) - * + * * retry-param = ("duration" EQUAL delta-seconds) * / generic-param - * + * * Route = "Route" HCOLON route-param *(COMMA route-param) * route-param = name-addr *( SEMI rr-param ) - * + * * Server = "Server" HCOLON server-val *(LWS server-val) * server-val = product / comment * product = token [SLASH product-version] * product-version = token - * + * * Subject = ( "Subject" / "s" ) HCOLON [TEXT-UTF8-TRIM] - * + * * Supported = ( "Supported" / "k" ) HCOLON * [option-tag *(COMMA option-tag)] - * + * * Timestamp = "Timestamp" HCOLON 1*(DIGIT) * [ "." *(DIGIT) ] [ LWS delay ] * delay = *(DIGIT) [ "." *(DIGIT) ] - * + * * To = ( "To" / "t" ) HCOLON ( name-addr * / addr-spec ) *( SEMI to-param ) * to-param = tag-param / generic-param - * + * * Unsupported = "Unsupported" HCOLON option-tag *(COMMA option-tag) * User-Agent = "User-Agent" HCOLON server-val *(LWS server-val) - * + * * Via = ( "Via" / "v" ) HCOLON via-parm *(COMMA via-parm) * via-parm = sent-protocol LWS sent-by *( SEMI via-params ) * via-params = via-ttl / via-maddr @@ -518,7 +518,7 @@ * / other-transport * sent-by = host [ COLON port ] * ttl = 1*3DIGIT ; 0 to 255 - * + * * Warning = "Warning" HCOLON warning-value *(COMMA warning-value) * warning-value = warn-code SP warn-agent SP warn-text * warn-code = 3DIGIT @@ -527,9 +527,9 @@ * ; the Warning header, for use in debugging * warn-text = quoted-string * pseudonym = token - * + * * WWW-Authenticate = "WWW-Authenticate" HCOLON challenge - * + * * extension-header = header-name HCOLON header-value * header-name = token * header-value = *(TEXT-UTF8char / UTF8-CONT / LWS) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/run-tests ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/run-tests (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/run-tests Tue Dec 16 13:05:22 2008 @@ -36,8 +36,8 @@ rc=0 for n in "$@"; -do - if "$msg_test" < "$n" > /dev/null ; then +do + if "$msg_test" < "$n" > /dev/null ; then true else echo "$n: ERROR"; rc=1 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/run_test_sip_msg ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/run_test_sip_msg (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/run_test_sip_msg Tue Dec 16 13:05:22 2008 @@ -41,20 +41,20 @@ test=./test_sip_msg # These are messages that the parser should pass -good="-t test1.txt test2.txt test3.txt test4.txt - -u test5.txt -t test6.txt test7.txt -u test8.txt -t test9.txt - test14.txt test20.txt test23.txt test24.txt test31.txt +good="-t test1.txt test2.txt test3.txt test4.txt + -u test5.txt -t test6.txt test7.txt -u test8.txt -t test9.txt + test14.txt test20.txt test23.txt test24.txt test31.txt own1.txt own2.txt own3.txt own4.txt own5.txt own6.txt" # These are messages that the parser should fail -bad="test10.txt test11.txt test12.txt test13.txt test15.txt - test16.txt test17.txt test18.txt test19.txt - test21.txt test22.txt +bad="test10.txt test11.txt test12.txt test13.txt test15.txt + test16.txt test17.txt test18.txt test19.txt + test21.txt test22.txt test26.txt test29.txt test33.txt - test35.txt + test35.txt test40.txt" # These are ugly messages that parser should pass -ugly="-t test25.txt -u test27.txt test28.txt -t test30.txt - -u test32.txt test34.txt -t test36.txt -u test37.txt +ugly="-t test25.txt -u test27.txt test28.txt -t test30.txt + -u test32.txt test34.txt -t test36.txt -u test37.txt test38.txt test39.txt test41.txt test42.txt" # These are messages that parser should pass, but it does not @@ -64,12 +64,12 @@ flag=-t for n in $good $ugly; -do +do if test $n = -t ; then flag=$n elif test $n = -u ; then flag= - elif "$test" $flag < "$srcdir/tests/$n" > /dev/null ; then + elif "$test" $flag < "$srcdir/tests/$n" > /dev/null ; then echo "PASS: $n" else echo "ERROR: $n"; rc=1 @@ -77,8 +77,8 @@ done for n in $bad; -do - if "$test" -t < "$srcdir/tests/$n" > /dev/null 2>/dev/null ; then +do + if "$test" -t < "$srcdir/tests/$n" > /dev/null 2>/dev/null ; then echo "ERROR: $n (no error detected)"; rc=1 else echo "PASS: $n" Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip.docs Tue Dec 16 13:05:22 2008 @@ -44,7 +44,7 @@ * that drives the parsing process and invokes the SIP parser for each * header. As there are no framing between SIP messages, the parser * considers any received data, be it a UDP datagram or a TCP stream, as a - * @em message @em stream, which may consist of one or more SIP messages. + * @em message @em stream, which may consist of one or more SIP messages. * The parser works by first separating stream into fragments, then building * a complete message based on parsing result. After a message is completed, * it can be given to the message stream customer (typically a protocol @@ -57,7 +57,7 @@ * one-by-one from the message. After the parser encounters an empty line * separating the headers and the message body (payload), it invokes a * function parsing the separator and payload fragment(s). When the message - * is complete, the parser can hand the message over to the protocol engine. + * is complete, the parser can hand the message over to the protocol engine. * Then it is ready to start again with first fragment of the next message. * * @image html sip-parser.gif Separating byte stream to messages @@ -70,7 +70,7 @@ * fragment chain, and a whole other stuff is held by the generic message * type, #msg_t, defined in . The internal structure of #msg_t is * known only within @b msg module and it is hidden from other modules. - * + * * The abstract message module @b msg also drives the reverse process, * invoking the encoding method of each fragment so that the whole outgoing * SIP message is encoded properly. @@ -96,7 +96,7 @@ * For instance, the @From header has following syntax: * * @code - * from = ("From" | "f") ":" + * from = ("From" | "f") ":" * ( name-addr | addr-spec ) *( ";" addr-params ) * name-addr = [ display-name ] "<" addr-spec ">" * addr-spec = SIP-URL | URI @@ -134,7 +134,7 @@ * access certain headers at the SIP message level, for example, accessing * directly the @From header instead of going through all headers and * examining their name. The structured view to the SIP message is provided - * via a C struct with type #sip_t. + * via a C struct with type #sip_t. * * In other words, a single message is represented by two types, first type * (#msg_t) is private to the msg module and inaccessable by an application @@ -151,7 +151,7 @@ * int sip_flags; * * sip_error_t *sip_error; // Erroneous headers - * + * * sip_request_t *sip_request; // Request line * sip_status_t *sip_status; // Status line * @@ -210,11 +210,11 @@ * pointers to the headers according to their type. If there are multiple * headers of the same type (like there are two @Via headers in the above * message), the headers are put into a single-linked list. - * + * * Each fragment has pointers to successing and preceding fragment. It also * contains pointer to the corresponding data within the I/O buffer and its * length. - * + * * The main purpose of the fragment chain is to preserve the original order * of the headers. If there were an third @Via header after @CSeq in the * message, the fragment representing it would be after the @CSeq header in @@ -238,7 +238,7 @@ /**@ingroup sip_headers * @defgroup sip_header_x SIP Header X - Conventions - * + * * For a SIP header X, there are types, functions, macros and global data * declared in and as * follows: @@ -247,13 +247,13 @@ * - sip_X_init() initializes a dynamic instance of #sip_X_t, * - sip_is_X() tests if header object is instance of header X, * - sip_X_make() creates a header X object by decoding given string, - * - sip_X_format() creates a header X object by decoding given + * - sip_X_format() creates a header X object by decoding given * printf() list, - * - sip_X_dup() duplicates (deeply copies) the header X, + * - sip_X_dup() duplicates (deeply copies) the header X, * - sip_X_copy() copies the header X, - * - #msg_hclass_t #sip_X_class[] contains the @em header @em class + * - #msg_hclass_t #sip_X_class[] contains the @em header @em class * for header X. - * + * * All header structures contain the common part, a #sip_common_t structure * (@a X_common[]), a link to the next header in list (@a X_next), and * various fields describing the header value (in this case, @a X_value). @@ -264,7 +264,7 @@ * struct msg_common_s { * msg_header_t *h_succ; // Pointer to succeeding fragment * msg_header_t **h_prev; // Pointer to preceeding fragment - * msg_hclass_t *h_class; // Header class + * msg_hclass_t *h_class; // Header class * void const *h_data; // Encoded data * usize_t h_len; // Encoding length (including CRLF) * } X_common[1]; @@ -295,7 +295,7 @@ * parameters. The content of parameters is not parsed, they are just * separated from each other and then stored in an dynamically allocated * array of string pointers. Pointer to the array is stored to @a X_params. - * + * * For more complex header structures, see #sip_contact_t or #sip_rack_t. * * @{ @@ -318,18 +318,18 @@ /**@var msg_hclass_t sip_X_class[]; * @brief Header class for SIP X. - * + * * The header class sip_X_class defines how a SIP * X is parsed and printed. It also * contains methods used by SIP parser and other functions * to manipulate the sip_X_t header structure. - * + * */ SIP_DLL extern msg_hclass_t sip_X_class[]; -enum { +enum { /** Hash of X. @internal */ - sip_X_hash = hash + sip_X_hash = hash }; /** Parse a X. @internal */ @@ -339,28 +339,28 @@ msg_print_f sip_X_e; /**Initializer for structure sip_X_t. - * + * * A static sip_X_t structure must be initialized * with the SIP_X_INIT() macro. For instance, - * @code - * + * @code + * * sip_X_t sip_X = SIP_X_INIT; - * + * * @endcode * @HI */ #define SIP_X_INIT() SIP_HDR_INIT(X) /**Initialize a structure sip_X_t. - * + * * An sip_X_t structure can be initialized with the * sip_X_init() function/macro. For instance, * @code - * + * * sip_X_t sip_X; - * + * * sip_X_init(&sip_X); - * + * * @endcode * @HI */ @@ -375,13 +375,13 @@ #endif /**Test if header object is instance of sip_X_t. - * + * * The function sip_is_X() returns true (nonzero) if * the header class is an instance of X * object and false (zero) otherwise. - * + * * @param header pointer to the header structure to be tested - * + * * @return * The function sip_is_X() returns true (nonzero) if * the header object is an instance of header X and @@ -399,27 +399,27 @@ #define sip_X_p(h) sip_is_X((h)) /**Duplicate (deep copy) @c sip_X_t. - * + * * The function sip_X_dup() duplicates a header * structure @a hdr. If the header structure @a hdr * contains a reference (@c hdr->x_next) to a list of * headers, all the headers in the list are duplicated, too. - * + * * @param home memory home used to allocate new structure * @param hdr header structure to be duplicated - * + * * When duplicating, all parameter lists and non-constant * strings attached to the header are copied, too. The * function uses given memory @a home to allocate all the * memory areas used to copy the header. - * + * * @par Example * @code - * + * * X = sip_X_dup(home, sip->sip_X); - * + * * @endcode - * + * * @return * The function sip_X_dup() returns a pointer to the * newly duplicated sip_X_t header structure, or NULL @@ -428,29 +428,29 @@ sip_X_t *sip_X_dup(su_home_t *home, sip_X_t const *hdr); /**Copy a sip_X_t header structure. - * + * * The function sip_X_copy() copies a header structure @a * hdr. If the header structure @a hdr contains a reference (@c * hdr->h_next) to a list of headers, all the headers in that * list are copied, too. The function uses given memory @a home * to allocate all the memory areas used to copy the header * structure @a hdr. - * + * * @param home memory home used to allocate new structure * @param hdr pointer to the header structure to be duplicated - * + * * When copying, only the header structure and parameter lists * attached to it are duplicated. The new header structure * retains all the references to the strings within the old @a * header, including the encoding of the old header, if present. - * + * * @par Example * @code - * + * * X = sip_X_copy(home, sip->sip_X); - * + * * @endcode - * + * * @return * The function sip_X_copy() returns a pointer to * newly copied header structure, or NULL upon an error. @@ -458,18 +458,18 @@ sip_X_t *sip_X_copy(su_home_t *home, sip_X_t const *hdr); /**Make a header structure sip_X_t. - * + * * The function sip_X_make() makes a new * sip_X_t header structure. It allocates a new * header structure, and decodes the string @a s as the * value of the structure. - * + * * @param home memory home used to allocate new header structure. * @param s string to be decoded as value of the new header structure - * + * * @note This function is usually implemented as a macro calling * sip_header_make(). - * + * * @return * The function sip_X_make() returns a pointer to * newly maked sip_X_t header structure, or NULL upon @@ -485,25 +485,25 @@ #endif /**Make a X from formatting result. - * + * * The function sip_X_format() makes a new * X object using formatting result as its * value. The function first prints the arguments according to * the format @a fmt specified. Then it allocates a new header * structure, and uses the formatting result as the header * value. - * + * * @param home memory home used to allocate new header structure. * @param fmt string used as a printf()-style format * @param ... argument list for format - * + * * @note This function is usually implemented as a macro calling * msg_header_format(). - * + * * @return * The function sip_X_format() returns a pointer to newly * makes header structure, or NULL upon an error. - * + * * @HIDE */ #if SU_HAVE_INLINE @@ -517,11 +517,11 @@ { sip_header_t *h; va_list ap; - + va_start(ap, fmt); h = sip_header_vformat(home, sip_X_class, fmt, ap); va_end(ap); - + return h->sh_X; } #endif @@ -534,7 +534,7 @@ * leading and trailing whitespace has been removed from the string @a s. * * @param home memory home used to allocate new header structure. - * @param h sip_X_t header structure + * @param h sip_X_t header structure * @param s string to be decoded * @param bsiz length of string @a s * @@ -555,15 +555,15 @@ * @param bsiz size of the encoding buffer * @param h header to be encoded. * @param flags flags controlling the encoding - * - * @note + * + * @note * The encoding buffer size @b must be @b bigger than, not equal to, * the actual encoding result. * * @return * The function sip_X_e() returns the number of characters required for the * encoding. - * + * */ int sip_X_e(char buf[], int bsiz, sip_header_t const *h, int flags); @@ -577,7 +577,7 @@ /**@defgroup sip_tag SIP Tags * - * SIP headers in tag item lists and tagged argument lists. + * SIP headers in tag item lists and tagged argument lists. * * The include file defines tags and tag items for including SIP * headers in tag item lists or tagged argument lists. For each header, @@ -592,7 +592,7 @@ * @code * sip_payload_t *payload; * ... - * sip_add_tl(msg, sip, + * sip_add_tl(msg, sip, * SIPTAG_CONTENT_TYPE_STR("text/plain"), * SIPTAG_USER_AGENT(agent->user_agent), * SIPTAG_PAYLOAD(payload), Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip.doxyaliases ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip.doxyaliases (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip.doxyaliases Tue Dec 16 13:05:22 2008 @@ -69,6 +69,6 @@ "ReplyTo=@ref sip_reply_to \"Reply-To\"" \ "SuppressBodyIfMatch=@ref sip_suppress_body_if_match \"Suppress-Body-If-Match\"" \ "SuppressNotifyIfMatch=@ref sip_suppress_notify_if_match \"Suppress-Notify-If-Match\"" \ - "RemotePartyID=@ref sip_remote_party_id \"Remote-Party-ID\"" \ - "PAssertedIdentity=@ref sip_p_asserted_identity \"P-Asserted-Identity\"" \ - "PPreferredIdentity=@ref sip_p_preferred_identity \"P-Preferred-Identity\"" \ + "RemotePartyID=@ref sip_remote_party_id \"Remote-Party-ID\"" \ + "PAssertedIdentity=@ref sip_p_asserted_identity \"P-Asserted-Identity\"" \ + "PPreferredIdentity=@ref sip_p_preferred_identity \"P-Preferred-Identity\"" \ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_bad_mask ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_bad_mask (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_bad_mask Tue Dec 16 13:05:22 2008 @@ -15,7 +15,7 @@ # # -# When updating this file, please update +# When updating this file, please update # NTATAG_BAD_RESP_MASK()/NTATAG_BAD_REQ_MASK() documentation, too. # @@ -55,7 +55,7 @@ # # Headers that must be valid in UA, proxy or registrar -# +# Contact = sip_mask_ua | sip_mask_proxy | sip_mask_registrar Require = sip_mask_ua | sip_mask_registrar | sip_mask_timer Record-Route = sip_mask_ua | sip_mask_proxy Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_basic.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_basic.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_basic.c Tue Dec 16 13:05:22 2008 @@ -64,7 +64,7 @@ * * The request line is first line in a SIP request message. Its syntax defined * in @RFC3261 as follows: - * + * * @code * Request-Line = Method SP Request-URI SP SIP-Version CRLF * Request-URI = SIP-URI / SIPS-URI / absoluteURI @@ -117,7 +117,7 @@ static msg_dup_f sip_request_dup_one; #define sip_request_update NULL -msg_hclass_t sip_request_class[] = +msg_hclass_t sip_request_class[] = SIP_HEADER_CLASS(request, NULL, "", rq_common, single_critical, request); /**Parse @ref sip_request "request line" from a a SIP message. */ @@ -181,7 +181,7 @@ /**@ingroup sip_request * - * Create a @ref sip_request "request line" object. + * Create a @ref sip_request "request line" object. * * Create a request line object with * method enum @a method, method name @a name, request URI @a uri, and @@ -201,7 +201,7 @@ * rq = sip_request_create(home, SIP_METHOD_OPTIONS, requestURI, NULL); * @endcode - * @note + * @note * If you provide an non-NULL @a version string, it is not copied. The * version string @b MUST remain constant. */ @@ -210,7 +210,7 @@ url_string_t const *uri, char const *version) { - size_t xtra; + size_t xtra; sip_request_t *rq; if (method) @@ -231,7 +231,7 @@ rq->rq_method = method; rq->rq_method_name = name; - if (!method) + if (!method) MSG_STRING_DUP(b, rq->rq_method_name, name); URL_DUP(b, end, rq->rq_url, uri->us_url); @@ -249,7 +249,7 @@ * * The status line is first line in a response message. It is defined in * @RFC3261 as follows: - * + * * @code * Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF * Status-Code = Informational @@ -270,7 +270,7 @@ /**@ingroup sip_status * @typedef typedef struct sip_status_s sip_status_t; * - * The structure #sip_status_t contains representation of SIP + * The structure #sip_status_t contains representation of SIP * @ref sip_status "status line". * * The #sip_status_t is defined as follows: @@ -292,7 +292,7 @@ #define sip_status_insert msg_status_insert #define sip_status_update NULL -msg_hclass_t sip_status_class[] = +msg_hclass_t sip_status_class[] = SIP_HEADER_CLASS(status, NULL, "", st_common, single_critical, status); /** Parse status line */ @@ -366,7 +366,7 @@ * @param phrase status phrase (may be NULL) * @param version version string (defaults to "SIP/2.0" if NULL) * - * @note + * @note * If you provide an non-NULL @a version string, it is not copied. The * string @b MUST remain constant. * @@ -426,29 +426,29 @@ #define sip_payload_d msg_payload_d #define sip_payload_e msg_payload_e -#define sip_payload_dup_xtra msg_payload_dup_xtra +#define sip_payload_dup_xtra msg_payload_dup_xtra #define sip_payload_dup_one msg_payload_dup_one #define sip_payload_update NULL -msg_hclass_t sip_payload_class[] = +msg_hclass_t sip_payload_class[] = SIP_HEADER_CLASS(payload, NULL, "", pl_common, single, payload); /**@ingroup sip_payload * - * Create a @ref sip_payload "SIP payload" structure. + * Create a @ref sip_payload "SIP payload" structure. * * Create a new SIP payload structure. it * copies the given data to the the payload data, and NUL terminates it (it * allocates one extra byte for NUL). If a NULL pointer is given as @a data, * sip_payload_create() allocates and zeroes a data buffer of @a len bytes. * - * @param home memory home - * @param data payload data + * @param home memory home + * @param data payload data * @param len payload length * * @return A pointer to newly created * payload structure, if successful, and NULL upon an error. - */ + */ sip_payload_t *sip_payload_create(su_home_t *home, void const *data, isize_t len) { msg_hclass_t *hc = sip_payload_class; @@ -504,11 +504,11 @@ #define sip_separator_e msg_separator_e #define sip_separator_insert msg_separator_insert -msg_hclass_t sip_separator_class[] = +msg_hclass_t sip_separator_class[] = SIP_HEADER_CLASS(separator, NULL, "", sep_common, single, any); /**@ingroup sip_separator - * + * * Create a @ref sip_separator "SIP separator line" structure. */ sip_separator_t *sip_separator_create(su_home_t *home) @@ -529,7 +529,7 @@ * The unknown headers are handled with #sip_unknown_t structure. The * unknown header name is stored in @a un_name field and the header field * following the colon is stored in @a un_value field. - * + * * @note It is possible to speed up parsing process by creating a parser * which does understand only a minimum number of headers. If such a parser * is used, some well-known headers are regarded as unknown and put into @@ -544,19 +544,19 @@ * The #sip_unknown_t is defined as follows: * @code * typedef struct msg_unknown_s { - * msg_common_t un_common[1]; // Common fragment info - * msg_unknown_t *un_next; // Link to next unknown header - * char const *un_name; // Header name - * char const *un_value; // Header field value + * msg_common_t un_common[1]; // Common fragment info + * msg_unknown_t *un_next; // Link to next unknown header + * char const *un_name; // Header name + * char const *un_value; // Header field value * } sip_unknown_t; * @endcode */ -#define sip_unknown_dup_xtra msg_unknown_dup_xtra +#define sip_unknown_dup_xtra msg_unknown_dup_xtra #define sip_unknown_dup_one msg_unknown_dup_one #define sip_unknown_update NULL -msg_hclass_t sip_unknown_class[] = +msg_hclass_t sip_unknown_class[] = SIP_HEADER_CLASS(unknown, "", "", un_common, append, unknown); issize_t sip_unknown_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -574,7 +574,7 @@ /**@SIP_HEADER sip_error Erroneous Headers * * The erroneous headers are stored in #sip_error_t structure. - * + * * @note Other headers (like duplicate @ContentLength headers) may be put * into the list of erroneous headers (@c sip->sip_error). If the list of * erroneous headers is processed, the header type must be validated first @@ -588,8 +588,8 @@ * The #sip_error_t is defined as follows: * @code * typedef struct msg_error_s { - * msg_common_t er_common[1]; // Common fragment info - * msg_error_t *er_next; // Link to next header + * msg_common_t er_common[1]; // Common fragment info + * msg_error_t *er_next; // Link to next header * char const *er_name; // Name of bad header (if any) * } sip_error_t; * @endcode @@ -611,7 +611,7 @@ /* ====================================================================== */ /* - * addr = ("To" | "t" | "From" | "f") ":" + * addr = ("To" | "t" | "From" | "f") ":" * ( name-addr | addr-spec ) *( ";" addr-params ) * name-addr = [ display-name ] "<" addr-spec ">" * addr-spec = SIP-URL | URI @@ -631,7 +631,7 @@ * @param inout_s pointer to pointer to string to be parsed * @param return_display value-result parameter for @e display-name * @param return_url value-result parameter for @e addr-spec - * @param return_params value-result paramater for @e parameters + * @param return_params value-result paramater for @e parameters * @param return_comment value-result parameter for @e comment * * @note After succesful call to the function @c sip_name_addr_d(), *ss @@ -658,7 +658,7 @@ if (*s == '\0') /* Empty string */ return -1; - + if (return_display && *s == '"') { /* Quoted string */ if (msg_quoted_d(&s, &display) == -1) @@ -669,24 +669,24 @@ return -1; s++[0] = '\0'; /* NUL terminate quoted string... */ n = strcspn(s, ">"); - addr_spec = s; s += n; + addr_spec = s; s += n; if (*s) *s++ = '\0'; else return -1; - } + } else { - if (return_display) + if (return_display) n = span_token_lws(s); else n = 0; if (s[n] == '<') { /* OK, we got a display name */ - display = s; s += n + 1; + display = s; s += n + 1; /* NUL terminate display name */ while (n > 0 && IS_LWS(display[n - 1])) n--; if (n > 0) display[n] = '\0'; - else + else display = ""; n = strcspn(s, ">"); @@ -696,7 +696,7 @@ /* addr-spec only */ addr_spec = s; /**@sa - * Discussion about comma, semicolon and question mark in + * Discussion about comma, semicolon and question mark in * @RFC3261 section 20.10. */ if (return_params) @@ -714,8 +714,8 @@ if (return_display) *return_display = display; - - /* Now, url may still not be NUL terminated, e.g., if + + /* Now, url may still not be NUL terminated, e.g., if * it is like "Contact: url:foo,sip:bar,sip:zunk" */ c = *s; *s = '\0'; /* terminate temporarily */ @@ -753,7 +753,7 @@ * @param params pointer to parameter list (may be NULL) * @param comment comment string encoded after others (may be NULL) * - * @return + * @return * Returns number of characters in encoding, excluding the * final NUL. * @@ -761,9 +761,9 @@ * The encoding result may be incomplete if the buffer size is not large * enough to store the whole encoding result. */ -issize_t sip_name_addr_e(char b[], isize_t bsiz, - int flags, - char const *display, +issize_t sip_name_addr_e(char b[], isize_t bsiz, + int flags, + char const *display, int brackets, url_t const url[], msg_param_t const params[], char const *comment) @@ -772,8 +772,8 @@ char const *u; char *b0 = b, *end = b + bsiz; - brackets = brackets || display || - (url && (url->url_params || + brackets = brackets || display || + (url && (url->url_params || url->url_headers || ((u = url->url_user) && u[strcspn(u, ";,?")]) || ((u = url->url_password) && u[strcspn(u, ",")]))); @@ -798,7 +798,7 @@ } MSG_TERM_E(b, end); - + return b - b0; } @@ -867,12 +867,12 @@ { sip_addr_t *a = (sip_addr_t *)h; char const *comment = NULL; - if (sip_name_addr_d(home, - &s, - &a->a_display, - a->a_url, + if (sip_name_addr_d(home, + &s, + &a->a_display, + a->a_url, &a->a_params, - &comment) == -1 + &comment) == -1 || *s /* XXX - something extra? */) return -1; @@ -887,7 +887,7 @@ return sip_name_addr_e(b, bsiz, flags, - a->a_display, + a->a_display, MSG_IS_CANONIC(flags), a->a_url, a->a_params, NULL); @@ -909,7 +909,7 @@ { sip_addr_t const *a = (sip_addr_t const *)h; - return sip_name_addr_xtra(a->a_display, + return sip_name_addr_xtra(a->a_display, a->a_url, a->a_params, offset); @@ -955,7 +955,7 @@ sip_header_t *h; n = url_xtra(us->us_url); - h = sip_header_alloc(home, hc, n); + h = sip_header_alloc(home, hc, n); if (h) { sip_addr_t *a = (sip_to_t *)h; @@ -1009,7 +1009,7 @@ * The @b Call-ID header uniquely identifies a particular invitation or all * registrations of a particular client. It is defined in @RFC3261 as * follows: - * + * * @code * Call-ID = ( "Call-ID" / "i" ) HCOLON callid * callid = word [ "@" word ] @@ -1042,16 +1042,16 @@ static msg_dup_f sip_call_id_dup_one; #define sip_call_id_update NULL -msg_hclass_t sip_call_id_class[] = +msg_hclass_t sip_call_id_class[] = SIP_HEADER_CLASS(call_id, "Call-ID", "i", i_common, single, call_id); issize_t sip_call_id_d(su_home_t *home, sip_header_t *h, - char *s, + char *s, isize_t slen) { sip_call_id_t *i = (sip_call_id_t *)h; - + i->i_id = s; /* XXX - why not sip_word_at_word_d(&s); */ i->i_hash = msg_hash_string(s); @@ -1106,7 +1106,7 @@ /**@ingroup sip_call_id * - * Create a @CallID header object. + * Create a @CallID header object. * * Create a Call-ID header object with a new unique value. It uses * su_guid_generate() function to generate the value. If the local host name @@ -1127,7 +1127,7 @@ size_t xtra = su_guid_strlen + 1 + (domain ? strlen(domain) + 1 : 0); i = (sip_call_id_t *)sip_header_alloc(home, sip_call_id_class, xtra); - + if (i) { char *b; su_guid_t guid[1]; @@ -1158,11 +1158,11 @@ /* ====================================================================== */ -/**@SIP_HEADER sip_cseq CSeq Header +/**@SIP_HEADER sip_cseq CSeq Header * * The CSeq header (command sequence) uniquely identifies transactions * within a dialog. It is defined in @RFC3261 as follows: - * + * * @code * CSeq = "CSeq" HCOLON 1*DIGIT LWS Method * Method = INVITEm / ACKm / OPTIONSm / BYEm @@ -1195,7 +1195,7 @@ static msg_dup_f sip_cseq_dup_one; #define sip_cseq_update NULL -msg_hclass_t sip_cseq_class[] = +msg_hclass_t sip_cseq_class[] = SIP_HEADER_CLASS(cseq, "CSeq", "", cs_common, single, cseq); issize_t sip_cseq_d(su_home_t *home, @@ -1253,9 +1253,9 @@ return b; } -/**@ingroup sip_cseq +/**@ingroup sip_cseq * - *?Create a @CSeq header object. + *?Create a @CSeq header object. * * Create a @CSeq header object with the * sequence number @a seq, method enum @a method and method name @a @@ -1295,7 +1295,7 @@ xtra = (method ? 0 : (strlen(method_name) + 1)); cs = (sip_cseq_t *)sip_header_alloc(home, sip_cseq_class, xtra); - + if (cs) { cs->cs_seq = seq; cs->cs_method = method; @@ -1312,7 +1312,7 @@ * * The Contact header contain a list of URLs used to redirect future * requests. Its syntax is defined in @RFC3261 as follows: - * + * * @code * Contact = ("Contact" / "m" ) HCOLON * ( STAR / (contact-param *(COMMA contact-param))) @@ -1351,10 +1351,10 @@ * char const *m_comment; // Comment * * char const *m_q; // Priority - * char const *m_expires; // Expiration time + * char const *m_expires; // Expiration time * } sip_contact_t; * @endcode - * + * * @note The field @ref sip_contact_s::m_comment "m_comment" is * deprecated: it is parsed but not included in encoding. */ @@ -1398,7 +1398,7 @@ while (*s == ',') /* Ignore empty entries (comma-whitespace) */ *s = '\0', s += span_lws(s + 1) + 1; - if (sip_name_addr_d(home, &s, &m->m_display, m->m_url, + if (sip_name_addr_d(home, &s, &m->m_display, m->m_url, &m->m_params, &m->m_comment) == -1) return -1; @@ -1414,7 +1414,7 @@ assert(sip_is_contact(h)); return sip_name_addr_e(b, bsiz, flags, - m->m_display, always_lt_gt, m->m_url, + m->m_display, always_lt_gt, m->m_url, m->m_params, NULL /* m->m_comment */); } @@ -1446,7 +1446,7 @@ } /** Update parameter in #sip_contact_t */ -static int sip_contact_update(msg_common_t *h, +static int sip_contact_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -1460,7 +1460,7 @@ /* XXX - check for invalid value? */ m->m_q = value; } - else if (namelen == strlen("expires") && + else if (namelen == strlen("expires") && !strncasecmp(name, "expires", namelen)) { m->m_expires = value; } @@ -1468,7 +1468,7 @@ return 0; } -/**@ingroup sip_contact +/**@ingroup sip_contact * * Add a parameter to a @Contact header object * @@ -1524,8 +1524,8 @@ * @endcode */ -msg_hclass_t sip_content_length_class[] = -SIP_HEADER_CLASS(content_length, "Content-Length", "l", l_common, +msg_hclass_t sip_content_length_class[] = +SIP_HEADER_CLASS(content_length, "Content-Length", "l", l_common, single_critical, any); issize_t sip_content_length_d(su_home_t *home, @@ -1547,9 +1547,9 @@ return snprintf(b, bsiz, "%lu", (unsigned long)l->l_length); } -/**@ingroup sip_content_length +/**@ingroup sip_content_length * - *?Create a @ContentLength header object. + *?Create a @ContentLength header object. * * Create a @ContentLength * header object with the value @a n. The memory for the header is @@ -1566,7 +1566,7 @@ { sip_content_length_t *l = (sip_content_length_t *) sip_header_alloc(home, sip_content_length_class, 0); - + if (l) l->l_length = n; @@ -1580,7 +1580,7 @@ * The Date header field reflects the time when the request or response was * first sent. Its syntax is defined in @RFC3261 and @RFC2616 section 14.18 as * follows: - * + * * @code * Date = "Date" HCOLON SIP-date * SIP-date = rfc1123-date @@ -1614,7 +1614,7 @@ * @endcode */ -msg_hclass_t sip_date_class[] = +msg_hclass_t sip_date_class[] = SIP_HEADER_CLASS(date, "Date", "", d_common, single, any); issize_t sip_date_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -1635,7 +1635,7 @@ } /**@ingroup sip_date - * @brief Create an @Date header object. + * @brief Create an @Date header object. * * Create a @Date header object with * the date @a date. If @date is 0, current time (as returned by sip_now()) @@ -1651,7 +1651,7 @@ sip_date_t *sip_date_create(su_home_t *home, sip_time_t date) { sip_date_t *d = (sip_date_t *)sip_header_alloc(home, sip_date_class, 0); - + if (d) { if (date == 0) date = sip_now(); @@ -1667,11 +1667,11 @@ * * The Expires header field gives the date and time after which the message * content expires. Its syntax is defined in @RFC3261 as follows: - * + * * @code * Expires = "Expires" HCOLON delta-seconds * @endcode - * + * * Note that the first SIP revision (@RFC2543) also allowed absolute time in * Expires. * @@ -1695,15 +1695,15 @@ * @endcode */ -msg_hclass_t sip_expires_class[] = +msg_hclass_t sip_expires_class[] = SIP_HEADER_CLASS(expires, "Expires", "", ex_common, single, any); issize_t sip_expires_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) { sip_expires_t *expires = (sip_expires_t *)h; - if (msg_date_delta_d((char const **)&s, - &expires->ex_date, + if (msg_date_delta_d((char const **)&s, + &expires->ex_date, &expires->ex_delta) < 0 || *s) return -1; else @@ -1721,7 +1721,7 @@ } /**@ingroup sip_expires - * @brief Create an @Expires header object. + * @brief Create an @Expires header object. * * Create an @Expires header object with the expiration time @a delta. * @@ -1749,7 +1749,7 @@ * * The From header indicates the initiator of the request. It is defined in * @RFC3261 as follows: - * + * * @code * From = ( "From" / "f" ) HCOLON from-spec * from-spec = ( name-addr / addr-spec ) @@ -1776,13 +1776,13 @@ * url_t a_url[1]; // URL * msg_param_t const *a_params; // List of from-param * char const *a_comment; // Comment - * char const *a_tag; // Tag parameter + * char const *a_tag; // Tag parameter * } sip_from_t; * @endcode * */ -msg_hclass_t sip_from_class[] = +msg_hclass_t sip_from_class[] = SIP_HEADER_CLASS(from, "From", "f", a_params, single, addr); issize_t sip_from_d(su_home_t *home, @@ -1844,10 +1844,10 @@ * be provided either as a single token ("deadbeer") or as in parameter form * ("tag=deadbeer"). In both cases the tag is duplicated using the memory * home @a home. - * - * @param home memory home used to allocate new tag + * + * @param home memory home used to allocate new tag * @param from @From header to modify - * @param tag tag token or parameter to be added + * @param tag tag token or parameter to be added * * @retval 0 when successful * @retval -1 upon an error. @@ -1870,7 +1870,7 @@ * The Max-Forwards header is used to limit the number of proxies or * gateways that can forward the request. The Max-Forwards syntax is * defined in @RFC3261 as follows: - * + * * @code * Max-Forwards = "Max-Forwards" HCOLON 1*DIGIT * @endcode @@ -1895,8 +1895,8 @@ * @endcode */ -msg_hclass_t sip_max_forwards_class[] = -SIP_HEADER_CLASS(max_forwards, "Max-Forwards", "", mf_common, +msg_hclass_t sip_max_forwards_class[] = +SIP_HEADER_CLASS(max_forwards, "Max-Forwards", "", mf_common, single, any); issize_t sip_max_forwards_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -1917,7 +1917,7 @@ * The Min-Expires header is used to limit the number of proxies or * gateways that can forward the request. The Min-Expires syntax is * defined in @RFC3261 as follows: - * + * * @code * Min-Expires = "Min-Expires" HCOLON delta-seconds * @endcode @@ -1941,8 +1941,8 @@ * @endcode */ -msg_hclass_t sip_min_expires_class[] = -SIP_HEADER_CLASS(min_expires, "Min-Expires", "", me_common, +msg_hclass_t sip_min_expires_class[] = +SIP_HEADER_CLASS(min_expires, "Min-Expires", "", me_common, single, any); issize_t sip_min_expires_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -1960,12 +1960,12 @@ /* ====================================================================== */ /**@SIP_HEADER sip_retry_after Retry-After Header - * + * * The Retry-After response-header field @RFC3261 section 20.33 can be used to * indicate how long the service is expected to be unavailable or when the * called party anticipates being available again. Its syntax is defined in * @RFC3261 as follows: - * + * * @code * Retry-After = "Retry-After" HCOLON delta-seconds * [ comment ] *( SEMI retry-param ) @@ -1977,9 +1977,9 @@ */ /**@ingroup sip_retry_after - * @typedef struct sip_retry_after_s sip_retry_after_t; + * @typedef struct sip_retry_after_s sip_retry_after_t; * - * The structure #sip_retry_after_t contains representation of an + * The structure #sip_retry_after_t contains representation of an * @RetryAfter header. * * The #sip_retry_after_t is defined as follows: @@ -1999,7 +1999,7 @@ static msg_dup_f sip_retry_after_dup_one; static msg_update_f sip_retry_after_update; -msg_hclass_t sip_retry_after_class[] = +msg_hclass_t sip_retry_after_class[] = SIP_HEADER_CLASS(retry_after, "Retry-After", "", af_params, single, retry_after); @@ -2031,7 +2031,7 @@ b += snprintf(b, bsiz, "%lu", af->af_delta); if (af->af_comment) { - if (!compact) + if (!compact) MSG_CHAR_E(b, end, ' '); MSG_CHAR_E(b, end, '('); MSG_STRING_E(b, end, af->af_comment); @@ -2042,9 +2042,9 @@ if (af->af_params) MSG_PARAMS_E(b, end, af->af_params, f); - + MSG_TERM_E(b, end); - + return b - b0; } @@ -2098,7 +2098,7 @@ /**Parse a @Route or a @RecordRoute header. * - * @retval 0 when successful, + * @retval 0 when successful, * @retval -1 upon an error. */ issize_t sip_any_route_d(su_home_t *home, @@ -2113,7 +2113,7 @@ while (*s == ',') /* Ignore empty entries (comma-whitespace) */ *s = '\0', s += span_lws(s + 1) + 1; - if (sip_name_addr_d(home, &s, &r->r_display, + if (sip_name_addr_d(home, &s, &r->r_display, r->r_url, &r->r_params, NULL) < 0) return -1; @@ -2124,14 +2124,14 @@ { sip_route_t const *r = (sip_route_t *)h; - return sip_name_addr_e(b, bsiz, flags, + return sip_name_addr_e(b, bsiz, flags, r->r_display, 1, r->r_url, r->r_params, NULL); } isize_t sip_any_route_dup_xtra(sip_header_t const *h, isize_t offset) { sip_route_t const *r = (sip_route_t *)h; - return sip_name_addr_xtra(r->r_display, + return sip_name_addr_xtra(r->r_display, r->r_url, r->r_params, offset); @@ -2152,7 +2152,7 @@ #define sip_any_route_update NULL -/** Create a route. +/** Create a route. * * Create a route or record-route entry * from two URLs; first one provides the URL, second maddr parameter and @@ -2170,8 +2170,8 @@ { sip_header_t *h; sip_route_t *rr; - url_t url[1]; - size_t xtra, n, n_url, n_params, n_addr; + url_t url[1]; + size_t xtra, n, n_url, n_params, n_addr; char *b, *param; *url = *rq_url; @@ -2183,10 +2183,10 @@ n_params = maddr && maddr->url_params ? strlen(maddr->url_params) : 0; - if (maddr && (!maddr->url_params || + if (maddr && (!maddr->url_params || !url_param(maddr->url_params, "maddr", NULL, 0))) n_addr = (n_params != 0) + strlen("maddr=") + strlen(maddr->url_host); - else + else n_addr = 0; xtra = n_url + n_params + n_addr + (n_params || n_addr); @@ -2220,9 +2220,9 @@ /**@SIP_HEADER sip_route Route Header * - * The Route headers is used to store the route set of a transaction. + * The Route headers is used to store the route set of a transaction. * The Route header is defined in @RFC3261 as follows: - * + * * @code * Route = "Route" HCOLON route-param *(COMMA route-param) * route-param = name-addr *( SEMI rr-param ) @@ -2248,7 +2248,7 @@ * @endcode */ -msg_hclass_t sip_route_class[] = +msg_hclass_t sip_route_class[] = SIP_HEADER_CLASS(route, "Route", "", r_params, append, any_route); issize_t sip_route_d(su_home_t *home, @@ -2265,7 +2265,7 @@ return sip_any_route_e(b, bsiz, h, flags); } -/**@ingroup sip_route +/**@ingroup sip_route * @brief Create a @Route header object. * * Creates a route entry from two URLs; first one provides the URL, second @@ -2279,11 +2279,11 @@ * Returns a pointer to newly created @Route header object when successful, * or NULL upon an error. */ -sip_route_t *sip_route_create(su_home_t *home, - url_t const *url, +sip_route_t *sip_route_create(su_home_t *home, + url_t const *url, url_t const *maddr) { - return sip_any_route_create(home, sip_route_class, url, maddr); + return sip_any_route_create(home, sip_route_class, url, maddr); } /* ====================================================================== */ @@ -2292,8 +2292,8 @@ * * The Record-Route headers are used to establish a route for transactions * belonging to a session. The Record-Route header is defined in @RFC3261 - * as follows: - * + * as follows: + * * @code * Record-Route = "Record-Route" HCOLON rec-route *(COMMA rec-route) * rec-route = name-addr *( SEMI rr-param ) @@ -2321,7 +2321,7 @@ * @endcode */ -msg_hclass_t sip_record_route_class[] = +msg_hclass_t sip_record_route_class[] = SIP_HEADER_CLASS(record_route, "Record-Route", "", r_params, prepend, any_route); @@ -2339,9 +2339,9 @@ return sip_any_route_e(b, bsiz, h, flags); } -/** @ingroup sip_record_route +/** @ingroup sip_record_route * - * Create a record-route. + * Create a record-route. * * Create a record-route entry from two URLs; first one provides the URL, * second maddr parameter and port. @@ -2367,7 +2367,7 @@ * * The To header field specifies the "logical" recipient of the * request. It is defined in @RFC3261 as follows: - * + * * @code * To = ( "To" / "t" ) HCOLON ( name-addr * / addr-spec ) *( SEMI to-param ) @@ -2391,13 +2391,13 @@ * url_t a_url[1]; // URL * msg_param_t const *a_params; // List of to-params * char const *a_comment; // Comment - * char const *a_tag; // Tag parameter + * char const *a_tag; // Tag parameter * } sip_to_t; * @endcode * */ -msg_hclass_t sip_to_class[] = +msg_hclass_t sip_to_class[] = SIP_HEADER_CLASS(to, "To", "t", a_params, single, addr); issize_t sip_to_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -2458,7 +2458,7 @@ * headers can be used to prevent request looping and ensure replies take * the same path as the requests. The Via syntax is defined in @RFC3261 * as follows: - * + * * @code * Via = ( "Via" / "v" ) HCOLON via-parm *(COMMA via-parm) * via-parm = sent-protocol LWS sent-by *( SEMI via-params ) @@ -2514,7 +2514,7 @@ * char const *v_port; // Port number * msg_param_t const *v_params; // List of via-params * char const *v_comment; // Comment - * + * * char const *v_ttl; // "ttl" parameter * char const *v_maddr; // "maddr" parameter * char const *v_received; // "received" parameter @@ -2529,7 +2529,7 @@ static msg_dup_f sip_via_dup_one; static msg_update_f sip_via_update; -msg_hclass_t sip_via_class[] = +msg_hclass_t sip_via_class[] = SIP_HEADER_CLASS(via, "Via", "v", v_params, prepend, via); issize_t sip_via_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -2570,14 +2570,14 @@ MSG_CHAR_E(b, end, ' '); MSG_STRING_E(b, end, v->v_host); if (v->v_port) { - MSG_CHAR_E(b, end, ':'); + MSG_CHAR_E(b, end, ':'); MSG_STRING_E(b, end, v->v_port); } MSG_PARAMS_E(b, end, v->v_params, flags); #if 0 /* Comment is deprecated in @RFC3265 - accept it, but do not send */ if (v->v_comment) { - if (!MSG_IS_COMPACT(flags)) + if (!MSG_IS_COMPACT(flags)) MSG_CHAR_E(b, end, ' '); MSG_CHAR_E(b, end, '('); MSG_STRING_E(b, end, v->v_comment); @@ -2585,7 +2585,7 @@ } #endif MSG_TERM_E(b, end); - + return b - b0; } @@ -2602,7 +2602,7 @@ return offset; } -/** Duplicate one #sip_via_t object */ +/** Duplicate one #sip_via_t object */ char *sip_via_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) { @@ -2621,7 +2621,7 @@ return b; } -static int sip_via_update(msg_common_t *h, +static int sip_via_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -2685,7 +2685,7 @@ /**@ingroup sip_via * - * Create a @Via object. + * Create a @Via object. * * Create a new @Via header object with * given parameters. If @a transport is NULL, the default transport @@ -2701,10 +2701,10 @@ * @return * A pointer to newly created * @Via header object when successful or NULL upon an error. - */ + */ sip_via_t *sip_via_create(su_home_t *home, char const *host, - char const *port, + char const *port, char const *transport, /* char const *params */ ...) @@ -2728,8 +2728,8 @@ char const *param; va_start(params, transport); - for (param = va_arg(params, char const *); - param; + for (param = va_arg(params, char const *); + param; param = va_arg(params, char const *)) { if ((param = su_strdup(home, param))) { if (msg_header_replace_param(home, v->v_common, param) < 0) @@ -2746,7 +2746,7 @@ /**@ingroup sip_via * * Get port number corresponding to a @Via line. - * + * * If @a using_rport is non-null, try rport. * If *using_rport is non-zero, try rport even if is not UDP. * If is UDP, set *using_rport to zero. @@ -2760,7 +2760,7 @@ char const *port; if (v->v_rport && !v->v_maddr /* multicast */) { - if (v->v_protocol == sip_transport_udp || + if (v->v_protocol == sip_transport_udp || strcasecmp(v->v_protocol, sip_transport_udp) == 0) port = v->v_rport, *using_rport = 0; else if (*using_rport) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_caller_prefs.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_caller_prefs.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_caller_prefs.c Tue Dec 16 13:05:22 2008 @@ -70,14 +70,14 @@ * @endcode * * - * The parsed Request-Disposition header + * The parsed Request-Disposition header * is stored in #sip_request_disposition_t structure. */ /**@ingroup sip_request_disposition * @typedef typedef struct sip_request_disposition_s sip_request_disposition_t; * - * The structure #sip_request_disposition_t contains representation of + * The structure #sip_request_disposition_t contains representation of * @RequestDisposition header. * * The #sip_request_disposition_t is defined as follows: Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_event.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_event.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_event.c Tue Dec 16 13:05:22 2008 @@ -56,7 +56,7 @@ * The Event header is used to indicate the which event or class of events * the message contains or subscribes. Its syntax is defined in @RFC3265 as * follows: - * + * * @code * Event = ( "Event" / "o" ) HCOLON event-type * *( SEMI event-param ) @@ -72,7 +72,7 @@ */ /**@ingroup sip_event - * @typedef struct sip_event_s sip_event_t; + * @typedef struct sip_event_s sip_event_t; * * The structure #sip_event_t contains representation of an @Event header. * @@ -93,7 +93,7 @@ static msg_dup_f sip_event_dup_one; static msg_update_f sip_event_update; -msg_hclass_t sip_event_class[] = +msg_hclass_t sip_event_class[] = SIP_HEADER_CLASS(event, "Event", "o", o_params, single, event); issize_t sip_event_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -134,7 +134,7 @@ return offset; } -/** Duplicate one #sip_event_t object */ +/** Duplicate one #sip_event_t object */ char *sip_event_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) { @@ -150,7 +150,7 @@ } /** Update parameters in @Event header. */ -static int sip_event_update(msg_common_t *h, +static int sip_event_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -173,9 +173,9 @@ * The Allow-Events header is used to indicate which events or classes of * events the notifier supports. Its syntax is defined in @RFC3265 as * follows: - * + * * @code - * Allow-Events = ( "Allow-Events" / "u" ) HCOLON event-type + * Allow-Events = ( "Allow-Events" / "u" ) HCOLON event-type * *(COMMA event-type) * @endcode * @@ -190,9 +190,9 @@ */ /**@ingroup sip_allow_events - * @typedef struct msg_list_s sip_allow_events_t; + * @typedef struct msg_list_s sip_allow_events_t; * - * The structure #sip_allow_events_t contains representation of an + * The structure #sip_allow_events_t contains representation of an * @AllowEvents header. * * The #sip_allow_events_t is defined as follows: @@ -206,7 +206,7 @@ * @endcode */ -msg_hclass_t sip_allow_events_class[] = +msg_hclass_t sip_allow_events_class[] = SIP_HEADER_CLASS_LIST(allow_events, "Allow-Events", "u", list); issize_t sip_allow_events_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -220,14 +220,14 @@ return msg_list_e(b, bsiz, h, f); } -/** Append an event to a @AllowEvents header. +/** Append an event to a @AllowEvents header. * * @note This function @b does @b duplicate @p event. * * @deprecated Use msg_header_replace_item() directly. */ -int sip_allow_events_add(su_home_t *home, - sip_allow_events_t *ae, +int sip_allow_events_add(su_home_t *home, + sip_allow_events_t *ae, char const *event) { event = su_strdup(home, event); @@ -243,7 +243,7 @@ * The Subscription-State header is used to indicate in which state a * subscription is. Its syntax is defined in @RFC3265 section 4.2.4 as * follows: - * + * * @code * Subscription-State = "Subscription-State" HCOLON substate-value * *( SEMI subexp-params ) @@ -271,7 +271,7 @@ /**@ingroup sip_subscription_state * @typedef struct sip_subscription_state_s sip_subscription_state_t; * - * The structure #sip_subscription_state_t contains representation of an + * The structure #sip_subscription_state_t contains representation of an * @SubscriptionState header. * * The #sip_subscription_state_t is defined as follows: @@ -281,9 +281,9 @@ * sip_common_t ss_common[1]; * sip_unknown_t *ss_next; * // Subscription state: "pending", "active" or "terminated" - * char const *ss_substate; + * char const *ss_substate; * msg_param_t const *ss_params; // List of parameters - * char const *ss_reason; // Reason of terminating + * char const *ss_reason; // Reason of terminating * char const *ss_expires; // Subscription lifetime in seconds * char const *ss_retry_after; // Value of retry-after parameter * } sip_subscription_state_t; @@ -294,24 +294,24 @@ static msg_dup_f sip_subscription_state_dup_one; static msg_update_f sip_subscription_state_update; -msg_hclass_t sip_subscription_state_class[] = -SIP_HEADER_CLASS(subscription_state, "Subscription-State", "", - ss_params, single, +msg_hclass_t sip_subscription_state_class[] = +SIP_HEADER_CLASS(subscription_state, "Subscription-State", "", + ss_params, single, subscription_state); -issize_t sip_subscription_state_d(su_home_t *home, sip_header_t *h, +issize_t sip_subscription_state_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) { sip_subscription_state_t *ss = h->sh_subscription_state; ss->ss_substate = s; - + s += span_token(s); /* forwards the pointer to the end of substate-value */ if (s == ss->ss_substate) return -1; - if (IS_LWS(*s)) { + if (IS_LWS(*s)) { *s = '\0'; s += span_lws(s + 1) + 1; } - + /* check if parameters are present and if so parse them */ if (*s == ';') { if ( msg_params_d(home, &s, &ss->ss_params) < 0) @@ -327,34 +327,34 @@ { char *end = b + bsiz, *b0 = b; sip_subscription_state_t const *ss = h->sh_subscription_state; - + assert(sip_is_subscription_state(h)); - + MSG_STRING_E(b, end, ss->ss_substate); - MSG_PARAMS_E(b, end, ss->ss_params, flags); + MSG_PARAMS_E(b, end, ss->ss_params, flags); - return b - b0; + return b - b0; } isize_t sip_subscription_state_dup_xtra(sip_header_t const *h, isize_t offset) { sip_subscription_state_t const *ss = h->sh_subscription_state; - + /* Calculates memory size occupied */ MSG_PARAMS_SIZE(offset, ss->ss_params); offset += MSG_STRING_SIZE(ss->ss_substate); - - return offset; + + return offset; } -/** Duplicate one #sip_subscription_state_t object */ +/** Duplicate one #sip_subscription_state_t object */ char *sip_subscription_state_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) { sip_subscription_state_t *ss_dst = dst->sh_subscription_state; sip_subscription_state_t const *ss_src = src->sh_subscription_state; char *end = b + xtra; - + b = msg_params_dup(&ss_dst->ss_params, ss_src->ss_params, b, xtra); MSG_STRING_DUP(b, ss_dst->ss_substate, ss_src->ss_substate); assert(b <= end); (void)end; @@ -362,7 +362,7 @@ return b; } -static int sip_subscription_state_update(msg_common_t *h, +static int sip_subscription_state_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -399,7 +399,7 @@ * The Publication header is used to indicate the which publication or class * of publications the message contains. Its syntax is defined * in (draft-niemi-simple-publish-00.txt) as follows: - * + * * @code * Publication = ( "Publication") HCOLON publish-package * *( SEMI publish-param ) @@ -418,7 +418,7 @@ /**@ingroup sip_publication * @brief Structure for Publication header. */ -struct sip_publication_s +struct sip_publication_s { sip_common_t pub_common; /**< Common fragment info */ sip_error_t *pub_next; /**< Link to next (dummy) */ @@ -431,8 +431,8 @@ static msg_xtra_f sip_publication_dup_xtra; static msg_dup_f sip_publication_dup_one; -msg_hclass_t sip_publication_class[] = -SIP_HEADER_CLASS(publication, "Publication", "", pub_params, single, +msg_hclass_t sip_publication_class[] = +SIP_HEADER_CLASS(publication, "Publication", "", pub_params, single, publication); su_inline void sip_publication_update(sip_publication_t *pub); @@ -475,7 +475,7 @@ return offset; } -/** Duplicate one #sip_publication_t object */ +/** Duplicate one #sip_publication_t object */ char *sip_publication_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) { @@ -512,9 +512,9 @@ * The Allow-Publication header is used to indicate which publications or classes of * publications the server supports. Its syntax is defined in [niemi] * (draft-niemi-simple-publish-00.txt) as follows: - * + * * @code - * Allow-Publications = "Allow-Publications" HCOLON publish-type + * Allow-Publications = "Allow-Publications" HCOLON publish-type * * ( COMMA publish-type ) * @endcode * @@ -523,7 +523,7 @@ * is stored in #sip_allow_publications_t structure. */ -msg_hclass_t sip_allow_publications_class[] = +msg_hclass_t sip_allow_publications_class[] = SIP_HEADER_CLASS_LIST(allow_publications, "Allow-Publications", "", list); issize_t sip_allow_publications_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -538,8 +538,8 @@ } /** Append an publication to a Allow-Publications header. */ -int sip_allow_publications_add(su_home_t *home, - sip_allow_publications_t *ae, +int sip_allow_publications_add(su_home_t *home, + sip_allow_publications_t *ae, char const *e) { e = su_strdup(home, e); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_extra.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_extra.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_extra.c Tue Dec 16 13:05:22 2008 @@ -24,13 +24,13 @@ /**@CFILE sip_extra.c * @brief Non-critical SIP headers - * + * * This file contains implementation of @CallInfo, @ErrorInfo, * @Organization, @Priority, @RetryAfter, @Server, @Subject, * @Timestamp, and @UserAgent headers. - * + * * @author Pekka Pessi . - * + * * @date Created: Tue Jun 13 02:57:51 2000 ppessi */ @@ -66,17 +66,17 @@ /* ====================================================================== */ /**@SIP_HEADER sip_call_info Call-Info Header - * + * * The Call-Info header provides additional information about the caller or * callee. Its syntax is defined in @RFC3261 as follows: - * + * * @code * Call-Info = "Call-Info" HCOLON info *(COMMA info) * info = LAQUOT absoluteURI RAQUOT *( SEMI info-param) * info-param = ( "purpose" EQUAL ( "icon" / "info" * / "card" / token ) ) / generic-param * @endcode - * + * * * The parsed Call-Info header is stored in #sip_call_info_t structure. */ @@ -84,7 +84,7 @@ /**@ingroup sip_call_info * @typedef struct sip_call_info_s sip_call_info_t; * - * The structure #sip_call_info_t contains representation of an + * The structure #sip_call_info_t contains representation of an * @CallInfo header. * * The #sip_call_info_t is defined as follows: @@ -130,10 +130,10 @@ /** @internal * Update parameter in a @CallInfo object. - * + * */ static -int sip_call_info_update(msg_common_t *h, +int sip_call_info_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -142,7 +142,7 @@ if (name == NULL) { ci->ci_purpose = NULL; } - else if (namelen == strlen("purpose") && + else if (namelen == strlen("purpose") && !strncasecmp(name, "purpose", namelen)) { ci->ci_purpose = value; } @@ -153,15 +153,15 @@ /* ====================================================================== */ /**@SIP_HEADER sip_error_info Error-Info Header - * + * * The Error-Info header provides a pointer to additional information about * the error status response. Its syntax is defined in @RFC3261 as follows: - * + * * @code * Error-Info = "Error-Info" HCOLON error-uri *(COMMA error-uri) * error-uri = LAQUOT absoluteURI RAQUOT *( SEMI generic-param ) * @endcode - * + * * * The parsed Error-Info header is stored in #sip_error_info_t structure. */ @@ -169,7 +169,7 @@ /**@ingroup sip_error_info * @typedef struct sip_error_info_s sip_error_info_t; * - * The structure #sip_error_info_t contains representation of an + * The structure #sip_error_info_t contains representation of an * @ErrorInfo header. * * The #sip_error_info_t is defined as follows: @@ -184,7 +184,7 @@ * @endcode */ -msg_hclass_t sip_error_info_class[] = +msg_hclass_t sip_error_info_class[] = SIP_HEADER_CLASS(error_info, "Error-Info", "", ei_params, append, info); @@ -377,11 +377,11 @@ /* ====================================================================== */ /**@SIP_HEADER sip_in_reply_to In-Reply-To Header - * - * The @b In-Reply-To request header field enumerates the + * + * The @b In-Reply-To request header field enumerates the * @ref sip_call_id "Call-IDs" that this call references or returns. * Its syntax is defined in @RFC3261 as follows: - * + * * @code * In-Reply-To = "In-Reply-To" HCOLON callid *(COMMA callid) * @endcode @@ -392,8 +392,8 @@ /**@ingroup sip_in_reply_to * @typedef struct msg_list_s sip_in_reply_to_t; * - * The structure #sip_in_reply_to_t contains representation of SIP - * @InReplyTo header. + * The structure #sip_in_reply_to_t contains representation of SIP + * @InReplyTo header. * * The #sip_in_reply_to_t is defined as follows: * @code @@ -406,7 +406,7 @@ * @endcode */ -msg_hclass_t sip_in_reply_to_class[] = +msg_hclass_t sip_in_reply_to_class[] = SIP_HEADER_CLASS_LIST(in_reply_to, "In-Reply-To", "", list); issize_t sip_in_reply_to_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -423,23 +423,23 @@ /* ====================================================================== */ /**@SIP_HEADER sip_organization Organization Header - * + * * The Organization header field conveys the name of the organization to * which the entity issuing the request or response belongs. Its syntax is * defined in @RFC3261 as follows: - * + * * @code * Organization = "Organization" HCOLON [TEXT-UTF8-TRIM] * @endcode - * + * * * The parsed Organization header is stored in #sip_organization_t structure. */ /**@ingroup sip_organization - * @typedef struct msg_generic_s sip_organization_t; + * @typedef struct msg_generic_s sip_organization_t; * - * The structure #sip_organization_t contains representation of a SIP + * The structure #sip_organization_t contains representation of a SIP * @Organization header. * * The #sip_organization_t is defined as follows: @@ -453,7 +453,7 @@ * @endcode */ -msg_hclass_t sip_organization_class[] = +msg_hclass_t sip_organization_class[] = SIP_HEADER_CLASS_G(organization, "Organization", "", single); issize_t sip_organization_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -470,25 +470,25 @@ /* ====================================================================== */ /**@SIP_HEADER sip_priority Priority Header - * + * * The Priority request-header field indicates the urgency of the request as * perceived by the client. Its syntax is defined in @RFC3261 as follows: - * + * * @code * Priority = "Priority" HCOLON priority-value * priority-value = "emergency" / "urgent" / "normal" * / "non-urgent" / other-priority * other-priority = token * @endcode - * + * * * The parsed Priority header is stored in #sip_priority_t structure. */ /**@ingroup sip_priority - * @typedef struct msg_generic_s sip_priority_t; + * @typedef struct msg_generic_s sip_priority_t; * - * The structure #sip_priority_t contains representation of a SIP + * The structure #sip_priority_t contains representation of a SIP * @Priority header. * * The #sip_priority_t is defined as follows: @@ -502,13 +502,13 @@ * @endcode */ -msg_hclass_t sip_priority_class[] = +msg_hclass_t sip_priority_class[] = SIP_HEADER_CLASS_G(priority, "Priority", "", single); issize_t sip_priority_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) { sip_priority_t *priority = (sip_priority_t *)h; - + if (msg_token_d(&s, &priority->g_string) < 0) return -1; @@ -527,11 +527,11 @@ /* ====================================================================== */ /**@SIP_HEADER sip_server Server Header - * + * * The Server response-header field contains information about the software * used by the user agent server to handle the request. Its syntax is * defined in @RFC2616 section 14.38 and @RFC3261 as follows: - * + * * @code * Server = "Server" HCOLON server-val *(LWS server-val) * server-val = product / comment @@ -543,9 +543,9 @@ */ /**@ingroup sip_server - * @typedef struct msg_generic_s sip_server_t; + * @typedef struct msg_generic_s sip_server_t; * - * The structure #sip_server_t contains representation of a SIP + * The structure #sip_server_t contains representation of a SIP * @Server header. * * The #sip_server_t is defined as follows: @@ -559,7 +559,7 @@ * @endcode */ -msg_hclass_t sip_server_class[] = +msg_hclass_t sip_server_class[] = SIP_HEADER_CLASS_G(server, "Server", "", single); issize_t sip_server_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -576,21 +576,21 @@ /* ====================================================================== */ /**@SIP_HEADER sip_subject Subject Header - * + * * The Subject header provides a summary or indicates the nature of the * request. Its syntax is defined in @RFC3261 as follows: - * + * * @code * Subject = ( "Subject" / "s" ) HCOLON [TEXT-UTF8-TRIM] * @endcode - * + * * The parsed Subject header is stored in #sip_subject_t structure. */ /**@ingroup sip_subject - * @typedef struct msg_generic_s sip_subject_t; + * @typedef struct msg_generic_s sip_subject_t; * - * The structure #sip_subject_t contains representation of a SIP + * The structure #sip_subject_t contains representation of a SIP * @Subject header. * * The #sip_subject_t is defined as follows: @@ -604,7 +604,7 @@ * @endcode */ -msg_hclass_t sip_subject_class[] = +msg_hclass_t sip_subject_class[] = SIP_HEADER_CLASS_G(subject, "Subject", "s", single); issize_t sip_subject_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -621,24 +621,24 @@ /* ====================================================================== */ /**@SIP_HEADER sip_timestamp Timestamp Header - * + * * The @b Timestamp header describes when the client sent the request to the * server, and it is used by the client to adjust its retransmission * intervals. Its syntax is defined in @RFC3261 as follows: - * + * * @code * Timestamp = "Timestamp" HCOLON 1*(DIGIT) * [ "." *(DIGIT) ] [ LWS delay ] * delay = *(DIGIT) [ "." *(DIGIT) ] * @endcode - * + * * The parsed Timestamp header is stored in #sip_timestamp_t structure. */ /**@ingroup sip_timestamp - * @typedef struct sip_timestamp_s sip_timestamp_t; + * @typedef struct sip_timestamp_s sip_timestamp_t; * - * The structure #sip_timestamp_t contains representation of a SIP + * The structure #sip_timestamp_t contains representation of a SIP * @Timestamp header. * * The #sip_timestamp_t is defined as follows: @@ -660,7 +660,7 @@ isize_t xtra); #define sip_timestamp_update NULL -msg_hclass_t sip_timestamp_class[] = +msg_hclass_t sip_timestamp_class[] = SIP_HEADER_CLASS(timestamp, "Timestamp", "", ts_common, single, timestamp); @@ -669,7 +669,7 @@ sip_timestamp_t *ts = (sip_timestamp_t*)h; ts->ts_stamp = s; - s += span_digit(s); + s += span_digit(s); if (s == ts->ts_stamp) return -1; if (*s == '.') { s += span_digit(s + 1) + 1; } @@ -685,7 +685,7 @@ *s++ = '\0'; else return -1; - + return 0; } @@ -703,7 +703,7 @@ } MSG_TERM_E(b, end); - + return b - b0; } @@ -739,25 +739,25 @@ /* ====================================================================== */ /**@SIP_HEADER sip_user_agent User-Agent Header - * + * * The User-Agent header contains information about the client user agent * originating the request. Its syntax is defined in [H14.43, S10.45] as * follows: - * + * * @code * User-Agent = "User-Agent" HCOLON server-val *(LWS server-val) * server-val = product / comment * product = token [SLASH product-version] * product-version = token * @endcode - * + * * The parsed User-Agent header is stored in #sip_user_agent_t structure. */ /**@ingroup sip_user_agent - * @typedef struct msg_generic_s sip_user_agent_t; + * @typedef struct msg_generic_s sip_user_agent_t; * - * The structure #sip_user_agent_t contains representation of a SIP + * The structure #sip_user_agent_t contains representation of a SIP * @UserAgent header. * * The #sip_user_agent_t is defined as follows: @@ -771,7 +771,7 @@ * @endcode */ -msg_hclass_t sip_user_agent_class[] = +msg_hclass_t sip_user_agent_class[] = SIP_HEADER_CLASS_G(user_agent, "User-Agent", "", single); issize_t sip_user_agent_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -788,10 +788,10 @@ /* ====================================================================== */ /**@SIP_HEADER sip_etag SIP-ETag Header - * + * * The @b SIP-ETag header field identifies the published event state. Its * syntax is defined in @RFC3903 as follows: - * + * * @code * SIP-ETag = "SIP-ETag" HCOLON entity-tag * entity-tag = token @@ -801,9 +801,9 @@ */ /**@ingroup sip_etag - * @typedef struct msg_generic_s sip_etag_t; + * @typedef struct msg_generic_s sip_etag_t; * - * The structure #sip_etag_t contains representation of a SIP + * The structure #sip_etag_t contains representation of a SIP * @SIPETag header. * * The #sip_etag_t is defined as follows: @@ -817,7 +817,7 @@ * @endcode */ -msg_hclass_t sip_etag_class[] = +msg_hclass_t sip_etag_class[] = SIP_HEADER_CLASS_G(etag, "SIP-ETag", "", single); issize_t sip_etag_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -835,11 +835,11 @@ /* ====================================================================== */ /**@SIP_HEADER sip_if_match SIP-If-Match Header - * + * * The @b SIP-If-Match header field identifies the specific entity of event * state that the request is refreshing, modifying or removing. Its syntax * is defined in @RFC3903 as follows: - * + * * @code * SIP-If-Match = "SIP-If-Match" HCOLON entity-tag * entity-tag = token @@ -849,9 +849,9 @@ */ /**@ingroup sip_if_match - * @typedef struct msg_generic_s sip_if_match_t; + * @typedef struct msg_generic_s sip_if_match_t; * - * The structure #sip_if_match_t contains representation of a SIP + * The structure #sip_if_match_t contains representation of a SIP * @SIPIfMatch header. * * The #sip_if_match_t is defined as follows: @@ -865,7 +865,7 @@ * @endcode */ -msg_hclass_t sip_if_match_class[] = +msg_hclass_t sip_if_match_class[] = SIP_HEADER_CLASS_G(if_match, "SIP-If-Match", "", single); issize_t sip_if_match_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -943,11 +943,11 @@ * * @sa @RFC3265, draft-niemi-sip-subnot-etags-01.txt * - * @EXP_1_12_5. - * In order to use @b Suppress-Body-If-Match header, + * @EXP_1_12_5. + * In order to use @b Suppress-Body-If-Match header, * initialize the SIP parser with, e.g., * sip_update_default_mclass(sip_extend_mclass(NULL)). - * + * * @note * The #sip_t structure does not contain a @a * sip_suppress_body_if_match field, but sip_suppress_body_if_match() @@ -1015,11 +1015,11 @@ * * @sa @RFC3265, draft-niemi-sip-subnot-etag-01 * - * @EXP_1_12_5. - * In order to use @b Suppress-Notify-If-Match header, + * @EXP_1_12_5. + * In order to use @b Suppress-Notify-If-Match header, * initialize the SIP parser with, e.g., * sip_update_default_mclass(sip_extend_mclass(NULL)). - * + * * @note * The #sip_t struct does not contain @a sip_suppress_notify_if_match field, * but sip_suppress_notify_if_match() function should be used for accessing @@ -1175,12 +1175,12 @@ } /** Calculate size of extra data required for duplicating one - * sip_remote_party_id_t header. + * sip_remote_party_id_t header. */ isize_t sip_remote_party_id_dup_xtra(sip_header_t const *h, isize_t offset) { sip_remote_party_id_t const *rpid = (sip_remote_party_id_t *)h; - return sip_name_addr_xtra(rpid->rpid_display, + return sip_name_addr_xtra(rpid->rpid_display, rpid->rpid_url, rpid->rpid_params, offset); @@ -1200,7 +1200,7 @@ b, xtra); } -static int sip_remote_party_id_update(msg_common_t *h, +static int sip_remote_party_id_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -1248,7 +1248,7 @@ * * @sa @RFC3325, @PPreferredIdentity * - * @NEW_1_12_7. In order to use @b P-Asserted-Identity header, + * @NEW_1_12_7. In order to use @b P-Asserted-Identity header, * initialize the SIP parser before calling nta_agent_create() or * nua_create() with, e.g., * sip_update_default_mclass(sip_extend_mclass(NULL)). @@ -1318,7 +1318,7 @@ { sip_p_asserted_identity_t const *paid = (sip_p_asserted_identity_t *)h; - return sip_name_addr_xtra(paid->paid_display, + return sip_name_addr_xtra(paid->paid_display, paid->paid_url, NULL, offset); @@ -1402,4 +1402,4 @@ return sip_p_asserted_identity_e(b, bsiz, h, f); } -#endif +#endif Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_extra_headers.txt ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_extra_headers.txt (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_extra_headers.txt Tue Dec 16 13:05:22 2008 @@ -4,7 +4,7 @@ # The parsed headers are accessed with function (or macro) like sip_refer_sub() # e.g., sip_refer_sub_t *rsub = sip_refer_sub(sip); # -# The line format is: +# The line format is: # C-name @SINCE sip_t-like-comment # # Put all experimental things after EXPERIMENTAL HEADER LIST STARTS HERE... Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_feature.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_feature.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_feature.c Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ * */ -/**@CFILE sip_feature.c +/**@CFILE sip_feature.c * * @brief Feature-related SIP header handling * @@ -52,7 +52,7 @@ * The Allow header lists the set of methods supported by the user agent * generating the message. Its syntax is defined in @RFC3261 as * follows: - * + * * @code * Allow = "Allow" HCOLON [Method *(COMMA Method)] * @endcode @@ -67,7 +67,7 @@ */ /**@ingroup sip_allow - * @typedef struct msg_list_s sip_allow_t; + * @typedef struct msg_list_s sip_allow_t; * * The structure #sip_allow_t contains representation of an @Allow header. * @@ -89,7 +89,7 @@ #define sip_allow_dup_one msg_list_dup_one static msg_update_f sip_allow_update; -msg_hclass_t sip_allow_class[] = +msg_hclass_t sip_allow_class[] = SIP_HEADER_CLASS(allow, "Allow", "", k_items, list, allow); issize_t sip_allow_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -106,7 +106,7 @@ return msg_list_e(b, bsiz, h, f); } -static int sip_allow_update(msg_common_t *h, +static int sip_allow_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -118,7 +118,7 @@ else { sip_method_t method = sip_method_code(name); - if (method >= 0 && method < 32) + if (method >= 0 && method < 32) k->k_bitmap |= 1 << method; } @@ -152,7 +152,7 @@ * The Proxy-Require header is used to indicate proxy-sensitive features * that @b MUST be supported by the proxy. Its syntax is defined in @RFC3261 * as follows: - * + * * @code * Proxy-Require = "Proxy-Require" HCOLON option-tag *(COMMA option-tag) * @endcode @@ -162,9 +162,9 @@ */ /**@ingroup sip_proxy_require - * @typedef struct msg_list_s sip_proxy_require_t; + * @typedef struct msg_list_s sip_proxy_require_t; * - * The structure #sip_proxy_require_t contains representation of an + * The structure #sip_proxy_require_t contains representation of an * @ProxyRequire header. * * The #sip_proxy_require_t is defined as follows: @@ -178,7 +178,7 @@ * @endcode */ -msg_hclass_t sip_proxy_require_class[] = +msg_hclass_t sip_proxy_require_class[] = SIP_HEADER_CLASS_LIST(proxy_require, "Proxy-Require", "", list); issize_t sip_proxy_require_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -199,9 +199,9 @@ * * The Require header is used by clients to tell user agent servers about * options that the client expects the server to support in order to - * properly process the request. Its syntax is defined in @RFC3261 + * properly process the request. Its syntax is defined in @RFC3261 * as follows: - * + * * @code * Require = "Require" HCOLON option-tag *(COMMA option-tag) * @endcode @@ -210,9 +210,9 @@ */ /**@ingroup sip_require - * @typedef struct msg_list_s sip_require_t; + * @typedef struct msg_list_s sip_require_t; * - * The structure #sip_require_t contains representation of an + * The structure #sip_require_t contains representation of an * @Require header. * * The #sip_require_t is defined as follows: @@ -226,7 +226,7 @@ * @endcode */ -msg_hclass_t sip_require_class[] = +msg_hclass_t sip_require_class[] = SIP_HEADER_CLASS_LIST(require, "Require", "", list); issize_t sip_require_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -247,7 +247,7 @@ * * The Supported header enumerates all the capabilities of the client or * server. Its syntax is defined in @RFC3261 as follows: - * + * * @code * Supported = ( "Supported" / "k" ) HCOLON * [option-tag *(COMMA option-tag)] @@ -258,9 +258,9 @@ */ /**@ingroup sip_supported - * @typedef struct msg_list_s sip_supported_t; + * @typedef struct msg_list_s sip_supported_t; * - * The structure #sip_supported_t contains representation of an + * The structure #sip_supported_t contains representation of an * @Supported header. * * The #sip_supported_t is defined as follows: @@ -275,7 +275,7 @@ */ -msg_hclass_t sip_supported_class[] = +msg_hclass_t sip_supported_class[] = SIP_HEADER_CLASS_LIST(supported, "Supported", "k", list); issize_t sip_supported_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -296,7 +296,7 @@ * * The Unsupported header lists the features not supported by the server. * Its syntax is defined in @RFC3261 as follows: - * + * * @code * Unsupported = "Unsupported" HCOLON [option-tag *(COMMA option-tag)] * @endcode @@ -306,9 +306,9 @@ */ /**@ingroup sip_unsupported - * @typedef struct msg_list_s sip_unsupported_t; + * @typedef struct msg_list_s sip_unsupported_t; * - * The structure #sip_unsupported_t contains representation of an + * The structure #sip_unsupported_t contains representation of an * @Unsupported header. * * The #sip_unsupported_t is defined as follows: @@ -322,7 +322,7 @@ * @endcode */ -msg_hclass_t sip_unsupported_class[] = +msg_hclass_t sip_unsupported_class[] = SIP_HEADER_CLASS_LIST(unsupported, "Unsupported", "", list); issize_t sip_unsupported_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -341,13 +341,13 @@ * * @retval NULL if all the required features are supported * @retval pointer to a @Unsupported header or - * #SIP_NONE if @a home is NULL + * #SIP_NONE if @a home is NULL */ sip_unsupported_t *sip_has_unsupported(su_home_t *home, - sip_supported_t const *support, + sip_supported_t const *support, sip_require_t const *require) { - return sip_has_unsupported_any(home, support, NULL, NULL, + return sip_has_unsupported_any(home, support, NULL, NULL, require, NULL, NULL); } @@ -364,24 +364,24 @@ sip_require_t const *support_by_require, sip_require_t const *require) { - return - sip_has_unsupported_any(home, - support, support_by_require, NULL, + return + sip_has_unsupported_any(home, + support, support_by_require, NULL, require, NULL, NULL); } /** Check if required features are not supported. * - * The supported features can be listed in @Supported, @Require or + * The supported features can be listed in @Supported, @Require or * @ProxyRequire headers (in @a supported, @a by_require, or @a * by_proxy_require parameters, respectively) * * @param home (optional) home pointer for allocating @Unsupported header * @param supported @Supported features (may be NULL) [IN] - * @param by_require supported features listed by - * @Require (may be NULL) [IN] - * @param by_proxy_require supported features listed + * @param by_require supported features listed by + * @Require (may be NULL) [IN] + * @param by_proxy_require supported features listed * by @ProxyRequire (may be NULL) [IN] * * @param require list of required features (may be NULL) [IN] @@ -390,7 +390,7 @@ * * @retval NULL if all the required features are supported * @retval pointer to a @Unsupported header or - * #SIP_NONE if @a home is NULL + * #SIP_NONE if @a home is NULL */ sip_unsupported_t * sip_has_unsupported_any(su_home_t *home, @@ -446,11 +446,11 @@ if (feature) { if (home) { - if (unsupported == NULL) + if (unsupported == NULL) unsupported = sip_unsupported_make(home, feature); else - msg_params_add(home, - (msg_param_t **)&unsupported->k_items, + msg_params_add(home, + (msg_param_t **)&unsupported->k_items, feature); } else { @@ -463,7 +463,7 @@ } } } - + return unsupported; } @@ -471,7 +471,7 @@ int sip_has_feature(msg_list_t const *supported, char const *feature) { size_t i; - + if (!feature || !feature[0]) return 1; /* Empty feature is always supported */ @@ -498,7 +498,7 @@ * syntax very similar to the @RecordRoute header field. It is used in * conjunction with SIP REGISTER requests and with 200 class messages in * response to REGISTER (REGISTER responses). - * + * * @code * Path = "Path" HCOLON path-value *(COMMA path-value) * path-value = name-addr *( SEMI rr-param ) @@ -547,7 +547,7 @@ * contain a route vector that will direct requests through a specific * sequence of proxies. A registrar may use a Service-Route header field to * inform a UA of a service route that, if used by the UA, will provide - * services from a proxy or set of proxies associated with that registrar. + * services from a proxy or set of proxies associated with that registrar. * The Service-Route header field may be included by a registrar in the * response to a REGISTER request. The syntax for the Service-Route header * field is: @@ -565,7 +565,7 @@ /**@ingroup sip_service_route * @typedef typedef struct sip_route_s sip_service_route_t; * - * The structure #sip_service_route_t contains representation of SIP + * The structure #sip_service_route_t contains representation of SIP * @ServiceRoute header. * * The #sip_service_route_t is defined as follows: @@ -581,7 +581,7 @@ */ msg_hclass_t sip_service_route_class[] = -SIP_HEADER_CLASS(service_route, "Service-Route", "", +SIP_HEADER_CLASS(service_route, "Service-Route", "", r_params, append, any_route); issize_t sip_service_route_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_header.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_header.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_header.c Tue Dec 16 13:05:22 2008 @@ -85,7 +85,7 @@ return msg_header_d(home, msg, b); } -/** Encode a SIP header. +/** Encode a SIP header. * * @deprecated Use msg_header_e() instead. */ @@ -94,7 +94,7 @@ return msg_header_e(b, bsiz, (msg_header_t const *)h, flags); } -sip_header_t *sip_header_format(su_home_t *home, +sip_header_t *sip_header_format(su_home_t *home, msg_hclass_t *hc, char const *fmt, ...) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_mime.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_mime.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_mime.c Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ * */ -/**@CFILE sip_mime.c +/**@CFILE sip_mime.c * * MIME-related SIP headers * @@ -54,7 +54,7 @@ * The @b Accept request-header field can be used to specify certain media * types which are acceptable for the response. Its syntax is defined in * [H14.1, S10.6] as follows: - * + * * @code * Accept = "Accept" HCOLON * [ accept-range *(COMMA accept-range) ] @@ -97,7 +97,7 @@ #define sip_accept_dup_one msg_accept_dup_one #define sip_accept_update msg_accept_update -msg_hclass_t sip_accept_class[] = +msg_hclass_t sip_accept_class[] = SIP_HEADER_CLASS(accept, "Accept", "", ac_params, apndlist, accept); issize_t sip_accept_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -118,9 +118,9 @@ * The Accept-Disposition header field is used to indicate what content * disposition types are acceptable to a client or server. Its syntax is * defined in draft-lennox-sip-reg-payload-01.txt section 3.2 as follows: - * + * * @code - * Accept-Disposition = "Accept-Disposition" ":" + * Accept-Disposition = "Accept-Disposition" ":" * #( (disposition-type | "*") *( ";" generic-param ) ) * @endcode * @@ -129,8 +129,8 @@ * is stored in #sip_accept_disposition_t structure. */ -msg_hclass_t sip_accept_disposition_class[] = -SIP_HEADER_CLASS(accept_disposition, "Accept-Disposition", "", +msg_hclass_t sip_accept_disposition_class[] = +SIP_HEADER_CLASS(accept_disposition, "Accept-Disposition", "", ad_params, apndlist, accept_disposition); issize_t sip_accept_disposition_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -163,7 +163,7 @@ MSG_STRING_E(b, end, ad->ad_type); MSG_PARAMS_E(b, end, ad->ad_params, flags); MSG_TERM_E(b, end); - + return b - b0; } #endif @@ -175,7 +175,7 @@ * The Accept-Encoding header is similar to Accept, but restricts the * content-codings that are acceptable in the response. Its syntax is * defined in [H14.3, S10.7] as follows: - * + * * @code * Accept-Encoding = "Accept-Encoding" HCOLON * [ encoding *(COMMA encoding) ] @@ -202,7 +202,7 @@ * sip_accept_encoding_t *aa_next; // Pointer to next @AcceptEncoding header * char const *aa_value; // Encoding token * msg_param_t const *aa_params; // List of parameters - * char const *aa_q; // Value of q parameter + * char const *aa_q; // Value of q parameter * } sip_accept_encoding_t; * @endcode */ @@ -211,8 +211,8 @@ #define sip_accept_encoding_dup_one msg_accept_any_dup_one #define sip_accept_encoding_update msg_accept_any_update -msg_hclass_t sip_accept_encoding_class[] = -SIP_HEADER_CLASS(accept_encoding, "Accept-Encoding", "", +msg_hclass_t sip_accept_encoding_class[] = +SIP_HEADER_CLASS(accept_encoding, "Accept-Encoding", "", aa_params, apndlist, accept_encoding); issize_t sip_accept_encoding_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -242,7 +242,7 @@ * the server in which language it would prefer to receive reason phrases, * session descriptions or status responses carried as message bodies. Its * syntax is defined in [H14.4, S10.8] as follows: - * + * * @code * Accept-Language = "Accept-Language" HCOLON * [ language *(COMMA language) ] @@ -268,7 +268,7 @@ * sip_accept_language_t *aa_next; // Pointer to next * char const *aa_value; // Language-range * msg_param_t const *aa_params; // List of accept-parameters - * char const *aa_q; // Value of q parameter + * char const *aa_q; // Value of q parameter * } sip_accept_language_t; * @endcode */ @@ -277,8 +277,8 @@ #define sip_accept_language_dup_one msg_accept_any_dup_one #define sip_accept_language_update msg_accept_any_update -msg_hclass_t sip_accept_language_class[] = -SIP_HEADER_CLASS(accept_language, "Accept-Language", "", +msg_hclass_t sip_accept_language_class[] = +SIP_HEADER_CLASS(accept_language, "Accept-Language", "", aa_params, apndlist, accept_language); issize_t sip_accept_language_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -307,7 +307,7 @@ * in the case of multipart messages, a message body part is to be * interpreted by the UAC or UAS. Its syntax is defined in @RFC3261 * as follows: - * + * * @code * Content-Disposition = "Content-Disposition" HCOLON * disp-type *( SEMI disp-param ) @@ -320,7 +320,7 @@ * other-handling = token * disp-extension-token = token * @endcode - * + * * The Content-Disposition header was extended by * draft-lennox-sip-reg-payload-01.txt section 3.1 as follows: * @@ -342,7 +342,7 @@ */ /**@ingroup sip_content_disposition - * @typedef struct msg_content_disposition_s sip_content_disposition_t; + * @typedef struct msg_content_disposition_s sip_content_disposition_t; * * The structure #sip_content_disposition_t contains representation of an * @ContentDisposition header. @@ -366,11 +366,11 @@ static msg_dup_f sip_content_disposition_dup_one; #define sip_content_disposition_update msg_content_disposition_update -msg_hclass_t sip_content_disposition_class[] = +msg_hclass_t sip_content_disposition_class[] = SIP_HEADER_CLASS(content_disposition, "Content-Disposition", "", cd_params, single, content_disposition); -issize_t sip_content_disposition_d(su_home_t *home, sip_header_t *h, +issize_t sip_content_disposition_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) { return msg_content_disposition_d(home, h, s, slen); @@ -388,9 +388,9 @@ return msg_content_disposition_dup_xtra(h, offset); } -/** Duplicate one #sip_content_disposition_t object */ +/** Duplicate one #sip_content_disposition_t object */ static -char *sip_content_disposition_dup_one(sip_header_t *dst, +char *sip_content_disposition_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) { @@ -405,7 +405,7 @@ * The Content-Encoding header indicates what additional content codings * have been applied to the entity-body. Its syntax is defined in @RFC3261 * as follows: - * + * * @code * Content-Encoding = ( "Content-Encoding" / "e" ) HCOLON * content-coding *(COMMA content-coding) @@ -417,7 +417,7 @@ */ /**@ingroup sip_content_encoding - * @typedef struct msg_list_s sip_content_encoding_t; + * @typedef struct msg_list_s sip_content_encoding_t; * * The structure #sip_content_encoding_t contains representation of an * @ContentEncoding header. @@ -433,7 +433,7 @@ * @endcode */ -msg_hclass_t sip_content_encoding_class[] = +msg_hclass_t sip_content_encoding_class[] = SIP_HEADER_CLASS_LIST(content_encoding, "Content-Encoding", "e", list); issize_t sip_content_encoding_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -454,7 +454,7 @@ * the intended audience for the enclosed entity. Note that this might not * be equivalent to all the languages used within the entity-body. Its * syntax is defined in @RFC3261 as follows: - * + * * @code * Content-Language = "Content-Language" HCOLON * language-tag *(COMMA language-tag) @@ -483,7 +483,7 @@ * @endcode */ -msg_hclass_t sip_content_language_class[] = +msg_hclass_t sip_content_language_class[] = SIP_HEADER_CLASS_LIST(content_language, "Content-Language", "", list); issize_t sip_content_language_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -503,7 +503,7 @@ * The Content-Type header indicates the media type of the message-body sent * to the recipient. Its syntax is defined in [H3.7, S] as * follows: - * + * * @code * Content-Type = ( "Content-Type" / "c" ) HCOLON media-type * media-type = m-type SLASH m-subtype *(SEMI m-parameter) @@ -548,8 +548,8 @@ static msg_dup_f sip_content_type_dup_one; #define sip_content_type_update NULL -msg_hclass_t sip_content_type_class[] = -SIP_HEADER_CLASS(content_type, "Content-Type", "c", c_params, +msg_hclass_t sip_content_type_class[] = +SIP_HEADER_CLASS(content_type, "Content-Type", "c", c_params, single, content_type); issize_t sip_content_type_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -568,7 +568,7 @@ return msg_content_type_dup_xtra((msg_header_t *)h, offset); } -/** Duplicate one #sip_content_type_t object */ +/** Duplicate one #sip_content_type_t object */ static char *sip_content_type_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) @@ -585,7 +585,7 @@ * MIME-Version header indicates what version of the MIME protocol was used * to construct the message. Its syntax is defined in [H19.4.1, S10.28] * as follows: - * + * * @code * MIME-Version = "MIME-Version" HCOLON 1*DIGIT "." 1*DIGIT * @endcode @@ -594,7 +594,7 @@ */ /**@ingroup sip_mime_version - * @typedef struct msg_generic_s sip_mime_version_t; + * @typedef struct msg_generic_s sip_mime_version_t; * * The structure #sip_mime_version_t contains representation of an * @MIMEVersion header. @@ -610,7 +610,7 @@ * @endcode */ -msg_hclass_t sip_mime_version_class[] = +msg_hclass_t sip_mime_version_class[] = SIP_HEADER_CLASS_G(mime_version, "MIME-Version", "", single); issize_t sip_mime_version_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -626,11 +626,11 @@ /* ====================================================================== */ /**@SIP_HEADER sip_warning Warning Header - * + * * The Warning response-header field is used to carry additional information * about the status of a response. Its syntax is defined in @RFC3261 as * follows: - * + * * @code * Warning = "Warning" HCOLON warning-value *(COMMA warning-value) * warning-value = warn-code SP warn-agent SP warn-text @@ -646,7 +646,7 @@ */ /**@ingroup sip_warning - * @typedef struct msg_warning_s sip_warning_t; + * @typedef struct msg_warning_s sip_warning_t; * * The structure #sip_warning_t contains representation of an * @Warning header. @@ -669,7 +669,7 @@ #define sip_warning_dup_one msg_warning_dup_one #define sip_warning_update NULL -msg_hclass_t sip_warning_class[] = +msg_hclass_t sip_warning_class[] = SIP_HEADER_CLASS(warning, "Warning", "", w_common, append, warning); issize_t sip_warning_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser.c Tue Dec 16 13:05:22 2008 @@ -152,7 +152,7 @@ return mclass; } -/** Extract the SIP message body, including separator line. +/** Extract the SIP message body, including separator line. * * @param msg message object [IN] * @param sip public SIP message structure [IN/OUT] @@ -162,13 +162,13 @@ * * @retval -1 error * @retval 0 cannot proceed - * @retval m + * @retval m */ issize_t sip_extract_body(msg_t *msg, sip_t *sip, char b[], isize_t bsiz, int eos) { ssize_t m = 0; size_t body_len; - + if (!(sip->sip_flags & MSG_FLG_BODY)) { /* We are looking at a potential empty line */ m = msg_extract_separator(msg, (msg_pub_t *)sip, b, bsiz, eos); @@ -203,10 +203,10 @@ return bsiz; } - if ((m = msg_extract_payload(msg, (msg_pub_t *)sip, + if ((m = msg_extract_payload(msg, (msg_pub_t *)sip, NULL, body_len, b, bsiz, eos)) == -1) return -1; - + sip->sip_flags |= MSG_FLG_FRAGS; if (bsiz >= body_len) sip->sip_flags |= MSG_FLG_COMPLETE; @@ -216,7 +216,7 @@ /** Parse SIP version. * - * Parse a SIP version string. Update the + * Parse a SIP version string. Update the * pointer at @a ss to first non-LWS character after the version string. * * @param ss string to be parsed [IN/OUT] @@ -231,7 +231,7 @@ char const *result; size_t const version_size = sizeof(sip_version_2_0) - 1; - if (strncasecmp(s, sip_version_2_0, version_size) == 0 && + if (strncasecmp(s, sip_version_2_0, version_size) == 0 && !IS_TOKEN(s[version_size])) { result = sip_version_2_0; s += version_size; @@ -259,7 +259,7 @@ memmove(s + l1 + 1, s + n - l2, l2); s[l1 + 1 + l2] = 0; - /* Compare again with compacted version */ + /* Compare again with compacted version */ if (strcasecmp(s, sip_version_2_0) == 0) result = sip_version_2_0; } @@ -268,10 +268,10 @@ } while (IS_WS(*s)) *s++ = '\0'; - + *ss = s; - if (ver) + if (ver) *ver = result; return 0; @@ -344,7 +344,7 @@ /**Parse a SIP method name. * - * Parse a SIP method name and return a code corresponding to the method. + * Parse a SIP method name and return a code corresponding to the method. * The address of the first non-LWS character after method name is stored in * @a *ss. * @@ -375,11 +375,11 @@ switch (c) { case 'A': if (MATCH(s, "ACK")) code = sip_method_ack; break; case 'B': if (MATCH(s, "BYE")) code = sip_method_bye; break; - case 'C': - if (MATCH(s, "CANCEL")) - code = sip_method_cancel; + case 'C': + if (MATCH(s, "CANCEL")) + code = sip_method_cancel; break; - case 'I': + case 'I': if (MATCH(s, "INVITE")) code = sip_method_invite; else if (MATCH(s, "INFO")) @@ -388,19 +388,19 @@ case 'M': if (MATCH(s, "MESSAGE")) code = sip_method_message; break; case 'N': if (MATCH(s, "NOTIFY")) code = sip_method_notify; break; case 'O': if (MATCH(s, "OPTIONS")) code = sip_method_options; break; - case 'P': - if (MATCH(s, "PRACK")) code = sip_method_prack; - else if (MATCH(s, "PUBLISH")) code = sip_method_publish; + case 'P': + if (MATCH(s, "PRACK")) code = sip_method_prack; + else if (MATCH(s, "PUBLISH")) code = sip_method_publish; break; - case 'R': - if (MATCH(s, "REGISTER")) - code = sip_method_register; + case 'R': + if (MATCH(s, "REGISTER")) + code = sip_method_register; else if (MATCH(s, "REFER")) - code = sip_method_refer; + code = sip_method_refer; break; - case 'S': - if (MATCH(s, "SUBSCRIBE")) - code = sip_method_subscribe; + case 'S': + if (MATCH(s, "SUBSCRIBE")) + code = sip_method_subscribe; break; case 'U': if (MATCH(s, "UPDATE")) @@ -410,7 +410,7 @@ #undef MATCH - if (IS_NON_WS(s[n])) + if (IS_NON_WS(s[n])) /* Unknown method */ code = sip_method_unknown; @@ -467,14 +467,14 @@ !TRANSPORT_MATCH(sip_transport_tcp) && !TRANSPORT_MATCH(sip_transport_sctp) && !TRANSPORT_MATCH(sip_transport_tls))) { - /* Protocol name */ + /* Protocol name */ transport = pn = s; skip_token(&s); pn_len = s - pn; skip_lws(&s); if (pn_len == 0 || *s++ != '/') return -1; skip_lws(&s); - + /* Protocol version */ pv = s; skip_token(&s); @@ -482,13 +482,13 @@ skip_lws(&s); if (pv_len == 0 || *s++ != '/') return -1; skip_lws(&s); - + /* Transport protocol */ pt = s; skip_token(&s); pt_len = s - pt; if (pt_len == 0) return -1; - + /* Remove whitespace between protocol name and version */ if (pn + pn_len + 1 != pv) { pn[pn_len] = '/'; @@ -500,7 +500,7 @@ pv[pv_len] = '/'; pt = memmove(pv + pv_len + 1, pt, pt_len); pt[pt_len] = '\0'; - + /* extra whitespace? */ if (!strcasecmp(transport, sip_transport_udp)) transport = sip_transport_udp; @@ -580,9 +580,9 @@ return rv; } -/**Add message separator, then test if message is complete. +/**Add message separator, then test if message is complete. * - * Add sip_content_length and sip_separator if they are missing. + * Add sip_content_length and sip_separator if they are missing. * The test that all necessary message components ( @From, @To, * @CSeq, @CallID, @ContentLength and message separator are present. * @@ -622,7 +622,7 @@ if (mplen == -1) return -1; len = (size_t)mplen; - } + } if (sip->sip_payload) len += sip->sip_payload->pl_len; @@ -640,14 +640,14 @@ sip_fragment_clear(sip->sip_content_length->l_common); } } - - if (!sip->sip_cseq || + + if (!sip->sip_cseq || !sip->sip_call_id || !sip->sip_to || !sip->sip_from || !sip->sip_separator || !sip->sip_content_length) return -1; - + return 0; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser.docs (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser.docs Tue Dec 16 13:05:22 2008 @@ -7,7 +7,7 @@ * new parser is added. * * The @b sip module contains interface to the SIP headers and message - * objects. The interface is abstracted using objects known as + * objects. The interface is abstracted using objects known as * @ref msg_hclass_s "header classes" and @ref msg_mclass_s "message classes". * * The @ref msg_mclass_s "message class" defines how a message is handled: @@ -15,14 +15,14 @@ * classes. It also contains function pointers used by the parser to handle * message body and other details that vary between protocols. * - * A @ref msg_hclass_s "header class" defines how a single header is parsed. + * A @ref msg_hclass_s "header class" defines how a single header is parsed. * Each header has its own header class. There are also header classes for * message elements that are not really headers, like @ref sip_request - * "request" and @ref sip_status "status line", - * @ref sip_separator "separator between headers" and + * "request" and @ref sip_status "status line", + * @ref sip_separator "separator between headers" and * @ref sip_payload "message body" * (which is also known as payload). There is also a header classes - * for @ref sip_unknown "unknown headers" and + * for @ref sip_unknown "unknown headers" and * @ref sip_error "headers that contained parsing errors". * * @@ -33,18 +33,18 @@ * * Create a header template for your header just like sip_rfc2543.h.in, * e.g, sip_example.h.in: - * + * *@code /**@file sip_example.h.in * * Template for . */ -#ifndef SIP_EXAMPLE_H +#ifndef SIP_EXAMPLE_H /** Defined when has been included. */ -#define SIP_EXAMPLE_H +#define SIP_EXAMPLE_H -/**@file sofia-sip/sip_example.h +/**@file sofia-sip/sip_example.h * * @brief Example header. * Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser_table.c.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser_table.c.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser_table.c.in Tue Dec 16 13:05:22 2008 @@ -29,7 +29,7 @@ * */ -/**@CFILE sip_parser_table.c +/**@CFILE sip_parser_table.c * @brief SIP parser table * * #AUTO# Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_prack.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_prack.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_prack.c Tue Dec 16 13:05:22 2008 @@ -55,7 +55,7 @@ * The RAck header indicates the sequence number of the provisional response * which is being acknowledged. Its syntax is defined in * @RFC3262 section 10 as follows: - * + * * @code * RAck = "RAck" HCOLON response-num LWS CSeq-num LWS Method * response-num = 1*DIGIT @@ -91,7 +91,7 @@ static msg_dup_f sip_rack_dup_one; #define sip_rack_update NULL -msg_hclass_t sip_rack_class[] = +msg_hclass_t sip_rack_class[] = SIP_HEADER_CLASS(rack, "RAck", "", ra_common, single, rack); issize_t sip_rack_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -121,7 +121,7 @@ assert(sip_is_rack(h)); - return snprintf(b, bsiz, "%u %u %s", + return snprintf(b, bsiz, "%u %u %s", ra->ra_response, ra->ra_cseq, ra->ra_method_name); } @@ -135,7 +135,7 @@ return offset; } -/** Duplicate one #sip_rack_t object */ +/** Duplicate one #sip_rack_t object */ char *sip_rack_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) { @@ -162,9 +162,9 @@ /**@SIP_HEADER sip_rseq RSeq Header * - * The RSeq header identifies provisional responses within a transaction. + * The RSeq header identifies provisional responses within a transaction. * Its syntax is defined in @RFC3262 section 10 as follows: - * + * * @code * RSeq = "RSeq" HCOLON response-num * response-num = 1*DIGIT @@ -189,7 +189,7 @@ * @endcode */ -msg_hclass_t sip_rseq_class[] = +msg_hclass_t sip_rseq_class[] = SIP_HEADER_CLASS(rseq, "RSeq", "", rs_common, single, any); issize_t sip_rseq_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_pref_util.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_pref_util.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_pref_util.c Tue Dec 16 13:05:22 2008 @@ -23,7 +23,7 @@ */ /**@CFILE sip_pref_util.c - * + * * SIP callercaps and callerprefs utility functions. * * @author Pekka Pessi . @@ -48,8 +48,8 @@ static double parse_number(char const *str, char **return_end); /** Parse a single preference */ -int sip_prefs_parse(union sip_pref *sp, - char const **in_out_s, +int sip_prefs_parse(union sip_pref *sp, + char const **in_out_s, int *return_negation) { char const *s; @@ -66,7 +66,7 @@ return 0; if (old_type == sp_init) { - if (s[0] == '\0' || + if (s[0] == '\0' || strcasecmp(s, "TRUE") == 0 || strcasecmp(s, "\"TRUE\"") == 0) { /* Boolean */ @@ -76,7 +76,7 @@ *return_negation = 0; *in_out_s = s + strlen(s); return 1; - } else if (strcasecmp(s, "FALSE") == 0 || + } else if (strcasecmp(s, "FALSE") == 0 || strcasecmp(s, "\"FALSE\"") == 0) { /* Boolean */ sp->sp_type = sp_literal; @@ -88,7 +88,7 @@ } else if (s[0] == '"' && s[1] != '\0') { for (s++; IS_LWS(s[0]); s++); } else - old_type = sp_error; + old_type = sp_error; } else if (!s[0]) { sp->sp_type = sp_init; return 0; @@ -106,7 +106,7 @@ char s0, *e; for (s++; IS_LWS(s[0]); s++); - + s0 = s[0]; if (s0 == '=') @@ -150,9 +150,9 @@ else old_type = sp_error; - if (old_type != sp_init && old_type != sp->sp_type) + if (old_type != sp_init && old_type != sp->sp_type) sp->sp_type = sp_error; - + *in_out_s = s; return sp->sp_type != sp_error; @@ -199,7 +199,7 @@ /** Return true if preferences match */ -int sip_prefs_match(union sip_pref const *a, +int sip_prefs_match(union sip_pref const *a, union sip_pref const *b) { if (!a || !b) @@ -208,20 +208,20 @@ return 0; switch (a->sp_type) { default: - case sp_error: + case sp_error: return 0; case sp_literal: - return + return a->sp_literal.spl_length == b->sp_literal.spl_length && strncasecmp(a->sp_literal.spl_value, b->sp_literal.spl_value, a->sp_literal.spl_length) == 0; case sp_string: - return + return a->sp_string.sps_length == b->sp_string.sps_length && strncmp(a->sp_string.sps_value, b->sp_string.sps_value, a->sp_string.sps_length) == 0; case sp_range: - return + return a->sp_range.spr_lower <= b->sp_range.spr_upper && a->sp_range.spr_upper >= b->sp_range.spr_lower; } @@ -260,7 +260,7 @@ memset(np, 0, sizeof np); - /* Usually nvalue is from Accept/Reject-Contact, + /* Usually nvalue is from Accept/Reject-Contact, pvalue is from Contact */ while (sip_prefs_parse(np, &nvalue, &n_negated)) { memset(pp, 0, sizeof pp); @@ -291,7 +291,7 @@ return 0; } -/** Check if the parameter is a valid feature tag. +/** Check if the parameter is a valid feature tag. * * A feature tag is a parameter starting with a single plus, or a well-known * feature tag listed in @RFC3841: "audio", "automata", "application", @@ -377,7 +377,7 @@ } /**Check if @Contact matches by @AcceptContact. - * + * * Matching @AcceptContact and @Contact headers is done as explained in * @RFC3841 section 7.2.4. The caller score can be calculated from the * returned S and N values. @@ -393,9 +393,9 @@ * * @param m pointer to @Contact header structure * @param cp pointer to @AcceptContact header structure - * @param return_N return-value parameter for number of + * @param return_N return-value parameter for number of * feature tags in @AcceptContact - * @param return_S return-value parameter for number of + * @param return_S return-value parameter for number of * matching feature tags * @param return_error return-value parameter for parsing error * @@ -428,7 +428,7 @@ * sip_contact_is_immune(), sip_contact_immunize(), sip_is_callerpref(), * sip_prefs_matching(). */ -int sip_contact_accept(sip_contact_t const *m, +int sip_contact_accept(sip_contact_t const *m, sip_accept_contact_t const *cp, unsigned *return_S, unsigned *return_N, @@ -459,9 +459,9 @@ eq = strcspn(acc, "="); acc += eq + (acc[eq] == '='); - if (!sip_prefs_matching(cap, acc, return_error)) + if (!sip_prefs_matching(cap, acc, return_error)) return 0; - + S++; } } @@ -469,7 +469,7 @@ *return_S = S; /* Matched feature tags */ *return_N = N; /* Number of feature tags in @AcceptContact */ - return 1; + return 1; } @@ -484,7 +484,7 @@ * @sa sip_contact_score(), sip_contact_accept(), sip_contact_immunize(), * sip_contact_is_immune(), @RFC3841, @RejectContact, @Contact */ -int sip_contact_reject(sip_contact_t const *m, +int sip_contact_reject(sip_contact_t const *m, sip_reject_contact_t const *reject) { unsigned S, N; @@ -506,7 +506,7 @@ * * @retval pointer to immunized copy if successful * @retval NULL upon an error - * + * * @sa @RFC3841, sip_is_callerpref(), sip_contact_score(), * sip_contact_accept(), sip_contact_reject(), @Contact */ @@ -541,7 +541,7 @@ /** Calculate score for contact. * * The caller preference score is an integer in range of 0 to 1000. - * + * * @retval -1 if the contact is rejected * @retval 1000 if contact is immune to caller preferences * @retval 0..1000 reflecting @RFC3841 score in 0.000 - 1.000. @@ -563,14 +563,14 @@ return 1000; /* Immune */ for (; rc; rc = rc->cp_next) - if (sip_contact_reject(m, rc)) + if (sip_contact_reject(m, rc)) break; if (rc) return -1; /* Rejected */ for (; ac; ac = ac->cp_next) { unsigned S, N; - + if (!sip_contact_accept(m, ac, &S, &N, &error)) { if (ac->cp_require) return 0; /* Discarded */ @@ -586,11 +586,11 @@ return 0; /* Dropped */ } - if (S > 0 && N > 0) + if (S > 0 && N > 0) S_total += sip_q_value(ac->cp_q) * (scale * S / N + (2 * S >= N)); } - if (!M) + if (!M) return 0; S_total /= M; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_reason.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_reason.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_reason.c Tue Dec 16 13:05:22 2008 @@ -52,7 +52,7 @@ * The Reason header is used to indicate why a SIP request was issued or why * a provisional response was sent. It can be used with HRPF scenarios. It * is defined in @RFC3326 as follows: - * + * * @code * Reason = "Reason" HCOLON reason-value *(COMMA reason-value) * reason-value = protocol *(SEMI reason-params) @@ -64,7 +64,7 @@ * reason-text = "text" EQUAL quoted-string * reason-extension = generic-param * @endcode - * + * * The parsed Reason header is stored in #sip_reason_t structure. */ @@ -77,12 +77,12 @@ * @code * typedef struct sip_reason_s * { - * sip_common_t re_common[1]; // Common fragment info - * sip_reason_t *re_next; // Link to next - * char const *re_protocol; // Protocol - * msg_param_t const *re_params; // List of reason parameters - * char const *re_cause; // Value of cause parameter - * char const *re_text; // Value of text parameter + * sip_common_t re_common[1]; // Common fragment info + * sip_reason_t *re_next; // Link to next + * char const *re_protocol; // Protocol + * msg_param_t const *re_params; // List of reason parameters + * char const *re_cause; // Value of cause parameter + * char const *re_text; // Value of text parameter * } sip_reason_t; * @endcode */ @@ -91,7 +91,7 @@ static msg_dup_f sip_reason_dup_one; static msg_update_f sip_reason_update; -msg_hclass_t sip_reason_class[] = +msg_hclass_t sip_reason_class[] = SIP_HEADER_CLASS(reason, "Reason", "", re_params, append, reason); issize_t sip_reason_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -103,9 +103,9 @@ *s = '\0', s += span_lws(s + 1) + 1; re->re_protocol = s; - if ((n = span_token(s)) == 0) + if ((n = span_token(s)) == 0) return -1; - s += n; while (IS_LWS(*s)) *s++ = '\0'; + s += n; while (IS_LWS(*s)) *s++ = '\0'; if (*s == ';' && msg_params_d(home, &s, &re->re_params) < 0) return -1; @@ -134,7 +134,7 @@ return offset; } -/** Duplicate one #sip_reason_t object */ +/** Duplicate one #sip_reason_t object */ char *sip_reason_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) { @@ -150,7 +150,7 @@ } /** Update parameter values for @Reason header */ -static int sip_reason_update(msg_common_t *h, +static int sip_reason_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_refer.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_refer.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_refer.c Tue Dec 16 13:05:22 2008 @@ -280,7 +280,7 @@ return b; } -static int sip_referred_by_update(msg_common_t *h, +static int sip_referred_by_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -338,10 +338,10 @@ * { * sip_common_t rp_common[1]; // Common fragment info * sip_error_t *rp_next; // Dummy link to next - * char const *rp_call_id; // @CallID of dialog to replace - * msg_param_t const *rp_params; // List of parameters - * char const *rp_to_tag; // Value of "to-tag" parameter - * char const *rp_from_tag; // Value of "from-tag" parameter + * char const *rp_call_id; // @CallID of dialog to replace + * msg_param_t const *rp_params; // List of parameters + * char const *rp_to_tag; // Value of "to-tag" parameter + * char const *rp_from_tag; // Value of "from-tag" parameter * unsigned rp_early_only; // early-only parameter * } sip_replaces_t; * @endcode @@ -414,7 +414,7 @@ } /** Update parameters in @Replaces header. */ -static int sip_replaces_update(msg_common_t *h, +static int sip_replaces_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -456,7 +456,7 @@ * exten = generic-param * * The parsed Refer-Sub header is stored in #sip_refer_sub_t structure. - * + * * @NEW_1_12_5. Note that #sip_t does not contain @a sip_refer_sub field, * but sip_refer_sub() accessor function should be used for accessing @b * Refer-Sub header structure. @@ -478,10 +478,10 @@ * sip_common_t rs_common[1]; // Common fragment info * sip_error_t *rs_next; // Dummy link to next * char const *rs_value; // "true" or "false" - * msg_param_t const *rs_params; // List of extension parameters + * msg_param_t const *rs_params; // List of extension parameters * } sip_refer_sub_t; * @endcode - * + * * @NEW_1_12_5. */ @@ -502,7 +502,7 @@ if (msg_token_d(&s, &rs->rs_value) < 0) return -1; - if (strcasecmp(rs->rs_value, "false") && + if (strcasecmp(rs->rs_value, "false") && strcasecmp(rs->rs_value, "true")) return -1; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_security.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_security.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_security.c Tue Dec 16 13:05:22 2008 @@ -28,7 +28,7 @@ * * This file contains implementation of headers related to HTTP authentication * (@RFC2617): - * @ref sip_authorization "Authorization", + * @ref sip_authorization "Authorization", * @ref sip_authentication_info "Authentication-Info", * @ref sip_proxy_authenticate "Proxy-Authenticate", * @ref sip_proxy_authentication_info "Proxy-Authentication-Info", @@ -42,7 +42,7 @@ * @ref sip_security_verify "Security-Verify" headers. * * The implementation of @ref sip_privacy "Privacy" header (@RFC3323) is - * also here. + * also here. * * @author Pekka Pessi . * @@ -118,9 +118,9 @@ * The #sip_authorization_t is defined as follows: * @code * typedef struct msg_auth_s { - * msg_common_t au_common[1]; // Common fragment info - * msg_auth_t *au_next; // Link to next header - * char const *au_scheme; // Auth-scheme like "Basic" or "Digest" + * msg_common_t au_common[1]; // Common fragment info + * msg_auth_t *au_next; // Link to next header + * char const *au_scheme; // Auth-scheme like "Basic" or "Digest" * msg_param_t const *au_params; // Comma-separated parameters * } sip_authorization_t; * @endcode @@ -188,9 +188,9 @@ * The #sip_proxy_authenticate_t is defined as follows: * @code * typedef struct msg_auth_s { - * msg_common_t au_common[1]; // Common fragment info - * msg_auth_t *au_next; // Link to next header - * char const *au_scheme; // Auth-scheme like "Basic" or "Digest" + * msg_common_t au_common[1]; // Common fragment info + * msg_auth_t *au_next; // Link to next header + * char const *au_scheme; // Auth-scheme like "Basic" or "Digest" * msg_param_t const *au_params; // Comma-separated parameters * } sip_proxy_authenticate_t; * @endcode @@ -244,9 +244,9 @@ * The #sip_proxy_authorization_t is defined as follows: * @code * typedef struct msg_auth_s { - * msg_common_t au_common[1]; // Common fragment info - * msg_auth_t *au_next; // Link to next header - * char const *au_scheme; // Auth-scheme like "Basic" or "Digest" + * msg_common_t au_common[1]; // Common fragment info + * msg_auth_t *au_next; // Link to next header + * char const *au_scheme; // Auth-scheme like "Basic" or "Digest" * msg_param_t const *au_params; // Comma-separated parameters * } sip_proxy_authorization_t; * @endcode @@ -299,9 +299,9 @@ * The #sip_www_authenticate_t is defined as follows: * @code * typedef struct msg_auth_s { - * msg_common_t au_common[1]; // Common fragment info - * msg_auth_t *au_next; // Link to next header - * char const *au_scheme; // Auth-scheme like "Basic" or "Digest" + * msg_common_t au_common[1]; // Common fragment info + * msg_auth_t *au_next; // Link to next header + * char const *au_scheme; // Auth-scheme like "Basic" or "Digest" * msg_param_t const *au_params; // Comma-separated parameters * } sip_www_authenticate_t; * @endcode @@ -441,7 +441,7 @@ return msg_list_d(home, (msg_header_t *)h, s, slen); } -issize_t sip_proxy_authentication_info_e(char b[], isize_t bsiz, +issize_t sip_proxy_authentication_info_e(char b[], isize_t bsiz, sip_header_t const *h, int f) { assert(sip_is_proxy_authentication_info(h)); /* This is soo popular */ @@ -455,7 +455,7 @@ typedef struct sip_security_agree_s sip_security_agree_t; #define sh_security_agree sh_security_client -static +static issize_t sip_security_agree_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) { sip_security_agree_t *sa = (sip_security_agree_t *)h; @@ -465,16 +465,16 @@ while (*s == ',') /* Ignore empty entries (comma-whitespace) */ *s = '\0', s += span_lws(s + 1) + 1; - if ((n = span_token(s)) == 0) + if ((n = span_token(s)) == 0) return -1; - sa->sa_mec = s; s += n; while (IS_LWS(*s)) *s++ = '\0'; + sa->sa_mec = s; s += n; while (IS_LWS(*s)) *s++ = '\0'; if (*s == ';' && msg_params_d(home, &s, &sa->sa_params) < 0) return -1; return msg_parse_next_field(home, h, s, slen); } -static +static issize_t sip_security_agree_e(char b[], isize_t bsiz, sip_header_t const *h, int f) { char *end = b + bsiz, *b0 = b; @@ -486,7 +486,7 @@ return b - b0; } -static +static isize_t sip_security_agree_dup_xtra(sip_header_t const *h, isize_t offset) { sip_security_agree_t const *sa = h->sh_security_agree; @@ -497,8 +497,8 @@ return offset; } -/** Duplicate one sip_security_agree_t object */ -static +/** Duplicate one sip_security_agree_t object */ +static char *sip_security_agree_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) { @@ -513,7 +513,7 @@ return b; } -static int sip_security_agree_update(msg_common_t *h, +static int sip_security_agree_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -589,8 +589,8 @@ * @code * typedef struct sip_security_agree_s * { - * sip_common_t sa_common[1]; // Common fragment info - * sip_security_client_t *sa_next; // Link to next mechanism + * sip_common_t sa_common[1]; // Common fragment info + * sip_security_client_t *sa_next; // Link to next mechanism * char const *sa_mec; // Security mechanism * msg_param_t const *sa_params; // List of mechanism parameters * char const *sa_q; // Value of q (preference) parameter @@ -601,8 +601,8 @@ * @endcode */ -msg_hclass_t sip_security_client_class[] = -SIP_HEADER_CLASS(security_client, "Security-Client", "", +msg_hclass_t sip_security_client_class[] = +SIP_HEADER_CLASS(security_client, "Security-Client", "", sa_params, append, security_agree); issize_t sip_security_client_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -638,8 +638,8 @@ * @code * typedef struct sip_security_agree_s * { - * sip_common_t sa_common[1]; // Common fragment info - * sip_security_server_t *sa_next; // Link to next mechanism + * sip_common_t sa_common[1]; // Common fragment info + * sip_security_server_t *sa_next; // Link to next mechanism * char const *sa_mec; // Security mechanism * msg_param_t const *sa_params; // List of mechanism parameters * char const *sa_q; // Value of q (preference) parameter @@ -650,8 +650,8 @@ * @endcode */ -msg_hclass_t sip_security_server_class[] = -SIP_HEADER_CLASS(security_server, "Security-Server", "", +msg_hclass_t sip_security_server_class[] = +SIP_HEADER_CLASS(security_server, "Security-Server", "", sa_params, append, security_agree); issize_t sip_security_server_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -687,8 +687,8 @@ * @code * typedef struct sip_security_agree_s * { - * sip_common_t sa_common[1]; // Common fragment info - * sip_security_verify_t *sa_next; // Link to next mechanism + * sip_common_t sa_common[1]; // Common fragment info + * sip_security_verify_t *sa_next; // Link to next mechanism * char const *sa_mec; // Security mechanism * msg_param_t const *sa_params; // List of mechanism parameters * char const *sa_q; // Value of q (preference) parameter @@ -700,8 +700,8 @@ */ -msg_hclass_t sip_security_verify_class[] = -SIP_HEADER_CLASS(security_verify, "Security-Verify", "", +msg_hclass_t sip_security_verify_class[] = +SIP_HEADER_CLASS(security_verify, "Security-Verify", "", sa_params, append, security_agree); issize_t sip_security_verify_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -718,10 +718,10 @@ /* RFC 3323 */ /**@SIP_HEADER sip_privacy Privacy Header - * + * * The Privacy header is used by User-Agent to request privacy services from * the network. Its syntax is defined in @RFC3323 as follows: - * + * * @code * Privacy-hdr = "Privacy" HCOLON priv-value *(";" priv-value) * priv-value = "header" / "session" / "user" / "none" / "critical" @@ -740,9 +740,9 @@ * The #sip_privacy_t is defined as follows: * @code * typedef struct sip_privacy_s { - * sip_common_t priv_common[1]; // Common fragment info - * sip_error_t *priv_next; // Dummy link - * msg_param_t const *priv_values; // List of privacy values + * sip_common_t priv_common[1]; // Common fragment info + * sip_error_t *priv_next; // Dummy link + * msg_param_t const *priv_values; // List of privacy values * } sip_privacy_t; * @endcode */ @@ -752,10 +752,10 @@ #define sip_privacy_update NULL -msg_hclass_t sip_privacy_class[] = +msg_hclass_t sip_privacy_class[] = SIP_HEADER_CLASS(privacy, "Privacy", "", priv_values, single, privacy); -static +static issize_t sip_privacy_token_scan(char *start) { char *s = start; @@ -811,7 +811,7 @@ } MSG_TERM_E(b, end); - + return b - b0; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_session.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_session.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_session.c Tue Dec 16 13:05:22 2008 @@ -52,9 +52,9 @@ /**@SIP_HEADER sip_session_expires Session-Expires Header * - * The Session-Expires header is used to convey the lifetime of the session. + * The Session-Expires header is used to convey the lifetime of the session. * Its syntax is defined in @RFC4028 as follows: - * + * * @code * Session-Expires = ("Session-Expires" | "x") HCOLON delta-seconds * *(SEMI se-params) @@ -78,7 +78,7 @@ * sip_common_t x_common[1]; * sip_unknown_t *x_next; * unsigned long x_delta; //Delta Seconds - * msg_param_t *x_params; + * msg_param_t *x_params; * char const *x_refresher; //Who will send the refresh UAS or UAC * } sip_session_expires_t; * @endcode @@ -89,7 +89,7 @@ static msg_update_f sip_session_expires_update; msg_hclass_t sip_session_expires_class[] = -SIP_HEADER_CLASS(session_expires, "Session-Expires", "x", x_params, single, +SIP_HEADER_CLASS(session_expires, "Session-Expires", "x", x_params, single, session_expires); issize_t sip_session_expires_d(su_home_t *home, sip_header_t *h, char *s, isize_t slen) @@ -113,7 +113,7 @@ sip_session_expires_t const *o = h->sh_session_expires; n = snprintf(b, bsiz, "%lu", o->x_delta); - b += n; + b += n; MSG_PARAMS_E(b, end, o->x_params, flags); return b - b0; @@ -124,11 +124,11 @@ sip_session_expires_t const *o = h->sh_session_expires; MSG_PARAMS_SIZE(offset, o->x_params); - + return offset; } -/** Duplicate one #sip_session_expires_t object */ +/** Duplicate one #sip_session_expires_t object */ char *sip_session_expires_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) { @@ -144,7 +144,7 @@ } /** Update parameters in @SessionExpires header. */ -static int sip_session_expires_update(msg_common_t *h, +static int sip_session_expires_update(msg_common_t *h, char const *name, isize_t namelen, char const *value) { @@ -153,7 +153,7 @@ if (name == NULL) { x->x_refresher = NULL; } - else if (namelen == strlen("refresher") && + else if (namelen == strlen("refresher") && !strncasecmp(name, "refresher", namelen)) { x->x_refresher = value; } @@ -167,7 +167,7 @@ * * The Min-SE header is used to indicate the minimum value for the session * interval. Its syntax is defined in @RFC4028 as follows: - * + * * @code * MMin-SE = "Min-SE" HCOLON delta-seconds *(SEMI generic-param) * @endcode @@ -221,7 +221,7 @@ sip_min_se_t const *o = (sip_min_se_t *)h; n = snprintf(b, bsiz, "%lu", o->min_delta); - b += n; + b += n; MSG_PARAMS_E(b, end, o->min_params, flags); return b - b0; @@ -232,11 +232,11 @@ sip_min_se_t const *o = (sip_min_se_t *)h; MSG_PARAMS_SIZE(offset, o->min_params); - + return offset; } -/** Duplicate one #sip_min_se_t object */ +/** Duplicate one #sip_min_se_t object */ char *sip_min_se_dup_one(sip_header_t *dst, sip_header_t const *src, char *b, isize_t xtra) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_status.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_status.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_status.c Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ /**@ingroup sip_status_codes * @CFILE sip_status.c - * + * * SIP status codes and standard phrases. * * @author Pekka Pessi . @@ -37,22 +37,22 @@ #include #include -char const +char const sip_100_Trying[] = "Trying", sip_180_Ringing[] = "Ringing", sip_181_Call_is_being_forwarded[] = "Call Is Being Forwarded", sip_182_Queued[] = "Queued", sip_183_Session_progress[] = "Session Progress", - + sip_200_OK[] = "OK", sip_202_Accepted[] = "Accepted", - + sip_300_Multiple_choices[] = "Multiple Choices", sip_301_Moved_permanently[] = "Moved Permanently", sip_302_Moved_temporarily[] = "Moved Temporarily", sip_305_Use_proxy[] = "Use Proxy", sip_380_Alternative_service[] = "Alternative Service", - + sip_400_Bad_request[] = "Bad Request", sip_401_Unauthorized[] = "Unauthorized", sip_402_Payment_required[] = "Payment Required", @@ -75,7 +75,7 @@ sip_421_Extension_required[] = "Extension Required", sip_422_Session_timer[] = "Session Interval Too Small", sip_423_Interval_too_brief[] = "Interval Too Brief", - + sip_480_Temporarily_unavailable[] = "Temporarily Unavailable", sip_481_No_transaction[] = "Call/Transaction Does Not Exist", sip_482_Loop_detected[] = "Loop Detected", @@ -114,13 +114,13 @@ * empty string "" is returned. * * @param status well-known status code in range 100..699 - * + * * @return * A response message corresponding to status code, or NULL upon an error. */ char const *sip_status_phrase(int status) { - if (status < 100 || status > 699) + if (status < 100 || status > 699) return NULL; switch (status) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_tag.c.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_tag.c.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_tag.c.in Tue Dec 16 13:05:22 2008 @@ -87,7 +87,7 @@ }; /** List of all string tags for SIP headers */ -tag_type_t sip_tag_str_list[] = +tag_type_t sip_tag_str_list[] = { siptag_#xxxxxx#_str, NULL Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_tag_class.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_tag_class.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_tag_class.c Tue Dec 16 13:05:22 2008 @@ -23,7 +23,7 @@ */ /**@SIP_TAG - * + * * @CFILE sip_tag_class.c SIP Tag classes * * @author Pekka Pessi . @@ -54,7 +54,7 @@ * Tags in this class are not automatically added to the message with * sip_add_tl() or sip_add_tagis(). */ -tag_class_t sipexthdrtag_class[1] = +tag_class_t sipexthdrtag_class[1] = {{ sizeof(siphdrtag_class), /* tc_next */ NULL, @@ -72,7 +72,7 @@ /** Tag class for SIP header tags. @HIDE */ -tag_class_t siphdrtag_class[1] = +tag_class_t siphdrtag_class[1] = {{ sizeof(siphdrtag_class), /* tc_next */ NULL, @@ -89,7 +89,7 @@ }}; /** Tag class for SIP header string tags. @HIDE */ -tag_class_t sipstrtag_class[1] = +tag_class_t sipstrtag_class[1] = {{ sizeof(sipstrtag_class), /* tc_next */ NULL, @@ -106,7 +106,7 @@ }}; /** Tag class for SIP message tags. @HIDE */ -tag_class_t sipmsgtag_class[1] = +tag_class_t sipmsgtag_class[1] = {{ sizeof(sipmsgtag_class), /* tc_next */ NULL, @@ -125,16 +125,16 @@ /** Filter a for SIP header tag. * * @param[in] dst tag list for filtering result. May be NULL. - * @param[in] f filter tag - * @param[in] src tag item from source list. - * @param[in,out] bb pointer to pointer of mempory area used to dup + * @param[in] f filter tag + * @param[in] src tag item from source list. + * @param[in,out] bb pointer to pointer of mempory area used to dup * the filtering result * * This function is also used to calculate size for filtering result. */ tagi_t *siptag_filter(tagi_t *dst, tagi_t const f[], - tagi_t const *src, + tagi_t const *src, void **bb) { tagi_t stub[2] = {{ NULL }}; @@ -154,7 +154,7 @@ return dst; hh = (sip_header_t const **) - msg_hclass_offset((msg_mclass_t *)sip->sip_common->h_class, + msg_hclass_offset((msg_mclass_t *)sip->sip_common->h_class, (msg_pub_t *)sip, hc); /* Is header present in the SIP message? */ @@ -242,7 +242,7 @@ msg_header_remove(msg, (msg_pub_t *)sip, *hh); } continue; - } + } if (tag == siptag_header) hc = h->sh_class; @@ -288,13 +288,13 @@ * * @par Example * @code - * url->url_headers = + * url->url_headers = * sip_headers_as_url_query(home, SIPTAG_REPLACES(replaces), TAG_END()); * @endcode - * + * * @since New in @VERSION_1_12_4. * - * @sa + * @sa * url_query_as_header_string(), sip_url_query_as_taglist(), * nta_msg_request_complete(), * @RFC3261 section 19.1.1 "Headers", #url_t, url_s#url_headers @@ -383,12 +383,12 @@ for (;*n; n++) if (isupper(*n)) *n = tolower(*n); - + slen = strlen(s); elen = url_esclen(s, HNV_RESERVED); if ((size_t)elen == slen) return su_strlst_append(l, s); - + escaped = su_alloc(lhome, elen + 1); if (escaped) return su_strlst_append(l, url_escape(escaped, s, HNV_RESERVED)); @@ -403,9 +403,9 @@ * Unknown headers are encoded as SIPTAG_HEADER_STR(). * * @param home memory home used to alloate string (if NULL, malloc() it) - * @param query query part from SIP URL + * @param query query part from SIP URL * @param parser optional SIP parser used - * + * * @sa sip_add_tl(), sip_add_tagis(), SIPTAG_HEADER_STR(), * sip_headers_as_url_query(), url_query_as_header_string(), * @RFC3261 section 19.1.1 "Headers", #url_t, url_s#url_headers Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_time.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_time.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_time.c Tue Dec 16 13:05:22 2008 @@ -22,7 +22,7 @@ * */ -/**@CFILE sip_time.c +/**@CFILE sip_time.c * @brief SIP time handling * * Functions for handling time and dates in SIP. @@ -53,7 +53,7 @@ /**@ingroup sip_expires * - * Calculate the expiration time for a SIP @Contact. + * Calculate the expiration time for a SIP @Contact. * * @param m @Contact header * @param ex @Expires header @@ -66,8 +66,8 @@ * * @note If @a now is 0, the function gets the current time using sip_now(). * - * @return - * The expiration time in seconds. + * @return + * The expiration time in seconds. */ sip_time_t sip_contact_expires(sip_contact_t const *m, sip_expires_t const *ex, @@ -92,7 +92,7 @@ } if (time) { - if (date) + if (date) now = date->d_time; else if (now == 0) now = sip_now(); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c Tue Dec 16 13:05:22 2008 @@ -23,7 +23,7 @@ */ /**@CFILE sip_util.c - * + * * SIP utility functions. * * @author Pekka Pessi . @@ -59,7 +59,7 @@ #include #include -/** +/** * Compare two SIP addresses ( @From or @To headers). * * @retval nonzero if matching. @@ -68,12 +68,12 @@ int sip_addr_match(sip_addr_t const *a, sip_addr_t const *b) { return - (a->a_tag == NULL || b->a_tag == NULL || + (a->a_tag == NULL || b->a_tag == NULL || strcmp(a->a_tag, b->a_tag) == 0) && - str0casecmp(a->a_host, b->a_host) == 0 + str0casecmp(a->a_host, b->a_host) == 0 && - str0cmp(a->a_user, b->a_user) == 0 + str0cmp(a->a_user, b->a_user) == 0 && str0cmp(a->a_url->url_scheme, b->a_url->url_scheme); } @@ -142,14 +142,14 @@ * parameter is included in the URI unless the transport protocol is UDP. * * @param home memory home - * @param v @Via header field structure + * @param v @Via header field structure * (with and parameters) * @param user username for @Contact URI (may be NULL) * * @retval contact header structure * @retval NULL upon an error * - * @sa sip_contact_create_from_via_with_transport(), + * @sa sip_contact_create_from_via_with_transport(), * sip_contact_string_from_via() */ sip_contact_t * @@ -297,12 +297,12 @@ } /**Perform sanity check on a SIP message - * - * Check that the SIP message has all the mandatory fields. + * + * Check that the SIP message has all the mandatory fields. * * @param sip SIP message to be checked * - * @return + * @return * When the SIP message fulfills the minimum requirements, return zero, * otherwise a negative status code. */ @@ -331,7 +331,7 @@ return -1; break; - case url_tel: + case url_tel: if (!ruri->url_user || strlen(ruri->url_user) == 0) return -1; break; @@ -354,7 +354,7 @@ * string is modified when parsing. The home is used to allocate extra * memory required when parsing, e.g., for parameter list or when there * string contains multiple header fields. - * + * * @deprecated * Use msg_header_make() or header-specific make functions, e.g., * sip_via_make(). @@ -370,9 +370,9 @@ for (n = slen; n >= 1 && IS_LWS(s[n - 1]); n--) ; - + s[n] = '\0'; - + assert(SIP_HDR_TEST(h)); return h->sh_class->hc_parse(home, h, s, slen); @@ -416,9 +416,9 @@ if (n > -1 && n + 1 <= len) break; if (n > -1) /* glibc >2.1 */ - len = n + 1; + len = n + 1; else /* glibc 2.0 */ - len *= 2; + len *= 2; } return rv; @@ -434,7 +434,7 @@ return h->sh_class->hc_dxtra(h, h->sh_class->hc_size); } -/** Duplicate a url or make a url out of string. +/** Duplicate a url or make a url out of string. * @deprecated Use url_hdup() instead. */ url_t *sip_url_dup(su_home_t *home, url_t const *o) @@ -443,13 +443,13 @@ } /**Calculate Q value. - * + * * Convert q-value string @a q to numeric value * in range (0..1000). Q values are used, for instance, to describe * relative priorities of registered contacts. * * @param q q-value string ("1" | "." 1,3DIGIT) - * + * * @return An integer in range 0 .. 1000. */ unsigned sip_q_value(char const *q) @@ -466,7 +466,7 @@ return 1000; if (q[0] == '\0') return 0; - if (q[0] != '.') + if (q[0] != '.') return 500; /* Garbage... */ if (q[1] >= '0' && q[1] <= '9') { @@ -478,7 +478,7 @@ if (q[4] > '5' && q[4] <= '9') /* Round upwards */ value += 1; - else if (q[4] == '5') + else if (q[4] == '5') value += value & 1; /* Round to even */ } } @@ -490,7 +490,7 @@ /**@ingroup sip_route * - * Get first route header and remove it from its fragment chain. + * Get first route header and remove it from its fragment chain. * */ sip_route_t *sip_route_remove(msg_t *msg, sip_t *sip) @@ -505,14 +505,14 @@ /**@ingroup sip_route * - * Get last route header and remove it from its fragment chain. + * Get last route header and remove it from its fragment chain. * */ sip_route_t *sip_route_pop(msg_t *msg, sip_t *sip) { sip_route_t *r; - for (r = sip->sip_route; r; r = r->r_next) + for (r = sip->sip_route; r; r = r->r_next) if (r->r_next == NULL) { msg_header_remove(msg, (msg_pub_t *)sip, (msg_header_t *)r); return r; @@ -524,13 +524,13 @@ /**@ingroup sip_route * - * Get first route header and rewrite the RequestURI. + * Get first route header and rewrite the RequestURI. */ sip_route_t *sip_route_follow(msg_t *msg, sip_t *sip) { if (sip->sip_route) { - /* XXX - in case of outbound proxy, route may contain our address */ - + /* XXX - in case of outbound proxy, route may contain our address */ + sip_route_t *r = sip_route_remove(msg, sip); sip_request_t *rq = sip->sip_request; @@ -546,12 +546,12 @@ } /**@ingroup sip_route - * + * * Check if route header has lr param. * * "lr" param can be either URL or header parameter. */ -int +int sip_route_is_loose(sip_route_t const *r) { if (!r) @@ -566,7 +566,7 @@ * * Reverse a route header (@Route, @RecordRoute, @Path, @ServiceRoute). */ -sip_route_t *sip_route_reverse_as(su_home_t *home, +sip_route_t *sip_route_reverse_as(su_home_t *home, msg_hclass_t *hc, sip_route_t const *route) { @@ -580,8 +580,8 @@ *r->r_url = *route->r_url; /* Fix broken (Record-)Routes without <> */ if (r->r_url->url_params == NULL - && r->r_params - && r->r_params[0] + && r->r_params + && r->r_params[0] && (r->r_params[0][0] == 'l' || r->r_params[0][0] == 'L') && (r->r_params[0][1] == 'r' || r->r_params[0][1] == 'R') && (r->r_params[0][2] == '=' || r->r_params[0][2] == 0)) @@ -590,7 +590,7 @@ else r->r_params = route->r_params; tmp = (sip_route_t *)msg_header_dup_as(home, hc, (msg_header_t *)r); - if (!tmp) + if (!tmp) goto error; tmp->r_next = reverse; reverse = tmp; @@ -606,7 +606,7 @@ /**@ingroup sip_route * - * Reverse a @Route header. + * Reverse a @Route header. * * Reverse A route header like @RecordRoute or @Path. */ @@ -634,8 +634,8 @@ *r->r_url = *route->r_url; /* Fix broken (Record-)Routes without <> */ if (r->r_url->url_params == NULL - && r->r_params - && r->r_params[0] + && r->r_params + && r->r_params[0] && (r->r_params[0][0] == 'l' || r->r_params[0][0] == 'L') && (r->r_params[0][1] == 'r' || r->r_params[0][1] == 'R') && (r->r_params[0][2] == '=' || r->r_params[0][2] == 0)) @@ -658,7 +658,7 @@ /**@ingroup sip_route * - * Fix and duplicate a @Route header. + * Fix and duplicate a @Route header. * * Copy a route header like @RecordRoute or @Path as @Route. * @@ -698,14 +698,14 @@ for (r = route; r; r = r->r_next) { /* Keep track of first header structure on this header line */ - if (!h + if (!h || (char *)h->sh_data + h->sh_len != r->r_common->h_data || r->r_common->h_len) h = (sip_header_t *)r; if (r->r_url->url_params == NULL - && r->r_params - && r->r_params[0] + && r->r_params + && r->r_params[0] && (r->r_params[0][0] == 'l' || r->r_params[0][0] == 'L') && (r->r_params[0][1] == 'r' || r->r_params[0][1] == 'R') && (r->r_params[0][2] == '=' || r->r_params[0][2] == 0)) { @@ -723,7 +723,7 @@ /**@ingroup sip_via * - * Get first via header and remove it from its fragment chain. + * Get first via header and remove it from its fragment chain. */ sip_via_t *sip_via_remove(msg_t *msg, sip_t *sip) { @@ -731,7 +731,7 @@ if (sip == NULL) return NULL; - + for (v = sip->sip_via; v; v = v->v_next) { sip_fragment_clear(v->v_common); @@ -762,12 +762,12 @@ return total; } -/** +/** * Remove extra parameters from an AOR URL. * * The extra parameters listed in the @RFC3261 table 1 include port number, * method, maddr, ttl, transport, lr and headers. - * + * * @note The funtion modifies the @a url and the strings attached to it. * * @retval 0 when successful @@ -783,9 +783,9 @@ if (url->url_params) url_strip_transport(url); - + if (url->url_params) - url->url_params = + url->url_params = url_strip_param_string((char *)url->url_params, "lr"); return 0; @@ -809,7 +809,7 @@ for (;;s = s->sa_next, v = v->sa_next) { if (s == NULL || v == NULL) return (s == NULL) - (v == NULL); - + if ((retval = str0cmp(s->sa_mec, v->sa_mec))) return retval; @@ -827,7 +827,7 @@ } for (i = 0, j = 0;; i++, j++) { - if (digest && v_params[j] && + if (digest && v_params[j] && strncasecmp(v_params[j], "d-ver=", 6) == 0) { if (return_d_ver) *return_d_ver = v_params[j] + strlen("d-ver="); @@ -835,8 +835,8 @@ } retval = str0cmp(s_params[i], v_params[j]); - - if (retval || s_params[i] == NULL || v_params[j] == NULL) + + if (retval || s_params[i] == NULL || v_params[j] == NULL) break; } @@ -845,7 +845,7 @@ } } -/** Select best mechanism from @SecurityClient header. +/** Select best mechanism from @SecurityClient header. * * @note We assume that @SecurityServer header in @a s is sorted by * preference. @@ -871,11 +871,11 @@ /**Checks if the response with given response code terminates dialog or * dialog usage. - * + * * @return -1 if the response with given code terminates whole dialog. * @return 1 if the response terminates the dialog usage. * @return 0 if the response does not terminate dialog or dialog usage. - * + * * @return * The @a *return_graceful_terminate_usage is set to 1, if application * should gracefully terminate its dialog usage. It is set to 0, if no @@ -892,25 +892,25 @@ enum { no_effect, terminate_usage = 1, terminate_dialog = -1 }; int dummy; - if (!return_graceful_terminate_usage) + if (!return_graceful_terminate_usage) return_graceful_terminate_usage = &dummy; if (response_code < 300) return *return_graceful_terminate_usage = 0; - /* + /* 3xx responses: Redirection mid-dialog is not well understood in SIP, but whatever effect it has impacts the entire dialog and all of its usages equally. In our example scenario, both the subscription and the invite usage would be redirected by this single response. */ - if (response_code < 400) + if (response_code < 400) return *return_graceful_terminate_usage = 0; if (response_code < 500) switch (response_code) { default: - case 400: /** @par 400 and unrecognized 4xx responses + case 400: /** @par 400 and unrecognized 4xx responses These responses affect only the NOTIFY transaction, not the subscription, the dialog it resides in (beyond affecting the local @@ -921,16 +921,16 @@ *return_graceful_terminate_usage = 0; return 0; - case 401: + case 401: case 407: /** @par 401 Unauthorized and 407 Proxy Authentication Required This request, not the subscription or dialog, is being challenged. The usages and dialog are not terminated. - */ + */ *return_graceful_terminate_usage = 0; return 0; - case 402: /** @par 402 Payment Required + case 402: /** @par 402 Payment Required This is a reserved response code. If encountered, it should be treated as an unrecognized 4xx. @@ -938,7 +938,7 @@ *return_graceful_terminate_usage = 0; return 0; - case 403: /** @par 403 Forbidden + case 403: /** @par 403 Forbidden This response terminates the subscription, but has no effect on any other usages of the dialog. In our example scenario, the @@ -948,8 +948,8 @@ */ *return_graceful_terminate_usage = 0; return 0; - - case 404: /** @par 404 Not Found + + case 404: /** @par 404 Not Found This response destroys the dialog and all usages sharing it. The Request-URI that is being 404ed is the remote target set by the @@ -958,7 +958,7 @@ */ return terminate_dialog; - case 405: /** @par 405 Method Not Allowed + case 405: /** @par 405 Method Not Allowed In our example scenario, this response destroys the subscription, but not the invite usage or the dialog. It's an aberrant case for @@ -977,9 +977,9 @@ return 0; } - case 406: /** @par 406 Not Acceptable + case 406: /** @par 406 Not Acceptable - These responses concern details of the message in the transaction. + These responses concern details of the message in the transaction. Subsequent requests in this same usage may succeed. Neither the usage nor dialog is terminated, other usages sharing this dialog are unaffected. @@ -987,7 +987,7 @@ *return_graceful_terminate_usage = 0; return 0; - case 408: /** @par 408 Request Timeout + case 408: /** @par 408 Request Timeout Receiving a 408 will have the same effect on usages and dialogs as a real transaction timeout as described in @@ -995,7 +995,7 @@ */ return terminate_usage; - case 410: /** @par 410 Gone + case 410: /** @par 410 Gone This response destroys the dialog and all usages sharing it. The Request-URI that is being rejected is the remote target @@ -1007,13 +1007,13 @@ */ return terminate_dialog; - case 412: /* Conditional Request Failed: */ + case 412: /* Conditional Request Failed: */ case 413: /* Request Entity Too Large: */ case 414: /* Request-URI Too Long: */ case 415: /* Unsupported Media Type: */ - /** @par 412, 413, 414 and 415 + /** @par 412, 413, 414 and 415 - These responses concern details of the message in the transaction. + These responses concern details of the message in the transaction. Subsequent requests in this same usage may succeed. Neither the usage nor dialog is terminated, other usages sharing this dialog are unaffected. @@ -1021,7 +1021,7 @@ *return_graceful_terminate_usage = 0; return 0; - case 416: /** @par 416 Unsupported URI Scheme + case 416: /** @par 416 Unsupported URI Scheme Similar to 404 and 410, this response came to a request whose Request-URI was provided by the peer in a @@ -1038,7 +1038,7 @@ @CSeq. No other usages of the dialog are affected. */ - case 420: /* Bad Extension */ + case 420: /* Bad Extension */ case 421: /* Extension Required */ /** @par 420 Bad Extension and 421 Extension Required @@ -1060,7 +1060,7 @@ usages are unaffected. */ - case 423: /** @par 423 Interval Too Brief + case 423: /** @par 423 Interval Too Brief This response won't happen in our example scenario, but if it came in response to a re-SUBSCRIBE, the @@ -1075,11 +1075,11 @@ affected by a change in its local @CSeq. No other usages of the dialog are affected. */ - case 429: /** @par 429 Provide Referrer Identity + case 429: /** @par 429 Provide Referrer Identity This response won't be returned to a NOTIFY as in our example scenario, but when it is returned to a REFER, it is objecting to - the REFER request itself, not any usage the REFER occurs within. + the REFER request itself, not any usage the REFER occurs within. The usage is unaffected. Any other usages sharing this dialog are unaffected. The dialog is only affected by a change in its local @CSeq. @@ -1087,7 +1087,7 @@ case 436: case 437: case 438: /** @par 436 Bad Identity-Info, 437 Unsupported Certificate, 438 Invalid \ - * Identity Header + * Identity Header * * These responses object to the request, not the usage. * The usage is not affected. The dialog is only affected by a @@ -1110,7 +1110,7 @@ return terminate_usage; - case 481: /** @par 481 Call/Transaction Does Not Exist + case 481: /** @par 481 Call/Transaction Does Not Exist This response indicates that the peer has lost its copy of the dialog state. The dialog and any usages sharing it are destroyed. @@ -1136,7 +1136,7 @@ return terminate_usage; - case 482: /** @par 482 Loop Detected + case 482: /** @par 482 Loop Detected This response is aberrant mid-dialog. It will only occur if the @RecordRoute header field was improperly @@ -1144,12 +1144,12 @@ initial usage, or if a mid-dialog request forks and merges (which should never happen). Future requests using this dialog state will also fail. The dialog and any usages sharing it are - destroyed. + destroyed. */ return terminate_dialog; - case 483: /** @par 483 Too Many Hops + case 483: /** @par 483 Too Many Hops Similar to 482, receiving this mid-dialog is aberrant. Unlike 482, recovery may be possible by increasing @@ -1158,7 +1158,7 @@ than it used for an initial request). If the request isn't tried with an increased @MaxForwards, then the agent should attempt to gracefully terminate this usage and all other usages that share - its dialog. + its dialog. */ *return_graceful_terminate_usage = 1; return 0; @@ -1174,7 +1174,7 @@ */ return terminate_dialog; - case 486: /** @par 486 Busy Here + case 486: /** @par 486 Busy Here This response is non-sensical in our example scenario, or in any scenario where this response comes inside an established @@ -1190,7 +1190,7 @@ *return_graceful_terminate_usage = 0; return 0; - case 487: /** @par 487 Request Terminated + case 487: /** @par 487 Request Terminated This response speaks to the disposition of a particular request (transaction). The usage in which that request @@ -1201,7 +1201,7 @@ *return_graceful_terminate_usage = 0; return 0; - case 488: /** @par 488 Not Acceptable Here + case 488: /** @par 488 Not Acceptable Here This response is objecting to the request, not the usage. The usage is not affected. The dialog is only @@ -1211,7 +1211,7 @@ *return_graceful_terminate_usage = 0; return 0; - case 489: /** @par 489 Bad Event + case 489: /** @par 489 Bad Event In our example scenario, @RFC3265 declares that the subscription usage in which the NOTIFY is sent is terminated. The @@ -1224,7 +1224,7 @@ *return_graceful_terminate_usage = 0; return method == sip_method_notify ? terminate_usage : no_effect; - case 491: /** @par 491 Request Pending + case 491: /** @par 491 Request Pending This response addresses in-dialog request glare. Its affect is scoped to the request. The usage in which the @@ -1235,7 +1235,7 @@ *return_graceful_terminate_usage = 0; return 0; - case 493: /** @par 493 Undecipherable + case 493: /** @par 493 Undecipherable This response objects to the request, not the usage. The usage is not affected. The dialog is only affected by @@ -1245,7 +1245,7 @@ *return_graceful_terminate_usage = 0; return 0; - case 494: /** @par 494 Security Agreement Required + case 494: /** @par 494 Security Agreement Required This response is objecting to the request, not the usage. The usage is not affected. The dialog is @@ -1278,7 +1278,7 @@ /* Do not change *return_graceful_terminate_usage */ return 0; - case 501: /** @par 501 Not Implemented + case 501: /** @par 501 Not Implemented This would be a degenerate response in our example scenario since the NOTIFY is being sent as part of an @@ -1294,7 +1294,7 @@ /* Do not change *return_graceful_terminate_usage */ return 0; - case 502: /** @par 502 Bad Gateway + case 502: /** @par 502 Bad Gateway This response is aberrant mid-dialog. It will only occur if the @RecordRoute header field was improperly constructed by the @@ -1304,7 +1304,7 @@ */ return terminate_dialog; - case 503: /** @par 503 Service Unavailable + case 503: /** @par 503 Service Unavailable As per @RFC3263, the logic handling locating SIP servers for transactions may handle 503 requests (effectively sequentially @@ -1321,7 +1321,7 @@ /* Do not change *return_graceful_terminate_usage */ return 0; - case 504: /** @par 504 Server Time-out + case 504: /** @par 504 Server Time-out It is not obvious under what circumstances this response would be returned to a request in an existing dialog. If @@ -1342,7 +1342,7 @@ *return_graceful_terminate_usage = 0; return 0; - case 580: /** @par 580 Precondition Failure + case 580: /** @par 580 Precondition Failure This response is objecting to the request, not the usage. The usage is not affected. The dialog is only @@ -1360,7 +1360,7 @@ Unlike 400 Bad Request, a 600 response code says something about the recipient user, not the request that was made. This end user - is stating an unwillingness to communicate. + is stating an unwillingness to communicate. If the response contains a @RetryAfter header field value, the user is indicating willingness to communicate later and the @@ -1378,7 +1378,7 @@ /* Do not change graceful_terminate */ return 0; - case 603: /** @par 603 Decline + case 603: /** @par 603 Decline This response declines the action indicated by the associated request. It can be used, for example, to decline a @@ -1389,7 +1389,7 @@ *return_graceful_terminate_usage = 0; return 0; - case 604: /** @par 604 Does Not Exist Anywhere + case 604: /** @par 604 Does Not Exist Anywhere Like 404, this response destroys the dialog and all usages sharing it. The Request-URI that is being @@ -1399,7 +1399,7 @@ */ return terminate_dialog; - case 606: /** @par 606 Not Acceptable + case 606: /** @par 606 Not Acceptable This response is objecting to aspects of the associated request, not the usage the request appears in. The Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip.h Tue Dec 16 13:05:22 2008 @@ -26,8 +26,8 @@ /** Defined when has been included. */ #define SIP_H -/**@file sofia-sip/sip.h - * +/**@file sofia-sip/sip.h + * * SIP objects. * * @author Pekka Pessi . @@ -185,7 +185,7 @@ typedef msg_list_t sip_require_t; typedef struct sip_retry_after_s sip_retry_after_t; typedef struct sip_route_s sip_route_t; -typedef struct sip_rseq_s sip_rseq_t; +typedef struct sip_rseq_s sip_rseq_t; typedef struct msg_generic_s sip_server_t; typedef struct sip_session_expires_s sip_session_expires_t; @@ -256,7 +256,7 @@ sip_rack_t *sip_rack; /**< RAck */ /* Caller Preferences */ - sip_request_disposition_t *sip_request_disposition; + sip_request_disposition_t *sip_request_disposition; /**< Request-Disposition (d) */ sip_accept_contact_t *sip_accept_contact;/**< Accept-Contact (a) */ sip_reject_contact_t *sip_reject_contact;/**< Reject-Contact (j) */ @@ -288,7 +288,7 @@ /* RFC 3265 */ sip_event_t *sip_event; /**< Event (o) */ sip_allow_events_t *sip_allow_events; /**< Allow-Events (u) */ - sip_subscription_state_t *sip_subscription_state; + sip_subscription_state_t *sip_subscription_state; /**< Subscription-State */ sip_proxy_authenticate_t *sip_proxy_authenticate; @@ -297,7 +297,7 @@ /**< Proxy-Authentication-Info */ sip_proxy_authorization_t *sip_proxy_authorization; /**< Proxy-Authorization */ - sip_authorization_t *sip_authorization; + sip_authorization_t *sip_authorization; /**< Authorization */ sip_www_authenticate_t *sip_www_authenticate; /**< WWW-Authenticate */ @@ -333,17 +333,17 @@ /* Entity headers */ sip_mime_version_t *sip_mime_version; /**< MIME-Version */ sip_content_type_t *sip_content_type; /**< Content-Type (c) */ - sip_content_encoding_t *sip_content_encoding; + sip_content_encoding_t *sip_content_encoding; /**< Content-Encoding (e) */ sip_content_language_t *sip_content_language; /**< Content-Language */ - sip_content_disposition_t *sip_content_disposition; + sip_content_disposition_t *sip_content_disposition; /**< Content-Disposition */ sip_content_length_t *sip_content_length;/**< Content-Length (l) */ /* === Headers end here */ sip_unknown_t *sip_unknown; /**< Unknown headers */ - sip_separator_t *sip_separator; + sip_separator_t *sip_separator; /**< Separator between headers and payload */ sip_payload_t *sip_payload; /**< Message payload */ msg_multipart_t *sip_multipart; /**< Multipart MIME payload */ @@ -386,7 +386,7 @@ url_t a_url[1]; /**< URL */ msg_param_t const *a_params; /**< Parameter table */ char const *a_comment; /**< Comment */ - + char const *a_tag; /**< Tag parameter */ }; @@ -416,7 +416,7 @@ msg_common_t k_common[1]; /**< Common fragment info */ msg_list_t *k_next; /**< Link to next */ msg_param_t *k_items; /**< List of allowed items */ - uint32_t k_bitmap; /**< Bitmap of allowed methods. + uint32_t k_bitmap; /**< Bitmap of allowed methods. @NEW_1_12_5. */ }; @@ -432,10 +432,10 @@ msg_param_t const *ai_params; /**< List of authentication info */ }; -/**@ingroup sip_call_id +/**@ingroup sip_call_id * @brief Structure for @CallID (and @InReplyTo) header fields. */ -struct sip_call_id_s { +struct sip_call_id_s { sip_common_t i_common[1]; /**< Common fragment info */ sip_call_id_t *i_next; /**< Link to next (In-Reply-To) */ char const *i_id; /**< ID value */ @@ -531,7 +531,7 @@ /**@ingroup sip_event * @brief Structure for @Event header. */ -struct sip_event_s +struct sip_event_s { sip_common_t o_common[1]; /**< Common fragment info */ sip_error_t *o_next; /**< Link to next (dummy) */ @@ -686,7 +686,7 @@ msg_param_t const *r_params; /**< List of route parameters */ }; -/**@ingroup sip_rseq +/**@ingroup sip_rseq * @brief Structure for @RSeq header. */ struct sip_rseq_s @@ -696,7 +696,7 @@ unsigned long rs_response; /**< Sequence number of response */ }; -/**@ingroup sip_session_expires +/**@ingroup sip_session_expires * @brief Structure for @SessionExpires header. */ struct sip_session_expires_s @@ -709,7 +709,7 @@ * parameter: UAS or UAC */ }; -/**@ingroup sip_min_se +/**@ingroup sip_min_se * @brief Structure for @MinSE header. */ struct sip_min_se_s @@ -720,7 +720,7 @@ msg_param_t const *min_params; /**< List of extension parameters */ }; -/**@ingroup sip_subscription_state +/**@ingroup sip_subscription_state * @brief Structure for @SubscriptionState header. */ struct sip_subscription_state_s @@ -728,7 +728,7 @@ sip_common_t ss_common[1]; /**< Common fragment info */ sip_error_t *ss_next; /**< Dummy link to next */ /** Subscription state: "pending", "active" or "terminated" */ - char const *ss_substate; + char const *ss_substate; msg_param_t const *ss_params; /**< List of parameters */ char const *ss_reason; /**< Reason for termination */ char const *ss_expires; /**< Subscription lifetime */ @@ -738,7 +738,7 @@ /**@ingroup sip_timestamp * @brief Structure for @Timestamp header. */ -struct sip_timestamp_s +struct sip_timestamp_s { sip_common_t ts_common[1]; /**< Common fragment info */ sip_error_t *ts_next; /**< Dummy link to next */ @@ -773,7 +773,7 @@ struct sip_security_agree_s { sip_common_t sa_common[1]; /**< Common fragment info */ - struct sip_security_agree_s + struct sip_security_agree_s *sa_next; /**< Link to next mechanism */ char const *sa_mec; /**< Security mechanism */ msg_param_t const *sa_params; /**< List of mechanism parameters */ @@ -798,7 +798,7 @@ */ union sip_header_u { - sip_common_t sh_common[1]; + sip_common_t sh_common[1]; struct { sip_common_t shn_common; @@ -832,7 +832,7 @@ sip_cseq_t sh_cseq[1]; sip_rseq_t sh_rseq[1]; sip_rack_t sh_rack[1]; - + sip_subject_t sh_subject[1]; sip_priority_t sh_priority[1]; @@ -851,7 +851,7 @@ sip_accept_t sh_accept[1]; sip_accept_encoding_t sh_accept_encoding[1]; sip_accept_language_t sh_accept_language[1]; - + sip_allow_t sh_allow[1]; sip_require_t sh_require[1]; sip_proxy_require_t sh_proxy_require[1]; @@ -864,8 +864,8 @@ sip_proxy_authenticate_t sh_proxy_authenticate[1]; sip_proxy_authentication_info_t sh_proxy_authentication_info[1]; - sip_proxy_authorization_t sh_proxy_authorization[1]; - + sip_proxy_authorization_t sh_proxy_authorization[1]; + sip_authorization_t sh_authorization[1]; sip_www_authenticate_t sh_www_authenticate[1]; sip_authentication_info_t sh_authentication_info[1]; @@ -882,7 +882,7 @@ sip_request_disposition_t sh_request_disposition[1]; sip_accept_contact_t sh_accept_contact[1]; sip_reject_contact_t sh_reject_contact[1]; - + sip_session_expires_t sh_session_expires[1]; sip_min_se_t sh_min_se[1]; @@ -899,7 +899,7 @@ sip_etag_t sh_etag[1]; sip_if_match_t sh_if_match[1]; - + /* Entity headers */ sip_mime_version_t sh_mime_version[1]; sip_content_type_t sh_content_type[1]; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_hclasses.h.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_hclasses.h.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_hclasses.h.in Tue Dec 16 13:05:22 2008 @@ -1,11 +1,11 @@ -/** -*- C -*- +/** -*- C -*- * * @file sofia-sip/sip_hclasses.h.in * * Template for . */ -/* +/* * This file is part of the Sofia-SIP package * * Copyright (C) 2005 Nokia Corporation. @@ -35,9 +35,9 @@ /**@file sofia-sip/sip_hclasses.h * @brief Declarations of SIP header classes. - * + * * #AUTO# - * + * * @author Pekka Pessi * * @date Created: Thu Jan 23 19:26:31 2003 ppessi @@ -50,18 +50,18 @@ SOFIA_BEGIN_DECLS -enum { - /**@ingroup sip_#xxxxxx# @internal +enum { + /**@ingroup sip_#xxxxxx# @internal * * Hash of @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#". * * @since New in #version#. */ - sip_#xxxxxx#_hash = #hash# + sip_#xxxxxx#_hash = #hash# }; /**Header class for @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#". - * + * * The header class sip_#xxxxxx#_class defines how a SIP * @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" is parsed and printed. * It also contains methods used by SIP parser and other functions to Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_header.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_header.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_header.h Tue Dec 16 13:05:22 2008 @@ -24,9 +24,9 @@ #ifndef SIP_HEADER_H /**Defined when has been included.*/ -#define SIP_HEADER_H +#define SIP_HEADER_H -/**@file sofia-sip/sip_header.h +/**@file sofia-sip/sip_header.h * * SIP parser library prototypes. * @@ -96,7 +96,7 @@ msg_hclass_t *hc, sip_header_t const *o); /** Add duplicates of headers to the SIP message. */ -SOFIAPUBFUN int sip_add_headers(msg_t *msg, sip_t *sip, +SOFIAPUBFUN int sip_add_headers(msg_t *msg, sip_t *sip, void const *extra, va_list headers); /** Add duplicates of headers from taglist to the SIP message. */ @@ -127,11 +127,11 @@ /* Use __attribute__ to allow argument checking for sip_header_format() */ #if !defined(__GNUC__) && !defined(__attribute__) -#define __attribute__(x) +#define __attribute__(x) #endif /** Make a SIP header with formatting provided. */ -SOFIAPUBFUN sip_header_t *sip_header_format(su_home_t *home, +SOFIAPUBFUN sip_header_t *sip_header_format(su_home_t *home, msg_hclass_t *hc, char const *fmt, ...) @@ -154,15 +154,15 @@ SOFIAPUBVAR char const sip_method_name_notify[]; SOFIAPUBVAR char const sip_method_name_refer[]; -/** @internal UDP transport version string. */ +/** @internal UDP transport version string. */ SOFIAPUBVAR char const sip_transport_udp[]; -/** @internal TCP transport version string. */ +/** @internal TCP transport version string. */ SOFIAPUBVAR char const sip_transport_tcp[]; -/** @internal SCTP transport version string. */ +/** @internal SCTP transport version string. */ SOFIAPUBVAR char const sip_transport_sctp[]; -/** @internal TLS transport version string. */ +/** @internal TLS transport version string. */ SOFIAPUBVAR char const sip_transport_tls[]; -/** @internal SIP version string. */ +/** @internal SIP version string. */ SOFIAPUBVAR char const sip_version_2_0[]; #define SIP_VERSION_CURRENT sip_version_2_0 @@ -217,12 +217,12 @@ char const *domain); /** Create a @CSeq header object. */ -SOFIAPUBFUN sip_cseq_t *sip_cseq_create(su_home_t *, uint32_t seq, +SOFIAPUBFUN sip_cseq_t *sip_cseq_create(su_home_t *, uint32_t seq, unsigned method, char const *name); /** Create a @Contact header object. */ -SOFIAPUBFUN sip_contact_t * sip_contact_create(su_home_t *, - url_string_t const *url, +SOFIAPUBFUN sip_contact_t * sip_contact_create(su_home_t *, + url_string_t const *url, char const *param, /* char const *params, */ ...); @@ -245,7 +245,7 @@ SOFIAPUBFUN sip_expires_t *sip_expires_create(su_home_t *, sip_time_t delta); /** Create a @Route header object. */ -SOFIAPUBFUN sip_route_t *sip_route_create(su_home_t *home, url_t const *url, +SOFIAPUBFUN sip_route_t *sip_route_create(su_home_t *home, url_t const *url, url_t const *maddr); /** Create a @RecordRoute header object. */ @@ -263,10 +263,10 @@ SOFIAPUBFUN int sip_to_tag(su_home_t *, sip_to_t *to, char const *tag); -/** Create a @Via object. */ +/** Create a @Via object. */ SOFIAPUBFUN sip_via_t *sip_via_create(su_home_t *h, char const *host, - char const *port, + char const *port, char const *transport, /* char const *params */ ...); @@ -277,7 +277,7 @@ { char const *tp = v->v_protocol; if (tp) { - tp = strchr(tp, '/'); + tp = strchr(tp, '/'); if (tp) { tp = strchr(tp + 1, '/'); if (tp) @@ -297,12 +297,12 @@ /**@ingroup sip_payload * - * Initialize a SIP payload structure with pointer to data and its length. + * Initialize a SIP payload structure with pointer to data and its length. * * The SIP_PAYLOAD_INIT2() macro initializes a #sip_payload_t header * structure with a pointer to data and its length in octets. For * instance, - * @code + * @code * sip_payload_t txt_payload = SIP_PAYLOAD_INIT2(txt, strlen(txt)); * @endcode * @@ -310,7 +310,7 @@ * from heap is not required, for instance, when the resulting payload * structure is immediately copied. * - * @HIDE + * @HIDE */ #define SIP_PAYLOAD_INIT2(data, length) \ {{{ 0, 0, sip_payload_class, data, length }, NULL, data, length }} @@ -321,7 +321,7 @@ /** Check that a required feature is supported. */ SOFIAPUBFUN sip_unsupported_t *sip_has_unsupported(su_home_t *, - sip_supported_t const *support, + sip_supported_t const *support, sip_require_t const *require); SOFIAPUBFUN @@ -349,7 +349,7 @@ int sip_has_feature(msg_list_t const *supported, char const *feature); /** Return true if the method is listed in @Allow header. */ -SOFIAPUBFUN int sip_is_allowed(sip_allow_t const *allow, +SOFIAPUBFUN int sip_is_allowed(sip_allow_t const *allow, sip_method_t method, char const *name); /** Check if the well-known method is listed in @Allow header. @NEW_1_12_6. */ @@ -404,7 +404,7 @@ * * @MinExpires, @Authorization, @Path, @Supported, @Contact, @Require, and * @Expires. - * + * */ sip_mask_registrar = (1 << 4), @@ -419,7 +419,7 @@ /** Bit marking essential headers for SIP events. * * @Event, @Expires, and @SubscriptionState. - * + * * @sa @RFC3265. */ sip_mask_events = (1 << 6), @@ -427,7 +427,7 @@ /** Bit marking essential headers for session timer extension. * * @SessionExpires, and @MinSE. - * + * * @RFC4028 */ sip_mask_timer = (1 << 7), @@ -435,7 +435,7 @@ /** Bit marking essential headers for privacy extension. * * @Privacy. - * + * * @sa @RFC3323 */ sip_mask_privacy = (1 << 8), @@ -443,7 +443,7 @@ /** Bit marking essential headers for caller preference extension. * * @RequestDisposition, @AcceptContact, and @RejectContact. - * + * * @sa @RFC3841. */ sip_mask_pref = (1 << 9), @@ -451,13 +451,13 @@ /** Bit marking essential headers for PUBLISH servers and clients. * * @SIPETag, and @SIPIfMatch. - * + * * @sa @RFC3903. */ sip_mask_publish = (1 << 10) /* NOTE: - * When adding bits, please update nta_agent_create() and + * When adding bits, please update nta_agent_create() and * NTATAG_BAD_RESP_MASK()/NTATAG_BAD_REQ_MASK() documentation. */ }; @@ -482,15 +482,15 @@ /** Calculate the size of a SIP header and associated memory areas. */ SOFIAPUBFUN isize_t sip_header_size(sip_header_t const *h); -/** Duplicate (deep copy) a SIP header or whole list. */ +/** Duplicate (deep copy) a SIP header or whole list. */ SOFIAPUBFUN sip_header_t *sip_header_dup(su_home_t *, sip_header_t const *); /** Copy a SIP header or whole list. */ SOFIAPUBFUN sip_header_t *sip_header_copy(su_home_t *, sip_header_t const *o); /** Add an event to @AllowEvents header. */ -SOFIAPUBFUN int sip_allow_events_add(su_home_t *, - sip_allow_events_t *ae, +SOFIAPUBFUN int sip_allow_events_add(su_home_t *, + sip_allow_events_t *ae, char const *e); /** Add a parameter to a @Contact header object. */ @@ -501,7 +501,7 @@ SOFIAPUBFUN int sip_from_add_param(su_home_t *, sip_from_t *, char const *); -/** Add a parameter to a @Via header object. */ +/** Add a parameter to a @Via header object. */ SOFIAPUBFUN int sip_via_add_param(su_home_t *, sip_via_t *, char const *); #define sip_from_make_url sip_from_create @@ -510,4 +510,4 @@ SOFIA_END_DECLS -#endif +#endif Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_parser.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_parser.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_parser.h Tue Dec 16 13:05:22 2008 @@ -24,10 +24,10 @@ #ifndef SIP_PARSER_H /** Defined when has been included.*/ -#define SIP_PARSER_H +#define SIP_PARSER_H -/**@ingroup sip_parser +/**@ingroup sip_parser * @file sofia-sip/sip_parser.h * * SIP parser provider interface. @@ -130,11 +130,11 @@ msg_param_t const **return_params, char const **return_comment); -SOFIAPUBFUN issize_t sip_name_addr_e(char b[], isize_t bsiz, - int flags, - char const *display, +SOFIAPUBFUN issize_t sip_name_addr_e(char b[], isize_t bsiz, + int flags, + char const *display, int always_ltgt, url_t const url[], - msg_param_t const params[], + msg_param_t const params[], char const *comment); SOFIAPUBFUN isize_t sip_name_addr_xtra(char const *display, url_t const *addr, @@ -143,7 +143,7 @@ SOFIAPUBFUN char *sip_name_addr_dup(char const **d_display, char const *display, url_t *d_addr, url_t const *addr, - msg_param_t const **d_params, + msg_param_t const **d_params, msg_param_t const params[], char *b, isize_t xtra); @@ -167,7 +167,7 @@ #define sip_generic_dup_one msg_generic_dup_one -#define sip_auth_d msg_auth_d +#define sip_auth_d msg_auth_d #define sip_auth_e msg_auth_e #define sip_header_dup_as msg_header_dup_as @@ -205,12 +205,12 @@ SOFIAPUBFUN int sip_generic_xtra(sip_generic_t const *g); -SOFIAPUBFUN sip_generic_t *sip_generic_dup(su_home_t *home, - msg_hclass_t *hc, +SOFIAPUBFUN sip_generic_t *sip_generic_dup(su_home_t *home, + msg_hclass_t *hc, sip_generic_t const *u); SOFIAPUBFUN sip_generic_t *sip_generic_copy(su_home_t *home, - msg_hclass_t *hc, + msg_hclass_t *hc, sip_generic_t const *o); SOFIA_END_DECLS Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_protos.h.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_protos.h.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_protos.h.in Tue Dec 16 13:05:22 2008 @@ -30,14 +30,14 @@ #ifndef SIP_PROTOS_H /** Defined when has been included. */ -#define SIP_PROTOS_H - +#define SIP_PROTOS_H + /**@file sofia-sip/sip_protos.h - * + * * SIP prototypes and macros for each header. - * + * * #AUTO# - * + * * @author Pekka Pessi . * */ @@ -86,7 +86,7 @@ return msg_header_insert(msg, (msg_pub_t *)sip, (msg_header_t *)h); } -/** Remove a header from a SIP message. */ +/** Remove a header from a SIP message. */ su_inline int sip_header_remove(msg_t *msg, sip_t *sip, sip_header_t *h) { @@ -131,22 +131,22 @@ /**Access a SIP @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" * structure #sip_#xxxxxx#_t from #sip_t. - * + * * @since New in #version#. */ #define sip_#xxxxxx#(sip) \ ((sip_#xxxxxx#_t *)msg_header_access((msg_pub_t*)(sip), sip_#xxxxxx#_class)) /**Initializer for structure #sip_#xxxxxx#_t. - * + * * A static #sip_#xxxxxx#_t structure for * @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" must be initialized with - * the SIP_#XXXXXX#_INIT() macro. + * the SIP_#XXXXXX#_INIT() macro. * For instance, - * @code - * + * @code + * * sip_#xxxxxx#_t sip_#xxxxxx# = SIP_#XXXXXX#_INIT; - * + * * @endcode * @HI * @@ -155,16 +155,16 @@ #define SIP_#XXXXXX#_INIT() SIP_HDR_INIT(#xxxxxx#) /**Initialize a structure #sip_#xxxxxx#_t. - * + * * An #sip_#xxxxxx#_t structure for * @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" can be initialized with the * sip_#xxxxxx#_init() function/macro. For instance, * @code - * + * * sip_#xxxxxx#_t sip_#xxxxxx#; - * + * * sip_#xxxxxx#_init(&sip_#xxxxxx#); - * + * * @endcode * @HI * @@ -181,14 +181,14 @@ #endif /**Test if header object is instance of #sip_#xxxxxx#_t. - * + * * Check if the header class is an instance of * @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" object and return true (nonzero), * otherwise return false (zero). - * + * * @param header pointer to the header structure to be tested - * - * @retval 1 (true) if the @a header is an instance of header #xxxxxx# + * + * @retval 1 (true) if the @a header is an instance of header #xxxxxx# * @retval 0 (false) otherwise * * @since New in #version#. @@ -206,27 +206,27 @@ /**Duplicate a list of @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" header structures #sip_#xxxxxx#_t. - * + * * Duplicate a header * structure @a hdr. If the header structure @a hdr * contains a reference (@c hdr->x_next) to a list of * headers, all the headers in the list are duplicated, too. - * + * * @param home memory home used to allocate new structure * @param hdr header structure to be duplicated - * + * * When duplicating, all parameter lists and non-constant * strings attached to the header are copied, too. The * function uses given memory @a home to allocate all the * memory areas used to copy the header. - * + * * @par Example * @code - * + * * #xxxxxx# = sip_#xxxxxx#_dup(home, sip->sip_#xxxxxx#); - * + * * @endcode - * + * * @return * A pointer to the * newly duplicated #sip_#xxxxxx#_t header structure, or NULL @@ -237,42 +237,42 @@ #if SU_HAVE_INLINE su_inline #endif -sip_#xxxxxx#_t *sip_#xxxxxx#_dup(su_home_t *home, sip_#xxxxxx#_t const *hdr) +sip_#xxxxxx#_t *sip_#xxxxxx#_dup(su_home_t *home, sip_#xxxxxx#_t const *hdr) __attribute__((__malloc__)); #if SU_HAVE_INLINE su_inline sip_#xxxxxx#_t *sip_#xxxxxx#_dup(su_home_t *home, sip_#xxxxxx#_t const *hdr) -{ +{ return (sip_#xxxxxx#_t *) msg_header_dup_as(home, sip_#xxxxxx#_class, (msg_header_t const *)hdr); } #endif /**Copy a list of @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" header structures #sip_#xxxxxx#_t. - * + * * The function sip_#xxxxxx#_copy() copies a header structure @a * hdr. If the header structure @a hdr contains a reference (@c * hdr->h_next) to a list of headers, all the headers in that * list are copied, too. The function uses given memory @a home * to allocate all the memory areas used to copy the list of header * structure @a hdr. - * + * * @param home memory home used to allocate new structure * @param hdr pointer to the header structure to be copied - * + * * When copying, only the header structure and parameter lists attached to * it are duplicated. The new header structure retains all the references to * the strings within the old @a hdr header, including the encoding of the * old header, if present. - * + * * @par Example * @code - * + * * #xxxxxx# = sip_#xxxxxx#_copy(home, sip->sip_#xxxxxx#); - * + * * @endcode - * + * * @return * A pointer to newly copied header structure, or NULL upon an error. * @@ -281,28 +281,28 @@ #if SU_HAVE_INLINE su_inline #endif -sip_#xxxxxx#_t *sip_#xxxxxx#_copy(su_home_t *home, sip_#xxxxxx#_t const *hdr) +sip_#xxxxxx#_t *sip_#xxxxxx#_copy(su_home_t *home, sip_#xxxxxx#_t const *hdr) __attribute__((__malloc__)); #if SU_HAVE_INLINE su_inline -sip_#xxxxxx#_t *sip_#xxxxxx#_copy(su_home_t *home, sip_#xxxxxx#_t const *hdr) -{ +sip_#xxxxxx#_t *sip_#xxxxxx#_copy(su_home_t *home, sip_#xxxxxx#_t const *hdr) +{ return (sip_#xxxxxx#_t *) - msg_header_copy_as(home, sip_#xxxxxx#_class, (msg_header_t const *)hdr); + msg_header_copy_as(home, sip_#xxxxxx#_class, (msg_header_t const *)hdr); } #endif /**Make a @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" structure #sip_#xxxxxx#_t. - * + * * The function sip_#xxxxxx#_make() makes a new * #sip_#xxxxxx#_t header structure. It allocates a new * header structure, and decodes the string @a s as the * value of the structure. - * + * * @param home memory home used to allocate new header structure. * @param s string to be decoded as value of the new header structure - * + * * @return * A pointer to newly maked #sip_#xxxxxx#_t header structure, or NULL upon an * error. @@ -310,7 +310,7 @@ * @since New in #version#. */ #if SU_HAVE_INLINE -su_inline +su_inline #endif sip_#xxxxxx#_t *sip_#xxxxxx#_make(su_home_t *home, char const *s) __attribute__((__malloc__)); @@ -323,20 +323,20 @@ #endif /**Make a @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" from formatting result. - * - * Make a new #sip_#xxxxxx#_t object using formatting result as its value. + * + * Make a new #sip_#xxxxxx#_t object using formatting result as its value. * The function first prints the arguments according to the format @a fmt * specified. Then it allocates a new header structure, and parses the * formatting result to the structure #sip_#xxxxxx#_t. - * + * * @param home memory home used to allocate new header structure. * @param fmt string used as a printf()-style format * @param ... argument list for format - * + * * @return * A pointer to newly * makes header structure, or NULL upon an error. - * + * * @HIDE * * @since New in #version#. @@ -352,11 +352,11 @@ { sip_header_t *h; va_list ap; - + va_start(ap, fmt); h = sip_header_vformat(home, sip_#xxxxxx#_class, fmt, ap); va_end(ap); - + return (sip_#xxxxxx#_t *)h; } #endif Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_status.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_status.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_status.h Tue Dec 16 13:05:22 2008 @@ -24,10 +24,10 @@ #ifndef SIP_STATUS_H /** Defined when has been included. */ -#define SIP_STATUS_H +#define SIP_STATUS_H /**@addtogroup sip_status_codes - * @{ + * @{ */ /**@file sofia-sip/sip_status.h * Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_tag.h.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_tag.h.in (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_tag.h.in Tue Dec 16 13:05:22 2008 @@ -107,7 +107,7 @@ #if SU_INLINE_TAG_CAST su_inline tag_value_t siptag_sip_v(sip_t const *v) { return (tag_value_t)v; } -su_inline +su_inline tag_value_t siptag_sip_vr(sip_t const **vp) { return (tag_value_t)vp; } #else #define siptag_sip_v(v) (tag_value_t)(v) @@ -117,8 +117,8 @@ /**Tag list item for header string. * * The SIPTAG_HEADER() macro is used to include a tag item containing an - * unknown SIP header in the tag list, e.g., - * @code + * unknown SIP header in the tag list, e.g., + * @code * sip_header_t *hdr; * * SIPTAG_HEADER(hdr). @@ -190,7 +190,7 @@ * * @param x pointer to a #sip_#xxxxxx#_t structure, or NULL. * - * The corresponding tag taking reference parameter is + * The corresponding tag taking reference parameter is * SIPTAG_#XXXXXX#_REF(). * * @since New in #version#. @@ -202,7 +202,7 @@ SOFIAPUBVAR tag_typedef_t siptag_#xxxxxx#; /**@ingroup sip_#xxxxxx# - * Tag list item for reference to a + * Tag list item for reference to a * @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" pointer. */ #define SIPTAG_#XXXXXX#_REF(x) siptag_#xxxxxx#_ref, siptag_#xxxxxx#_vr(&(x)) @@ -212,17 +212,17 @@ * * Tag list item for string with @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" value. * - * The SIPTAG_#XXXXXX#_STR() macro is used to include a tag item with a + * The SIPTAG_#XXXXXX#_STR() macro is used to include a tag item with a * string containing value of a #sip_#xxxxxx#_t header in a tag list. * - * @param s pointer to a string containing + * @param s pointer to a string containing * @ref sip_#xxxxxx# "#xxxxxxx_xxxxxxx#" value, or NULL. * * The string in SIPTAG_#XXXXXX#_STR() can be converted to a * #sip_#xxxxxx#_t header structure by giving the string @a s has * second argument to function sip_#xxxxxx#_make(). * - * The corresponding tag taking reference parameter is + * The corresponding tag taking reference parameter is * SIPTAG_#XXXXXX#_STR_REF(). * * @since New in #version#. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_tag_class.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_tag_class.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_tag_class.h Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ #ifndef SIP_TAG_CLASS_H /** Defined when have been included */ -#define SIP_TAG_CLASS_H +#define SIP_TAG_CLASS_H /**@SIP_TAG @{ */ @@ -81,9 +81,9 @@ SOFIAPUBVAR tag_class_t sipexthdrtag_class[1]; -/**@internal Filter SIP header tag items. */ +/**@internal Filter SIP header tag items. */ SOFIAPUBFUN tagi_t *siptag_filter(tagi_t *dst, tagi_t const f[], - tagi_t const *src, + tagi_t const *src, void **bb); SOFIA_END_DECLS Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_util.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_util.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_util.h Tue Dec 16 13:05:22 2008 @@ -24,9 +24,9 @@ #ifndef SIP_UTIL_H /** Defined when has been included. */ -#define SIP_UTIL_H +#define SIP_UTIL_H -/**@file sofia-sip/sip_util.h +/**@file sofia-sip/sip_util.h * @brief SIP utility functions * * @author Pekka Pessi . @@ -50,7 +50,7 @@ SOFIAPUBFUN sip_contact_t * -sip_contact_create_from_via_with_transport(su_home_t *home, +sip_contact_create_from_via_with_transport(su_home_t *home, sip_via_t const *v, char const *user, char const *transport); @@ -78,7 +78,7 @@ SOFIAPUBFUN url_t *sip_url_dup(su_home_t *sh, url_t const *o); -/**Add optional prefix and string to argument list if @a s is non-NULL. +/**Add optional prefix and string to argument list if @a s is non-NULL. * @HIDE */ #define SIP_STRLOG(prefix, s) ((s) ? (prefix) : ""), ((s) ? (s) : "") @@ -111,13 +111,13 @@ /** Check callerprefs. */ SOFIAPUBFUN int sip_prefs_matching(char const *pvalue, - char const *nvalue, + char const *nvalue, int *return_parse_error); SOFIAPUBFUN int sip_is_callerpref(char const *param); /** Type of the SIP media tag */ -enum sp_type { - sp_error = -1, +enum sp_type { + sp_error = -1, sp_init, sp_literal, sp_string, @@ -133,7 +133,7 @@ /** Literal (tag="foo"). */ struct sp_literal { - enum sp_type spl_type; + enum sp_type spl_type; char const *spl_value; usize_t spl_length; } sp_literal; @@ -155,8 +155,8 @@ }; /** Parse a single preference */ -SOFIAPUBFUN int sip_prefs_parse(union sip_pref *sp, - char const **in_out_s, +SOFIAPUBFUN int sip_prefs_parse(union sip_pref *sp, + char const **in_out_s, int *return_negation); /** Match preferences */ @@ -170,13 +170,13 @@ */ #define sip_contact_immune(m) sip_contact_is_immune(m) -SOFIAPUBFUN sip_contact_t *sip_contact_immunize(su_home_t *home, +SOFIAPUBFUN sip_contact_t *sip_contact_immunize(su_home_t *home, sip_contact_t const *m); -SOFIAPUBFUN int sip_contact_reject(sip_contact_t const *m, +SOFIAPUBFUN int sip_contact_reject(sip_contact_t const *m, sip_reject_contact_t const *rc); -SOFIAPUBFUN int sip_contact_accept(sip_contact_t const *m, +SOFIAPUBFUN int sip_contact_accept(sip_contact_t const *m, sip_accept_contact_t const *cp, unsigned *return_S, unsigned *return_N, @@ -195,7 +195,7 @@ sip_security_verify_t const *v, char const **return_d_ver); -SOFIAPUBFUN +SOFIAPUBFUN sip_security_client_t const * sip_security_client_select(sip_security_client_t const *client, sip_security_server_t const *server); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/test_date.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/test_date.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/test_date.c Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ /**@internal * - * @CFILE test_date.c + * @CFILE test_date.c * * Tester for SIP date parser * @@ -46,7 +46,7 @@ void usage(int exitcode) { - fprintf(stderr, + fprintf(stderr, "usage: test_date [SIP-date] " "[YYYYy][DDd][HHh][MMm][SS[s]]\n"); exit(exitcode); @@ -70,7 +70,7 @@ fprintf(stderr, "test_date: %s is not valid time\n", s); exit(1); } - + if ((s = av[2])) { for (delta = 0; *s; ) { t2 = 0; @@ -96,7 +96,7 @@ char buf[80]; msg_date_e(buf, sizeof(buf), t); - + if (verbatim) printf("%08lx is %s\n", t, buf); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/test_sip_msg.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/test_sip_msg.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/test_sip_msg.c Tue Dec 16 13:05:22 2008 @@ -75,7 +75,7 @@ for (i = 0; i < N; i++) { /* Verify each header entry */ msg_hclass_t *hc = mc->mc_hash[i].hr_class; - + if (hc == NULL) continue; @@ -94,7 +94,7 @@ char * url_print(url_t *url, char buf[1024]) { url_e(buf, 1024, url); - + return buf; } @@ -118,11 +118,11 @@ } fputs(buf, f); if (quoted_url) fputs(">", f); - + if (m->m_params) for (p = m->m_params; *p; p++) fprintf(f, " ;%s", *p); - + if (m->m_comment) fprintf(f, " (%s)", m->m_comment); } @@ -140,7 +140,7 @@ fprintf(f, "%s %s", v->v_protocol, v->v_host); if (v->v_port) - fprintf(f, ":%s", v->v_port); + fprintf(f, ":%s", v->v_port); if (v->v_params) for (p = v->v_params; *p; p++) @@ -158,7 +158,7 @@ size_t n; int m, tcp; sip_t *sip; - int exitcode = 0; + int exitcode = 0; msg_mclass_t const *sip_mclass = sip_default_mclass(); msg_t *msg = msg_create(sip_mclass, MSG_FLG_EXTRACT_COPY); msg_iovec_t iovec[1]; @@ -248,13 +248,13 @@ sip->sip_status->st_version, sip->sip_status->st_status, sip->sip_status->st_phrase); - + if (sip->sip_cseq) fprintf(stdout, "\tCSeq: %u %s (%d)\n", sip->sip_cseq->cs_seq, sip->sip_cseq->cs_method_name, sip->sip_cseq->cs_method); - + if (sip->sip_call_id) fprintf(stdout, "\tCall-ID: %s (%x)\n", sip->sip_call_id->i_id, @@ -264,7 +264,7 @@ fprintf(stdout, "\tFrom: %s@%s%s%s\n", sip->sip_from->a_user ? sip->sip_from->a_user : "[nobody]", sip->sip_from->a_host ? sip->sip_from->a_host : "[nowhere]", - sip->sip_from->a_tag ? " ;tag=" : "", + sip->sip_from->a_tag ? " ;tag=" : "", sip->sip_from->a_tag ? sip->sip_from->a_tag : ""); if (sip->sip_to) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/torture_sip.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/torture_sip.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/torture_sip.c Tue Dec 16 13:05:22 2008 @@ -24,7 +24,7 @@ /**@ingroup sip_test @internal * - * @CFILE torture_sip.c + * @CFILE torture_sip.c * * Unit-testing functions for SIP. * @@ -111,7 +111,7 @@ TEST_1(test_mclass = msg_mclass_clone(def0, 0, 0)); - msg = read_message(MSG_DO_EXTRACT_COPY, + msg = read_message(MSG_DO_EXTRACT_COPY, "BYE sip:foo at bar SIP/2.0\r\n" "To: ;tag=deadbeef\r\n" "From: ;\r\n" @@ -136,12 +136,12 @@ msg_destroy(msg); - TEST_1(msg_mclass_insert_header(test_mclass, + TEST_1(msg_mclass_insert_header(test_mclass, sip_p_asserted_identity_class, 0) > 0); - TEST_1(msg_mclass_insert_header(test_mclass, + TEST_1(msg_mclass_insert_header(test_mclass, sip_p_preferred_identity_class, 0) > 0); - msg = read_message(MSG_DO_EXTRACT_COPY, + msg = read_message(MSG_DO_EXTRACT_COPY, "BYE sip:foo at bar SIP/2.0\r\n" "To: ;tag=deadbeef\r\n" "From: ;\r\n" @@ -165,7 +165,7 @@ TEST_1(!sip_remote_party_id(sip)); TEST_1(home = msg_home(msg)); - + TEST_1((paid = sip_p_asserted_identity_make(home, "sip:joe at example.com"))); TEST_1((paid = sip_p_asserted_identity_make (home, "Jaska , Helmi "))); @@ -179,7 +179,7 @@ /* Now with extensions */ TEST_1(test_mclass = msg_mclass_clone(def1, 0, 0)); - msg = read_message(MSG_DO_EXTRACT_COPY, + msg = read_message(MSG_DO_EXTRACT_COPY, "BYE sip:foo at bar SIP/2.0\r\n" "To: ;tag=deadbeef\r\n" "From: ;\r\n" @@ -211,10 +211,10 @@ su_home_t *home = su_home_clone(NULL, sizeof *home); char *s; - char const canonic[] = + char const canonic[] = "\"Jaska Jokunen\" ;" "screen=yes;party=called;id-type=user;privacy=\"name,uri-network\""; - char const canonic2[] = + char const canonic2[] = "Jaska Jokunen ;" "screen=yes;party=called;id-type=user;privacy=\"name,uri-network\""; @@ -242,7 +242,7 @@ TEST_S(d->rpid_display, rpid->rpid_display); su_home_check(home); - + su_home_zap(home); } @@ -313,7 +313,7 @@ TEST_P(t[0].t_tag, siptag_from); TEST_1(f = (void *)t[0].t_value); TEST_P(t[1].t_tag, siptag_accept); TEST_1(ac = (void *)t[1].t_value); TEST_P(t[2].t_tag, siptag_payload); TEST_1(body = (void *)t[2].t_value); - TEST_P(t[3].t_tag, siptag_accept); + TEST_P(t[3].t_tag, siptag_accept); s = "xyzzy=foo"; @@ -339,7 +339,7 @@ msg_t *msg, *msg0; sip_t *sip; - msg0 = read_message(MSG_DO_EXTRACT_COPY, + msg0 = read_message(MSG_DO_EXTRACT_COPY, "MESSAGE sip:foo at bar SIP/2.0\r\n" "To: Joe User \r\n" "From: \"Bar Owner\" ;tag=foobar\r\n" @@ -357,11 +357,11 @@ TEST_1(l = sip_content_length_make(msg_home(msg), "6")); TEST_1(pl = sip_payload_make(msg_home(msg), "hello!")); - TEST_1(msg_header_replace(msg, NULL, - (void *)sip->sip_content_length, + TEST_1(msg_header_replace(msg, NULL, + (void *)sip->sip_content_length, (void *)l) >= 0); - TEST_1(msg_header_replace(msg, NULL, - (void *)sip->sip_payload, + TEST_1(msg_header_replace(msg, NULL, + (void *)sip->sip_payload, (void *)pl) >= 0); TEST(msg_serialize(msg, NULL), 0); @@ -440,7 +440,7 @@ BEGIN(); TEST_1(home); - + { sip_request_t *rq, *rq1; @@ -452,7 +452,7 @@ su_free(home, rq); su_free(home, rq1); - + rq = sip_request_make(home, "invite sip:joe at example.com SIP/2.0"); TEST_1(rq); TEST(rq->rq_method, sip_method_unknown); @@ -463,22 +463,22 @@ su_free(home, rq); su_free(home, rq1); - TEST_1(!sip_request_create(home, sip_method_unknown, NULL, + TEST_1(!sip_request_create(home, sip_method_unknown, NULL, (void *)"sip:joe at example.com", NULL)); - TEST_1(rq = sip_request_create(home, sip_method_unknown, "invite", + TEST_1(rq = sip_request_create(home, sip_method_unknown, "invite", (void *)"sip:joe at example.com", NULL)); TEST(rq->rq_method, sip_method_unknown); TEST_S(rq->rq_method_name, "invite"); su_free(home, rq); - TEST_1(rq = sip_request_create(home, sip_method_unknown, "INVITE", + TEST_1(rq = sip_request_create(home, sip_method_unknown, "INVITE", (void *)"sip:joe at example.com", NULL)); TEST(rq->rq_method, sip_method_invite); TEST_S(rq->rq_method_name, "INVITE"); su_free(home, rq); - TEST_1(rq = sip_request_create(home, sip_method_invite, "foobar", + TEST_1(rq = sip_request_create(home, sip_method_invite, "foobar", (void *)"sip:joe at example.com", NULL)); TEST(rq->rq_method, sip_method_invite); TEST_S(rq->rq_method_name, "INVITE"); @@ -548,8 +548,8 @@ TEST_1(params); TEST_1(comment); - TEST_SIZE(sip_name_addr_e(ebuf, sizeof(ebuf), 0, display, 0, url, - params, comment), + TEST_SIZE(sip_name_addr_e(ebuf, sizeof(ebuf), 0, display, 0, url, + params, comment), strlen(na) - 1); TEST_1(strncmp(na, ebuf, strlen(na) - 1) == 0); @@ -648,7 +648,7 @@ TEST_1(!sip_cseq_create(home, 123456789, sip_method_unknown, NULL)); - TEST_1(cs = sip_cseq_create(home, 123456789, sip_method_unknown, + TEST_1(cs = sip_cseq_create(home, 123456789, sip_method_unknown, "invite")); TEST(cs->cs_seq, 123456789); TEST(cs->cs_method, sip_method_unknown); @@ -663,9 +663,9 @@ sip_contact_t *m, *m0; TEST_1(!sip_contact_make(home, ",,")); - - TEST_1(m = sip_contact_create(home, (void *)"sip:joe at bar", - "q=0.2", + + TEST_1(m = sip_contact_create(home, (void *)"sip:joe at bar", + "q=0.2", "+message", NULL)); TEST_S(m->m_q, "0.2"); @@ -681,7 +681,7 @@ TEST_S(m->m_q, "0.5"); TEST_S(m->m_expires, "0"); - + TEST_1(!sip_contact_create(home, (void *)"sip:joe@[baa", "audio", "video", NULL)); @@ -717,7 +717,7 @@ TEST_1(ex = sip_expires_make(home, "4294967297")); /* XXX */ su_free(home, ex); - TEST_1(ex = sip_expires_make(home, "Wed, 25 Mar 2004 14:49:29 GMT")); + TEST_1(ex = sip_expires_make(home, "Wed, 25 Mar 2004 14:49:29 GMT")); su_free(home, ex); TEST_1(ex = sip_expires_create(home, 3600)); @@ -769,7 +769,7 @@ TEST_1(sip_route_fix(r)); TEST_1(url_has_param(r->r_url, "lr")); - su_free(home, r); + su_free(home, r); TEST_1(r = sip_route_create(home, r0->r_url, r0->r_url)); su_free(home, r); su_free(home, r0); @@ -796,9 +796,9 @@ TEST_1(!sip_via_make(home, "SIP// host:5060 (foo),")); TEST_1(!sip_via_make(home, "SIP/2.0/TCP host:5060 (foo) bar,")); TEST_1(!sip_via_make(home, "SIP/2.0/TCP [3ffe::1:5060 (foo),")); - - TEST_1(v = sip_via_create(home, "bar.com", - "50600", + + TEST_1(v = sip_via_create(home, "bar.com", + "50600", "SIP/2.0/UDP", "hidden", "rport=50601", @@ -819,7 +819,7 @@ TEST_S(v->v_branch, "1"); TEST_S(v->v_rport, "50601"); TEST_S(v->v_comp, "sigcomp"); - + TEST_1(v0 = sip_via_dup(home, v)); TEST(msg_header_add_param(home, v->v_common, "rport"), 0); @@ -844,8 +844,8 @@ su_free(home, v); su_free(home, v0); - TEST_1(v = sip_via_create(home, "bar.com", - "50600", + TEST_1(v = sip_via_create(home, "bar.com", + "50600", NULL, "rport=50601", "branch=1", @@ -859,7 +859,7 @@ { sip_call_info_t *ci, *ci0; - TEST_1(ci = sip_call_info_make(home, + TEST_1(ci = sip_call_info_make(home, ";purpose=info")); TEST_S(ci->ci_purpose, "info"); TEST_1(ci0 = sip_call_info_dup(home, ci)); @@ -941,7 +941,7 @@ for (i = 0; i < N; i++) { /* Verify each header entry */ hc = mc->mc_hash[i].hr_class; - + if (hc == NULL) continue; @@ -969,7 +969,7 @@ msg_iovec_t iovec[2]; n = strlen(buffer); - if (n == 0) + if (n == 0) return NULL; msg = msg_create(test_mclass, flags); @@ -996,7 +996,7 @@ TEST_1(home = su_home_new(sizeof *home)); - msg = read_message(MSG_DO_EXTRACT_COPY, + msg = read_message(MSG_DO_EXTRACT_COPY, "SUBSCRIBE sip:foo at bar SIP/2.0\r\n" "To: Joe User \r\n" "From: \"Bar Owner\" ;tag=foobar\r\n" @@ -1073,7 +1073,7 @@ msg_destroy(msg), msg = NULL; /* Note: this should be canonic! */ - msg = read_message(MSG_DO_EXTRACT_COPY, + msg = read_message(MSG_DO_EXTRACT_COPY, "SIP/2.0 200 Ok\r\n" "To: Joe User ;tag=deadbeef\r\n" "From: sip:bar at foo;tag=foobar\r\n" @@ -1094,7 +1094,7 @@ "Subscription-State: active;expires=1800\r\n" "Call-Info: ;purpose=xcap\r\n" "Error-Info: ;param=xcap\r\n" - "Server: None\r\n" + "Server: None\r\n" "Timestamp: 3289129810.798259 0.084054\r\n" "SIP-ETag: foobar\r\n" "SIP-If-Match: foobar\r\n" @@ -1104,8 +1104,8 @@ "Warning: 399 presence.bar:5060 \"Unimplemented filter\"\r\n" "RSeq: 421414\r\n" "Refer-To: \r\n" - "Alert-Info: \r\n" - "Reply-To: Bob \r\n" + "Alert-Info: \r\n" + "Reply-To: Bob \r\n" "WWW-Authenticate: Digest realm=\"foo\"\r\n" "Proxy-Authenticate: Digest realm=\"foo\"\r\n" "Security-Server: tls;q=0.2\r\n" @@ -1141,7 +1141,7 @@ su_home_check(home); su_home_zap(home); - msg = read_message(0, + msg = read_message(0, "SIP/2.0 200 Ok\r\n" "Via: SIP/2.0/UDP 135.180.130.133\r\n" "Via: SIP/2.0/UDP 135.180.130.130:5060\r\n" @@ -1153,7 +1153,7 @@ "Record-Route: \r\n" "Content-Length: 0\r\n" "\r\n"); - + sip = sip_object(msg); TEST_1(msg); TEST_1(sip); TEST_1(!sip->sip_error); @@ -1164,7 +1164,7 @@ TEST_1(c = sip->sip_status->st_common); TEST_M(c->h_data, "SIP/2.0 200 Ok\r\n", c->h_len); - + TEST_1(c = sip->sip_to->a_common); TEST_M(c->h_data, "t:Joe User;tag=deadbeef\r\n", c->h_len); @@ -1201,16 +1201,16 @@ int tag_test(void) { su_home_t *home = su_home_new(sizeof(*home)); - sip_request_t *request = + sip_request_t *request = sip_request_make(home, "INVITE sip:joe at example.com SIP/2.0"); - sip_to_t *to = sip_to_make(home, + sip_to_t *to = sip_to_make(home, "Joe User " ";tag=12345678"); sip_via_t *via = sip_via_make(home, "SIP/2.0/UDP sip.example.com" ";maddr=128.12.9.254" ";branch=289412978y641.321312"); - url_t *url = url_hdup(home, + url_t *url = url_hdup(home, (url_t *)"sip:test:pass at example.com;baz=1?foo&bar"); tagi_t *lst, *dup; @@ -1224,15 +1224,15 @@ TEST_1(home && request && to && via); lst = tl_list(SIPTAG_REQUEST(request), - SIPTAG_TO(to), + SIPTAG_TO(to), SIPTAG_VIA(via), URLTAG_URL(url), TAG_NULL()); xtra = 0; - xtra += XTRA(xtra, request); - xtra += XTRA(xtra, to); - xtra += XTRA(xtra, via); + xtra += XTRA(xtra, request); + xtra += XTRA(xtra, to); + xtra += XTRA(xtra, via); xtra += SU_ALIGN(xtra) + sizeof(*url) + url_xtra(url); TEST_SIZE(tl_len(lst), 5 * sizeof(tagi_t)); @@ -1255,7 +1255,7 @@ TEST_1(request->rq_common->h_class == sip_request_class); TEST_S(request->rq_method_name, "INVITE"); TEST_S(request->rq_version, "SIP/2.0"); - + TEST_1(t_scan(siptag_to, home, "Example ;tag=foo", &v)); TEST_1(to = (void *)v); TEST_1(to->a_common->h_class == sip_to_class); @@ -1283,7 +1283,7 @@ home = su_home_new(sizeof *home); - msg = read_message(MSG_DO_EXTRACT_COPY, + msg = read_message(MSG_DO_EXTRACT_COPY, "SIP/2.0 401 Unauthorized\r\n" "Via: SIP/2.0/UDP srlab.sr.ntc.nokia.com:5060;maddr=192.168.102.5\r\n" "Via: SIP/2.0/UDP 172.21.9.155\r\n" @@ -1297,7 +1297,7 @@ "Proxy-Authenticate: Digest realm=\"IndigoSw\", domain=\"sip:indigosw.com\", " "nonce=\"V2VkIEF1ZyAxNSAxODoxMzozMiBCU1QgMjAwMVtCQDJkYjE5ZA==\", " "opaque=\"NzA3ZjJhYzU4MGY3MzU0MQ==\", stale=false, " -"algorithm=md5, algorithm=sha1, qop=\"auth\"\r\n" +"algorithm=md5, algorithm=sha1, qop=\"auth\"\r\n" /* , qop=\"auth, auth-int\"\r */ "\r\n"); @@ -1323,21 +1323,21 @@ TEST_P(sip->sip_content_length->l_common->h_succ, sip->sip_separator); - lst = tl_list(SIPTAG_VIA(sip->sip_via), - SIPTAG_RECORD_ROUTE(sip->sip_record_route), - TAG_SKIP(2), - SIPTAG_CSEQ(sip->sip_cseq), - SIPTAG_PAYLOAD(sip->sip_payload), + lst = tl_list(SIPTAG_VIA(sip->sip_via), + SIPTAG_RECORD_ROUTE(sip->sip_record_route), + TAG_SKIP(2), + SIPTAG_CSEQ(sip->sip_cseq), + SIPTAG_PAYLOAD(sip->sip_payload), TAG_NULL()); - filter1 = tl_list(SIPTAG_VIA(0), + filter1 = tl_list(SIPTAG_VIA(0), TAG_NULL()); - filter2 = tl_list(SIPTAG_CALL_ID(0), + filter2 = tl_list(SIPTAG_CALL_ID(0), SIPTAG_FROM(0), SIPTAG_ROUTE(0), SIPTAG_CSEQ(0), TAG_NULL()); - filter3 = tl_list(SIPTAG_CSEQ(0), - SIPTAG_CONTENT_LENGTH(0), + filter3 = tl_list(SIPTAG_CSEQ(0), + SIPTAG_CONTENT_LENGTH(0), TAG_NULL()); filter4 = tl_list(SIPTAG_STATUS(0), SIPTAG_VIA(0), @@ -1381,23 +1381,23 @@ b3 = tl_afilter(home, filter3, lst); TEST_SIZE(tl_len(b3), 3 * sizeof(tagi_t)); - TEST_SIZE(tl_xtra(b3, 0), + TEST_SIZE(tl_xtra(b3, 0), sizeof(sip_content_length_t) + sizeof(sip_cseq_t)); b4 = tl_afilter(home, filter4, lst); TEST_SIZE(tl_len(b4), 11 * sizeof(tagi_t)); xtra = 0; - xtra += XTRA(xtra, sip->sip_status); - xtra += XTRA(xtra, sip->sip_via); - xtra += XTRA(xtra, sip->sip_via->v_next); + xtra += XTRA(xtra, sip->sip_status); + xtra += XTRA(xtra, sip->sip_via); + xtra += XTRA(xtra, sip->sip_via->v_next); xtra += XTRA(xtra, sip->sip_record_route); - xtra += XTRA(xtra, sip->sip_from); - xtra += XTRA(xtra, sip->sip_to); - xtra += XTRA(xtra, sip->sip_call_id); - xtra += XTRA(xtra, sip->sip_cseq); - xtra += XTRA(xtra, sip->sip_www_authenticate); - xtra += XTRA(xtra, sip->sip_proxy_authenticate); - xtra += XTRA(xtra, sip->sip_content_length); + xtra += XTRA(xtra, sip->sip_from); + xtra += XTRA(xtra, sip->sip_to); + xtra += XTRA(xtra, sip->sip_call_id); + xtra += XTRA(xtra, sip->sip_cseq); + xtra += XTRA(xtra, sip->sip_www_authenticate); + xtra += XTRA(xtra, sip->sip_proxy_authenticate); + xtra += XTRA(xtra, sip->sip_content_length); TEST_SIZE(tl_xtra(b4, 0), xtra); tl_vfree(filter1); tl_vfree(filter2); tl_vfree(filter3); tl_vfree(filter4); @@ -1406,10 +1406,10 @@ su_home_check(home); su_free(home, b4); - su_free(home, b3); - su_free(home, b2); + su_free(home, b3); + su_free(home, b2); su_free(home, dup); - su_free(home, b1); + su_free(home, b1); su_home_check(home); @@ -1425,7 +1425,7 @@ { BEGIN(); { - struct { int status; char const *phrase; } const errors[] = + struct { int status; char const *phrase; } const errors[] = { { SIP_100_TRYING }, { SIP_180_RINGING }, @@ -1507,10 +1507,10 @@ sip_request_t sip_request[1] = { SIP_REQUEST_INIT() }; sip_status_t sip_status[1] = { SIP_STATUS_INIT() }; sip_header_t sip_unknown[1] = { SIP_UNKNOWN_INIT() }; - sip_separator_t sip_separator[1] = { SIP_SEPARATOR_INIT() }; + sip_separator_t sip_separator[1] = { SIP_SEPARATOR_INIT() }; sip_payload_t sip_payload[1] = { SIP_PAYLOAD_INIT() }; sip_via_t sip_via[1] = { SIP_VIA_INIT() }; - sip_route_t sip_route[1] = { SIP_ROUTE_INIT() }; + sip_route_t sip_route[1] = { SIP_ROUTE_INIT() }; sip_record_route_t sip_record_route[1] = { SIP_RECORD_ROUTE_INIT() }; sip_max_forwards_t sip_max_forwards[1] = { SIP_MAX_FORWARDS_INIT() }; sip_from_t sip_from[1] = { SIP_FROM_INIT() }; @@ -1518,26 +1518,26 @@ sip_call_id_t sip_call_id[1] = { SIP_CALL_ID_INIT() }; sip_cseq_t sip_cseq[1] = { SIP_CSEQ_INIT() }; sip_contact_t sip_contact[1] = { SIP_CONTACT_INIT() }; - + sip_expires_t sip_expires[1] = { SIP_EXPIRES_INIT() }; sip_date_t sip_date[1] = { SIP_DATE_INIT() }; sip_retry_after_t sip_retry_after[1] = { SIP_RETRY_AFTER_INIT() }; sip_timestamp_t sip_timestamp[1] = { SIP_TIMESTAMP_INIT() }; sip_subject_t sip_subject[1] = { SIP_SUBJECT_INIT() }; sip_priority_t sip_priority[1] = { SIP_PRIORITY_INIT() }; - + sip_call_info_t sip_call_info[1] = { SIP_CALL_INFO_INIT() }; sip_organization_t sip_organization[1] = { SIP_ORGANIZATION_INIT() }; sip_server_t sip_server[1] = { SIP_SERVER_INIT() }; sip_user_agent_t sip_user_agent[1] = { SIP_USER_AGENT_INIT() }; sip_in_reply_to_t sip_in_reply_to[1] = { SIP_IN_REPLY_TO_INIT() }; - + sip_accept_t sip_accept[1] = { SIP_ACCEPT_INIT() }; sip_accept_encoding_t sip_accept_encoding[1] = { SIP_ACCEPT_ENCODING_INIT() }; sip_accept_language_t sip_accept_language[1] = { SIP_ACCEPT_LANGUAGE_INIT() }; - + sip_session_expires_t sip_session_expires[1] = { SIP_SESSION_EXPIRES_INIT() }; - sip_min_se_t sip_min_se[1] = { SIP_MIN_SE_INIT() }; + sip_min_se_t sip_min_se[1] = { SIP_MIN_SE_INIT() }; sip_allow_t sip_allow[1] = { SIP_ALLOW_INIT() }; sip_require_t sip_require[1] = { SIP_REQUIRE_INIT() }; @@ -1557,7 +1557,7 @@ sip_www_authenticate_t sip_www_authenticate[1] = { SIP_WWW_AUTHENTICATE_INIT() }; sip_error_info_t sip_error_info[1] = { SIP_ERROR_INFO_INIT() }; sip_warning_t sip_warning[1] = { SIP_WARNING_INIT() }; - + sip_mime_version_t sip_mime_version[1] = { SIP_MIME_VERSION_INIT() }; sip_content_type_t sip_content_type[1] = { SIP_CONTENT_TYPE_INIT() }; sip_content_encoding_t sip_content_encoding[1] = { SIP_CONTENT_ENCODING_INIT() }; @@ -1568,7 +1568,7 @@ home = su_home_new(sizeof *home); - msg = read_message(MSG_DO_EXTRACT_COPY, + msg = read_message(MSG_DO_EXTRACT_COPY, "INVITE sip:John_Smith at tct.hut.fi SIP/2.0\r\n" "To: John Smith \r\n" " ; tag = deadbeef\r\n" @@ -1600,24 +1600,24 @@ TEST_1(sip->sip_via->v_next->v_next == NULL); TEST_1(sip_sanity_check(sip) == 0); - TEST_1(r = sip->sip_route); TEST_1(r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); + TEST_1(r = sip->sip_route); TEST_1(r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); TEST_1(!r->r_next); TEST_1(r = sip_route_fix(sip->sip_route)); TEST_1(!r->r_common->h_data); TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); - TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); + TEST_1(r = r->r_next); TEST_1(!r->r_common->h_data); TEST_1(!r->r_next); /* Quiet lots of warnings */ @@ -1641,21 +1641,21 @@ TEST_P(msg_header_offset(msg, sip, sip_call_id), &sip->sip_call_id); TEST_P(msg_header_offset(msg, sip, sip_cseq), &sip->sip_cseq); TEST_P(msg_header_offset(msg, sip, sip_contact), &sip->sip_contact); - + TEST_P(msg_header_offset(msg, sip, sip_expires), &sip->sip_expires); TEST_P(msg_header_offset(msg, sip, sip_date), &sip->sip_date); TEST_P(msg_header_offset(msg, sip, sip_retry_after), &sip->sip_retry_after); TEST_P(msg_header_offset(msg, sip, sip_timestamp), &sip->sip_timestamp); TEST_P(msg_header_offset(msg, sip, sip_subject), &sip->sip_subject); TEST_P(msg_header_offset(msg, sip, sip_priority), &sip->sip_priority); - + TEST_P(msg_header_offset(msg, sip, sip_call_info), &sip->sip_call_info); TEST_P(msg_header_offset(msg, sip, sip_organization), &sip->sip_organization); TEST_P(msg_header_offset(msg, sip, sip_server), &sip->sip_server); TEST_P(msg_header_offset(msg, sip, sip_user_agent), &sip->sip_user_agent); TEST_P(msg_header_offset(msg, sip, sip_in_reply_to), &sip->sip_in_reply_to); - + TEST_P(msg_header_offset(msg, sip, sip_accept), &sip->sip_accept); TEST_P(msg_header_offset(msg, sip, sip_accept_encoding), &sip->sip_accept_encoding); @@ -1664,8 +1664,8 @@ TEST_P(msg_header_offset(msg, sip, sip_session_expires), &sip->sip_session_expires); - TEST_P(msg_header_offset(msg, sip, sip_min_se), &sip->sip_min_se); - + TEST_P(msg_header_offset(msg, sip, sip_min_se), &sip->sip_min_se); + TEST_P(msg_header_offset(msg, sip, sip_allow), &sip->sip_allow); TEST_P(msg_header_offset(msg, sip, sip_require), &sip->sip_require); TEST_P(msg_header_offset(msg, sip, sip_proxy_require), @@ -1689,7 +1689,7 @@ &sip->sip_www_authenticate); TEST_P(msg_header_offset(msg, sip, sip_error_info), &sip->sip_error_info); TEST_P(msg_header_offset(msg, sip, sip_warning), &sip->sip_warning); - + TEST_P(msg_header_offset(msg, sip, sip_mime_version), &sip->sip_mime_version); TEST_P(msg_header_offset(msg, sip, sip_content_type), &sip->sip_content_type); TEST_P(msg_header_offset(msg, sip, sip_content_encoding), @@ -1706,7 +1706,7 @@ TEST_SIZE(sip_payload_class->hc_params, 0); TEST_SIZE(sip_via_class->hc_params, offsetof(sip_via_t, v_params)); TEST_SIZE(sip_route_class->hc_params, offsetof(sip_route_t, r_params)); - TEST_SIZE(sip_record_route_class->hc_params, + TEST_SIZE(sip_record_route_class->hc_params, offsetof(sip_record_route_t, r_params)); TEST_SIZE(sip_max_forwards_class->hc_params, 0); @@ -1715,73 +1715,73 @@ TEST_SIZE(sip_call_id_class->hc_params, 0); TEST_SIZE(sip_cseq_class->hc_params, 0); TEST_SIZE(sip_contact_class->hc_params, offsetof(sip_contact_t, m_params)); - + TEST_SIZE(sip_expires_class->hc_params, 0); TEST_SIZE(sip_date_class->hc_params, 0); - TEST_SIZE(sip_retry_after_class->hc_params, + TEST_SIZE(sip_retry_after_class->hc_params, offsetof(sip_retry_after_t, af_params)); TEST_SIZE(sip_timestamp_class->hc_params, 0); TEST_SIZE(sip_subject_class->hc_params, 0); TEST_SIZE(sip_priority_class->hc_params, 0); - - TEST_SIZE(sip_call_info_class->hc_params, + + TEST_SIZE(sip_call_info_class->hc_params, offsetof(sip_call_info_t, ci_params)); TEST_SIZE(sip_organization_class->hc_params, 0); TEST_SIZE(sip_server_class->hc_params, 0); TEST_SIZE(sip_user_agent_class->hc_params, 0); - TEST_SIZE(sip_in_reply_to_class->hc_params, + TEST_SIZE(sip_in_reply_to_class->hc_params, offsetof(sip_in_reply_to_t, k_items)); TEST_SIZE(sip_accept_class->hc_params, offsetof(sip_accept_t, ac_params)); - TEST_SIZE(sip_accept_encoding_class->hc_params, + TEST_SIZE(sip_accept_encoding_class->hc_params, offsetof(sip_accept_encoding_t, aa_params)); - TEST_SIZE(sip_accept_language_class->hc_params, + TEST_SIZE(sip_accept_language_class->hc_params, offsetof(sip_accept_language_t, aa_params)); - + TEST_SIZE(sip_session_expires_class->hc_params, offsetof(sip_session_expires_t, x_params)); TEST_SIZE(sip_min_se_class->hc_params, offsetof(sip_min_se_t, min_params)); TEST_SIZE(sip_allow_class->hc_params, offsetof(sip_allow_t, k_items)); TEST_SIZE(sip_require_class->hc_params, offsetof(sip_require_t, k_items)); - TEST_SIZE(sip_proxy_require_class->hc_params, + TEST_SIZE(sip_proxy_require_class->hc_params, offsetof(sip_proxy_require_t, k_items)); - TEST_SIZE(sip_supported_class->hc_params, + TEST_SIZE(sip_supported_class->hc_params, offsetof(sip_supported_t, k_items)); - TEST_SIZE(sip_unsupported_class->hc_params, + TEST_SIZE(sip_unsupported_class->hc_params, offsetof(sip_unsupported_t, k_items)); #if SIP_HAVE_ENCRYPTION - TEST_SIZE(sip_encryption_class->hc_params, + TEST_SIZE(sip_encryption_class->hc_params, offsetof(sip_encryption_t, au_params)); #endif #if SIP_HAVE_RESPONSE_KEY - TEST_SIZE(sip_response_key_class->hc_params, + TEST_SIZE(sip_response_key_class->hc_params, offsetof(sip_response_key_t, au_params)); #endif - TEST_SIZE(sip_proxy_authenticate_class->hc_params, + TEST_SIZE(sip_proxy_authenticate_class->hc_params, offsetof(sip_proxy_authenticate_t, au_params)); - TEST_SIZE(sip_proxy_authorization_class->hc_params, + TEST_SIZE(sip_proxy_authorization_class->hc_params, offsetof(sip_proxy_authorization_t, au_params)); - TEST_SIZE(sip_authorization_class->hc_params, + TEST_SIZE(sip_authorization_class->hc_params, offsetof(sip_authorization_t, au_params)); - TEST_SIZE(sip_www_authenticate_class->hc_params, + TEST_SIZE(sip_www_authenticate_class->hc_params, offsetof(sip_www_authenticate_t, au_params)); - TEST_SIZE(sip_error_info_class->hc_params, + TEST_SIZE(sip_error_info_class->hc_params, offsetof(sip_error_info_t, ei_params)); - TEST_SIZE(sip_alert_info_class->hc_params, + TEST_SIZE(sip_alert_info_class->hc_params, offsetof(sip_alert_info_t, ai_params)); - TEST_SIZE(sip_reply_to_class->hc_params, + TEST_SIZE(sip_reply_to_class->hc_params, offsetof(sip_reply_to_t, rplyto_params)); TEST_SIZE(sip_warning_class->hc_params, 0); - + TEST_SIZE(sip_mime_version_class->hc_params, 0); - TEST_SIZE(sip_content_type_class->hc_params, + TEST_SIZE(sip_content_type_class->hc_params, offsetof(sip_content_type_t, c_params)); - TEST_SIZE(sip_content_encoding_class->hc_params, + TEST_SIZE(sip_content_encoding_class->hc_params, offsetof(sip_content_encoding_t, k_items)); - TEST_SIZE(sip_content_disposition_class->hc_params, + TEST_SIZE(sip_content_disposition_class->hc_params, offsetof(sip_content_disposition_t, cd_params)); TEST_SIZE(sip_content_length_class->hc_params, 0); @@ -1796,10 +1796,10 @@ { sip_header_t *sh = (sip_header_t *)h; unsigned n; - + for (n = 0; sh; sh = sh->sh_next) n++; - + return n; } @@ -1830,7 +1830,7 @@ home = su_home_new(sizeof *home); - TEST_1(msg = read_message(MSG_DO_EXTRACT_COPY, + TEST_1(msg = read_message(MSG_DO_EXTRACT_COPY, "MESSAGE sip:John_Smith at tct.hut.fi SIP/2.0\r\n" "To: John Smith \r\n" " ; tag = deadbeef\r\n" @@ -1928,9 +1928,9 @@ TEST_1(v->v_branch == v0->v_branch); } TEST_1(v == NULL && v0 == NULL); - + v0 = sip->sip_via; - + TEST_1(v = sip_via_dup(home, v0)); TEST(len(v->v_common), len(v0->v_common)); for (; v && v0; v = v->v_next, v0 = v0->v_next) { @@ -1951,7 +1951,7 @@ msg_header_remove(msg, (msg_pub_t *)sip, (msg_header_t *)sip->sip_payload); - TEST(sip_add_tl(msg, sip, + TEST(sip_add_tl(msg, sip, SIPTAG_FROM(SIP_NONE), SIPTAG_VIA(SIP_NONE), SIPTAG_VIA_STR("SIP/2.0/SCTP foo.bar.com:5060;branch=foo"), @@ -1997,7 +1997,7 @@ TEST_P(x, sip->sip_path->r_next); TEST_1(x = sip->sip_service_route); - TEST_1(sip_add_make(msg, sip, sip_service_route_class, + TEST_1(sip_add_make(msg, sip, sip_service_route_class, "") == 0); TEST_P(x, sip->sip_service_route); TEST_1(sip->sip_service_route->r_next); @@ -2005,7 +2005,7 @@ /* Detect parsing errors */ TEST_1(!sip_cseq_make(home, "21874624876976 INVITE")); TEST_1(!sip_cseq_make(home, "218746INVITE")); - + msg_destroy(msg), msg = NULL; su_home_unref(home), home = NULL; @@ -2023,7 +2023,7 @@ home = su_home_new(sizeof *home); - TEST_1(msg = read_message(MSG_DO_EXTRACT_COPY, + TEST_1(msg = read_message(MSG_DO_EXTRACT_COPY, "MESSAGE SIP/2.0\r\n" "To: John Smith \r\n" " ; tag = deadbeef\r\n" @@ -2066,7 +2066,7 @@ home = su_home_new(sizeof *home); - TEST_1(msg = read_message(0, + TEST_1(msg = read_message(0, "MESSAGE sip:John_Smith at tct.hut.fi SIP/2.0\r\n" "To: John Smith \r\n" "From: ;tag=foobar\r\n" @@ -2141,7 +2141,7 @@ su_home_t *home; sip_rack_t *rack, *rack0; sip_rseq_t *rseq, *rseq0; - + BEGIN(); TEST_1(home = su_home_create()); @@ -2156,7 +2156,7 @@ TEST_1(rack0 = sip_rack_dup(home, rack)); TEST_P(rack0->ra_method_name, rack->ra_method_name); TEST_1(rseq0 = sip_rseq_dup(home, rseq)); - + TEST_1(rack = sip_rack_make(home, "4\r\n\t5\r\n\tEXTRA")); TEST(rack->ra_response, 4); TEST(rack->ra_cseq, 5); @@ -2164,13 +2164,13 @@ TEST_S(rack->ra_method_name, "EXTRA"); TEST_1(rseq = sip_rseq_make(home, " 6 ")); TEST(rseq->rs_response, 6); - + TEST_1(rack0 = sip_rack_dup(home, rack)); TEST_1(rack0->ra_method_name != rack->ra_method_name); TEST_1(rseq0 = sip_rseq_dup(home, rseq)); su_home_unref(home); - + END(); } @@ -2204,7 +2204,7 @@ TEST_1(aa = sip_accept_encoding_make(home, "gzip;q=1.0,deflate;q=1.0")); TEST_S(aa->aa_value, "gzip"); TEST_S(aa->aa_q, "1.0"); TEST_1(aa->aa_next); - TEST_S(aa->aa_next->aa_value, "deflate"); + TEST_S(aa->aa_next->aa_value, "deflate"); TEST_1(aa = sip_accept_encoding_make(home, ",")); TEST_S(aa->aa_value, ""); TEST_1(!aa->aa_next); TEST_1(aa = sip_accept_encoding_make(home, "")); @@ -2214,7 +2214,7 @@ TEST_1(aa = sip_accept_language_make(home, "fi;q=1.0,sv;q=1.0")); TEST_S(aa->aa_value, "fi"); TEST_S(aa->aa_q, "1.0"); TEST_1(aa->aa_next); - TEST_S(aa->aa_next->aa_value, "sv"); + TEST_S(aa->aa_next->aa_value, "sv"); TEST_1(aa = sip_accept_language_make(home, ",")); TEST_S(aa->aa_value, ""); TEST_1(!aa->aa_next); TEST_1(aa = sip_accept_language_make(home, "")); @@ -2293,8 +2293,8 @@ "opaque=\"423767123y723742376423762376423784623782a794e58\",\n" "stale=FALSE,algorithm=MD5")); TEST_S(www->au_scheme, "Digest"); - TEST_1(www->au_params && www->au_params[0] && www->au_params[1] && www->au_params[2] && - www->au_params[3] && www->au_params[4] && www->au_params[5] && + TEST_1(www->au_params && www->au_params[0] && www->au_params[1] && www->au_params[2] && + www->au_params[3] && www->au_params[4] && www->au_params[5] && !www->au_params[6]); TEST_1(s = sip_header_as_string(home, (sip_header_t *)www)); TEST_1(strlen(s) >= 128); @@ -2387,7 +2387,7 @@ END(); } - + int test_refer(void) { sip_refer_to_t *r, *r0; @@ -2399,7 +2399,7 @@ BEGIN(); - char const m[] = + char const m[] = "REFER sip:10.3.3.104 SIP/2.0\r\n" "Via: SIP/2.0/UDP 10.3.3.8;branch=z9hG4bKb8389b4c1BA8899\r\n" "From: \"Anthony Minessale\" ;tag=5AA04E0-66CFC37F\r\n" @@ -2425,9 +2425,9 @@ TEST_1(home = su_home_create()); /* Check that Refer-Sub has now been added to our parser */ - TEST_1(msg_mclass_insert_with_mask(test_mclass, sip_refer_sub_class, + TEST_1(msg_mclass_insert_with_mask(test_mclass, sip_refer_sub_class, 0, 0) == -1); - + msg = read_message(0, m); TEST_1(msg); TEST_1(sip = sip_object(msg)); TEST_1(sip->sip_refer_to); TEST_S(sip->sip_refer_to->r_url->url_headers, @@ -2441,10 +2441,10 @@ TEST_1(veclen = msg_iovec(msg, NULL, ISIZE_MAX)); TEST_1(iovec = su_zalloc(msg_home(home), veclen * (sizeof iovec[0]))); TEST_SIZE(msg_iovec(msg, iovec, veclen), veclen); - + for (i = 0, size = 0; i < veclen; i++) size += iovec[i].mv_len; - + TEST_1(back = su_zalloc(msg_home(msg), size + 1)); for (i = 0, size = 0; i < veclen; i++) { @@ -2452,7 +2452,7 @@ size += iovec[i].mv_len; } back[size] = '\0'; - + TEST_S(back, m); TEST_1(r = r0 = sip_refer_to_make(home, "http://example.com;foo=bar")); @@ -2474,7 +2474,7 @@ TEST_P(r->r_params, NULL); TEST_S(sip_header_as_string(home, (sip_header_t*)r), s0); - TEST_1(r = r0 = sip_refer_to_make(home, + TEST_1(r = r0 = sip_refer_to_make(home, "Web Site ;foo=bar")); TEST_S(r->r_display, "Web Site"); TEST(r->r_url->url_type, url_http); @@ -2497,7 +2497,7 @@ TEST_1(r = r0 = sip_refer_to_make(home, s)); msg_fragment_clear(r->r_common); TEST_1(str = sip_header_as_string(home, (void *)r)); - TEST_S(str, + TEST_S(str, "<" "sip:2000 at 10.3.3.104?Replaces=7d84c014-321368da-efa90f41%4010.3.3.8" "%3Bto-tag%3DpaNKgBB9vQe3D%3Bfrom-tag%3D93AC8D50-7CF6DAAF" @@ -2505,15 +2505,15 @@ } su_home_unref(home); - + TEST_1(home = su_home_create()); - TEST_1(b = b0 = sip_referred_by_make(home, + TEST_1(b = b0 = sip_referred_by_make(home, "sip:joe at example.edu;param=value")); TEST_P(b->b_display, NULL); TEST_1(b->b_params); TEST_P(b->b_cid, NULL); - TEST_1(b = sip_referred_by_make(home, + TEST_1(b = sip_referred_by_make(home, "John Doe " ";cid=\"foo at bar\"")); TEST_S(b->b_display, "John Doe"); @@ -2533,7 +2533,7 @@ TEST_S(b->b_cid, "cid:8u432658725"); TEST(msg_header_remove_param(b->b_common, "cid"), 1); TEST_P(b->b_cid, NULL); - + /* XXX */ #define WORD ALPHA DIGIT "-.!%*_+`'~()<>:\\\"/[]?{}" rp = sip_replaces_make(home, WORD "@" WORD ";to-tag=foo;from-tag=bar" @@ -2586,10 +2586,10 @@ TEST_1(s->k_items); TEST_S(s->k_items[0], "foo"); TEST_1(u = sip_has_unsupported(home, s, pr)); - TEST_1(u->k_items); - TEST_S(u->k_items[0], "bar"); - TEST_S(u->k_items[1], "dig"); - TEST_P(u->k_items[2], NULL); + TEST_1(u->k_items); + TEST_S(u->k_items[0], "bar"); + TEST_S(u->k_items[1], "dig"); + TEST_P(u->k_items[2], NULL); TEST_1(u1 = sip_has_unsupported(home, s, r)); TEST_1(u1->k_items); TEST_S(u1->k_items[0], "dig"); TEST_1(!u1->k_items[1]); @@ -2622,7 +2622,7 @@ sip_time_t def, sip_time_t now); - + END(); } #endif @@ -2670,7 +2670,7 @@ TEST(sip_allow_events_add(home, ae, "event8"), 0); TEST_S(ae->k_items[8], "event8"); - TEST_1((ss = + TEST_1((ss = sip_subscription_state_make(home, "terminated ; reason=timeout"))); TEST_S(ss->ss_substate, "terminated"); TEST_S(ss->ss_reason, "timeout"); @@ -2686,12 +2686,12 @@ TEST_S(ss->ss_expires, "200"); TEST_S(ss->ss_retry_after, "10"); - TEST_1((ss = + TEST_1((ss = sip_subscription_state_make(home, "active;expires=2"))); TEST_S(ss->ss_substate, "active"); TEST_S(ss->ss_expires, "2"); - TEST_1((ss = + TEST_1((ss = sip_subscription_state_make(home, "terminated;retry-after=3600"))); TEST_S(ss->ss_substate, "terminated"); TEST_P(ss->ss_expires, NULL); @@ -2702,7 +2702,7 @@ TEST_P(ss->ss_expires, NULL); TEST_S(ss->ss_retry_after, "3600"); - msg = read_message(MSG_DO_EXTRACT_COPY, + msg = read_message(MSG_DO_EXTRACT_COPY, "SIP/2.0 202 Accepted\r\n" "To: ;tag=deadbeef\r\n" "From: ;\r\n" @@ -2772,11 +2772,11 @@ TEST_1(p = sip_path_make(home, ";lr")); TEST_1(p0 = sip_path_dup(home, p)); - su_free(home, p); + su_free(home, p); su_free(home, p0); TEST_1(!sip_service_route_make(home, ";lr")); - TEST_1(!sip_service_route_make(home, + TEST_1(!sip_service_route_make(home, ";lr bar, sip:foo")); TEST_1(sr = sip_service_route_make(home, ";lr")); @@ -2784,7 +2784,7 @@ su_free(home, sr); TEST_1(sr = sip_service_route_make(home, "sip:foo@[baa::1]:5060;lr")); - + su_free(home, sr); su_free(home, sr0); @@ -2856,9 +2856,9 @@ TEST_1(!sip_is_callerpref(NULL)); TEST_1(sip_is_callerpref("+")); TEST_1(sip_is_callerpref("+foo")); - + /* Booleans (treated as literals) */ - s = "TRUE"; + s = "TRUE"; negate = 2; memset(sp, 0, sizeof sp); TEST_1(sip_prefs_parse(sp, &s, &negate)); TEST(sp->sp_type, sp_literal); @@ -2866,8 +2866,8 @@ TEST_1(sip_prefs_match(sp, sp)); TEST_1(!sip_prefs_parse(sp, &s, &negate)); TEST(sp->sp_type, sp_init); - - s = "FALSE"; + + s = "FALSE"; negate = 2; memset(sp, 0, sizeof sp); TEST_1(sip_prefs_parse(sp, &s, &negate)); TEST(sp->sp_type, sp_literal); @@ -2875,11 +2875,11 @@ TEST_1(sip_prefs_match(sp, sp)); TEST_1(!sip_prefs_parse(sp, &s, &negate)); TEST(sp->sp_type, sp_init); - + s = "\"!TRUE,!FALSE\""; negate = 0; TEST_1(sip_prefs_parse(sp, &s, &negate)); TEST(sp->sp_type, sp_literal); TEST_1(negate); - + /* Literal */ s = "\" !oukki , doukki \""; negate = 0; memset(sp, 0, sizeof sp); @@ -2887,7 +2887,7 @@ TEST(sp->sp_type, sp_literal); TEST_SIZE(sp->sp_literal.spl_length, 5); TEST_M(sp->sp_literal.spl_value, "oukki", 5); TEST_1(negate); - + TEST_1(sip_prefs_parse(sp, &s, &negate)); TEST(sp->sp_type, sp_literal); TEST_SIZE(sp->sp_literal.spl_length, 6); @@ -2897,19 +2897,19 @@ TEST(sp->sp_type, sp_init); /* Strings */ - s = "\" ! , \""; + s = "\" ! , \""; negate = 0; memset(sp, 0, sizeof sp); TEST_1(sip_prefs_parse(sp, &s, &negate)); TEST(sp->sp_type, sp_string); TEST_SIZE(sp->sp_string.sps_length, 5); TEST_M(sp->sp_string.sps_value, "oukki", 5); TEST_1(negate); - + TEST_1(sip_prefs_parse(sp, &s, &negate)); TEST(sp->sp_type, sp_string); TEST_SIZE(sp->sp_string.sps_length, 10); TEST_M(sp->sp_string.sps_value, "douK\\\"ki ", 10); TEST_1(!negate); - + TEST_1(!sip_prefs_parse(sp, &s, &negate)); TEST(sp->sp_type, sp_init); @@ -2925,7 +2925,7 @@ TEST_1(negate); *a = *sp; - + TEST_1(sip_prefs_parse(sp, &s, &negate)); TEST(sp->sp_type, sp_range); TEST_D(sp->sp_range.spr_lower, -DBL_MAX); @@ -3007,15 +3007,15 @@ error = 12; - TEST_1(sip_prefs_matching("\"INVITE,MESSAGE,SUBSCRIBE\"", - "\"INVITE\"", &error)); - TEST_1(!sip_prefs_matching("\"INVITE,MESSAGE,SUBSCRIBE\"", - "\"BYE\"", &error)); + TEST_1(sip_prefs_matching("\"INVITE,MESSAGE,SUBSCRIBE\"", + "\"INVITE\"", &error)); + TEST_1(!sip_prefs_matching("\"INVITE,MESSAGE,SUBSCRIBE\"", + "\"BYE\"", &error)); TEST(error, 12); - TEST_1(sip_prefs_matching("\"INVITE,MESSAGE,SUBSCRIBE\"", - "\"invite\"", &error)); - TEST_1(sip_prefs_matching("\"!INVITE,MESSAGE,SUBSCRIBE\"", - "\"foo\"", &error)); + TEST_1(sip_prefs_matching("\"INVITE,MESSAGE,SUBSCRIBE\"", + "\"invite\"", &error)); + TEST_1(sip_prefs_matching("\"!INVITE,MESSAGE,SUBSCRIBE\"", + "\"foo\"", &error)); TEST_1(sip_prefs_matching("TRUE", "", &error)); TEST_1(sip_prefs_matching("", "", &error)); TEST_1(!sip_prefs_matching("FALSE", "", &error)); @@ -3031,32 +3031,32 @@ TEST_1(sip_prefs_matching("\"!\"", "\"\"", &error)); TEST_1(!sip_prefs_matching("\"INVITE\"", "\"!INVITE\"", &error)); TEST_1(sip_prefs_matching("\"!INVITE\"", "\"INVITE,MESSAGE\"", &error)); - TEST_1(sip_prefs_matching("\"!INVITE,!MESSAGE\"", + TEST_1(sip_prefs_matching("\"!INVITE,!MESSAGE\"", "\"INVITE,MESSAGE\"", &error)); TEST_1(sip_prefs_matching("\"!MESSAGE\"", "\"INVITE,MESSAGE\"", &error)); - TEST_1(!sip_prefs_matching("\",\"", - "\",\"", &error)); - TEST_1(!sip_prefs_matching("\",\"", "\"foo,bar\"", &error)); - TEST_1(sip_prefs_matching("\"#=1\"", "\"#<=2\"", &error)); - TEST_1(sip_prefs_matching("\"#1:2\"", "\"#<=2\"", &error)); - TEST_1(!sip_prefs_matching("\"#1:2\"", "\"!#>=1,!#<=2\"", &error)); - TEST_1(!sip_prefs_matching("\"#=0,#=1\"", "\",\"", &error)); + TEST_1(!sip_prefs_matching("\",\"", + "\",\"", &error)); + TEST_1(!sip_prefs_matching("\",\"", "\"foo,bar\"", &error)); + TEST_1(sip_prefs_matching("\"#=1\"", "\"#<=2\"", &error)); + TEST_1(sip_prefs_matching("\"#1:2\"", "\"#<=2\"", &error)); + TEST_1(!sip_prefs_matching("\"#1:2\"", "\"!#>=1,!#<=2\"", &error)); + TEST_1(!sip_prefs_matching("\"#=0,#=1\"", "\",\"", &error)); TEST(error, 12); error = 12; - TEST_1(!sip_prefs_matching("\",#=1\"", "\",\"", &error)); + TEST_1(!sip_prefs_matching("\",#=1\"", "\",\"", &error)); TEST(error, -1); error = 12; - TEST_1(!sip_prefs_matching("\",\"", "\",#=1\"", &error)); + TEST_1(!sip_prefs_matching("\",\"", "\",#=1\"", &error)); TEST(error, -1); error = 12; - TEST_1(!sip_prefs_matching("\",bar\"", "\",\"", &error)); + TEST_1(!sip_prefs_matching("\",bar\"", "\",\"", &error)); TEST(error, -1); error = 12; - TEST_1(!sip_prefs_matching("\",\"", "\",#12:12\"", &error)); + TEST_1(!sip_prefs_matching("\",\"", "\",#12:12\"", &error)); TEST(error, -1); { @@ -3083,7 +3083,7 @@ TEST_1(!sip_is_callerpref("+methods=\"foo\"")); } - TEST_1(m = sip_contact_make(home, + TEST_1(m = sip_contact_make(home, ";video;audio;type=\"
*
--all | -a
- *
All SIP headers will be printed. If the --all option is given, + *
All SIP headers will be printed. If the --all option is given, * the @em options utility also prints @b From, @b Via, @b Call-ID or * @b CSeq headers. *
@@ -82,7 +82,7 @@ * * @section environment Environment * #SIPADDRESS, #sip_proxy, #NTA_DEBUG, #TPORT_DEBUG, #TPORT_LOG. - * + * * @section bugs Reporting Bugs * Report bugs to . * @@ -117,13 +117,13 @@ #include struct context_s { - su_home_t c_home[1]; - su_root_t *c_root; - nta_agent_t *c_agent; + su_home_t c_home[1]; + su_root_t *c_root; + nta_agent_t *c_agent; url_t *c_proxy; char const *c_username; char const *c_password; - nta_leg_t *c_leg; + nta_leg_t *c_leg; nta_outgoing_t *c_orq; auth_client_t *c_proxy_auth; auth_client_t *c_auth; @@ -139,7 +139,7 @@ static void usage(int rc) { - fprintf(rc ? stderr : stdout, + fprintf(rc ? stderr : stdout, "usage: %s OPTIONS url [extra-file]\n" "where OPTIONS are\n" " --mf=count | --max-forwards=count\n" @@ -164,15 +164,15 @@ { su_home_t *home; context_t context[1] = {{{SU_HOME_INIT(context)}}}; - char + char *extra = NULL, - *o_bind = "sip:*:*", + *o_bind = "sip:*:*", *o_from = getenv("SIPADDRESS"), *o_http_proxy = NULL, *o_max_forwards = NULL, *o_method = NULL, *o_to = NULL; - + char *s, *v; sip_method_t method = sip_method_options; @@ -190,11 +190,11 @@ while ((s = argv++[1])) { if (!MATCH(s, "-")) { o_to = s; break; } else if (strcmp(s, "") == 0) { o_to = argv++[1]; break; } - else if (MATCH(s, "-a") || MATCH(s, "--all")) + else if (MATCH(s, "-a") || MATCH(s, "--all")) { context->c_all = 1; } - else if (MATCH(s, "-x") || MATCH(s, "--extra")) + else if (MATCH(s, "-x") || MATCH(s, "--extra")) { extra = "-"; } - else if (MATCH(s, "-1") || MATCH(s, "--1XX")) + else if (MATCH(s, "-1") || MATCH(s, "--1XX")) { context->c_pre = 1; } else if (MATCH2(s, "--mf")) { o_max_forwards = v; } else if (MATCH2(s, "--http-proxy")) { o_http_proxy = v; } @@ -205,7 +205,7 @@ else if (MATCH2(s, "--from")) { o_from = v; } else if (MATCH2(s, "--method")) { o_method = v; } else if (MATCH(s, "--help")) { usage(0); } - else + else usage(2); } @@ -216,7 +216,7 @@ extra = argv++[1]; su_init(); - + su_home_init(home = context->c_home); context->c_root = su_root_create(context); @@ -225,7 +225,7 @@ if (context->c_root) { url_string_t *r_uri; - context->c_agent = + context->c_agent = nta_agent_create(context->c_root, URL_STRING_MAKE(o_bind), NULL, NULL, /* Ignore incoming messages */ @@ -251,7 +251,7 @@ tag_from_header(context->c_agent, context->c_home, from); if (o_method) { - method = sip_method_code(o_method); + method = sip_method_code(o_method); } else { isize_t len; char const *params = to->a_url->url_params; @@ -262,7 +262,7 @@ o_method = su_alloc(home, len + 1); if (o_method == 0 || url_param(params, "method", o_method, len + 1) != len) { - fprintf(stderr, "%s: %s\n", name, + fprintf(stderr, "%s: %s\n", name, o_method ? "internal error" : strerror(errno)); exit(2); } @@ -281,7 +281,7 @@ if (extra) { FILE *hf; - + if (strcmp(extra, "-")) hf = fopen(extra, "rb"); else @@ -290,7 +290,7 @@ extra = readfile(hf); } - context->c_proxy = url_hdup(context->c_home, + context->c_proxy = url_hdup(context->c_home, (url_t *)getenv("sip_proxy")); nta_agent_set_params(context->c_agent, @@ -298,17 +298,17 @@ NTATAG_DEFAULT_PROXY(context->c_proxy), TAG_END()); - context->c_leg = + context->c_leg = nta_leg_tcreate(context->c_agent, NULL, NULL, /* ignore incoming requests */ SIPTAG_FROM(from), /* who is sending OPTIONS? */ SIPTAG_TO(to), /* whom we are sending OPTIONS? */ TAG_END()); - + if (context->c_leg) { - context->c_orq = + context->c_orq = nta_outgoing_tcreate(context->c_leg, - response_to_options, context, + response_to_options, context, NULL, method, o_method, r_uri, SIPTAG_USER_AGENT_STR("options"), @@ -317,7 +317,7 @@ TAG_END()); if (context->c_orq) { - su_root_run(context->c_root); + su_root_run(context->c_root); nta_outgoing_destroy(context->c_orq), context->c_orq = NULL; } @@ -326,7 +326,7 @@ nta_agent_destroy(context->c_agent), context->c_agent = NULL; } - + su_root_destroy(context->c_root); } @@ -345,7 +345,7 @@ return 0; if (server_authenticate(context, oreq, sip, response_to_options)) return 0; - + if (sip->sip_status->st_status >= 200 || context->c_pre) { sip_header_t *h = (sip_header_t *)sip->sip_status; char hname[64]; @@ -362,17 +362,17 @@ if (h->sh_class->hc_name == NULL) { sl_header_print(stdout, NULL, h); - } + } else if (h->sh_class->hc_name[0] == '\0') { - sl_header_print(stdout, "%s\n", h); + sl_header_print(stdout, "%s\n", h); } else { snprintf(hname, sizeof hname, "%s: %%s\n", h->sh_class->hc_name); - sl_header_print(stdout, hname, h); + sl_header_print(stdout, hname, h); } } } - + if (sip->sip_status->st_status >= 200) { context->c_retval = sip->sip_status->st_status >= 300; su_root_break(context->c_root); Modified: freeswitch/trunk/libs/sofia-sip/utils/utils.docs ============================================================================== --- freeswitch/trunk/libs/sofia-sip/utils/utils.docs (original) +++ freeswitch/trunk/libs/sofia-sip/utils/utils.docs Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ /* -*- c -*- */ /**@MODULEPAGE "utils" - Sofia-SIP Command Line Utilities - * + * * @section utils_meta Module Meta Information * * Command line utilities for Sofia-SIP. @@ -14,8 +14,8 @@ * * @section utuils_overview Overview * - * The Sofia-SIP provides a few command line utilities: - * - @ref sip-date "sip-date" - print or parse SIP date + * The Sofia-SIP provides a few command line utilities: + * - @ref sip-date "sip-date" - print or parse SIP date * - @ref sip-dig "sip-dig" - resolve SIP URIs * - @ref sip-options "sip-options" - query SIP OPTIONS * - @ref localinfo "localinfo" - list local network addresses Modified: freeswitch/trunk/libs/sofia-sip/win32/ChangeLog ============================================================================== --- freeswitch/trunk/libs/sofia-sip/win32/ChangeLog (original) +++ freeswitch/trunk/libs/sofia-sip/win32/ChangeLog Tue Dec 16 13:05:22 2008 @@ -1,20 +1,20 @@ 2006-05-11 Pekka Pessi * Now building libsofia_sip_ua.dll on win32. - + We define both IN_LIBSOFIA_SIP_UA and IN_LIBSOFIA_SRES in libsofia_sip_ua.dsp. - + Because of DLL linkage, we compile tags typedefs as C++ (see win32/tests/test_nua/test_nat_tags.cpp). - + Removed LIBSOFIA_SIP_UA_STATIC from win32/sofia-sip/su_configure.h. - + Added libsofia_sip_ua_static.lib, too. If you want to compile against - that, you need define LIBSOFIA_SIP_UA_STATIC by yourself. - + that, you need define LIBSOFIA_SIP_UA_STATIC by yourself. + Added libsofia-sip-ua-static/libsofia_sip_ua_static.dsp. - + Using multithreaded DLL runtime for all projects. 2006-05-03 Kai Vehmanen @@ -26,19 +26,19 @@ * Added test_tport.dsp to SofiaSIP.dsw * Added source files: - + sres.c sres_blocking.c sres_cache.c stun.c stun_common.c stun_dns.c stun_internal.h stun_mini.c nua_params.c nua_params.h tport_internal.h tport_logging.c tport_stub_sigcomp.c tport_stub_stun.c tport_threadpool.c tport_type_connect.c tport_type_tcp.c tport_type_udp.c - + and - + sofia-resolv/sres.h sofia-resolv/sres_async.h sofia-resolv/sres_cache.h sofia-resolv/sres_record.h sofia-sip/tport_plugins.h - + to libsofia_sip_ua.dsp. * Added stat() as well as struct stat to compatibity win32/unistd.h. Modified: freeswitch/trunk/libs/sofia-sip/win32/README.txt ============================================================================== --- freeswitch/trunk/libs/sofia-sip/win32/README.txt (original) +++ freeswitch/trunk/libs/sofia-sip/win32/README.txt Tue Dec 16 13:05:22 2008 @@ -2,11 +2,11 @@ win32/README.txt / Sofia-SIP for win32 ====================================== -The win32 subdirectory contains the build environment for Win32 +The win32 subdirectory contains the build environment for Win32 environment using MSVC. Currently, the provided workspace/solution files will create both -shared and static libraries for libsofia-sip-ua, and a few test +shared and static libraries for libsofia-sip-ua, and a few test programs. The test programs can be run with the script check.cmd. @@ -18,7 +18,7 @@ is needed. You can for example use gawk (3.1.5 or newer) or mawk (tested with 1.3.3) implementations. Precompiled binaries are available for instance at: - + - http://gnuwin32.sourceforge.net/packages/mawk.htm - http://ftp.uni-kl.de/pub/windows/cygwin/release/gawk/ - plus many sites, a web search for "win32 awk" will Modified: freeswitch/trunk/libs/sofia-sip/win32/build_sources.cmd ============================================================================== --- freeswitch/trunk/libs/sofia-sip/win32/build_sources.cmd (original) +++ freeswitch/trunk/libs/sofia-sip/win32/build_sources.cmd Tue Dec 16 13:05:22 2008 @@ -67,7 +67,7 @@ TEMPLATE1=%PR2%.in ^ TEMPLATE2=%PR3%.in ^ TEMPLATE3=%PR4%.in ^ - TEMPLATE=%PR5%.in %SIPEXTRA% < NUL + TEMPLATE=%PR5%.in %SIPEXTRA% < NUL %CHECK% %AWK_SIP_AWK% PT=%PT% TEMPLATE=%PT%.in ^ Modified: freeswitch/trunk/libs/sofia-sip/win32/config.h.in ============================================================================== --- freeswitch/trunk/libs/sofia-sip/win32/config.h.in (original) +++ freeswitch/trunk/libs/sofia-sip/win32/config.h.in Tue Dec 16 13:05:22 2008 @@ -25,7 +25,7 @@ /**@file win32/config.h.in * @brief used by Windows. * - * Use this on WIN32. + * Use this on WIN32. * * @author Pekka Pessi * @@ -151,7 +151,7 @@ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ -#if _MSC_VER > 1200 +#if _MSC_VER > 1200 #define HAVE_IPHLPAPI_H 1 #else // XXX: vehmanek-win32-fix for VC6 @@ -458,7 +458,7 @@ #define snprintf _snprintf -#ifndef _MSC_VER +#ifndef _MSC_VER #define vsnprintf _vsnprintf #endif #if _MSC_VER < 1500 @@ -485,14 +485,14 @@ #define HAVE_SIO_ADDRESS_LIST_QUERY 1 /* Define to 1 if you have INTERFACE_INFO ioctl */ -#define HAVE_INTERFACE_INFO (1) +#define HAVE_INTERFACE_INFO (1) /* Ignore certain warnings */ #ifdef _MSC_VER #pragma warning( disable : 4090 4204 4244 4018 4514 4706 4761) /* VC does not grok const */ #pragma warning( disable : 4022 4028 ) -/* Temporarily disable high frequency, low value warnings. +/* Temporarily disable high frequency, low value warnings. We may still want to re-enable and fix these */ #pragma warning( disable : 4132 4100 4127 4152) #if (_MSC_VER >= 1400) // VC8+ @@ -505,7 +505,7 @@ #endif // VC8+ #endif -/* size_t/ssize_t modifiers +/* size_t/ssize_t modifiers * ref: http://msdn2.microsoft.com/en-us/library/tcxf1dw6.aspx */ #define MOD_ZD "%ld" #define MOD_ZU "%lu" Modified: freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua/sofia-sip-ua.def ============================================================================== --- freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua/sofia-sip-ua.def (original) +++ freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua/sofia-sip-ua.def Tue Dec 16 13:05:22 2008 @@ -121,7 +121,7 @@ msg_token_d msg_unquote_dup msghdrtag_dup -msghdrtag_snprintf +msghdrtag_snprintf msghdrtag_xtra msgobjtag_dup msgobjtag_snprintf @@ -311,7 +311,7 @@ sip_serialize sip_status_create sip_status_phrase -sip_to_add_param +sip_to_add_param sip_to_create sip_to_tag sip_version_d Modified: freeswitch/trunk/libs/sofia-sip/win32/sofia-sip/su_configure.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/win32/sofia-sip/su_configure.h (original) +++ freeswitch/trunk/libs/sofia-sip/win32/sofia-sip/su_configure.h Tue Dec 16 13:05:22 2008 @@ -46,7 +46,7 @@ #define SU_HAVE_STDINT (0) #define SU_HAVE_NT 0 -/* note: on Windows 2000 and older (WINVER<=500), IPv6-tech-preview +/* note: on Windows 2000 and older (WINVER<=500), IPv6-tech-preview * is needed for IPv4 support as well, so SU_HAVE_IN6 must be set */ #define SU_HAVE_IN6 1 @@ -104,7 +104,7 @@ #define snprintf _snprintf #endif #ifndef vsnprintf -#ifndef _MSC_VER +#ifndef _MSC_VER #define vsnprintf _vsnprintf #endif #if _MSC_VER < 1500 Modified: freeswitch/trunk/libs/sofia-sip/win32/version.awk ============================================================================== --- freeswitch/trunk/libs/sofia-sip/win32/version.awk (original) +++ freeswitch/trunk/libs/sofia-sip/win32/version.awk Tue Dec 16 13:05:22 2008 @@ -1,7 +1,7 @@ #! /bin/gawk # # This script extracts the version information from configure.ac -# and re-generates win32/config.h and +# and re-generates win32/config.h and # libsofia-sip-ua/features/sofia_sip_features.h # # -------------------------------------------------------------------- @@ -38,7 +38,7 @@ IN && /^AC_INIT/ { version=$2; gsub(/[\]\[)]/, "", version); } -OUT && /@[A-Z_]+@/ { +OUT && /@[A-Z_]+@/ { gsub(/@PACKAGE_VERSION@/, version); gsub(/@PACKAGE_BUGREPORT@/, "sofia-sip-devel at lists.sourceforge.net"); gsub(/@PACKAGE_NAME@/, "sofia-sip"); From anthm at freeswitch.org Tue Dec 16 10:45:54 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 13:45:54 -0500 Subject: [Freeswitch-trunk] [commit] r10803 - freeswitch/trunk Message-ID: Author: anthm Date: Tue Dec 16 13:45:54 2008 New Revision: 10803 Log: change wording in bootstrap to reflect incompat with libdroolz 2.x Modified: freeswitch/trunk/bootstrap.sh Modified: freeswitch/trunk/bootstrap.sh ============================================================================== --- freeswitch/trunk/bootstrap.sh (original) +++ freeswitch/trunk/bootstrap.sh Tue Dec 16 13:45:54 2008 @@ -91,7 +91,8 @@ lt_pversion=`$libtool --version 2>/dev/null|sed -e 's/([^)]*)//g;s/^[^0-9]*//;s/[- ].*//g;q'` if test -z "$lt_pversion"; then echo "bootstrap: libtool not found." -echo " You need libtool version 1.5.14 or newer installed" +echo " You need libtool version 1.5.14 or newer up to 1.9.x installed" +echo " libtool version 2.0 and above WILL NOT work." echo " to build FreeSWITCH from SVN." exit 1 fi From mikej at freeswitch.org Tue Dec 16 11:39:52 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:39:52 -0500 Subject: [Freeswitch-trunk] [commit] r10804 - freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua Message-ID: Author: mikej Date: Tue Dec 16 14:39:51 2008 New Revision: 10804 Log: Wed Nov 12 12:14:17 CST 2008 Pekka Pessi * libsofia-sip-ua/Makefile.am: use subshell intead of pushd in doxygen target Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/Makefile.am Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/Makefile.am Tue Dec 16 14:39:51 2008 @@ -80,24 +80,22 @@ fi ; \ done for d in $(DIST_SUBDIRS); do \ - test -r $$d/Doxyfile \ - && pushd $$d > /dev/null \ - && echo running ${DOXYGEN} first time in $$d \ - && ${DOXYGEN} 2>&1 \ - | egrep -v -i -e 'Warning: (unsupported (xml/)?html tag|unable to resolve reference|explicit link.*could not be resolved)' \ - ; popd > /dev/null ; \ - test -r docs/$$d.doxytags && \ + ( test -r $$d/Doxyfile && \ + cd $$d > /dev/null && \ + echo running ${DOXYGEN} first time in $$d && \ + ${DOXYGEN} 2>&1 ) | \ + egrep -v -i -e 'Warning: (unsupported (xml/)?html tag|unable to resolve reference|explicit link.*could not be resolved)' ; \ + test -r docs/$$d.doxytags && \ sed '2,10s!index!'$$d'_index!' \ docs/$$d.doxytags > docs/$$d.doxytags.tmp && \ mv -f docs/$$d.doxytags.tmp docs/$$d.doxytags ; \ done for d in $(DIST_SUBDIRS); do \ - test -r $$d/Doxyfile \ - && pushd $$d > /dev/null \ - && echo running ${DOXYGEN} second time in $$d \ - && ${DOXYGEN} 2>&1 \ - | egrep -v -i -e 'Warning: Unsupported (xml/)?html tag' \ - ; popd > /dev/null ; \ + ( test -r $$d/Doxyfile && \ + cd $$d > /dev/null \ + echo running ${DOXYGEN} second time in $$d && \ + ${DOXYGEN} 2>&1 ) | \ + egrep -v -i -e 'Warning: Unsupported (xml/)?html tag' ; \ test -r docs/$$d.doxytags && \ sed '2,10s!index!'$$d'_index!' \ docs/$$d.doxytags > docs/$$d.doxytags.tmp && \ From mikej at freeswitch.org Tue Dec 16 11:40:34 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:40:34 -0500 Subject: [Freeswitch-trunk] [commit] r10805 - freeswitch/trunk/libs/sofia-sip/m4 Message-ID: Author: mikej Date: Tue Dec 16 14:40:34 2008 New Revision: 10805 Log: Wed Nov 12 13:30:59 CST 2008 Pekka Pessi * sac-openssl.m4: fixed test $HAVE_OPENSSL = 1 Modified: freeswitch/trunk/libs/sofia-sip/m4/sac-openssl.m4 Modified: freeswitch/trunk/libs/sofia-sip/m4/sac-openssl.m4 ============================================================================== --- freeswitch/trunk/libs/sofia-sip/m4/sac-openssl.m4 (original) +++ freeswitch/trunk/libs/sofia-sip/m4/sac-openssl.m4 Tue Dec 16 14:40:34 2008 @@ -19,7 +19,7 @@ [HAVE_OPENSSL=0]) fi - if test $HAVE_OPENSSL = 1 ; then + if test x$HAVE_OPENSSL = x1 ; then AC_DEFINE([HAVE_LIBCRYPTO], 1, [Define to 1 if you have the `crypto' library (-lcrypto).]) AC_DEFINE([HAVE_LIBSSL], 1, [Define to 1 if you have the `ssl' library (-lssl).]) else From mikej at freeswitch.org Tue Dec 16 11:41:16 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:41:16 -0500 Subject: [Freeswitch-trunk] [commit] r10806 - freeswitch/trunk/libs/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 14:41:16 2008 New Revision: 10806 Log: Fri Nov 21 08:12:43 CST 2008 Pekka Pessi * AUTHORS: updated Modified: freeswitch/trunk/libs/sofia-sip/AUTHORS Modified: freeswitch/trunk/libs/sofia-sip/AUTHORS ============================================================================== --- freeswitch/trunk/libs/sofia-sip/AUTHORS (original) +++ freeswitch/trunk/libs/sofia-sip/AUTHORS Tue Dec 16 14:41:16 2008 @@ -8,28 +8,39 @@ Contributors (in alphabetical order, surname first) --------------------------------------------------- +Alaoui, Youness Chan, Tat Ciarkowski, Andrzej +Czapiga, Brian Denis-Courmont, Remi +Ferrari, Fabio Filonenko Roman Haataja, Mikko Jacobs, Remeres Jalava, Teemu Jerris, Michael +Knoblich, Stefan Legostayev, Denis +Lenk, Jeff Leuenberger, Stefan +Margarido, Fabio +Neuner, Jarod +Paul, Johan Prado, Dimitri E. Puolakka, Petteri Puustinen, Ismo Rinne-Rahkola, Pasi +Richards, Jerry Rondina, Daniele Saari, Mika +Sabatini, Stefano Selin, Jari Suttner, Bernhard Underwood, Steve Urpalainen, Jari Whittaker, Colin Zabaluev, Mikhail +Zaikin, Maxim Note: for details on who did what, see the version control system change history, and release notes for past releases at From mikej at freeswitch.org Tue Dec 16 11:42:09 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:42:09 -0500 Subject: [Freeswitch-trunk] [commit] r10807 - freeswitch/trunk/libs/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 14:42:09 2008 New Revision: 10807 Log: Wed Nov 26 12:46:27 CST 2008 Pekka Pessi * AUTHORS: added Paulo Modified: freeswitch/trunk/libs/sofia-sip/AUTHORS Modified: freeswitch/trunk/libs/sofia-sip/AUTHORS ============================================================================== --- freeswitch/trunk/libs/sofia-sip/AUTHORS (original) +++ freeswitch/trunk/libs/sofia-sip/AUTHORS Tue Dec 16 14:42:09 2008 @@ -26,6 +26,7 @@ Margarido, Fabio Neuner, Jarod Paul, Johan +Pizarro, Paulo Prado, Dimitri E. Puolakka, Petteri Puustinen, Ismo From mikej at freeswitch.org Tue Dec 16 11:44:06 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:44:06 -0500 Subject: [Freeswitch-trunk] [commit] r10808 - freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp Message-ID: Author: mikej Date: Tue Dec 16 14:44:06 2008 New Revision: 10808 Log: Wed Nov 26 14:19:45 CST 2008 Pekka Pessi * sdp/Makefile.am: added tests/message-11.sdp to dist Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/Makefile.am Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/Makefile.am ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/Makefile.am (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/Makefile.am Tue Dec 16 14:44:06 2008 @@ -53,7 +53,8 @@ tests/message-7.sdp \ tests/message-8.sdp \ tests/message-9.sdp \ - tests/message-10.sdp + tests/message-10.sdp \ + tests/message-11.sdp # ---------------------------------------------------------------------- # Sofia specific rules From mikej at freeswitch.org Tue Dec 16 11:45:43 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:45:43 -0500 Subject: [Freeswitch-trunk] [commit] r10809 - freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 14:45:42 2008 New Revision: 10809 Log: Thu Nov 27 06:08:29 CST 2008 Pekka Pessi * sofia-sip/su.h: do not try to use "IPv6 tech preview" with XP Fix proposed by Filippo Della Betta. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su.h Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su.h Tue Dec 16 14:45:42 2008 @@ -67,11 +67,11 @@ # include # include # if SU_HAVE_IN6 -# if defined(IPPROTO_IPV6) || (_WIN32_WINNT >= 0x0600) +# if defined(IPPROTO_IPV6) || (_WIN32_WINNT >= 0x0501) /* case 1: IPv6 defined in winsock2.h/ws2tcpip.h */ # else /* case 2: try to use "IPv6 Tech Preview" */ -# include +# include # endif # endif #endif From mikej at freeswitch.org Tue Dec 16 11:47:41 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:47:41 -0500 Subject: [Freeswitch-trunk] [commit] r10810 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/tport Message-ID: Author: mikej Date: Tue Dec 16 14:47:41 2008 New Revision: 10810 Log: Fri Nov 28 08:59:31 CST 2008 Tiago Katcipis * tport_type_tls.c: add missing access() for Win32 Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_tls.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 14:47:41 2008 @@ -1 +1 @@ -Wed Nov 12 11:28:12 EST 2008 +Tue Dec 16 13:47:13 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_tls.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_tls.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_tls.c Tue Dec 16 14:47:41 2008 @@ -48,6 +48,19 @@ #include #include +#if HAVE_FUNC +#elif HAVE_FUNCTION +#define __func__ __FUNCTION__ +#else +static char const __func__[] = "tport_type_tls"; +#endif + +#if HAVE_WIN32 +#include +#define access(_filename, _mode) _access(_filename, _mode) +#define R_OK (04) +#endif + /* ---------------------------------------------------------------------- */ /* TLS */ From mikej at freeswitch.org Tue Dec 16 11:48:46 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:48:46 -0500 Subject: [Freeswitch-trunk] [commit] r10811 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/tport Message-ID: Author: mikej Date: Tue Dec 16 14:48:45 2008 New Revision: 10811 Log: Fri Nov 28 09:00:01 CST 2008 Tiago Katcipis * tport_tls.c: #include before Avoid lossage in Win32. Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 14:48:45 2008 @@ -1 +1 @@ -Tue Dec 16 13:47:13 CST 2008 +Tue Dec 16 13:48:18 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c Tue Dec 16 14:48:45 2008 @@ -36,6 +36,10 @@ #define OPENSSL_NO_KRB5 oh-no +#include +#include +#include + #include #include #include @@ -47,10 +51,6 @@ #include #include -#include -#include -#include - #include #include #include From mikej at freeswitch.org Tue Dec 16 11:50:57 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:50:57 -0500 Subject: [Freeswitch-trunk] [commit] r10812 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/su Message-ID: Author: mikej Date: Tue Dec 16 14:50:56 2008 New Revision: 10812 Log: Thu Dec 11 11:30:29 CST 2008 Pekka Pessi * su/addrinfo.c, su/localinfo.c: made usage() static Make -Wmissing-prototypes happy. Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/addrinfo.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/localinfo.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 14:50:56 2008 @@ -1 +1 @@ -Tue Dec 16 13:48:18 CST 2008 +Tue Dec 16 13:50:36 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/addrinfo.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/addrinfo.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/addrinfo.c Tue Dec 16 14:50:56 2008 @@ -84,7 +84,7 @@ int getopt(int argc, char * const argv[], char const *opstring); extern int optind; -void usage(void) +static void usage(void) { fputs(help, stderr); exit(1); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/localinfo.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/localinfo.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/localinfo.c Tue Dec 16 14:50:56 2008 @@ -110,7 +110,7 @@ int getopt(int argc, char * const argv[], char const *opstring); extern int optind; -void usage(int returncode) +static void usage(int returncode) { fputs(help, stderr); exit(returncode); From mikej at freeswitch.org Tue Dec 16 11:52:07 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:52:07 -0500 Subject: [Freeswitch-trunk] [commit] r10813 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/su/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 14:52:05 2008 New Revision: 10813 Log: Thu Dec 11 11:32:49 CST 2008 Pekka Pessi * sofia-sip/su_uniqueid.h: proper prototype for su_random() Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_uniqueid.h Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 14:52:05 2008 @@ -1 +1 @@ -Tue Dec 16 13:50:36 CST 2008 +Tue Dec 16 13:51:53 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_uniqueid.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_uniqueid.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_uniqueid.h Tue Dec 16 14:52:05 2008 @@ -117,7 +117,7 @@ SOFIAPUBFUN void *su_randmem(void *mem, size_t siz); /** Generate a random 32-bit integer. */ -SOFIAPUBFUN uint32_t su_random(); +SOFIAPUBFUN uint32_t su_random(void); SOFIA_END_DECLS From mikej at freeswitch.org Tue Dec 16 11:53:47 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:53:47 -0500 Subject: [Freeswitch-trunk] [commit] r10814 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/su libsofia-sip-ua/su/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 14:53:46 2008 New Revision: 10814 Log: Mon Dec 8 08:59:04 CST 2008 Pekka Pessi * su: removed private functions accidentally declared as globals su_t64_to_time(), mutex_trylocker(), su_port_set_system_preferences() Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/smoothsort.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_time.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_alloc_lock.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_port.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_port.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_root.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_time.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 14:53:46 2008 @@ -1 +1 @@ -Tue Dec 16 13:51:53 CST 2008 +Tue Dec 16 13:52:51 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/smoothsort.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/smoothsort.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/smoothsort.c Tue Dec 16 14:53:46 2008 @@ -37,6 +37,8 @@ #include "config.h" +#include + #include #include #include Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_time.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_time.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_time.h Tue Dec 16 14:53:46 2008 @@ -111,6 +111,19 @@ SOFIAPUBFUN uint32_t su_ntp_fraq(su_time_t t); SOFIAPUBFUN uint32_t su_time_ms(su_time_t t); #else +su_inline uint32_t su_ntp_fraq(su_time_t t); +su_inline uint32_t su_time_ms(su_time_t t); +#endif + +SOFIAPUBFUN su_ntp_t su_ntp_hilo(uint32_t hi, uint32_t lo); + +SOFIAPUBFUN uint64_t su_counter(void); + +SOFIAPUBFUN uint64_t su_nanocounter(void); + +SOFIAPUBFUN uint32_t su_random(void); + +#if SU_HAVE_INLINE /** Middle 32 bit of NTP timestamp. */ su_inline uint32_t su_ntp_fraq(su_time_t t) { @@ -129,14 +142,6 @@ } #endif -SOFIAPUBFUN su_ntp_t su_ntp_hilo(uint32_t hi, uint32_t lo); - -SOFIAPUBFUN uint64_t su_counter(void); - -SOFIAPUBFUN uint64_t su_nanocounter(void); - -SOFIAPUBFUN uint32_t su_random(); - SOFIA_END_DECLS #endif /* !defined(SU_TIME_H) */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_alloc_lock.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_alloc_lock.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_alloc_lock.c Tue Dec 16 14:53:46 2008 @@ -57,7 +57,7 @@ return pthread_mutex_lock(mutex + 1); } -int mutex_trylocker(void *_mutex) +static int mutex_trylocker(void *_mutex) { pthread_mutex_t *mutex = _mutex; return pthread_mutex_trylock(mutex + 1); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_port.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_port.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_port.c Tue Dec 16 14:53:46 2008 @@ -106,6 +106,7 @@ if (start) preferred_su_clone_start = start; } +static void su_port_set_system_preferences(char const *name) { su_port_create_f *create = preferred_su_port_create; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_port.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_port.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_port.h Tue Dec 16 14:53:46 2008 @@ -168,6 +168,8 @@ SOFIAPUBFUN char const *su_port_name(su_port_t const *port); +SOFIAPUBFUN int su_timer_reset_all(su_timer_queue_t *, su_task_r ); + /* ---------------------------------------------------------------------- */ /* React to multiple events per one poll() to make sure Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_root.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_root.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_root.c Tue Dec 16 14:53:46 2008 @@ -115,6 +115,14 @@ * Contains hint of number of sockets supported by su_root_t */ int su_root_size_hint = 64; +/* ====================================================================== */ + +_su_task_r su_task_new(su_task_r task, su_root_t *root, su_port_t *port); +int su_task_attach(su_task_r self, su_root_t *root); +int su_task_detach(su_task_r self); + +int su_timer_reset_all(su_timer_t **t0, su_task_r); + /* ========================================================================= * Tasks */ @@ -348,12 +356,6 @@ } } -_su_task_r su_task_new(su_task_r task, su_root_t *root, su_port_t *port); -int su_task_attach(su_task_r self, su_root_t *root); -int su_task_detach(su_task_r self); - -int su_timer_reset_all(su_timer_t **t0, su_task_r); - /* Note that is *not* necessary same as su_root_t, * as su_root_t can be extended */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_time.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_time.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_time.c Tue Dec 16 14:53:46 2008 @@ -202,6 +202,8 @@ typedef uint64_t su_t64_t; /* time with 64 bits */ +static su_time_t su_t64_to_time(su_t64_t const us); + const uint32_t su_res32 = 1000000UL; const su_t64_t su_res64 = (su_t64_t)1000000UL; @@ -307,6 +309,7 @@ return (uint32_t) (ntp >> 16) & 0xffffffffLU; } +static su_time_t su_t64_to_time(su_t64_t const us) { su_time_t tv; From mikej at freeswitch.org Tue Dec 16 11:55:05 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:55:05 -0500 Subject: [Freeswitch-trunk] [commit] r10815 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/su Message-ID: Author: mikej Date: Tue Dec 16 14:55:04 2008 New Revision: 10815 Log: Thu Dec 11 11:32:13 CST 2008 Pekka Pessi * su_taglist.c. removed globals which should have been static in first place - t_null_next(), t_null_move(), t_null_dup(), t_null_copy(), t_null_find() - t_skip_next(), t_skip_move(), t_skip_len(), t_skip_dup(), t_skip_filter() - t_next_next(), t_next_move(), t_next_len(), t_next_dup(), t_next_filter() Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_taglist.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 14:55:04 2008 @@ -1 +1 @@ -Tue Dec 16 13:52:51 CST 2008 +Tue Dec 16 13:54:44 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_taglist.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_taglist.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_taglist.c Tue Dec 16 14:55:04 2008 @@ -828,29 +828,27 @@ /* ====================================================================== */ /* null tag */ +static tagi_t const *t_null_next(tagi_t const *t) { return NULL; } +static tagi_t *t_null_move(tagi_t *dst, tagi_t const *src) { memset(dst, 0, sizeof(*dst)); return dst + 1; } +static tagi_t *t_null_dup(tagi_t *dst, tagi_t const *src, void **bb) { memset(dst, 0, sizeof(*dst)); return dst + 1; } -tagi_t *t_null_copy(tagi_t *dst, tagi_t const *src, void **bb) -{ - memset(dst, 0, sizeof(*dst)); - return dst + 1; -} - +static tagi_t const * t_null_find(tag_type_t tt, tagi_t const lst[]) { return NULL; @@ -919,26 +917,31 @@ /* ====================================================================== */ /* skip tag - placeholder in tag list */ +static tagi_t const *t_skip_next(tagi_t const *t) { return t + 1; } +static tagi_t *t_skip_move(tagi_t *dst, tagi_t const *src) { return dst; } +static size_t t_skip_len(tagi_t const *t) { return 0; } +static tagi_t *t_skip_dup(tagi_t *dst, tagi_t const *src, void **bb) { return dst; } +static tagi_t *t_skip_filter(tagi_t *dst, tagi_t const filter[], tagi_t const *src, @@ -968,11 +971,13 @@ /* ====================================================================== */ /* next tag - jump to next tag list */ +static tagi_t const *t_next_next(tagi_t const *t) { return (tagi_t *)(t->t_value); } +static tagi_t *t_next_move(tagi_t *dst, tagi_t const *src) { if (!src->t_value) @@ -980,6 +985,7 @@ return dst; } +static size_t t_next_len(tagi_t const *t) { if (!t->t_value) @@ -987,6 +993,7 @@ return 0; } +static tagi_t *t_next_dup(tagi_t *dst, tagi_t const *src, void **bb) { if (!src->t_value) @@ -994,6 +1001,7 @@ return dst; } +static tagi_t *t_next_filter(tagi_t *dst, tagi_t const filter[], tagi_t const *src, @@ -1023,6 +1031,7 @@ /* ====================================================================== */ /* filter tag - use function to filter tag */ +static tagi_t *t_filter_with(tagi_t *dst, tagi_t const *t, tagi_t const *src, @@ -1070,6 +1079,7 @@ /* ====================================================================== */ /* any tag - match to any tag when filtering */ +static tagi_t *t_any_filter(tagi_t *dst, tagi_t const filter[], tagi_t const *src, From mikej at freeswitch.org Tue Dec 16 11:58:50 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 14:58:50 -0500 Subject: [Freeswitch-trunk] [commit] r10816 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/sdp Message-ID: Author: mikej Date: Tue Dec 16 14:58:49 2008 New Revision: 10816 Log: Wed Nov 12 12:00:29 CST 2008 Pekka Pessi * sdp_parse.c: use lower-case udptl According to T.38 V3.4 some implementations are case-sensitive when checking transport protocol name. Thanks to Timo Bruhn for the hint. Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_parse.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 14:58:49 2008 @@ -1 +1 @@ -Tue Dec 16 13:54:44 CST 2008 +Tue Dec 16 13:58:31 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_parse.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_parse.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_parse.c Tue Dec 16 14:58:49 2008 @@ -1374,8 +1374,9 @@ m->m_proto = sdp_proto_rtp, m->m_proto_name = "RTP/AVP"; else if (strcasecmp(s, "RTP/SAVP") == 0) m->m_proto = sdp_proto_srtp, m->m_proto_name = "RTP/SAVP"; - else if (strcasecmp(s, "UDPTL") == 0) - m->m_proto = sdp_proto_udptl, m->m_proto_name = "UDPTL"; + else if (strcasecmp(s, "udptl") == 0) + /* Lower case - be compatible with people living by T.38 examples */ + m->m_proto = sdp_proto_udptl, m->m_proto_name = "udptl"; else if (strcasecmp(s, "UDP") == 0) m->m_proto = sdp_proto_udp, m->m_proto_name = "UDP"; else if (strcasecmp(s, "TCP") == 0) From mikej at freeswitch.org Tue Dec 16 12:01:13 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:01:13 -0500 Subject: [Freeswitch-trunk] [commit] r10817 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/sdp Message-ID: Author: mikej Date: Tue Dec 16 15:01:12 2008 New Revision: 10817 Log: Thu Dec 11 06:02:09 CST 2008 Pekka Pessi * sdp_print.c: print sdptl in lowercase, too Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 15:01:12 2008 @@ -1 +1 @@ -Tue Dec 16 13:58:31 CST 2008 +Tue Dec 16 13:59:44 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sdp/sdp_print.c Tue Dec 16 15:01:12 2008 @@ -588,7 +588,7 @@ case sdp_proto_udp: proto = "udp"; break; case sdp_proto_rtp: proto = "RTP/AVP"; break; case sdp_proto_srtp: proto = "RTP/SAVP"; break; - case sdp_proto_udptl: proto = "UDPTL"; break; + case sdp_proto_udptl: proto = "udptl"; break; case sdp_proto_tls: proto = "tls"; break; default: proto = m->m_proto_name; break; } From mikej at freeswitch.org Tue Dec 16 12:10:33 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:10:33 -0500 Subject: [Freeswitch-trunk] [commit] r10818 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nta libsofia-sip-ua/nta/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 15:10:32 2008 New Revision: 10818 Log: Wed Nov 12 11:30:28 CST 2008 Fabio Ferrari * nta: new tag NTATAG_TLS_RPORT() Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tag.h Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 15:10:32 2008 @@ -1 +1 @@ -Tue Dec 16 13:59:44 CST 2008 +Tue Dec 16 14:10:06 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c Tue Dec 16 15:10:32 2008 @@ -361,6 +361,7 @@ * NTATAG_SIP_T1X64(), NTATAG_SIP_T1(), NTATAG_SIP_T2(), NTATAG_SIP_T4(), * NTATAG_STATELESS(), * NTATAG_TAG_3261(), NTATAG_TCP_RPORT(), NTATAG_TIMEOUT_408(), + * NTATAG_TLS_RPORT(), * NTATAG_TIMER_C(), NTATAG_MAX_PROCEEDING(), * NTATAG_UA(), NTATAG_UDP_MTU(), NTATAG_USER_VIA(), * NTATAG_USE_NAPTR(), NTATAG_USE_SRV() and NTATAG_USE_TIMESTAMP(). @@ -935,6 +936,7 @@ * NTATAG_SIP_T1X64(), NTATAG_SIP_T1(), NTATAG_SIP_T2(), NTATAG_SIP_T4(), * NTATAG_STATELESS(), * NTATAG_TAG_3261(), NTATAG_TCP_RPORT(), NTATAG_TIMEOUT_408(), + * NTATAG_TLS_RPORT(), * NTATAG_TIMER_C(), NTATAG_MAX_PROCEEDING(), * NTATAG_UA(), NTATAG_UDP_MTU(), NTATAG_USER_VIA(), * NTATAG_USE_NAPTR(), NTATAG_USE_SRV() and NTATAG_USE_TIMESTAMP(). @@ -999,6 +1001,7 @@ int rport = agent->sa_rport; int server_rport = agent->sa_server_rport; int tcp_rport = agent->sa_tcp_rport; + int tls_rport = agent->sa_tls_rport; unsigned preload = agent->sa_preload; unsigned threadpool = agent->sa_tport_threadpool; char const *sigcomp = agent->sa_sigcomp_options; @@ -1045,6 +1048,7 @@ #endif NTATAG_STATELESS_REF(stateless), NTATAG_TCP_RPORT_REF(tcp_rport), + NTATAG_TLS_RPORT_REF(tls_rport), NTATAG_TIMEOUT_408_REF(timeout_408), NTATAG_UA_REF(ua), NTATAG_UDP_MTU_REF(udp_mtu), @@ -1214,6 +1218,7 @@ agent->sa_flags = flags & MSG_FLG_USERMASK; agent->sa_rport = rport != 0; agent->sa_tcp_rport = tcp_rport != 0; + agent->sa_tls_rport = tls_rport != 0; agent->sa_preload = preload; agent->sa_tport_threadpool = threadpool; @@ -2064,7 +2069,8 @@ if (!v->v_rport && ((self->sa_rport && v->v_protocol == sip_transport_udp) || - (self->sa_tcp_rport && v->v_protocol == sip_transport_tcp))) + (self->sa_tcp_rport && v->v_protocol == sip_transport_tcp) || + (self->sa_tls_rport && v->v_protocol == sip_transport_tls))) msg_header_add_param(msg_home(msg), v->v_common, "rport"); if (!orq->orq_tpn->tpn_comp) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h Tue Dec 16 15:10:32 2008 @@ -229,6 +229,8 @@ unsigned sa_server_rport:2; /** If true, use rport with tcp, too */ unsigned sa_tcp_rport:1; + /** If true, use rport with tls, too */ + unsigned sa_tls_rport:1; /** If true, automatically create compartments */ unsigned sa_auto_comp:1; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_tag.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_tag.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_tag.c Tue Dec 16 15:10:32 2008 @@ -1298,7 +1298,7 @@ * * @note The NTATAG_RPORT() is a synonym for this. * - * @sa @RFC3581, NTATAG_SERVER_RPORT(), NTATAG_TCP_RPORT(), @Via + * @sa @RFC3581, NTATAG_SERVER_RPORT(), NTATAG_TCP_RPORT(), NTATAG_TLS_RPORT(), @Via */ tag_typedef_t ntatag_client_rport = BOOLTAG_TYPEDEF(client_rport); @@ -1333,7 +1333,7 @@ * - 1 - use "rport" parameter (default) * - 0 - do not use "rport" parameter * - * @sa @RFC3581, NTATAG_CLIENT_RPORT(), NTATAG_TCP_RPORT(), @Via + * @sa @RFC3581, NTATAG_CLIENT_RPORT(), NTATAG_TCP_RPORT(), NTATAG_TLS_RPORT(), @Via */ tag_typedef_t ntatag_server_rport = INTTAG_TYPEDEF(server_rport); @@ -1358,6 +1358,27 @@ */ tag_typedef_t ntatag_tcp_rport = BOOLTAG_TYPEDEF(tcp_rport); +/**@def NTATAG_TLS_RPORT(x) + * + * Use rport with TLS, too. + * + * @par Used with + * nua_create(), nua_set_params(), + * nta_agent_create(), nta_agent_set_params() + * + * @par Parameter type + * boolean: true (non-zero or non-NULL pointer) + * or false (zero or NULL pointer) + * + * @par Values + * - true - include rport parameter in the TLS via line on client side + * - false - do not include rport parameter in the TLS via line + * on client side + * + * @sa @RFC3581, NTATAG_CLIENT_RPORT(), NTATAG_SERVER_RPORT(), @Via + */ +tag_typedef_t ntatag_tls_rport = BOOLTAG_TYPEDEF(tls_rport); + /**@def NTATAG_PRELOAD(x) * * Preload by N bytes. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tag.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tag.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta_tag.h Tue Dec 16 15:10:32 2008 @@ -369,6 +369,12 @@ NTA_DLL extern tag_typedef_t ntatag_tcp_rport_ref; #define NTATAG_TCP_RPORT_REF(x) ntatag_tcp_rport_ref, tag_bool_vr(&(x)) +NTA_DLL extern tag_typedef_t ntatag_tls_rport; +#define NTATAG_TLS_RPORT(x) ntatag_tls_rport, tag_bool_v((x)) + +NTA_DLL extern tag_typedef_t ntatag_tls_rport_ref; +#define NTATAG_TLS_RPORT_REF(x) ntatag_tls_rport_ref, tag_bool_vr(&(x)) + NTA_DLL extern tag_typedef_t ntatag_preload; #define NTATAG_PRELOAD(x) ntatag_preload, tag_uint_v((x)) From stkn at freeswitch.org Tue Dec 16 12:12:37 2008 From: stkn at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:12:37 -0500 Subject: [Freeswitch-trunk] [commit] r10819 - freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src Message-ID: Author: stkn Date: Tue Dec 16 15:12:36 2008 New Revision: 10819 Log: Do not redefined _FILE_OFFSET_BITS (fix for opensolaris) Modified: freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/file.c Modified: freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/file.c ============================================================================== --- freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/file.c (original) +++ freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/file.c Tue Dec 16 15:12:36 2008 @@ -40,11 +40,15 @@ cause security exposures. */ +#if !defined(_FILE_OFFSET_BITS) #define _FILE_OFFSET_BITS 64 +#endif /* Tell GNU libc to make off_t 64 bits and all the POSIX file functions the versions that handle 64 bit file offsets. */ +#if !defined(_LARGE_FILES) #define _LARGE_FILES +#endif /* Same as above, but for AIX */ #include From mikej at freeswitch.org Tue Dec 16 12:12:44 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:12:44 -0500 Subject: [Freeswitch-trunk] [commit] r10820 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nta Message-ID: Author: mikej Date: Tue Dec 16 15:12:43 2008 New Revision: 10820 Log: Wed Nov 12 12:33:20 CST 2008 Pekka Pessi * nta: moved truly internal data type definitions into nta.c Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 15:12:43 2008 @@ -1 +1 @@ -Tue Dec 16 14:10:06 CST 2008 +Tue Dec 16 14:12:18 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c Tue Dec 16 15:12:43 2008 @@ -67,13 +67,20 @@ #include #include +#include #include #include +/* Resolver context type */ +#define SRES_CONTEXT_T nta_outgoing_t + +/* We are customer of tport_t */ +#define TP_AGENT_T nta_agent_t +#define TP_MAGIC_T sip_via_t +#define TP_CLIENT_T nta_outgoing_t + #include "nta_internal.h" -#include "sofia-sip/nta_stateless.h" -#include "sofia-sip/url_tag.h" #include #include @@ -95,6 +102,461 @@ #define NONE ((void *)-1) +/* ------------------------------------------------------------------------- */ + +/** Resolving order */ +enum nta_res_order_e +{ + nta_res_ip6_ip4, + nta_res_ip4_ip6, + nta_res_ip6_only, + nta_res_ip4_only +}; + +HTABLE_DECLARE_WITH(leg_htable, lht, nta_leg_t, size_t, hash_value_t); +HTABLE_DECLARE_WITH(outgoing_htable, oht, nta_outgoing_t, size_t, hash_value_t); +HTABLE_DECLARE_WITH(incoming_htable, iht, nta_incoming_t, size_t, hash_value_t); + +typedef struct outgoing_queue_t { + nta_outgoing_t **q_tail; + nta_outgoing_t *q_head; + size_t q_length; + unsigned q_timeout; +} outgoing_queue_t; + +typedef struct incoming_queue_t { + nta_incoming_t **q_tail; + nta_incoming_t *q_head; + size_t q_length; + unsigned q_timeout; +} incoming_queue_t; + +struct nta_agent_s +{ + su_home_t sa_home[1]; + su_root_t *sa_root; + su_timer_t *sa_timer; + nta_agent_magic_t *sa_magic; + nta_message_f *sa_callback; + + nta_update_magic_t *sa_update_magic; + nta_update_tport_f *sa_update_tport; + + su_time_t sa_now; /**< Timestamp in microsecond resolution. */ + uint32_t sa_next; /**< Timestamp for next agent_timer. */ + uint32_t sa_millisec; /**< Timestamp in milliseconds. */ + + msg_mclass_t const *sa_mclass; + uint32_t sa_flags; /**< SIP message flags */ + unsigned sa_preload; /**< Memory preload for SIP messages. */ + + tport_t *sa_tports; + sip_contact_t *sa_contact; + sip_via_t *sa_vias; /**< @Via headers for all transports */ + sip_via_t *sa_public_vias; /**< @Vias for public transports */ + sip_contact_t *sa_aliases;/**< List of aliases for agent */ + + uint64_t sa_branch; /**< Generator for branch parameters */ + uint64_t sa_tags; /**< Generator for tag parameters */ + +#if HAVE_SOFIA_SRESOLV + sres_resolver_t *sa_resolver; /**< DNS resolver */ + enum nta_res_order_e sa_res_order; /** Resolving order (AAAA/A) */ +#endif + + url_t *sa_default_proxy; /**< Default outbound proxy */ + unsigned sa_bad_req_mask; /**< Request error mask */ + unsigned sa_bad_resp_mask; /**< Response error mask */ + size_t sa_maxsize; /**< Maximum size of incoming messages */ + size_t sa_max_proceeding; /**< Maximum size of proceeding queue */ + + unsigned sa_udp_mtu; /**< Maximum size of outgoing UDP requests */ + + unsigned sa_t1; /**< SIP T1 - initial retransmit interval (500 ms) */ + unsigned sa_t2; /**< SIP T2 - maximum retransmit interval (4000 ms) */ + unsigned sa_t4; /**< SIP T4 - clear message time (5000 ms) */ + + + unsigned sa_t1x64; /**< SIP T1X64 - transaction lifetime (32 s) */ + + unsigned sa_progress; /**< Progress timer. + Interval between retransmitting + provisional responses. */ + + unsigned sa_timer_c; /**< SIP timer C. + Maximum interval between receiving + provisional responses. */ + + unsigned sa_graylist; /**< Graylisting period */ + unsigned sa_blacklist; /**< Blacklisting period */ + + unsigned sa_drop_prob : 10; /**< NTA is used to test packet drop */ + unsigned sa_is_a_uas : 1; /**< NTA is acting as an User Agent server */ + unsigned sa_is_stateless : 1; /**< Process requests statelessly + * unless they match existing dialog. + */ + unsigned sa_user_via:1; /**< Let application provide @Via headers */ + unsigned sa_extra_100:1; /**< Allow NTA to return "100 Trying" response + * even if application has not responded. + */ + unsigned sa_pass_100:1; /**< Pass the "100 Trying" + * provisional responses to the application + */ + unsigned sa_timeout_408:1; /**< A "408 Request Timeout" message + * is generated when outgoing request expires. + */ + unsigned sa_pass_408:1; /**< A "408 Request Timeout" responses + * are passed to client. + */ + unsigned sa_merge_482 : 1; /**< A "482 Request Merged" response is returned + * to merged requests. + */ + unsigned sa_cancel_2543 : 1; /**< Send a CANCEL to an INVITE without + * waiting for an provisional response. + */ + unsigned sa_cancel_487 : 1; /**< Return 487 response automatically when + * a CANCEL is received. + */ + + unsigned sa_invite_100rel:1; /**< Include 100rel in INVITE requests. */ + unsigned sa_timestamp : 1; /**< Insert @Timestamp in requests. */ + + unsigned sa_tport_ip4 : 1; /**< Transports support IPv4. */ + unsigned sa_tport_ip6 : 1; /**< Transports support IPv6. */ + unsigned sa_tport_udp : 1; /**< Transports support UDP. */ + unsigned sa_tport_tcp : 1; /**< Transports support TCP. */ + unsigned sa_tport_sctp : 1; /**< Transports support SCTP. */ + unsigned sa_tport_tls : 1; /**< Transports support TLS. */ + + unsigned sa_use_naptr : 1; /**< Use NAPTR lookup */ + unsigned sa_use_srv : 1; /**< Use SRV lookup */ + + unsigned sa_tport_threadpool:1; /**< Transports use threadpool */ + + unsigned sa_rport:1; /**< Use rport at client */ + unsigned sa_server_rport:2; /**< Use rport at server */ + unsigned sa_tcp_rport:1; /**< Use rport with tcp, too */ + unsigned sa_tls_rport:1; /**< Use rport with tls, too */ + + unsigned sa_auto_comp:1; /**< Automatically create compartments */ + unsigned sa_in_timer:1; /**< Set when executing timers */ + unsigned sa_use_timer_c:1; /**< Application has set value for timer C */ + + unsigned :0; + +#if HAVE_SMIME + sm_object_t *sa_smime; +#else + void *sa_smime; +#endif + + /** @MaxForwards */ + sip_max_forwards_t sa_max_forwards[1]; + + /** Name of SigComp algorithm */ + char const *sa_algorithm; + /** Options for SigComp. */ + char const *sa_sigcomp_options; + char const* const *sa_sigcomp_option_list; + char const *sa_sigcomp_option_free; + + nta_compressor_t *sa_compressor; + + /* Statistics */ + struct { + usize_t as_recv_msg; + usize_t as_recv_request; + usize_t as_recv_response; + usize_t as_bad_message; + usize_t as_bad_request; + usize_t as_bad_response; + usize_t as_drop_request; + usize_t as_drop_response; + usize_t as_client_tr; + usize_t as_server_tr; + usize_t as_dialog_tr; + usize_t as_acked_tr; + usize_t as_canceled_tr; + usize_t as_trless_request; + usize_t as_trless_to_tr; + usize_t as_trless_response; + usize_t as_trless_200; + usize_t as_merged_request; + usize_t as_sent_msg; + usize_t as_sent_request; + usize_t as_sent_response; + usize_t as_retry_request; + usize_t as_retry_response; + usize_t as_recv_retry; + usize_t as_tout_request; + usize_t as_tout_response; + } sa_stats[1]; + + /** Hash of dialogs. */ + leg_htable_t sa_dialogs[1]; + /** Default leg */ + nta_leg_t *sa_default_leg; + /** Hash of legs without dialogs. */ + leg_htable_t sa_defaults[1]; + /** Hash table for outgoing transactions */ + outgoing_htable_t sa_outgoing[1]; + nta_outgoing_t *sa_default_outgoing; + /** Hash table for incoming transactions */ + incoming_htable_t sa_incoming[1]; + nta_incoming_t *sa_default_incoming; + + /* Queues (states) for outgoing client transactions */ + struct { + /** Queue for retrying client transactions */ + nta_outgoing_t *re_list; + nta_outgoing_t **re_t1; /**< Special place for T1 timer */ + size_t re_length; /**< Length of sa_out.re_list */ + + outgoing_queue_t delayed[1]; + outgoing_queue_t resolving[1]; + + outgoing_queue_t trying[1]; /* Timer F/E */ + outgoing_queue_t completed[1]; /* Timer K */ + outgoing_queue_t terminated[1]; + + /* Special queues (states) for outgoing INVITE transactions */ + outgoing_queue_t inv_calling[1]; /* Timer B/A */ + outgoing_queue_t inv_proceeding[1]; /* Timer C */ + outgoing_queue_t inv_completed[1]; /* Timer D */ + + /* Temporary queue for transactions waiting to be freed */ + outgoing_queue_t *free; + } sa_out; + + /* Queues (states) for incoming server transactions */ + struct { + /** Queue for retransmitting response of server transactions */ + nta_incoming_t *re_list; + nta_incoming_t **re_t1; /**< Special place for T1 timer */ + size_t re_length; /**< Length of sa_in.re_list */ + + incoming_queue_t proceeding[1]; /**< Request received */ + incoming_queue_t preliminary[1]; /**< 100rel sent */ + incoming_queue_t completed[1]; /**< Final answer sent (non-invite). */ + incoming_queue_t inv_completed[1]; /**< Final answer sent (INVITE). */ + incoming_queue_t inv_confirmed[1]; /**< Final answer sent, ACK recvd. */ + incoming_queue_t terminated[1]; /**< Terminated, ready to free. */ + incoming_queue_t final_failed[1]; + } sa_in; + + /* Special task for freeing memory */ + su_clone_r sa_terminator; +}; + +struct nta_leg_s +{ + su_home_t leg_home[1]; + hash_value_t leg_hash; + + unsigned leg_dialog : 1; + unsigned leg_stateless : 1; /**< Process requests statelessly */ +#ifdef NTA_STRICT_ROUTING + unsigned leg_contact_set : 1; +#else + unsigned leg_loose_route : 1; /**< Topmost route in set is LR */ +#endif + unsigned leg_local_is_to : 1; /**< Backwards-compatibility. */ + unsigned leg_tagged : 1; /**< Tagged after creation. + * + * Request missing @To tag matches + * a tagged leg even after tagging. + */ + unsigned:0; + nta_request_f *leg_callback; + nta_leg_magic_t *leg_magic; + nta_agent_t *leg_agent; + + url_t const *leg_url; /**< Match incoming requests. */ + char const *leg_method; /**< Match incoming requests. */ + + uint32_t leg_seq; /**< Sequence number for next transaction */ + uint32_t leg_rseq; /**< Remote sequence number */ + sip_call_id_t *leg_id; /**< Call ID */ + sip_from_t *leg_remote; /**< Remote address (@To/@From) */ + sip_to_t *leg_local; /**< Local address (@From/@To) */ + + sip_route_t *leg_route; /**< @Route for outgoing requests. */ + sip_contact_t *leg_target; /**< Remote destination (from @Contact). */ +}; + +struct nta_incoming_s +{ + su_home_t *irq_home; + hash_value_t irq_hash; + nta_agent_t *irq_agent; + nta_ack_cancel_f *irq_callback; + nta_incoming_magic_t *irq_magic; + + /* Timeout/state queue */ + nta_incoming_t **irq_prev; + nta_incoming_t *irq_next; + incoming_queue_t *irq_queue; + + /* Retry queue */ + nta_incoming_t **irq_rprev; + nta_incoming_t *irq_rnext; + + sip_method_t irq_method; + sip_request_t *irq_rq; + sip_from_t *irq_from; + sip_to_t *irq_to; + char const *irq_tag; + sip_cseq_t *irq_cseq; + sip_call_id_t *irq_call_id; + sip_via_t *irq_via; + sip_record_route_t *irq_record_route; + char const *irq_branch; + + uint32_t irq_rseq; + + sip_timestamp_t *irq_timestamp; + su_time_t irq_received; + + uint32_t irq_timeout; /**< Timer H, I, J */ + uint32_t irq_retry; /**< Timer G */ + unsigned short irq_interval; /**< Next timer */ + + short irq_status; + + unsigned irq_retries:8; + unsigned irq_default:1; /**< Default transaction */ + unsigned irq_canceled:1; /**< Transaction is canceled */ + unsigned irq_completed:1; /**< Transaction is completed */ + unsigned irq_confirmed:1; /**< Response has been acked */ + unsigned irq_terminated:1; /**< Transaction is terminated */ + unsigned irq_final_failed:1; /**< Sending final response failed */ + unsigned irq_destroyed :1; /**< Transaction is destroyed */ + unsigned irq_in_callback:1; /**< Callback is being invoked */ + unsigned irq_reliable_tp:1; /**< Transport is reliable */ + unsigned irq_sigcomp_zap:1; /**< Reset SigComp */ + unsigned irq_must_100rel:1; /**< 100rel is required */ + unsigned irq_tag_set:1; /**< Tag is not from request */ + unsigned :0; + + tp_name_t irq_tpn[1]; + tport_t *irq_tport; + struct sigcomp_compartment *irq_cc; + msg_t *irq_request; + msg_t *irq_request2; /**< ACK/CANCEL */ + msg_t *irq_response; + + nta_reliable_t *irq_reliable; /**< List of reliable responses */ +}; + +struct nta_reliable_s +{ + nta_reliable_t *rel_next; + nta_incoming_t *rel_irq; + nta_prack_f *rel_callback; + nta_reliable_magic_t *rel_magic; + uint32_t rel_rseq; + unsigned short rel_status; + unsigned rel_pracked:1; + unsigned rel_precious:1; + msg_t *rel_response; + msg_t *rel_unsent; +}; + +typedef struct sipdns_resolver sipdns_resolver_t; + +struct nta_outgoing_s +{ + hash_value_t orq_hash; /**< Hash value */ + nta_agent_t *orq_agent; + nta_response_f *orq_callback; + nta_outgoing_magic_t *orq_magic; + + /* Timeout/state queue */ + nta_outgoing_t **orq_prev; + nta_outgoing_t *orq_next; + outgoing_queue_t *orq_queue; + + /* Retry queue */ + nta_outgoing_t **orq_rprev; + nta_outgoing_t *orq_rnext; + + sip_method_t orq_method; + char const *orq_method_name; + url_t const *orq_url; /**< Original RequestURI */ + + sip_from_t const *orq_from; + sip_to_t const *orq_to; + char const *orq_tag; /**< Tag from final response. */ + + sip_cseq_t const *orq_cseq; + sip_call_id_t const *orq_call_id; + + msg_t *orq_request; + msg_t *orq_response; + + su_time_t orq_sent; /**< When request was sent? */ + unsigned orq_delay; /**< RTT estimate */ + + uint32_t orq_retry; /**< Timer A, E */ + uint32_t orq_timeout; /**< Timer B, D, F, K */ + + unsigned short orq_interval; /**< Next timer A/E */ + + unsigned short orq_status; + unsigned char orq_retries; /**< Number of tries this far */ + unsigned orq_default:1; /**< This is default transaction */ + unsigned orq_inserted:1; + unsigned orq_resolved:1; + unsigned orq_prepared:1; /**< outgoing_prepare() called */ + unsigned orq_canceled:1; + unsigned orq_terminated:1; + unsigned orq_destroyed:1; + unsigned orq_completed:1; + unsigned orq_delayed:1; + unsigned orq_stripped_uri:1; + unsigned orq_user_tport:1; /**< Application provided tport - don't retry */ + unsigned orq_try_tcp_instead:1; + unsigned orq_try_udp_instead:1; + unsigned orq_reliable:1; /**< Transport is reliable */ + unsigned orq_ack_error:1; /**< ACK is sent by NTA */ + + /* Attributes */ + unsigned orq_user_via:1; + unsigned orq_stateless:1; + unsigned orq_pass_100:1; + unsigned orq_sigcomp_new:1; /**< Create compartment if needed */ + unsigned orq_sigcomp_zap:1; /**< Reset SigComp after completing */ + unsigned orq_must_100rel:1; + unsigned orq_timestamp:1; /**< Insert @Timestamp header. */ + unsigned orq_100rel:1; /**< Support 100rel */ + unsigned:0; /* pad */ + +#if HAVE_SOFIA_SRESOLV + sipdns_resolver_t *orq_resolver; +#endif + enum nta_res_order_e orq_res_order; /**< AAAA/A first? */ + + url_t *orq_route; /**< Route URL */ + tp_name_t orq_tpn[1]; /**< Where to send request */ + char const *orq_scheme; /**< Transport URL type */ + + tport_t *orq_tport; + struct sigcomp_compartment *orq_cc; + tagi_t *orq_tags; /**< Tport tag items */ + int orq_pending; /**< Request is pending in tport */ + + char const *orq_branch; /**< Transaction branch */ + char const *orq_via_branch; /**< @Via branch */ + + int *orq_status2b; /**< Delayed response */ + + nta_outgoing_t *orq_cancel; /**< CANCEL transaction */ + + uint32_t orq_rseq; /**< Latest incoming rseq */ +}; + +/* ------------------------------------------------------------------------- */ + /* Internal tags */ /* Delay sending of request */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h Tue Dec 16 15:12:43 2008 @@ -28,536 +28,29 @@ /**@internal @file nta_internal.h * - * @brief Internals of NTA objects. + * @brief NTA internal interfaces. * * @author Pekka Pessi * * @date Created: Tue Jul 18 09:18:32 2000 ppessi */ -/* Resolver context type */ -#define SRES_CONTEXT_T nta_outgoing_t +SOFIA_BEGIN_DECLS -/* We are customer of tport_t */ -#define TP_AGENT_T nta_agent_t -#define TP_MAGIC_T sip_via_t -#define TP_CLIENT_T nta_outgoing_t +/** A sip_flag telling that this message is internally generated. */ +#define NTA_INTERNAL_MSG (1<<15) #include #include +#include #include - #if HAVE_SOFIA_SRESOLV #include #endif - #include -#if HAVE_SMIME -#include "smimec.h" -#endif - -SOFIA_BEGIN_DECLS - -/** A sip_flag telling that this message is internally generated. */ -#define NTA_INTERNAL_MSG (1<<15) - -/** Resolving order */ -enum nta_res_order_e -{ - nta_res_ip6_ip4, - nta_res_ip4_ip6, - nta_res_ip6_only, - nta_res_ip4_only -}; - -HTABLE_DECLARE_WITH(leg_htable, lht, nta_leg_t, size_t, hash_value_t); -HTABLE_DECLARE_WITH(outgoing_htable, oht, nta_outgoing_t, size_t, hash_value_t); -HTABLE_DECLARE_WITH(incoming_htable, iht, nta_incoming_t, size_t, hash_value_t); - -typedef struct outgoing_queue_t { - nta_outgoing_t **q_tail; - nta_outgoing_t *q_head; - size_t q_length; - unsigned q_timeout; -} outgoing_queue_t; - -typedef struct incoming_queue_t { - nta_incoming_t **q_tail; - nta_incoming_t *q_head; - size_t q_length; - unsigned q_timeout; -} incoming_queue_t; - typedef struct nta_compressor nta_compressor_t; -struct nta_agent_s -{ - su_home_t sa_home[1]; - su_root_t *sa_root; - su_timer_t *sa_timer; - nta_agent_magic_t *sa_magic; - nta_message_f *sa_callback; - - nta_update_magic_t *sa_update_magic; - nta_update_tport_f *sa_update_tport; - - su_time_t sa_now; /**< Timestamp in microsecond resolution. */ - uint32_t sa_next; /**< Timestamp for next agent_timer. */ - uint32_t sa_millisec; /**< Timestamp in milliseconds. */ - - uint32_t sa_nw_updates; /* Shall we enable network detector? */ - - uint32_t sa_flags; /**< Message flags */ - msg_mclass_t const *sa_mclass; - - sip_contact_t *sa_contact; - sip_via_t *sa_vias; /**< @Via headers for all transports */ - sip_via_t *sa_public_vias; /**< @Vias for public transports */ - sip_contact_t *sa_aliases;/**< List of aliases for agent */ - - uint64_t sa_branch; /**< Counter for generating branch parameter */ - uint64_t sa_tags; /**< Counter for generating tag parameters */ - - char const *sa_2543_tag; /**< Fixed tag added to @To when responding */ - -#if HAVE_SOFIA_SRESOLV - sres_resolver_t *sa_resolver; /**< DNS resolver */ -#endif - - tport_t *sa_tports; - - /* Default outbound proxy */ - url_t *sa_default_proxy; - -#if HAVE_SMIME - sm_object_t *sa_smime; -#else - void *sa_smime; -#endif - - - /** Request error mask */ - unsigned sa_bad_req_mask; - /** Response error mask */ - unsigned sa_bad_resp_mask; - - /** Maximum size of incoming messages */ - size_t sa_maxsize; - - /** Maximum size of proceeding queue */ - size_t sa_max_proceeding; - - /** Maximum size of outgoing UDP requests */ - unsigned sa_udp_mtu; - - /** SIP T1 - initial interval of retransmissions (500 ms) */ - unsigned sa_t1; - /** SIP T2 - maximum interval of retransmissions (4000 ms) */ - unsigned sa_t2; - /** SIP T4 - clear message time (5000 ms) */ - unsigned sa_t4; - - /** SIP T1X64 - transaction lifetime (32 s) */ - unsigned sa_t1x64; - - /** Progress timer - interval between provisional responses sent */ - unsigned sa_progress; - - /** SIP timer C - interval between provisional responses receivedxs */ - unsigned sa_timer_c; - - /** Graylisting period */ - unsigned sa_graylist; - /** Blacklisting period */ - unsigned sa_blacklist; - - /** NTA is used to test packet drop */ - unsigned sa_drop_prob : 10; - /** NTA is acting as an User Agent server */ - unsigned sa_is_a_uas : 1; - /** Process requests outside dialog statelessly */ - unsigned sa_is_stateless : 1; - /** Let application provide @Via headers */ - unsigned sa_user_via:1; - /** Respond with "100 Trying" if application has not responded. */ - unsigned sa_extra_100:1; - /** The "100 Trying" provisional answers are passed to the application */ - unsigned sa_pass_100:1; - /** If true, a "408 Request Timeout" message is generated when outgoing - request expires. */ - unsigned sa_timeout_408:1; - /** If true, a "408 Request Timeout" responses are passed to client. */ - unsigned sa_pass_408:1; - /** If true, a "482 Request Merged" response is sent to merged requests. */ - unsigned sa_merge_482 : 1; - /** If true, send a CANCEL to an INVITE without an provisional response. */ - unsigned sa_cancel_2543 : 1; - /** If true, reply with 487 response when a CANCEL is received. */ - unsigned sa_cancel_487 : 1; - /** If true, use unique tags. */ - unsigned sa_tag_3261 : 1; - /** If true, include 100rel in INVITE requests. */ - unsigned sa_invite_100rel : 1; - /** If true, insert @Timestamp in requests. */ - unsigned sa_timestamp : 1; - - /** If true, transports support IPv4. */ - unsigned sa_tport_ip4 : 1; - /** If true, transports support IPv6. */ - unsigned sa_tport_ip6 : 1; - /** If true, transports support UDP. */ - unsigned sa_tport_udp : 1; - /** If true, transports support TCP. */ - unsigned sa_tport_tcp : 1; - /** If true, transports support SCTP. */ - unsigned sa_tport_sctp : 1; - /** If true, transports support TLS. */ - unsigned sa_tport_tls : 1; - - /** If true, use NAPTR lookup */ - unsigned sa_use_naptr : 1; - /** If true, use SRV lookup */ - unsigned sa_use_srv : 1; - - /** If true, transports use threadpool */ - unsigned sa_tport_threadpool : 1; - - /** If true, use rport at client */ - unsigned sa_rport:1; - /** If true, use rport at server */ - unsigned sa_server_rport:2; - /** If true, use rport with tcp, too */ - unsigned sa_tcp_rport:1; - /** If true, use rport with tls, too */ - unsigned sa_tls_rport:1; - - /** If true, automatically create compartments */ - unsigned sa_auto_comp:1; - - /** Set when executing timer */ - unsigned sa_in_timer:1; - - /** Set if application has set value for timer C */ - unsigned sa_use_timer_c:1; - - unsigned :0; - - /** Messages memory preload. */ - unsigned sa_preload; - - /** Name of SigComp algorithm */ - char const *sa_algorithm; - /** Options for SigComp. */ - char const *sa_sigcomp_options; - char const* const *sa_sigcomp_option_list; - char const *sa_sigcomp_option_free; - - nta_compressor_t *sa_compressor; - - /** Resolving order (AAAA/A) */ - enum nta_res_order_e sa_res_order; - - /** @MaxForwards */ - - sip_max_forwards_t sa_max_forwards[1]; - - /* Statistics */ - struct { - usize_t as_recv_msg; - usize_t as_recv_request; - usize_t as_recv_response; - usize_t as_bad_message; - usize_t as_bad_request; - usize_t as_bad_response; - usize_t as_drop_request; - usize_t as_drop_response; - usize_t as_client_tr; - usize_t as_server_tr; - usize_t as_dialog_tr; - usize_t as_acked_tr; - usize_t as_canceled_tr; - usize_t as_trless_request; - usize_t as_trless_to_tr; - usize_t as_trless_response; - usize_t as_trless_200; - usize_t as_merged_request; - usize_t as_sent_msg; - usize_t as_sent_request; - usize_t as_sent_response; - usize_t as_retry_request; - usize_t as_retry_response; - usize_t as_recv_retry; - usize_t as_tout_request; - usize_t as_tout_response; - } sa_stats[1]; - - /** Hash of dialogs. */ - leg_htable_t sa_dialogs[1]; - /** Default leg */ - nta_leg_t *sa_default_leg; - /** Hash of legs without dialogs. */ - leg_htable_t sa_defaults[1]; - /** Hash table for outgoing transactions */ - outgoing_htable_t sa_outgoing[1]; - nta_outgoing_t *sa_default_outgoing; - /** Hash table for incoming transactions */ - incoming_htable_t sa_incoming[1]; - nta_incoming_t *sa_default_incoming; - - /* Queues (states) for outgoing client transactions */ - struct { - /** Queue for retrying client transactions */ - nta_outgoing_t *re_list; - nta_outgoing_t **re_t1; /**< Special place for T1 timer */ - size_t re_length; /**< Length of sa_out.re_list */ - - outgoing_queue_t delayed[1]; - outgoing_queue_t resolving[1]; - - outgoing_queue_t trying[1]; /* Timer F/E */ - outgoing_queue_t completed[1]; /* Timer K */ - outgoing_queue_t terminated[1]; - - /* Special queues (states) for outgoing INVITE transactions */ - outgoing_queue_t inv_calling[1]; /* Timer B/A */ - outgoing_queue_t inv_proceeding[1]; /* Timer C */ - outgoing_queue_t inv_completed[1]; /* Timer D */ - - /* Temporary queue for transactions waiting to be freed */ - outgoing_queue_t *free; - } sa_out; - - /* Queues (states) for incoming server transactions */ - struct { - /** Queue for retransmitting response of server transactions */ - nta_incoming_t *re_list; - nta_incoming_t **re_t1; /**< Special place for T1 timer */ - size_t re_length; - - incoming_queue_t proceeding[1]; /**< Request received */ - incoming_queue_t preliminary[1]; /**< 100rel sent */ - incoming_queue_t completed[1]; /**< Final answer sent (non-invite). */ - incoming_queue_t inv_completed[1]; /**< Final answer sent (INVITE). */ - incoming_queue_t inv_confirmed[1]; /**< Final answer sent, ACK recvd. */ - incoming_queue_t terminated[1]; /**< Terminated, ready to free. */ - incoming_queue_t final_failed[1]; - } sa_in; - - /* Special task for freeing memory */ - su_clone_r sa_terminator; -}; - -struct nta_leg_s -{ - su_home_t leg_home[1]; - hash_value_t leg_hash; - unsigned leg_dialog : 1; - unsigned leg_stateless : 1; /**< Process requests statelessly */ -#ifdef NTA_STRICT_ROUTING - unsigned leg_contact_set : 1; -#else - unsigned leg_loose_route : 1; /**< Topmost route in set is LR */ -#endif - unsigned leg_local_is_to : 1; /**< Backwards-compatibility. */ - unsigned leg_tagged : 1; /**< Tagged after creation. - * - * Request missing To tag matches it - * even after tagging. - */ - unsigned:0; - nta_request_f *leg_callback; - nta_leg_magic_t *leg_magic; - nta_agent_t *leg_agent; - /** Leg URL. - * - * This is the URL used to match incoming requests. - */ - url_t const *leg_url; - char const *leg_method; /**< Method for this dialog. */ - - uint32_t leg_seq; /**< Sequence number for next transaction */ - uint32_t leg_rseq; /**< Remote sequence number */ - sip_call_id_t *leg_id; /**< Call ID */ - sip_from_t *leg_remote; /**< Remote address (@To/@From) */ - sip_to_t *leg_local; /**< Local address (@From/@To) */ - - sip_route_t *leg_route; /**< @Route for outgoing requests. */ - sip_contact_t *leg_target; /**< Remote destination (from @Contact). */ -}; - -#define leg_has_id(leg) ((leg)->leg_id != NULL) - -struct nta_incoming_s -{ - su_home_t *irq_home; - hash_value_t irq_hash; - nta_agent_t *irq_agent; - nta_ack_cancel_f *irq_callback; - nta_incoming_magic_t *irq_magic; - - /* Timeout/state queue */ - nta_incoming_t **irq_prev; - nta_incoming_t *irq_next; - incoming_queue_t *irq_queue; - - /* Retry queue */ - nta_incoming_t **irq_rprev; - nta_incoming_t *irq_rnext; - - sip_method_t irq_method; - sip_request_t *irq_rq; - sip_from_t *irq_from; - sip_to_t *irq_to; - char const *irq_tag; - sip_cseq_t *irq_cseq; - sip_call_id_t *irq_call_id; - sip_via_t *irq_via; - sip_record_route_t *irq_record_route; - char const *irq_branch; - - uint32_t irq_rseq; - - sip_timestamp_t *irq_timestamp; - su_time_t irq_received; - - uint32_t irq_timeout; /**< Timer H, I, J */ - uint32_t irq_retry; /**< Timer G */ - unsigned short irq_interval; /**< Next timer */ - - short irq_status; - - unsigned irq_retries : 8; - unsigned irq_default : 1; /**< Default transaction */ - unsigned irq_canceled : 1; /**< Transaction is canceled */ - unsigned irq_completed : 1; /**< Transaction is completed */ - unsigned irq_confirmed : 1; /**< Response has been acked */ - unsigned irq_terminated :1; /**< Transaction is terminated */ - unsigned irq_final_failed:1; /**< Sending final response failed */ - unsigned irq_destroyed :1; /**< Transaction is destroyed */ - unsigned irq_in_callback:1; /**< Callback is being invoked */ - unsigned irq_reliable_tp:1; /**< Transport is reliable */ - unsigned irq_sigcomp_zap:1; /**< Reset SigComp */ - unsigned irq_must_100rel:1; /**< 100rel is required */ - unsigned irq_tag_set:1; /**< Tag is not from request */ - unsigned :0; - - tp_name_t irq_tpn[1]; - tport_t *irq_tport; - struct sigcomp_compartment *irq_cc; - msg_t *irq_request; - msg_t *irq_request2; /**< ACK/CANCEL */ - msg_t *irq_response; - - nta_reliable_t *irq_reliable; /**< List of reliable responses */ -}; - -struct nta_reliable_s -{ - nta_reliable_t *rel_next; - nta_incoming_t *rel_irq; - nta_prack_f *rel_callback; - nta_reliable_magic_t *rel_magic; - uint32_t rel_rseq; - unsigned short rel_status; - unsigned rel_pracked : 1; - unsigned rel_precious : 1; - msg_t *rel_response; - msg_t *rel_unsent; -}; - -typedef struct sipdns_resolver sipdns_resolver_t; - -struct nta_outgoing_s -{ - hash_value_t orq_hash; /**< Hash value */ - nta_agent_t *orq_agent; - nta_response_f *orq_callback; - nta_outgoing_magic_t *orq_magic; - - /* Timeout/state queue */ - nta_outgoing_t **orq_prev; - nta_outgoing_t *orq_next; - outgoing_queue_t *orq_queue; - - /* Retry queue */ - nta_outgoing_t **orq_rprev; - nta_outgoing_t *orq_rnext; - - sip_method_t orq_method; - char const *orq_method_name; - url_t const *orq_url; /**< Original RequestURI */ - - sip_from_t const *orq_from; - sip_to_t const *orq_to; - char const *orq_tag; /**< Tag from final response. */ - - sip_cseq_t const *orq_cseq; - sip_call_id_t const *orq_call_id; - - msg_t *orq_request; - msg_t *orq_response; - - su_time_t orq_sent; /**< When request was sent? */ - unsigned orq_delay; /**< RTT estimate */ - - uint32_t orq_retry; /**< Timer A, E */ - uint32_t orq_timeout; /**< Timer B, D, F, K */ - - unsigned short orq_interval; /**< Next timer A/E */ - - unsigned short orq_status; - unsigned char orq_retries; /**< Number of tries this far */ - unsigned orq_default : 1; /**< This is default transaction */ - unsigned orq_inserted : 1; - unsigned orq_resolved : 1; - unsigned orq_prepared : 1; /**< outgoing_prepare() called */ - unsigned orq_canceled : 1; - unsigned orq_terminated : 1; - unsigned orq_destroyed : 1; - unsigned orq_completed : 1; - unsigned orq_delayed : 1; - unsigned orq_stripped_uri : 1; - unsigned orq_user_tport : 1; /**< Application provided tport - don't retry */ - unsigned orq_try_tcp_instead : 1; - unsigned orq_try_udp_instead : 1; - unsigned orq_reliable : 1; /**< Transport is reliable */ - unsigned orq_ack_error : 1; /**< ACK is sent by NTA */ - /* Attributes */ - unsigned orq_user_via : 1; - unsigned orq_stateless : 1; - unsigned orq_pass_100 : 1; - unsigned orq_sigcomp_new:1; /**< Create compartment if needed */ - unsigned orq_sigcomp_zap:1; /**< Reset SigComp after completing */ - unsigned orq_must_100rel : 1; - unsigned orq_timestamp : 1; /**< Insert @Timestamp header. */ - unsigned orq_100rel:1; /**< Support 100rel */ - unsigned : 0; /* pad */ - -#if HAVE_SOFIA_SRESOLV - sipdns_resolver_t *orq_resolver; -#endif - enum nta_res_order_e orq_res_order; /**< AAAA/A first? */ - - url_t *orq_route; /**< Route URL */ - tp_name_t orq_tpn[1]; /**< Where to send request */ - char const *orq_scheme; /**< Transport URL type */ - - tport_t *orq_tport; - struct sigcomp_compartment *orq_cc; - tagi_t *orq_tags; /**< Tport tag items */ - int orq_pending; /**< Request is pending in tport */ - - char const *orq_branch; /**< Transaction branch */ - char const *orq_via_branch; /**< @Via branch */ - - int *orq_status2b; /**< Delayed response */ - - nta_outgoing_t *orq_cancel; /**< CANCEL transaction */ - - uint32_t orq_rseq; /**< Latest incoming rseq */ -}; - /* Virtual function table for plugging in SigComp */ typedef struct { @@ -594,7 +87,7 @@ } nta_compressor_vtable_t; -extern nta_compressor_vtable_t *nta_compressor_vtable; +SOFIAPUBVAR nta_compressor_vtable_t *nta_compressor_vtable; SOFIAPUBFUN nta_compressor_t *nta_agent_init_sigcomp(nta_agent_t *sa); SOFIAPUBFUN void nta_agent_deinit_sigcomp(nta_agent_t *sa); From mikej at freeswitch.org Tue Dec 16 12:16:58 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:16:58 -0500 Subject: [Freeswitch-trunk] [commit] r10821 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nua Message-ID: Author: mikej Date: Tue Dec 16 15:16:58 2008 New Revision: 10821 Log: Fri Nov 14 17:26:48 CST 2008 Jarod Neuner * sips_in_contact_bug Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 15:16:58 2008 @@ -1 +1 @@ -Tue Dec 16 14:12:18 CST 2008 +Tue Dec 16 14:15:24 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c Tue Dec 16 15:16:58 2008 @@ -2011,6 +2011,7 @@ if (sip_transport_has_tls(v->v_protocol) || sip_transport_has_tls(transport)) { url.url_type = url_sips; + url.url_scheme = url_scheme(url_sips); if (port && strcmp(port, SIPS_DEFAULT_SERV) == 0) port = NULL; if (port || host_is_ip_address(host)) From stkn at freeswitch.org Tue Dec 16 12:17:32 2008 From: stkn at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:17:32 -0500 Subject: [Freeswitch-trunk] [commit] r10822 - freeswitch/trunk/libs/codec/ilbc/src Message-ID: Author: stkn Date: Tue Dec 16 15:17:32 2008 New Revision: 10822 Log: Rename (unused) constant (fix for opensolaris) Modified: freeswitch/trunk/libs/codec/ilbc/src/iLBC_define.h Modified: freeswitch/trunk/libs/codec/ilbc/src/iLBC_define.h ============================================================================== --- freeswitch/trunk/libs/codec/ilbc/src/iLBC_define.h (original) +++ freeswitch/trunk/libs/codec/ilbc/src/iLBC_define.h Tue Dec 16 15:17:32 2008 @@ -16,7 +16,7 @@ /* general codec settings */ -#define FS (float)8000.0 +#define FREQ_S (float)8000.0 #define BLOCKL_20MS 160 #define BLOCKL_30MS 240 #define BLOCKL_MAX 240 From mikej at freeswitch.org Tue Dec 16 12:22:10 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:22:10 -0500 Subject: [Freeswitch-trunk] [commit] r10823 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/tport Message-ID: Author: mikej Date: Tue Dec 16 15:22:09 2008 New Revision: 10823 Log: Wed Nov 26 12:38:03 CST 2008 Pekka Pessi * tport.c: log real transport name by tport_vsend() Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 15:22:09 2008 @@ -1 +1 @@ -Tue Dec 16 14:15:24 CST 2008 +Tue Dec 16 14:21:26 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport.c Tue Dec 16 15:22:09 2008 @@ -3490,10 +3490,10 @@ if (tpn == NULL || tport_is_connection_oriented(self)) tpn = self->tp_name; - - SU_DEBUG_7(("%s(%p): "MOD_ZU" bytes of "MOD_ZU" to %s/%s:%s%s\n", - "tport_vsend", (void *)self, n, m, tpn->tpn_proto, tpn->tpn_host, - tpn->tpn_port, + + SU_DEBUG_7(("%s(%p): "MOD_ZU" bytes of "MOD_ZU" to %s/%s:%s%s\n", + "tport_vsend", (void *)self, n, m, + self->tp_name->tpn_proto, tpn->tpn_host, tpn->tpn_port, (ai->ai_flags & TP_AI_COMPRESSED) ? ";comp=sigcomp" : "")); } From mikej at freeswitch.org Tue Dec 16 12:26:20 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:26:20 -0500 Subject: [Freeswitch-trunk] [commit] r10824 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/tport libsofia-sip-ua/tport/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 15:26:19 2008 New Revision: 10824 Log: Wed Nov 26 12:42:31 CST 2008 Paulo Pizarro * tport: new tag TPTAG_TLS_VERIFY_PEER With this tag, the verification of certificates can be controlled: 0: no verify certificates. 1: on server mode, the certificate returned by client is checked and if fail the TLS/SSL handshake is immediately terminated. 1: on client mode, the server certificate is verified and if fail the TLS/SSL handshake is immediately terminated. I added this tag, because I'd like that my application not connected to a server with a untrusted certificate. Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/sofia-sip/tport_tag.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_tls.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 15:26:19 2008 @@ -1 +1 @@ -Tue Dec 16 14:21:26 CST 2008 +Tue Dec 16 14:24:06 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/sofia-sip/tport_tag.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/sofia-sip/tport_tag.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/sofia-sip/tport_tag.h Tue Dec 16 15:26:19 2008 @@ -186,6 +186,12 @@ TPORT_DLL extern tag_typedef_t tptag_tls_version_ref; #define TPTAG_TLS_VERSION_REF(x) tptag_tls_version_ref, tag_uint_vr(&(x)) +TPORT_DLL extern tag_typedef_t tptag_tls_verify_peer; +#define TPTAG_TLS_VERIFY_PEER(x) tptag_tls_verify_peer, tag_uint_v((x)) + +TPORT_DLL extern tag_typedef_t tptag_tls_verify_peer_ref; +#define TPTAG_TLS_VERIFY_PEER_REF(x) tptag_tls_verify_peer_ref, tag_uint_vr(&(x)) + #if 0 TPORT_DLL extern tag_typedef_t tptag_trusted; #define TPTAG_TRUSTED(x) tptag_trusted, tag_bool_v((x)) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport.c Tue Dec 16 15:26:19 2008 @@ -1448,7 +1448,7 @@ * * @TAGS * TPTAG_SERVER(), TPTAG_PUBLIC(), TPTAG_IDENT(), TPTAG_HTTP_CONNECT(), - * TPTAG_CERTIFICATE(), TPTAG_TLS_VERSION(), and tags used with + * TPTAG_CERTIFICATE(), TPTAG_TLS_VERSION(), TPTAG_TLS_VERIFY_PEER, and tags used with * tport_set_params(), especially TPTAG_QUEUESIZE(). */ int tport_tbind(tport_t *self, Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tag.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tag.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tag.c Tue Dec 16 15:26:19 2008 @@ -280,6 +280,20 @@ */ tag_typedef_t tptag_tls_version = UINTTAG_TYPEDEF(tls_version); +/**@def TPTAG_TLS_VERIFY_PEER(x) + * + * The verification of certificates can be controlled: + * 0: no verify certificates; + * 1: on server mode, the certificate returned by client is checked + * if fail the TLS/SSL handshake is immediately terminated; + * 1: on client mode, the server certificate is verified + * if fail the TLS/SSL handshake is immediately terminated; + * + * Use with tport_tbind(), nua_create(), nta_agent_create(), + * nta_agent_add_tport(), nth_engine_create(), or initial nth_site_create(). + */ +tag_typedef_t tptag_tls_verify_peer = UINTTAG_TYPEDEF(tls_verify_peer); + /**@def TPTAG_QUEUESIZE(x) * * Specify the number of messages that can be queued per connection. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c Tue Dec 16 15:26:19 2008 @@ -166,7 +166,7 @@ SU_DEBUG_1((" err %i:%s\n", err, X509_verify_cert_error_string(err))); } - return 1; /* Always return "ok" */ + return ok; } static @@ -265,8 +265,7 @@ SSL_CTX_set_verify_depth(tls->ctx, ti->verify_depth); SSL_CTX_set_verify(tls->ctx, - getenv("SSL_VERIFY_PEER") ? SSL_VERIFY_PEER : SSL_VERIFY_NONE - /* SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT */, + ti->verify_peer == 1 ? SSL_VERIFY_PEER : SSL_VERIFY_NONE, tls_verify_cb); if (!SSL_CTX_set_cipher_list(tls->ctx, ti->cipher)) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.h Tue Dec 16 15:26:19 2008 @@ -48,7 +48,9 @@ extern char const tls_version[]; typedef struct tls_issues_s { - int verify_depth; /* if 0, then do nothing */ + int verify_peer; /* 0: no verify certificate, * + * 1: if fail the TLS/SSL handshake is terminated. */ + int verify_depth; /* if 0, then do nothing */ int configured; /* If non-zero, complain about certificate errors */ char *cert; /* CERT file name. File format is PEM */ char *key; /* Private key file. PEM format */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_tls.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_tls.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_tls.c Tue Dec 16 15:26:19 2008 @@ -174,6 +174,7 @@ char *tbf = NULL; char const *path = NULL; unsigned tls_version = 1; + unsigned tls_verify = 0; su_home_t autohome[SU_HOME_AUTO_SIZE(1024)]; tls_issues_t ti = {0}; @@ -185,6 +186,7 @@ tl_gets(tags, TPTAG_CERTIFICATE_REF(path), TPTAG_TLS_VERSION_REF(tls_version), + TPTAG_TLS_VERIFY_PEER_REF(tls_verify), TAG_END()); if (!path) { @@ -195,6 +197,7 @@ } if (path) { + ti.verify_peer = tls_verify; ti.verify_depth = 2; ti.configured = path != tbf; ti.randFile = su_sprintf(autohome, "%s/%s", path, "tls_seed.dat"); @@ -202,6 +205,7 @@ ti.cert = ti.key; ti.CAfile = su_sprintf(autohome, "%s/%s", path, "cafile.pem"); ti.version = tls_version; + ti.CApath = su_strdup(autohome, path); SU_DEBUG_9(("%s(%p): tls key = %s\n", __func__, (void *)pri, ti.key)); From mikej at freeswitch.org Tue Dec 16 12:28:53 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:28:53 -0500 Subject: [Freeswitch-trunk] [commit] r10825 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nua Message-ID: Author: mikej Date: Tue Dec 16 15:28:53 2008 New Revision: 10825 Log: Wed Nov 26 13:30:48 CST 2008 Pekka Pessi * outbound.c: silenced warnings wtf? xxx. Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_register.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 15:28:53 2008 @@ -1 +1 @@ -Tue Dec 16 14:24:06 CST 2008 +Tue Dec 16 14:28:36 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_register.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_register.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_register.c Tue Dec 16 15:28:53 2008 @@ -265,6 +265,10 @@ m = s2_wait_for_request(SIP_METHOD_REGISTER); fail_if(!m); fail_if(!m->sip->sip_authorization); + /* should not unregister the previous contact + * as it has not been successfully registered */ + fail_if(!m->sip->sip_contact); + fail_if(m->sip->sip_contact->m_next); s2_save_register(m); s2_respond_to(m, NULL, Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c Tue Dec 16 15:28:53 2008 @@ -102,7 +102,7 @@ /* The registration state machine. */ /** Initial REGISTER containing ob_rcontact has been sent */ unsigned ob_registering:1; - /** 2XX response to REGISTER containg ob_rcontact has been received */ + /** 2XX response to REGISTER containing ob_rcontact has been received */ unsigned ob_registered:1; /** The registration has been validated: * We have successfully sent OPTIONS to ourselves. @@ -361,14 +361,6 @@ if (ob) { if (ob->ob_contacts) *return_current_contact = ob->ob_rcontact; - else { - sip_contact_t *contact = *return_current_contact; - if (contact) { - if (ob->ob_rcontact) - msg_header_free_all(ob->ob_home, (msg_header_t*)ob->ob_rcontact); - ob->ob_rcontact = sip_contact_dup(ob->ob_home, contact); - } - } *return_previous_contact = ob->ob_previous; } return 0; @@ -402,21 +394,25 @@ return 0; assert(request->sip_request); assert(response->sip_status); - - reregister = outbound_check_for_nat(ob, request, response); - if (reregister) - return reregister; status = response->sip_status->st_status; if (status < 300) { - if (request->sip_contact && response->sip_contact) + if (request->sip_contact && response->sip_contact) { + if (ob->ob_rcontact != NULL) + msg_header_free(ob->ob_home, (msg_header_t *)ob->ob_rcontact); + ob->ob_rcontact = sip_contact_dup(ob->ob_home, request->sip_contact); ob->ob_registered = ob->ob_registering; - else + } else ob->ob_registered = 0; + } - if (ob->ob_previous) - msg_header_free(ob->ob_home, (void *)ob->ob_previous); + reregister = outbound_check_for_nat(ob, request, response); + if (reregister) + return reregister; + + if (ob->ob_previous && status < 300) { + msg_header_free(ob->ob_home, (void *)ob->ob_previous); ob->ob_previous = NULL; } @@ -1071,7 +1067,6 @@ { su_home_t *home = ob->ob_home; sip_contact_t *rcontact, *dcontact; - int reg_id = 0; char reg_id_param[20] = ""; sip_contact_t *previous_previous, *previous_rcontact, *previous_dcontact; sip_via_t *v, v0[1], *previous_via; @@ -1110,8 +1105,10 @@ previous_dcontact = ob->ob_dcontact; previous_via = ob->ob_via; - if (ob->ob_registering && - (reg_id == 0 || ob->ob_info.outbound < outbound_feature_supported)) + if (ob->ob_registered + /* && (ob->ob_reg_id == 0 || ob->ob_info.outbound < outbound_feature_supported) + * XXX - multiple connections not yet supported + */) previous_rcontact = NULL, ob->ob_previous = ob->ob_rcontact; else previous_rcontact = ob->ob_rcontact, ob->ob_previous = NULL; From mikej at freeswitch.org Tue Dec 16 12:34:01 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:34:01 -0500 Subject: [Freeswitch-trunk] [commit] r10826 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nta Message-ID: Author: mikej Date: Tue Dec 16 15:34:00 2008 New Revision: 10826 Log: Mon Dec 15 08:31:45 CST 2008 Stas Maximov * nta: NULL host and port in user Via are filled automaticaly NULL host or port in user-supplied Via header will be filled automaticaly by NTA, just like branch and rport params. Added related test case to test_nta_api.c. Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 15:34:00 2008 @@ -1 +1 @@ -Tue Dec 16 14:28:36 CST 2008 +Tue Dec 16 14:33:26 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c Tue Dec 16 15:34:00 2008 @@ -2550,12 +2550,12 @@ clear = 1, v->v_protocol = via->v_protocol; /* XXX - should we do this? */ - if (!user_via && + if ((!user_via || !v->v_host) && via->v_host != v->v_host && str0cmp(via->v_host, v->v_host)) clear = 1, v->v_host = via->v_host; - if ((!user_via || + if ((!user_via || !v->v_port || /* Replace port in user Via only if we use udp and no rport */ (v->v_protocol == sip_transport_udp && !v->v_rport && !orq->orq_stateless)) && Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c Tue Dec 16 15:34:00 2008 @@ -865,6 +865,90 @@ } +/* Test that NULL host and/or port fields of user supplied Via header are + filled in automaticaly */ +int api_test_user_via_fillin(agent_t *ag) +{ + su_home_t home[1]; + su_root_t *root; + nta_agent_t *nta; + nta_leg_t *leg; + nta_outgoing_t *orq0, *orq1; + msg_t *msg0, *msg1; + sip_t *sip0, *sip1; + sip_via_t *via0, *via1; + sip_via_t via[1]; + static char *via_params[] = { "param1=value1", "param2=value2" }; + int i; + + BEGIN(); + + memset(home, 0, sizeof home); + su_home_init(home); + + TEST_1(root = su_root_create(NULL)); + + TEST_1(nta = nta_agent_create(root, + (url_string_t *)"sip:*:*", + NULL, + NULL, + TAG_END())); + TEST_1(leg = nta_leg_tcreate(nta, NULL, NULL, + NTATAG_NO_DIALOG(1), + TAG_END())); + + /* This creates a delayed response message */ + orq0 = nta_outgoing_tcreate(leg, outgoing_callback, ag, NULL, + SIP_METHOD_MESSAGE, + URL_STRING_MAKE("sip:foo.bar;transport=none"), + SIPTAG_FROM_STR(""), + SIPTAG_TO_STR(""), + TAG_END()); + TEST_1(orq0); + TEST_1(msg0 = nta_outgoing_getrequest(orq0)); + TEST_1(sip0 = sip_object(msg0)); + TEST_1(via0 = sip0->sip_via); + + /* create user Via template to be filled in by NTA */ + sip_via_init(via); + via->v_protocol = "*"; + for (i = 0; i < sizeof(via_params)/sizeof(via_params[0]); i++) + sip_via_add_param(home,via,via_params[i]); /* add param to the template */ + + /* This creates a delayed response message */ + orq1 = nta_outgoing_tcreate(leg, outgoing_callback, ag, NULL, + SIP_METHOD_MESSAGE, + URL_STRING_MAKE("sip:foo.bar;transport=none"), + SIPTAG_FROM_STR(""), + SIPTAG_TO_STR(""), + NTATAG_USER_VIA(1), + SIPTAG_VIA(via), + TAG_END()); + TEST_1(orq1); + TEST_1(msg1 = nta_outgoing_getrequest(orq1)); + TEST_1(sip1 = sip_object(msg1)); + TEST_1(via1 = sip1->sip_via); + + /* check that template has been filled correctly */ + TEST_S(via0->v_protocol,via1->v_protocol); + TEST_S(via0->v_host,via1->v_host); + TEST_S(via0->v_port,via1->v_port); + /* check that the parameter has been preserved */ + for (i = 0; i < sizeof(via_params)/sizeof(via_params[0]); i++) + TEST_S(via1->v_params[i],via_params[i]); + + TEST_VOID(nta_outgoing_destroy(orq0)); + TEST_VOID(nta_outgoing_destroy(orq1)); + TEST_VOID(nta_leg_destroy(leg)); + TEST_VOID(nta_agent_destroy(nta)); + + TEST_VOID(su_root_destroy(root)); + TEST_VOID(su_home_deinit(home)); + + END(); +} + + int outgoing_default(agent_t *ag, nta_outgoing_t *orq, sip_t const *sip) @@ -1426,6 +1510,7 @@ retval |= api_test_tport(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_dialogs(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_default(ag); SINGLE_FAILURE_CHECK(); + retval |= api_test_user_via_fillin(ag); SINGLE_FAILURE_CHECK(); } retval |= api_test_deinit(ag); fflush(stdout); From mikej at freeswitch.org Tue Dec 16 12:47:19 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:47:19 -0500 Subject: [Freeswitch-trunk] [commit] r10827 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nua Message-ID: Author: mikej Date: Tue Dec 16 15:47:18 2008 New Revision: 10827 Log: Wed Nov 26 12:58:40 CST 2008 Pekka Pessi * nua_session.c: changing session expiration time to follow spirit (not only letter) of RFC 4028 Change suggested by Timo Bruhn. Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 15:47:18 2008 @@ -1 +1 @@ -Tue Dec 16 14:33:26 CST 2008 +Tue Dec 16 14:46:55 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Tue Dec 16 15:47:18 2008 @@ -4412,7 +4412,7 @@ interval is RECOMMENDED. */ unsigned interval = t->interval; - interval -= 32 > interval / 6 ? interval / 3 : 32 + interval / 3; + interval -= 32 > interval / 3 ? interval / 3 : 32; nua_dialog_usage_set_refresh_range(du, interval, interval); t->timer_set = 1; From anthm at freeswitch.org Tue Dec 16 12:59:00 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 15:59:00 -0500 Subject: [Freeswitch-trunk] [commit] r10828 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Tue Dec 16 15:59:00 2008 New Revision: 10828 Log: fix potential race Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Tue Dec 16 15:59:00 2008 @@ -373,6 +373,8 @@ switch_safe_free(stream.data); } + switch_clear_flag(tech_pvt, TFLAG_IO); + if (tech_pvt->read_codec.implementation) { switch_core_codec_destroy(&tech_pvt->read_codec); } @@ -385,7 +387,6 @@ switch_core_session_unset_write_codec(session); switch_mutex_lock(tech_pvt->profile->flag_mutex); - switch_clear_flag(tech_pvt, TFLAG_IO); tech_pvt->profile->inuse--; switch_mutex_unlock(tech_pvt->profile->flag_mutex); @@ -656,6 +657,10 @@ tech_pvt->read_frame.datalen = 0; switch_set_flag_locked(tech_pvt, TFLAG_READING); + if (switch_test_flag(tech_pvt, TFLAG_HUP) || switch_test_flag(tech_pvt, TFLAG_BYE) || !tech_pvt->read_codec.implementation) { + return SWITCH_STATUS_FALSE; + } + if (switch_test_flag(tech_pvt, TFLAG_IO)) { switch_status_t status; @@ -665,7 +670,7 @@ switch_assert(tech_pvt->rtp_session != NULL); tech_pvt->read_frame.datalen = 0; - + while (switch_test_flag(tech_pvt, TFLAG_IO) && tech_pvt->read_frame.datalen == 0) { tech_pvt->read_frame.flags = SFF_NONE; @@ -845,6 +850,10 @@ return SWITCH_STATUS_SUCCESS; } + if (switch_test_flag(tech_pvt, TFLAG_BYE) || !tech_pvt->read_codec.implementation) { + return SWITCH_STATUS_FALSE; + } + switch_set_flag_locked(tech_pvt, TFLAG_WRITING); if (!switch_test_flag(frame, SFF_CNG) && !switch_test_flag(frame, SFF_PROXY_PACKET)) { From mikej at freeswitch.org Tue Dec 16 13:20:22 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 16:20:22 -0500 Subject: [Freeswitch-trunk] [commit] r10829 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nua libsofia-sip-ua/nua/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 16:20:22 2008 New Revision: 10829 Log: Fri Nov 21 04:52:55 CST 2008 Pekka Pessi * nua: try to cope if a re-INVITE nor its ACK contain SDP Some SIP user-agents use INVITE without SDP offer to refresh session. By default, NUA sends an offer in 200 OK to such an INVITE and expects an answer back in ACK. Now nua tries to recover from such a Offer/Answer protocol error. Also, if NUTAG_REFRESH_WITHOUT_SDP(1) tag is used, and if the re-INVITE was received without SDP, no SDP offer is sent in 200 OK. Thanks for Anthony Minessale for reporting the problem. Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua_tag.h Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 16:20:22 2008 @@ -1 +1 @@ -Tue Dec 16 14:46:55 CST 2008 +Tue Dec 16 15:19:47 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c Tue Dec 16 16:20:22 2008 @@ -1077,6 +1077,71 @@ } END_TEST +START_TEST(call_2_3_3) +{ + nua_handle_t *nh; + struct message *response; + + s2_case("2.3.3", "Handling re-INVITE without SDP gracefully", + "NUA receives INVITE, " + "re-INVITE without SDP (w/o NUTAG_REFRESH_WITHOUT_SDP(), " + "re-INVITE without SDP (using NUTAG_REFRESH_WITHOUT_SDP(), " + "sends BYE."); + + nh = invite_to_nua( + TAG_END()); + + s2_request_to(dialog, SIP_METHOD_INVITE, NULL, + SIPTAG_USER_AGENT_STR("evil (evil) evil"), + TAG_END()); + + nua_respond(nh, SIP_200_OK, TAG_END()); + + fail_unless(s2_check_callstate(nua_callstate_completed)); + + response = s2_wait_for_response(200, SIP_METHOD_INVITE); + + fail_if(!response); + s2_update_dialog(dialog, response); + fail_if(!response->sip->sip_content_type); + s2_free_message(response); + + fail_if(s2_request_to(dialog, SIP_METHOD_ACK, NULL, TAG_END())); + + fail_unless(s2_check_event(nua_i_ack, 200)); + fail_unless(s2_check_callstate(nua_callstate_ready)); + + s2_fast_forward(10); + + nua_set_hparams(nh, NUTAG_REFRESH_WITHOUT_SDP(1), TAG_END()); + fail_unless(s2_check_event(nua_r_set_params, 200)); + + s2_request_to(dialog, SIP_METHOD_INVITE, NULL, + SIPTAG_USER_AGENT_STR("evil (evil) evil"), + TAG_END()); + + nua_respond(nh, SIP_200_OK, TAG_END()); + + fail_unless(s2_check_callstate(nua_callstate_completed)); + + response = s2_wait_for_response(200, SIP_METHOD_INVITE); + + fail_if(!response); + s2_update_dialog(dialog, response); + fail_if(response->sip->sip_content_type); + s2_free_message(response); + + fail_if(s2_request_to(dialog, SIP_METHOD_ACK, NULL, TAG_END())); + + fail_unless(s2_check_event(nua_i_ack, 200)); + fail_unless(s2_check_callstate(nua_callstate_ready)); + + bye_by_nua(nh, TAG_END()); + + nua_handle_destroy(nh); +} +END_TEST + TCase *session_timer_tcase(void) { @@ -1085,6 +1150,7 @@ { tcase_add_test(tc, call_2_3_1); tcase_add_test(tc, call_2_3_2); + tcase_add_test(tc, call_2_3_3); } return tc; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h Tue Dec 16 16:20:22 2008 @@ -116,6 +116,7 @@ unsigned sr_offer_sent:2; /**< We have offered SDP (reliably, if >1) */ unsigned sr_answer_recv:1; /**< We have received SDP answer */ + unsigned :0; char const *sr_sdp; /**< SDP received from client */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c Tue Dec 16 16:20:22 2008 @@ -301,6 +301,7 @@ * NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) \n * NUTAG_REFER_EXPIRES() \n * NUTAG_REFER_WITH_ID() \n + * NUTAG_REFRESH_WITHOUT_SDP() \n * NUTAG_REGISTRAR() \n * NUTAG_RETRY_COUNT() \n * NUTAG_SERVICE_ROUTE_ENABLE() \n @@ -422,6 +423,7 @@ * NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) \n * NUTAG_REFER_EXPIRES() \n * NUTAG_REFER_WITH_ID() \n + * NUTAG_REFRESH_WITHOUT_SDP() \n * NUTAG_REGISTRAR() \n * NUTAG_RETRY_COUNT() \n * NUTAG_SERVICE_ROUTE_ENABLE() \n @@ -770,6 +772,10 @@ else if (tag == nutag_update_refresh) { NHP_SET(nhp, update_refresh, value != 0); } + /* NUTAG_REFRESH_WITHOUT_SDP(refresh_without_sdp) */ + else if (tag == nutag_refresh_without_sdp) { + NHP_SET(nhp, refresh_without_sdp, value != 0); + } /* NUTAG_ENABLEMESSAGE(message_enable) */ else if (tag == nutag_enablemessage) { NHP_SET(nhp, message_enable, value != 0); @@ -1478,6 +1484,7 @@ * NUTAG_PATH_ENABLE() \n * NUTAG_REFER_EXPIRES() \n * NUTAG_REFER_WITH_ID() \n + * NUTAG_REFRESH_WITHOUT_SDP() \n * NUTAG_REGISTRAR() \n * NUTAG_RETRY_COUNT() \n * NUTAG_SERVICE_ROUTE_ENABLE() \n @@ -1639,6 +1646,7 @@ TIF(NUTAG_MIN_SE, min_se), TIFD(NUTAG_SESSION_REFRESHER, refresher), TIF(NUTAG_UPDATE_REFRESH, update_refresh), + TIF(NUTAG_REFRESH_WITHOUT_SDP, refresh_without_sdp), TIF(NUTAG_ENABLEMESSAGE, message_enable), TIF(NUTAG_ENABLEMESSENGER, win_messenger_enable), Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h Tue Dec 16 16:20:22 2008 @@ -82,6 +82,9 @@ /** no (preference), local or remote */ enum nua_session_refresher nhp_refresher; unsigned nhp_update_refresh:1; /**< Use UPDATE to refresh */ + + /**< Accept refreshes without SDP */ + unsigned nhp_refresh_without_sdp:1; /* Messaging preferences */ unsigned nhp_message_enable : 1; @@ -164,6 +167,7 @@ unsigned nhb_min_se:1; unsigned nhb_refresher:1; unsigned nhb_update_refresh:1; + unsigned nhb_refresh_without_sdp:1; unsigned nhb_message_enable:1; unsigned nhb_win_messenger_enable:1; unsigned nhb_message_auto_respond:1; @@ -179,9 +183,9 @@ unsigned nhb_keepalive:1; unsigned nhb_keepalive_stream:1; unsigned nhb_registrar:1; + unsigned :0; /* at most 32 bits before this point */ unsigned nhb_allow:1; - unsigned :0; /* at most 32 bits before this point */ unsigned nhb_supported:1; unsigned nhb_allow_events:1; Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Tue Dec 16 16:20:22 2008 @@ -171,6 +171,9 @@ /* Offer-Answer status */ char const *ss_oa_recv, *ss_oa_sent; + + /**< Version of user SDP from latest successful O/A */ + unsigned ss_sdp_version; } nua_session_usage_t; static char const Offer[] = "offer", Answer[] = "answer"; @@ -964,11 +967,14 @@ /* XXX */ sdp = NULL; } - else if (soa_activate(nh->nh_soa, NULL) < 0) + else if (soa_activate(nh->nh_soa, NULL) < 0) { /* XXX - what about errors? */ LOG3("error activating media after"); - else + } + else { + ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); LOG5("processed SDP"); + } } else if (cr->cr_method != sip_method_invite) { /* If non-invite request did not have offer, ignore SDP in response */ @@ -1309,7 +1315,8 @@ ; else if (nh->nh_soa && soa_is_complete(nh->nh_soa)) { /* signal SOA that O/A round(s) is (are) complete */ - soa_activate(nh->nh_soa, NULL); + if (soa_activate(nh->nh_soa, NULL) >= 0) + ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); } else if (nh->nh_soa == NULL /* NUA does not necessarily know dirty details */ @@ -1741,7 +1748,8 @@ } else { answer_sent = 1; - soa_activate(nh->nh_soa, NULL); + if (soa_activate(nh->nh_soa, NULL) >= 0) + ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); } } else if (nh->nh_soa == NULL) { @@ -1967,6 +1975,8 @@ process_ack_or_cancel(nua_server_request_t *, nta_incoming_t *, sip_t const *), process_ack(nua_server_request_t *, nta_incoming_t *, sip_t const *), + process_ack_error(nua_server_request_t *sr, msg_t *ackmsg, + int status, char const *phrase, char const *reason), process_cancel(nua_server_request_t *, nta_incoming_t *, sip_t const *), process_timeout(nua_server_request_t *, nta_incoming_t *), process_prack(nua_server_request_t *, @@ -2207,7 +2217,7 @@ msg_t *msg = sr->sr_response.msg; sip_t *sip = sr->sr_response.sip; - int reliable = 0, offer = 0, answer = 0, early_answer = 0, extra = 0; + int reliable = 0, maybe_answer = 0, offer = 0, answer = 0, extra = 0; enter; @@ -2217,8 +2227,11 @@ return nua_base_server_respond(sr, tags); } - if (nua_invite_server_is_100rel(sr, tags)) { - reliable = 1, early_answer = 1; + if (200 <= sr->sr_status && sr->sr_status < 300) { + reliable = 1, maybe_answer = 1; + } + else if (nua_invite_server_is_100rel(sr, tags)) { + reliable = 1, maybe_answer = 1; } else if (!nh->nh_soa || sr->sr_status >= 300) { if (sr->sr_neutral) @@ -2234,10 +2247,10 @@ SOATAG_USER_SDP_STR_REF(user_sdp_str), TAG_END()); - early_answer = user_sdp || user_sdp_str; + maybe_answer = user_sdp || user_sdp_str; } else { - early_answer = NH_PGET(nh, early_answer); + maybe_answer = NH_PGET(nh, early_answer); } if (!nh->nh_soa) { @@ -2259,11 +2272,12 @@ tagi_t const *t = tl_find_last(tags, nutag_include_extra_sdp); extra = t && t->t_value; } - else if (sr->sr_offer_recv && !sr->sr_answer_sent && early_answer) { + else if (sr->sr_offer_recv && !sr->sr_answer_sent && maybe_answer) { /* Generate answer */ if (soa_generate_answer(nh->nh_soa, NULL) >= 0 && soa_activate(nh->nh_soa, NULL) >= 0) { answer = 1; /* signal that O/A answer sent (answer to invite) */ + /* ss_sdp_version is updated only after answer is sent reliably */ } /* We have an error! */ else if (sr->sr_status >= 200) { @@ -2288,12 +2302,16 @@ /* 1xx - we don't have to send answer */ } } - else if (sr->sr_offer_recv && sr->sr_answer_sent == 1 && early_answer) { + else if (sr->sr_offer_recv && sr->sr_answer_sent == 1 && maybe_answer) { /* The answer was sent unreliably, keep sending it */ answer = 1; } else if (!sr->sr_offer_recv && !sr->sr_offer_sent && reliable) { - /* Generate offer */ + if (200 <= sr->sr_status && nua_callstate_ready <= ss->ss_state && + NH_PGET(nh, refresh_without_sdp)) + /* This is a re-INVITE without SDP - do not try to send offer in 200 */; + else + /* Generate offer */ if (soa_generate_offer(nh->nh_soa, 0, NULL) < 0) sr->sr_status = soa_error_as_sip_response(nh->nh_soa, &sr->sr_phrase); else @@ -2307,6 +2325,9 @@ sr->sr_offer_sent = 1 + reliable, ss->ss_oa_sent = Offer; else if (answer) sr->sr_answer_sent = 1 + reliable, ss->ss_oa_sent = Answer; + + if (answer && reliable) + ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); } if (reliable && sr->sr_status < 200) { @@ -2340,16 +2361,15 @@ int nua_invite_server_is_100rel(nua_server_request_t *sr, tagi_t const *tags) { nua_handle_t *nh = sr->sr_owner; - sip_t const *sip = sr->sr_response.sip; sip_require_t *require = sr->sr_request.sip->sip_require; sip_supported_t *supported = sr->sr_request.sip->sip_supported; if (sr->sr_status >= 200) - return 1; + return 0; else if (sr->sr_status == 100) return 0; - if (sip_has_feature(sip->sip_require, "100rel")) + if (sip_has_feature(sr->sr_response.sip->sip_require, "100rel")) return 1; if (require == NULL && supported == NULL) @@ -2473,7 +2493,7 @@ * * @END_NUA_EVENT */ - +static int process_ack(nua_server_request_t *sr, nta_incoming_t *irq, sip_t const *sip) @@ -2489,7 +2509,6 @@ if (sr->sr_offer_sent && !sr->sr_answer_recv) { char const *sdp; size_t len; - int error; if (session_get_description(sip, &sdp, &len)) recv = Answer; @@ -2499,32 +2518,45 @@ ss->ss_oa_recv = recv; } - if (nh->nh_soa == NULL) + if (nh->nh_soa == NULL) ; - else if (recv == NULL || - soa_set_remote_sdp(nh->nh_soa, NULL, sdp, len) < 0 || - soa_process_answer(nh->nh_soa, NULL) < 0 || - soa_activate(nh->nh_soa, NULL) < 0) { - int status; char const *phrase, *reason; + else if (recv == NULL ) { + if (ss->ss_state >= nua_callstate_ready && + soa_get_user_version(nh->nh_soa) == ss->ss_sdp_version && + soa_process_reject(nh->nh_soa, NULL) >= 0) { + url_t const *m; - status = soa_error_as_sip_response(nh->nh_soa, &phrase); - reason = soa_error_as_sip_reason(nh->nh_soa); + /* The re-INVITE was a refresh and re-INVITEr ignored our offer */ + ss->ss_oa_sent = NULL; - nua_stack_event(nh->nh_nua, nh, msg, - nua_i_ack, status, phrase, NULL); - nua_stack_event(nh->nh_nua, nh, NULL, - nua_i_media_error, status, phrase, NULL); + if (sr->sr_request.sip->sip_contact) + m = sr->sr_request.sip->sip_contact->m_url; + else + m = sr->sr_request.sip->sip_from->a_url; - ss->ss_reporting = 1; /* We report terminated state here if BYE fails */ - error = nua_client_create(nh, nua_r_bye, &nua_bye_client_methods, NULL); - ss->ss_reporting = 0; + SU_DEBUG_3(("nua(%p): re-INVITEr ignored offer in our %u response " + "(Contact: <" URL_PRINT_FORMAT ">)\n", + (void *)nh, sr->sr_status, URL_PRINT_ARGS(m))); + if (sr->sr_request.sip->sip_user_agent) + SU_DEBUG_3(("nua(%p): re-INVITE: \"User-Agent: %s\"\n", (void *)nh, + sr->sr_request.sip->sip_user_agent->g_string)); + } + else + return process_ack_error(sr, msg, 488, "Offer-Answer error", + "SIP;cause=488;text=\"No answer to offer\""); + } + else if (soa_set_remote_sdp(nh->nh_soa, NULL, sdp, len) >= 0 && + soa_process_answer(nh->nh_soa, NULL) >= 0 && + soa_activate(nh->nh_soa, NULL) >= 0) { + ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); + } + else { + int status; char const *phrase, *reason; - signal_call_state_change(nh, ss, 488, "Offer-Answer Error", - error - ? nua_callstate_terminated - : nua_callstate_terminating); + status = soa_error_as_sip_response(nh->nh_soa, &phrase); + reason = soa_error_as_sip_reason(nh->nh_soa); - return 0; + return process_ack_error(sr, msg, status, phrase, reason); } } @@ -2540,6 +2572,38 @@ return 0; } +static int +process_ack_error(nua_server_request_t *sr, + msg_t *ackmsg, + int status, + char const *phrase, + char const *reason) +{ + nua_handle_t *nh = sr->sr_owner; + nua_session_usage_t *ss = nua_dialog_usage_private(sr->sr_usage); + int error; + + nua_stack_event(nh->nh_nua, nh, ackmsg, + nua_i_ack, status, phrase, NULL); + nua_stack_event(nh->nh_nua, nh, NULL, + nua_i_media_error, status, phrase, NULL); + + if (reason) ss->ss_reason = reason; + ss->ss_reporting = 1; + error = nua_client_create(nh, nua_r_bye, &nua_bye_client_methods, NULL); + ss->ss_reporting = 0; + + signal_call_state_change(nh, ss, + 488, "Offer-Answer Error", + /* We report terminated state if BYE failed */ + error + ? nua_callstate_terminated + : nua_callstate_terminating); + + return 0; +} + + /** @NUA_EVENT nua_i_cancel * * Incoming INVITE has been cancelled by the client. @@ -2809,8 +2873,10 @@ signal_call_state_change(nh, ss, status, phrase, ss->ss_state); - if (nh->nh_soa) + if (nh->nh_soa) { soa_activate(nh->nh_soa, NULL); + ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); + } } if (status < 200 || 300 <= status) @@ -3469,6 +3535,7 @@ } else { sr->sr_answer_sent = 1, ss->ss_oa_sent = Answer; + ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); } } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c Tue Dec 16 16:20:22 2008 @@ -182,7 +182,8 @@ * UPDATE requests. * Settings: * - NUTAG_MIN_SE(), NUTAG_SESSION_REFRESHER(), - * NUTAG_SESSION_TIMER(), NUTAG_UPDATE_REFRESH() + * NUTAG_SESSION_TIMER(), NUTAG_UPDATE_REFRESH(), + * NUTAG_REFRESH_WITHOUT_SDP(), * - "timer" in NUTAG_SUPPORTED()/SIPTAG_SUPPORTED() * Specifications: * - @RFC4028 @@ -954,6 +955,11 @@ * @SessionExpires header sends a re-INVITE requests (or an UPDATE * request if NUTAG_UPDATE_REFRESH(1) parameter tag has been set). * + * Some SIP user-agents use INVITE without SDP offer to refresh session. + * By default, NUA sends an offer in 200 OK to such an INVITE and expects + * an answer back in ACK. If NUTAG_REFRESH_WITHOUT_SDP(1) tag is used, + * no SDP offer is sent in 200 OK if re-INVITE was received without SDP. + * * @par When to Use NUTAG_SESSION_TIMER()? * * The session time extension is enabled ("timer" feature tag is included in @@ -1106,7 +1112,7 @@ * Corresponding tag taking reference parameter is NUTAG_UPDATE_REFRESH_REF(). * * @sa #nua_r_update, NUTAG_SESSION_TIMER(), NUTAG_MIN_SE_REF(), - * NUTAG_UPDATE_REFRESH(), @RFC4028, @SessionExpires, @MinSE + * NUTAG_SESSION_REFRESHER(), @RFC4028, @SessionExpires, @MinSE */ tag_typedef_t nutag_update_refresh = BOOLTAG_TYPEDEF(update_refresh); @@ -1115,6 +1121,45 @@ */ +/**@def NUTAG_REFRESH_WITHOUT_SDP(x) + * + * Do not send offer in response if re-INVITE was received without SDP. + * + * Some SIP user-agents use INVITE without SDP offer to refresh session. + * By default, NUA sends an offer in 200 OK to such an INVITE and expects + * an answer back in ACK. + * + * If NUTAG_REFRESH_WITHOUT_SDP(1) tag is used, no SDP offer is sent in 200 + * OK if re-INVITE was received without SDP. + * + * @par Used with + * nua_handle(), nua_invite(), nua_update(), nua_respond() \n + * nua_set_params() or nua_set_hparams() \n + * nua_get_params() or nua_get_hparams() + * + * See nua_set_hparams() for a complete list of all the nua operations that + * accept this tag. + * + * @par Parameter type + * int (boolean: nonzero is true, zero is false) + * + * @par Values + * - 1 (true, do not try to send offer in response to re-INVITE) + * - 0 (false, always use SDP offer-answer in re-INVITEs) + * + * Corresponding tag taking reference parameter is NUTAG_REFRESH_WITHOUT_SDP_REF(). + * + * @sa #nua_r_update, NUTAG_SESSION_TIMER(), NUTAG_MIN_SE_REF(), + * NUTAG_SESSION_REFRESHER(), NUTAG_UPDATE_REFRESH(), @RFC4028, + * @SessionExpires, @MinSE + */ +tag_typedef_t nutag_refresh_without_sdp = BOOLTAG_TYPEDEF(refresh_without_sdp); + +/**@def NUTAG_REFRESH_WITHOUT_SDP_REF(x) + * Reference tag for NUTAG_REFRESH_WITHOUT_SDP_REF(). + */ + + /**@def NUTAG_REFER_EXPIRES() * * Default lifetime for implicit subscriptions created by REFER. Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua_tag.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua_tag.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua_tag.h Tue Dec 16 16:20:22 2008 @@ -183,6 +183,12 @@ #define NUTAG_UPDATE_REFRESH_REF(x) nutag_update_refresh_ref, tag_bool_vr((&(x))) SOFIAPUBVAR tag_typedef_t nutag_update_refresh_ref; +#define NUTAG_REFRESH_WITHOUT_SDP(x) nutag_refresh_without_sdp, tag_bool_v((x)) +SOFIAPUBVAR tag_typedef_t nutag_refresh_without_sdp; +#define NUTAG_REFRESH_WITHOUT_SDP_REF(x) \ + nutag_refresh_without_sdp_ref, tag_bool_vr((&(x))) +SOFIAPUBVAR tag_typedef_t nutag_refresh_without_sdp_ref; + #define NUTAG_AUTOALERT(x) nutag_autoalert, tag_bool_v(x) SOFIAPUBVAR tag_typedef_t nutag_autoalert; #define NUTAG_AUTOALERT_REF(x) nutag_autoalert_ref, tag_bool_vr(&(x)) From mikej at freeswitch.org Tue Dec 16 13:21:04 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 16:21:04 -0500 Subject: [Freeswitch-trunk] [commit] r10830 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nua Message-ID: Author: mikej Date: Tue Dec 16 16:21:04 2008 New Revision: 10830 Log: Fri Nov 21 08:12:28 CST 2008 Pekka Pessi * nua_session.c: call soa_activate() only when nh->nh_soa is valid Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 16:21:04 2008 @@ -1 +1 @@ -Tue Dec 16 15:19:47 CST 2008 +Tue Dec 16 15:20:42 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Tue Dec 16 16:21:04 2008 @@ -1315,8 +1315,9 @@ ; else if (nh->nh_soa && soa_is_complete(nh->nh_soa)) { /* signal SOA that O/A round(s) is (are) complete */ - if (soa_activate(nh->nh_soa, NULL) >= 0) + if (soa_activate(nh->nh_soa, NULL) >= 0) { ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); + } } else if (nh->nh_soa == NULL /* NUA does not necessarily know dirty details */ @@ -1748,8 +1749,9 @@ } else { answer_sent = 1; - if (soa_activate(nh->nh_soa, NULL) >= 0) + if (soa_activate(nh->nh_soa, NULL) >= 0) { ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); + } } } else if (nh->nh_soa == NULL) { @@ -2326,8 +2328,9 @@ else if (answer) sr->sr_answer_sent = 1 + reliable, ss->ss_oa_sent = Answer; - if (answer && reliable) + if (answer && reliable && nh->nh_soa) { ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); + } } if (reliable && sr->sr_status < 200) { From mikej at freeswitch.org Tue Dec 16 13:22:01 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 16:22:01 -0500 Subject: [Freeswitch-trunk] [commit] r10831 - freeswitch/trunk/libs/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 16:22:01 2008 New Revision: 10831 Log: Wed Nov 26 13:18:57 CST 2008 Pekka Pessi * configure.ac: bumped version number Modified: freeswitch/trunk/libs/sofia-sip/configure.ac Modified: freeswitch/trunk/libs/sofia-sip/configure.ac ============================================================================== --- freeswitch/trunk/libs/sofia-sip/configure.ac (original) +++ freeswitch/trunk/libs/sofia-sip/configure.ac Tue Dec 16 16:22:01 2008 @@ -11,7 +11,7 @@ dnl --------------------------- dnl update both the version for AC_INIT and the LIBSOFIA_SIP_UA_MAJOR_MINOR -AC_INIT([sofia-sip], [1.12.9devel1]) +AC_INIT([sofia-sip], [1.12.9pre10rc1]) AC_CONFIG_SRCDIR([libsofia-sip-ua/sip/sofia-sip/sip.h]) AC_SUBST(VER_LIBSOFIA_SIP_UA_MAJOR_MINOR, [1.12]) dnl Includedir specific to this sofia version From mikej at freeswitch.org Tue Dec 16 13:22:44 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 16:22:44 -0500 Subject: [Freeswitch-trunk] [commit] r10832 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nua Message-ID: Author: mikej Date: Tue Dec 16 16:22:43 2008 New Revision: 10832 Log: Thu Nov 27 06:09:44 CST 2008 Pekka Pessi * nua_session.c: use signed ss_sdp_version (soa_get_user_version() returns int) Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 16:22:43 2008 @@ -1 +1 @@ -Tue Dec 16 15:20:42 CST 2008 +Tue Dec 16 15:22:24 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Tue Dec 16 16:22:43 2008 @@ -173,7 +173,7 @@ char const *ss_oa_recv, *ss_oa_sent; /**< Version of user SDP from latest successful O/A */ - unsigned ss_sdp_version; + int ss_sdp_version; } nua_session_usage_t; static char const Offer[] = "offer", Answer[] = "answer"; From mikej at freeswitch.org Tue Dec 16 13:23:37 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 16:23:37 -0500 Subject: [Freeswitch-trunk] [commit] r10833 - freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua Message-ID: Author: mikej Date: Tue Dec 16 16:23:37 2008 New Revision: 10833 Log: fixed whitespace Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c Tue Dec 16 16:23:37 2008 @@ -326,7 +326,7 @@ fail_unless(s2_check_callstate(nua_callstate_terminated)); } -static void +static void bye_by_nua_challenged(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...) { @@ -358,7 +358,7 @@ } -static void +static void cancel_by_nua(nua_handle_t *nh, struct message *invite, struct dialog *dialog, @@ -383,7 +383,7 @@ fail_unless(s2_check_event(nua_r_invite, 487)); } -static void +static void bye_to_nua(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...) { @@ -1094,7 +1094,7 @@ s2_request_to(dialog, SIP_METHOD_INVITE, NULL, SIPTAG_USER_AGENT_STR("evil (evil) evil"), TAG_END()); - + nua_respond(nh, SIP_200_OK, TAG_END()); fail_unless(s2_check_callstate(nua_callstate_completed)); @@ -1119,7 +1119,7 @@ s2_request_to(dialog, SIP_METHOD_INVITE, NULL, SIPTAG_USER_AGENT_STR("evil (evil) evil"), TAG_END()); - + nua_respond(nh, SIP_200_OK, TAG_END()); fail_unless(s2_check_callstate(nua_callstate_completed)); @@ -1564,7 +1564,7 @@ invite = s2_wait_for_request(SIP_METHOD_INVITE); fail_if(!invite); - respond_with_sdp(invite, dialog, SIP_500_INTERNAL_SERVER_ERROR, + respond_with_sdp(invite, dialog, SIP_500_INTERNAL_SERVER_ERROR, SIPTAG_RETRY_AFTER_STR("8"), TAG_END()); s2_free_message(invite); Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h Tue Dec 16 16:23:37 2008 @@ -26,7 +26,7 @@ /** Defined when has been included. */ #define NUA_PARAMS_H -/**@internal @file nua_params.h +/**@internal @file nua_params.h * @brief Parameters and their handling * * @author Pekka Pessi @@ -37,7 +37,7 @@ #include -/**@internal @brief NUA preferences. +/**@internal @brief NUA preferences. * * This structure contains values for various preferences and a separate * bitmap (nhp_set) for each preference. Preferences are set using @@ -69,7 +69,7 @@ unsigned nhp_auto_ack:1; /**< Automatically ACK a final response */ unsigned :0; - /** INVITE timeout. + /** INVITE timeout. * * If no response is received in nhp_invite_timeout seconds, * INVITE client transaction times out @@ -80,12 +80,12 @@ /** Default Min-SE Delta value */ unsigned nhp_min_se; /** no (preference), local or remote */ - enum nua_session_refresher nhp_refresher; + enum nua_session_refresher nhp_refresher; unsigned nhp_update_refresh:1; /**< Use UPDATE to refresh */ /**< Accept refreshes without SDP */ unsigned nhp_refresh_without_sdp:1; - + /* Messaging preferences */ unsigned nhp_message_enable : 1; /** Be bug-compatible with Windows Messenger */ @@ -131,8 +131,8 @@ char const *nhp_instance; /** Outbound OPTIONS */ - char const *nhp_outbound; - + char const *nhp_outbound; + sip_allow_t *nhp_appl_method; /** Initial route set */ @@ -143,11 +143,11 @@ union { struct { /* A bit for each feature set by application */ - /* NOTE: + /* NOTE: Some compilers behave weird if there are bitfields - together with width > 32 - So there should be a padding field (unsigned:0;) - every 32 bits. + together with width > 32 + So there should be a padding field (unsigned:0;) + every 32 bits. */ unsigned nhb_retry_count:1; unsigned nhb_max_subscriptions:1; @@ -165,7 +165,7 @@ unsigned nhb_session_timer:1; unsigned nhb_min_se:1; - unsigned nhb_refresher:1; + unsigned nhb_refresher:1; unsigned nhb_update_refresh:1; unsigned nhb_refresh_without_sdp:1; unsigned nhb_message_enable:1; @@ -202,7 +202,7 @@ unsigned nhb_initial_route:1; unsigned nhb_proxy:1; unsigned :0; - } set_bits; + } set_bits; unsigned set_unsigned[2]; } nhp_set_; }; @@ -222,7 +222,7 @@ unsigned ngp_detect_network_updates:1; unsigned ngp_shutdown_events:1; unsigned :0; - } set_bits; + } set_bits; unsigned set_unsigned[2]; } ngp_set_; }; @@ -250,7 +250,7 @@ #define NH_PGET(nh, pref) \ NHP_GET((nh)->nh_prefs, (nh)->nh_dprefs, pref) -/* Get preference from handle, if exists and set, +/* Get preference from handle, if exists and set, otherwise from default handle */ #define NUA_PGET(nua, nh, pref) \ NHP_GET((nh) ? (nh)->nh_prefs : (nua)->nua_dhandle->nh_prefs, \ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Tue Dec 16 16:23:37 2008 @@ -70,14 +70,14 @@ If a re-INVITE transaction fails, the result depends on the status code in failure. The call can return to the ready state, be terminated immediately, or be terminated gracefully. The proper action to take is determined with -sip_response_terminates_dialog(). +sip_response_terminates_dialog(). @sa @ref nua_call_model, #nua_i_state, nua_invite(), #nua_i_invite - - at par Session State Diagram - - at code - +----------+ + + at par Session State Diagram + + at code + +----------+ | |---------------------+ | Init | | | |----------+ | @@ -124,16 +124,16 @@ +->|Terminated|<--------------+ | | +----------+ - | + | V +----------+ | | | Init | | | +----------+ - at endcode -*/ - + at endcode +*/ + /* ---------------------------------------------------------------------- */ /* Session event usage */ @@ -141,10 +141,10 @@ typedef struct nua_session_usage { enum nua_callstate ss_state; /**< Session status (enum nua_callstate) */ - + unsigned ss_100rel:1; /**< Use 100rel, send 183 */ unsigned ss_alerting:1; /**< 180 is sent/received */ - + unsigned ss_update_needed:2; /**< Send an UPDATE (do O/A if > 1) */ unsigned ss_precondition:1; /**< Precondition required */ @@ -273,7 +273,7 @@ continue; if (cr->cr_status < 200) { - nua_stack_event(nh->nh_nua, nh, + nua_stack_event(nh->nh_nua, nh, NULL, cr->cr_event, SIP_481_NO_TRANSACTION, @@ -291,8 +291,8 @@ ss->ss_state != nua_callstate_init && !ss->ss_reporting) { int status = 0; char const *phrase = "Terminated"; - - if (cr0) + + if (cr0) status = cr0->cr_status, phrase = cr0->cr_phrase ? cr0->cr_phrase : phrase; else if (sr0) status = sr0->sr_status, phrase = sr0->sr_phrase; @@ -409,11 +409,11 @@ /**@fn void nua_invite(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); * - * Place a call using SIP @b INVITE method. + * Place a call using SIP @b INVITE method. * * The INVITE method is used to initiate a call between two parties. The * call is also known as SIP session. - * + * * At SIP level the session is represented as @e Dialog, which is a * peer-to-peer association between two SIP User-Agents. The dialog is * established by a successful 2XX response to the INVITE. The dialog is @@ -433,7 +433,7 @@ * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Events: @@ -469,11 +469,11 @@ * @par * When multiple tags for the same header are specified, the behaviour * depends on the header type. If only a single header field can be included - * in a SIP message, the latest non-NULL value is used, e.g., @Subject. + * in a SIP message, the latest non-NULL value is used, e.g., @Subject. * However, if the SIP header can consist of multiple lines or header fields * separated by comma, e.g., @Accept, all the tagged * values are concatenated. - * + * * @par * However, if a tag value is #SIP_NONE (-1 casted as a void pointer), the * values from previous tags are ignored. @@ -490,10 +490,10 @@ * For initial INVITE requests, values from tags are used. If NUTAG_URL() is * given, it is used as target URI. Otherwise, if SIPTAG_TO() is given, it * is used as target URI. If neither is given, the complete request line - * already specified using SIPTAG_REQUEST() or SIPTAG_REQUEST_STR() is used. + * already specified using SIPTAG_REQUEST() or SIPTAG_REQUEST_STR() is used. * If none of the tags above are given, an internal error is returned to the * application. At this point, the target URI is stored in the request line, - * together with method name ("INVITE") and protocol version ("SIP/2.0"). + * together with method name ("INVITE") and protocol version ("SIP/2.0"). * The initial dialog information is also created: @CallID, @CSeq headers * are generated, if they do not exist, and an unique tag is added to @From * header. @@ -521,14 +521,14 @@ * For in-dialog INVITE (re-INVITE), the request URI is taken from the * @Contact header received from the remote party during the dialog * establishment. Also, the @CallID and @CSeq headers and @From and @To tags - * are generated based on the dialog information and added to the request. + * are generated based on the dialog information and added to the request. * If the dialog has a route (set by @RecordRoute headers), it is added to * the request, too. * * @par * @MaxForwards header (with default value set by NTATAG_MAX_FORWARDS()) is * also added now, if it does not exist. - * + * * @par * The INVITE request message created by nua_invite() operation is saved as * a template for automatic re-INVITE requests sent by the session timer @@ -540,8 +540,8 @@ * * @par Tags Related to SIP Headers and Request-URI * NUTAG_URL(), SIPTAG_REQUEST(), SIPTAG_REQUEST_STR() \n - * NUTAG_INITIAL_ROUTE(), NUTAG_INITIAL_ROUTE_STR(), - * SIPTAG_ROUTE(), SIPTAG_ROUTE_STR(), + * NUTAG_INITIAL_ROUTE(), NUTAG_INITIAL_ROUTE_STR(), + * SIPTAG_ROUTE(), SIPTAG_ROUTE_STR(), * NUTAG_SERVICE_ROUTE_ENABLE() \n * SIPTAG_MAX_FORWARDS(), SIPTAG_MAX_FORWARDS_STR() \n * SIPTAG_PROXY_REQUIRE(), SIPTAG_PROXY_REQUIRE_STR() \n @@ -574,7 +574,7 @@ * SIPTAG_AUTHORIZATION(), SIPTAG_AUTHORIZATION_STR() \n * SIPTAG_REFERRED_BY(), SIPTAG_REFERRED_BY_STR() \n * SIPTAG_REPLACES(), SIPTAG_REPLACES_STR() \n - * NUTAG_SESSION_TIMER(), NUTAG_SESSION_REFRESHER(), + * NUTAG_SESSION_TIMER(), NUTAG_SESSION_REFRESHER(), * SIPTAG_SESSION_EXPIRES(), SIPTAG_SESSION_EXPIRES_STR() \n * NUTAG_MIN_SE(), SIPTAG_MIN_SE(), SIPTAG_MIN_SE_STR() \n * SIPTAG_SECURITY_CLIENT(), SIPTAG_SECURITY_CLIENT_STR() \n @@ -596,7 +596,7 @@ * @par * The SDP description of the * @ref soa_session_t "soa media session" is included in the INVITE request - * as a message body. + * as a message body. * The SDP in the message body of the 1XX or 2XX response message is * interpreted as an answer, given to the @ref soa_session_t "soa media * session" object for processing. @@ -608,8 +608,8 @@ * NUTAG_MEDIA_ENABLE(), \n * NUTAG_INCLUDE_EXTRA_SDP(), \n * SOATAG_HOLD(), SOATAG_AF(), SOATAG_ADDRESS(), - * SOATAG_ORDERED_USER(), SOATAG_REUSE_REJECTED(), - * SOATAG_RTP_SELECT(), SOATAG_RTP_SORT(), SOATAG_RTP_MISMATCH(), + * SOATAG_ORDERED_USER(), SOATAG_REUSE_REJECTED(), + * SOATAG_RTP_SELECT(), SOATAG_RTP_SORT(), SOATAG_RTP_MISMATCH(), * SOATAG_AUDIO_AUX(), \n * SOATAG_USER_SDP() or SOATAG_USER_SDP_STR() \n * @@ -623,10 +623,10 @@ * SIP level, that is, the SIP PRACK and UPDATE requests are sent if * "precondition" is added to the @Require header in the INVITE request. * - * Optionally + * Optionally * - uses early media if NUTAG_EARLY_MEDIA() tag is used with non zero-value * - media parameters can be set by SOA tags - * - nua_invite() can be used to change status of an existing call: + * - nua_invite() can be used to change status of an existing call: * - #SOATAG_HOLD tag can be used to list the media that will be put on hold, * the value "*" sets all the media beloginging to the session on hold * @@ -645,7 +645,7 @@ * nua_authenticate() \n * nua_prack() \n * nua_update() \n - * nua_info() \n + * nua_info() \n * nua_cancel() \n * nua_bye() \n * #nua_i_invite, nua_respond() @@ -655,7 +655,7 @@ * NUTAG_REFER_PAUSE() \n */ -static int nua_invite_client_init(nua_client_request_t *cr, +static int nua_invite_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags); static int nua_invite_client_request(nua_client_request_t *cr, @@ -706,7 +706,7 @@ return nua_client_create(nh, e, &nua_invite_client_methods, tags); } -static int nua_invite_client_init(nua_client_request_t *cr, +static int nua_invite_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags) { @@ -715,11 +715,11 @@ nua_session_usage_t *ss; cr->cr_usage = du = nua_dialog_usage_for_session(nh->nh_ds); - /* Errors returned by nua_invite_client_init() + /* Errors returned by nua_invite_client_init() do not change the session state */ - cr->cr_neutral = 1; - - if (nh_is_special(nh) || + cr->cr_neutral = 1; + + if (nh_is_special(nh) || nua_stack_set_handle_special(nh, nh_has_invite, nua_i_error)) return nua_client_return(cr, 900, "Invalid handle for INVITE", msg); else if (nh_referral_check(nh, tags) < 0) @@ -751,7 +751,7 @@ session_timer_preferences(ss->ss_timer, sip, - NH_PGET(nh, supported), + NH_PGET(nh, supported), NH_PGET(nh, session_timer), NUA_PISSET(nh->nh_nua, nh, session_timer), NH_PGET(nh, refresher), @@ -770,7 +770,7 @@ int offer_sent = 0, retval; sip_time_t invite_timeout; - if (du == NULL) /* Call terminated */ + if (du == NULL) /* Call terminated */ return nua_client_return(cr, SIP_481_NO_TRANSACTION, msg); ss = NUA_DIALOG_USAGE_PRIVATE(du); @@ -836,7 +836,7 @@ ss->ss_oa_sent = Offer; if (!cr->cr_restarting) /* Restart logic calls nua_invite_client_report */ - signal_call_state_change(nh, ss, 0, "INVITE sent", + signal_call_state_change(nh, ss, 0, "INVITE sent", nua_callstate_calling); } @@ -861,7 +861,7 @@ session_timer_set(ss); } - + return nua_session_client_response(cr, status, phrase, sip); } @@ -885,7 +885,7 @@ nua_dialog_uac_route(nh, nh->nh_ds, sip, 1); nua_dialog_store_peer_info(nh, nh->nh_ds, sip); - + /* Tag the INVITE request */ tagged = nta_outgoing_tagged(cr->cr_orq, nua_client_orq_response, cr, @@ -898,18 +898,18 @@ ss->ss_reason = "SIP;cause=500;text=\"Cannot Create Early Dialog\""; } } - + if (!rseq) { SU_DEBUG_5(("nua(%p): 100rel missing RSeq\n", (void *)nh)); } else if (nta_outgoing_rseq(cr->cr_orq) > rseq->rs_response) { - SU_DEBUG_5(("nua(%p): 100rel bad RSeq %u (got %u)\n", (void *)nh, + SU_DEBUG_5(("nua(%p): 100rel bad RSeq %u (got %u)\n", (void *)nh, (unsigned)rseq->rs_response, nta_outgoing_rseq(cr->cr_orq))); return 1; /* Do not send event */ } else if (nta_outgoing_setrseq(cr->cr_orq, rseq->rs_response) < 0) { - SU_DEBUG_1(("nua(%p): cannot set RSeq %u\n", (void *)nh, + SU_DEBUG_1(("nua(%p): cannot set RSeq %u\n", (void *)nh, (unsigned)rseq->rs_response)); cr->cr_graceful = 1; ss->ss_reason = "SIP;cause=400;text=\"Bad RSeq\""; @@ -992,7 +992,7 @@ cr->cr_graceful = 1; ss->ss_reason = "SIP;cause=400;text=\"Malformed Session Description\""; } - else + else LOG5("got SDP"); } @@ -1022,7 +1022,7 @@ nh_referral_respond(nh, status, phrase); /* XXX - restarting after 401/407 */ - nua_stack_event(nh->nh_nua, nh, + nua_stack_event(nh->nh_nua, nh, nta_outgoing_getresponse(orq), cr->cr_event, status, phrase, @@ -1060,7 +1060,7 @@ else if (status < 200) { next_state = nua_callstate_proceeding; - if (sip && sip->sip_rseq && + if (sip && sip->sip_rseq && !SIP_IS_ALLOWED(NH_PGET(nh, appl_method), sip_method_prack)) { sip_rack_t rack[1]; @@ -1070,7 +1070,7 @@ rack->ra_method = sip->sip_cseq->cs_method; rack->ra_method_name = sip->sip_cseq->cs_method_name; - error = nua_client_tcreate(nh, nua_r_prack, &nua_prack_client_methods, + error = nua_client_tcreate(nh, nua_r_prack, &nua_prack_client_methods, SIPTAG_RACK(rack), TAG_END()); if (error < 0) { @@ -1126,7 +1126,7 @@ if (ss->ss_state > nua_callstate_proceeding || status >= 200) error = nua_client_create(nh, nua_r_bye, &nua_bye_client_methods, NULL); else - error = nua_client_create(nh, nua_r_cancel, + error = nua_client_create(nh, nua_r_cancel, &nua_cancel_client_methods, tags); if (error) { @@ -1154,7 +1154,7 @@ * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -1162,7 +1162,7 @@ * * @par Events: * #nua_i_media_error \n - * #nua_i_state (#nua_i_active, #nua_i_terminated) + * #nua_i_state (#nua_i_active, #nua_i_terminated) * * @sa NUTAG_AUTOACK(), @ref nua_call_model, #nua_i_state */ @@ -1196,8 +1196,8 @@ ss->ss_reporting = 1; /* We report terminated state here if BYE fails */ error = nua_client_create(nh, nua_r_bye, &nua_bye_client_methods, NULL); ss->ss_reporting = 0; - signal_call_state_change(nh, ss, 500, "Internal Error", - error + signal_call_state_change(nh, ss, 500, "Internal Error", + error ? nua_callstate_terminated : nua_callstate_terminating); } @@ -1254,11 +1254,11 @@ wa = sip_authorization(sip); pa = sip_proxy_authorization(sip); - + msg_destroy(msg); msg = nta_msg_create(nh->nh_nua->nua_nta, 0); - sip = sip_object(msg); + sip = sip_object(msg); if (!msg) return -1; @@ -1339,7 +1339,7 @@ reason = "SIP;cause=488;text=\"Incomplete offer/answer\""; } } - + proxy_is_set = NH_PISSET(nh, proxy); proxy = NH_PGET(nh, proxy); @@ -1406,12 +1406,12 @@ /**@fn void nua_cancel(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); * - * Cancel an INVITE operation + * Cancel an INVITE operation * * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -1458,7 +1458,7 @@ nua_handle_t *nh = cr->cr_owner; nua_dialog_usage_t *du = nua_dialog_usage_for_session(nh->nh_ds); - if (!du || !du->du_cr || !du->du_cr->cr_orq || + if (!du || !du->du_cr || !du->du_cr->cr_orq || nta_outgoing_status(du->du_cr->cr_orq) >= 200) { return nua_client_return(cr, 481, "No transaction to CANCEL", msg); } @@ -1485,12 +1485,12 @@ * The CANCEL may be sent explicitly by nua_cancel() or implicitly by NUA * state machine. * - * @param status response status code + * @param status response status code * @param phrase a short textual description of @a status code * @param nh operation handle associated with the call * @param hmagic application context associated with the call * @param sip response to CANCEL request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * @@ -1509,25 +1509,25 @@ nua_client_request_t const *cr = du->du_cr; nua_server_request_t const *sr; - if (ss->ss_state >= nua_callstate_terminating || + if (ss->ss_state >= nua_callstate_terminating || /* INVITE is in progress or being authenticated */ (cr && (cr->cr_orq || cr->cr_wait_for_cred))) return; /* UPDATE has been queued */ - for (cr = ds->ds_cr; cr; cr = cr->cr_next) + for (cr = ds->ds_cr; cr; cr = cr->cr_next) if (cr->cr_method == sip_method_update) return; /* INVITE or UPDATE in progress on server side */ for (sr = ds->ds_sr; sr; sr = sr->sr_next) - if (sr->sr_usage == du && - (sr->sr_method == sip_method_invite || + if (sr->sr_usage == du && + (sr->sr_method == sip_method_invite || sr->sr_method == sip_method_update)) return; if (ss->ss_timer->refresher == nua_remote_refresher) { - ss->ss_reason = "SIP;cause=408;text=\"Session timeout\""; + ss->ss_reason = "SIP;cause=408;text=\"Session timeout\""; nua_stack_bye(nh->nh_nua, nh, nua_r_bye, NULL); return; } @@ -1542,7 +1542,7 @@ } } -/** @interal Shut down session usage. +/** @interal Shut down session usage. * * @retval >0 shutdown done * @retval 0 shutdown in progress @@ -1609,21 +1609,21 @@ default: break; } - + nua_dialog_usage_remove(nh, ds, du, NULL, NULL); return 200; } /**@fn void nua_prack(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); - * Send a PRACK request. + * Send a PRACK request. * * PRACK is used to acknowledge receipt of 100rel responses. See @RFC3262. * * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -1647,7 +1647,7 @@ * @param nh operation handle associated with the call * @param hmagic application context associated with the call * @param sip response to @b PRACK or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * @@ -1656,7 +1656,7 @@ * @END_NUA_EVENT */ -static int nua_prack_client_init(nua_client_request_t *cr, +static int nua_prack_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags); static int nua_prack_client_request(nua_client_request_t *cr, @@ -1695,7 +1695,7 @@ return nua_client_create(nh, e, &nua_prack_client_methods, tags); } -static int nua_prack_client_init(nua_client_request_t *cr, +static int nua_prack_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags) { @@ -1732,7 +1732,7 @@ rseq = sip->sip_rack->ra_response; if (cri->cr_offer_recv && !cri->cr_answer_sent) { - if (nh->nh_soa == NULL) + if (nh->nh_soa == NULL) /* It is up to application to handle SDP */ answer_sent = session_get_description(sip, NULL, NULL); else if (sip->sip_payload) @@ -1780,12 +1780,12 @@ cr->cr_offer_sent = offer_sent; cr->cr_answer_sent = answer_sent; - if (offer_sent) + if (offer_sent) ss->ss_oa_sent = Offer; else if (answer_sent) ss->ss_oa_sent = Answer; - if (cr->cr_restarting) + if (cr->cr_restarting) /* Restart logic calls nua_prack_client_report */; else if (!cr->cr_auto && (!offer_sent || !answer_sent)) /* Suppose application know it called nua_prack() */; @@ -1816,7 +1816,7 @@ nua_session_usage_t *ss = nua_dialog_usage_private(du); int acked = 0; - nua_stack_event(nh->nh_nua, nh, + nua_stack_event(nh->nh_nua, nh, nta_outgoing_getresponse(orq), cr->cr_event, status, phrase, @@ -1833,7 +1833,7 @@ else if (nua_invite_client_should_ack(du->du_cr)) { /* There is an un-ACK-ed INVITE there */ assert(du->du_cr->cr_method == sip_method_invite); - if (NH_PGET(nh, auto_ack) || + if (NH_PGET(nh, auto_ack) || /* Auto-ACK response to re-INVITE unless auto_ack is set to 0 */ (ss->ss_state == nua_callstate_ready && !NH_PISSET(nh, auto_ack))) { /* There should be no UPDATE with offer/answer @@ -1858,7 +1858,7 @@ else if (ss->ss_update_needed && 200 <= status && status < 300 && !SIP_IS_ALLOWED(NH_PGET(nh, appl_method), sip_method_update)) nua_client_create(nh, nua_r_update, &nua_update_client_methods, NULL); - + return 1; } @@ -1867,7 +1867,7 @@ /** @NUA_EVENT nua_i_invite * - * Indication of incoming call or re-INVITE request. + * Indication of incoming call or re-INVITE request. * * @param status statuscode of response sent automatically by stack * @param phrase a short textual description of @a status code @@ -1900,7 +1900,7 @@ * to a #soa_session_t object. The #nua_i_state event sent to the * application immediately after #nua_i_invite will contain the parsing * results in SOATAG_REMOTE_SDP() and SOATAG_REMOTE_SDP_STR() tags. - * + * * Note that currently the parser within @nua does not handle MIME * multipart. The SDP Offer/Answer engine can get confused if the SDP offer * is included in a MIME multipart, therefore such an @b INVITE is rejected @@ -1945,8 +1945,8 @@ * * @sa nua_respond(), @ref nua_uas_call_model, #nua_i_state, * NUTAG_MEDIA_ENABLE(), SOATAG_USER_SDP(), SOATAG_USER_SDP_STR(), - * @RFC3262, NUTAG_EARLY_ANSWER(), NUTAG_EARLY_MEDIA(), - * NUTAG_ONLY183_100REL(), + * @RFC3262, NUTAG_EARLY_ANSWER(), NUTAG_EARLY_MEDIA(), + * NUTAG_ONLY183_100REL(), * NUTAG_INCLUDE_EXTRA_SDP(), * #nua_i_prack, #nua_i_update, nua_update(), * nua_invite(), #nua_r_invite @@ -1974,7 +1974,7 @@ static int nua_invite_server_report(nua_server_request_t *sr, tagi_t const *); static int - process_ack_or_cancel(nua_server_request_t *, nta_incoming_t *, + process_ack_or_cancel(nua_server_request_t *, nta_incoming_t *, sip_t const *), process_ack(nua_server_request_t *, nta_incoming_t *, sip_t const *), process_ack_error(nua_server_request_t *sr, msg_t *ackmsg, @@ -1986,11 +1986,11 @@ nta_incoming_t *irq, sip_t const *sip); -nua_server_methods_t const nua_invite_server_methods = +nua_server_methods_t const nua_invite_server_methods = { SIP_METHOD_INVITE, nua_i_invite, /* Event */ - { + { 1, /* Create dialog */ 0, /* Initial request */ 1, /* Target refresh request */ @@ -2004,8 +2004,8 @@ }; -/** @internal Preprocess incoming invite - sure we have a valid request. - * +/** @internal Preprocess incoming invite - sure we have a valid request. + * * @return 0 if request is valid, or error statuscode otherwise */ static int @@ -2022,9 +2022,9 @@ if (nua_session_server_init(sr)) return sr->sr_status; - + if (sr->sr_usage) { - /* Existing session - check for overlap and glare */ + /* Existing session - check for overlap and glare */ nua_server_request_t const *sr0; nua_client_request_t const *cr; @@ -2040,7 +2040,7 @@ if (sr->sr_sdp && sr0->sr_offer_recv && !sr0->sr_answer_sent) break; } - + if (sr0) { /* Overlapping invites - RFC 3261 14.2 */ return nua_server_retry_after(sr, 500, "Overlapping Requests", 0, 10); @@ -2148,9 +2148,9 @@ soa_init_offer_answer(nh->nh_soa); if (sr->sr_sdp) { - if (nh->nh_soa && + if (nh->nh_soa && soa_set_remote_sdp(nh->nh_soa, NULL, sr->sr_sdp, sr->sr_sdp_len) < 0) { - SU_DEBUG_5(("nua(%p): %s server: error parsing SDP\n", (void *)nh, + SU_DEBUG_5(("nua(%p): %s server: error parsing SDP\n", (void *)nh, "INVITE")); return SR_STATUS(sr, 400, "Bad Session Description"); } @@ -2185,7 +2185,7 @@ if (NH_PGET(nh, auto_answer) || /* Auto-answer to re-INVITE unless auto_answer is set to 0 on handle */ (ss->ss_state == nua_callstate_ready && - /* Auto-answer requires enabled media (soa). + /* Auto-answer requires enabled media (soa). * XXX - if the re-INVITE modifies the media we should not auto-answer. */ nh->nh_soa && @@ -2216,8 +2216,8 @@ nua_handle_t *nh = sr->sr_owner; nua_dialog_usage_t *du = sr->sr_usage; nua_session_usage_t *ss = nua_dialog_usage_private(du); - msg_t *msg = sr->sr_response.msg; - sip_t *sip = sr->sr_response.sip; + msg_t *msg = sr->sr_response.msg; + sip_t *sip = sr->sr_response.sip; int reliable = 0, maybe_answer = 0, offer = 0, answer = 0, extra = 0; @@ -2239,7 +2239,7 @@ if (sr->sr_neutral) return nua_base_server_respond(sr, tags); } - else if (tags && 100 < sr->sr_status && sr->sr_status < 200 && + else if (tags && 100 < sr->sr_status && sr->sr_status < 200 && !NHP_ISSET(nh->nh_prefs, early_answer)) { sdp_session_t const *user_sdp = NULL; char const *user_sdp_str = NULL; @@ -2275,7 +2275,7 @@ extra = t && t->t_value; } else if (sr->sr_offer_recv && !sr->sr_answer_sent && maybe_answer) { - /* Generate answer */ + /* Generate answer */ if (soa_generate_answer(nh->nh_soa, NULL) >= 0 && soa_activate(nh->nh_soa, NULL) >= 0) { answer = 1; /* signal that O/A answer sent (answer to invite) */ @@ -2287,11 +2287,11 @@ int wcode; char const *text; char const *host = "invalid."; - + sr->sr_status = soa_error_as_sip_response(nh->nh_soa, &sr->sr_phrase); - + wcode = soa_get_warning(nh->nh_soa, &text); - + if (wcode) { if (sip->sip_contact) host = sip->sip_contact->m_url->url_host; @@ -2344,7 +2344,7 @@ if (200 <= sr->sr_status && sr->sr_status < 300) { session_timer_preferences(ss->ss_timer, sip, - NH_PGET(nh, supported), + NH_PGET(nh, supported), NH_PGET(nh, session_timer), NUA_PISSET(nh->nh_nua, nh, session_timer), NH_PGET(nh, refresher), @@ -2354,7 +2354,7 @@ session_timer_add_headers(ss->ss_timer, 0, msg, sip); } - return nua_base_server_respond(sr, tags); + return nua_base_server_respond(sr, tags); } /** Check if the response should be sent reliably. @@ -2415,9 +2415,9 @@ } retval = nua_base_server_report(sr, tags), sr = NULL; /* destroys sr */ - + if (retval >= 2 || ss == NULL) { - /* Session has been terminated. */ + /* Session has been terminated. */ if (!initial && !neutral) { #if 0 signal_call_state_change(nh, NULL, status, phrase, @@ -2483,8 +2483,8 @@ /** @NUA_EVENT nua_i_ack * - * Final response to INVITE has been acknowledged by UAC with ACK. - * + * Final response to INVITE has been acknowledged by UAC with ACK. + * * @note This event is only sent after 2XX response. * * @param nh operation handle associated with the call @@ -2493,7 +2493,7 @@ * @param tags empty * * @sa #nua_i_invite, #nua_i_state, @ref nua_uas_call_model, nua_ack() - * + * * @END_NUA_EVENT */ static @@ -2521,7 +2521,7 @@ ss->ss_oa_recv = recv; } - if (nh->nh_soa == NULL) + if (nh->nh_soa == NULL) ; else if (recv == NULL ) { if (ss->ss_state >= nua_callstate_ready && @@ -2530,7 +2530,7 @@ url_t const *m; /* The re-INVITE was a refresh and re-INVITEr ignored our offer */ - ss->ss_oa_sent = NULL; + ss->ss_oa_sent = NULL; if (sr->sr_request.sip->sip_contact) m = sr->sr_request.sip->sip_contact->m_url; @@ -2538,20 +2538,20 @@ m = sr->sr_request.sip->sip_from->a_url; SU_DEBUG_3(("nua(%p): re-INVITEr ignored offer in our %u response " - "(Contact: <" URL_PRINT_FORMAT ">)\n", + "(Contact: <" URL_PRINT_FORMAT ">)\n", (void *)nh, sr->sr_status, URL_PRINT_ARGS(m))); if (sr->sr_request.sip->sip_user_agent) SU_DEBUG_3(("nua(%p): re-INVITE: \"User-Agent: %s\"\n", (void *)nh, sr->sr_request.sip->sip_user_agent->g_string)); - } - else - return process_ack_error(sr, msg, 488, "Offer-Answer error", + } + else + return process_ack_error(sr, msg, 488, "Offer-Answer error", "SIP;cause=488;text=\"No answer to offer\""); } else if (soa_set_remote_sdp(nh->nh_soa, NULL, sdp, len) >= 0 && soa_process_answer(nh->nh_soa, NULL) >= 0 && soa_activate(nh->nh_soa, NULL) >= 0) { - ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); + ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); } else { int status; char const *phrase, *reason; @@ -2575,7 +2575,7 @@ return 0; } -static int +static int process_ack_error(nua_server_request_t *sr, msg_t *ackmsg, int status, @@ -2585,14 +2585,14 @@ nua_handle_t *nh = sr->sr_owner; nua_session_usage_t *ss = nua_dialog_usage_private(sr->sr_usage); int error; - + nua_stack_event(nh->nh_nua, nh, ackmsg, nua_i_ack, status, phrase, NULL); nua_stack_event(nh->nh_nua, nh, NULL, nua_i_media_error, status, phrase, NULL); if (reason) ss->ss_reason = reason; - ss->ss_reporting = 1; + ss->ss_reporting = 1; error = nua_client_create(nh, nua_r_bye, &nua_bye_client_methods, NULL); ss->ss_reporting = 0; @@ -2668,7 +2668,7 @@ if (nua_server_request_is_pending(sr)) { /* PRACK timeout */ SR_STATUS1(sr, SIP_504_GATEWAY_TIME_OUT); - nua_server_trespond(sr, + nua_server_trespond(sr, SIPTAG_REASON_STR(reason), TAG_END()); if (nua_server_report(sr) >= 2) @@ -2709,7 +2709,7 @@ * @param tags empty * * @sa nua_prack(), #nua_r_prack, @RFC3262, NUTAG_EARLY_MEDIA() - * + * * @END_NUA_EVENT */ @@ -2717,11 +2717,11 @@ int nua_prack_server_respond(nua_server_request_t *sr, tagi_t const *tags); int nua_prack_server_report(nua_server_request_t *sr, tagi_t const *tags); -nua_server_methods_t const nua_prack_server_methods = +nua_server_methods_t const nua_prack_server_methods = { SIP_METHOD_PRACK, nua_i_prack, /* Event */ - { + { 0, /* Do not create dialog */ 1, /* In-dialog request */ 1, /* Target refresh request */ @@ -2744,7 +2744,7 @@ nua_dialog_usage_t *du; nta_reliable_destroy(rel); - if (irq == NULL) + if (irq == NULL) /* Final response interrupted 100rel, we did not actually receive PRACK */ return 200; @@ -2787,7 +2787,7 @@ if (sri == NULL) return SR_STATUS(sr, 481, "No Such Preliminary Response"); - + if (nua_session_server_init(sr)) return sr->sr_status; @@ -2796,7 +2796,7 @@ char const *offeranswer; /* XXX - check for overlap? */ - + if (sri->sr_offer_sent && !sri->sr_answer_recv) sr->sr_answer_recv = 1, sri->sr_answer_recv = 1, offeranswer = Answer; else @@ -2808,7 +2808,7 @@ soa_set_remote_sdp(nh->nh_soa, NULL, sr->sr_sdp, sr->sr_sdp_len) < 0) { SU_DEBUG_5(("nua(%p): %s server: error parsing %s\n", (void *)nh, "PRACK", offeranswer)); - return + return sr->sr_status = soa_error_as_sip_response(nh->nh_soa, &sr->sr_phrase); } } @@ -2820,7 +2820,7 @@ { nua_handle_t *nh = sr->sr_owner; - if (sr->sr_status < 200 || 300 <= sr->sr_status) + if (sr->sr_status < 200 || 300 <= sr->sr_status) return nua_base_server_respond(sr, tags); if (sr->sr_sdp) { @@ -2834,8 +2834,8 @@ } else if ((sr->sr_offer_recv && soa_generate_answer(nh->nh_soa, NULL) < 0) || (sr->sr_answer_recv && soa_process_answer(nh->nh_soa, NULL) < 0)) { - SU_DEBUG_5(("nua(%p): %s server: %s %s\n", - (void *)nh, "PRACK", + SU_DEBUG_5(("nua(%p): %s server: %s %s\n", + (void *)nh, "PRACK", "error processing", sr->sr_offer_recv ? Offer : Answer)); sr->sr_status = soa_error_as_sip_response(nh->nh_soa, &sr->sr_phrase); @@ -2865,7 +2865,7 @@ if (retval >= 2 || ss == NULL) { #if 0 signal_call_state_change(nh, NULL, - status, phrase, + status, phrase, nua_callstate_terminated); #endif return retval; @@ -2874,11 +2874,11 @@ if (offer_recv_or_answer_sent) { /* signal offer received, answer sent */ signal_call_state_change(nh, ss, - status, phrase, + status, phrase, ss->ss_state); if (nh->nh_soa) { soa_activate(nh->nh_soa, NULL); - ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); + ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); } } @@ -2888,15 +2888,15 @@ assert(sri); if (sri == NULL) { - + } else if (SR_HAS_SAVED_SIGNAL(sri)) { nua_signal_data_t const *e; - + e = nua_signal_data(sri->sr_signal); sri->sr_application = SR_STATUS(sri, e->e_status, e->e_phrase); - + nua_server_params(sri, e->e_tags); nua_server_respond(sri, e->e_tags); nua_server_report(sri); @@ -3028,15 +3028,15 @@ /**@fn void nua_info(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); * - * Send an INFO request. + * Send an INFO request. * - * INFO is used to send call related information like DTMF + * INFO is used to send call related information like DTMF * digit input events. See @RFC2976. * * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -3048,7 +3048,7 @@ * @sa #nua_i_info */ -static int nua_info_client_init(nua_client_request_t *cr, +static int nua_info_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags); @@ -3080,7 +3080,7 @@ return nua_client_create(nh, e, &nua_info_client_methods, tags); } -static int nua_info_client_init(nua_client_request_t *cr, +static int nua_info_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags) { @@ -3118,7 +3118,7 @@ * @param nh operation handle associated with the call * @param hmagic application context associated with the call * @param sip response to @b INFO or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * @@ -3139,15 +3139,15 @@ * @param tags empty * * @sa nua_info(), #nua_r_info, @RFC2976 - * + * * @END_NUA_EVENT */ -nua_server_methods_t const nua_info_server_methods = +nua_server_methods_t const nua_info_server_methods = { SIP_METHOD_INFO, nua_i_info, /* Event */ - { + { 0, /* Do not create dialog */ 1, /* In-dialog request */ 0, /* Not a target refresh request */ @@ -3165,8 +3165,8 @@ /**@fn void nua_update(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...); * - * Update a session. - * + * Update a session. + * * Update a session using SIP UPDATE method. See @RFC3311. * * Update method can be used when the session has been established with @@ -3177,7 +3177,7 @@ * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -3191,7 +3191,7 @@ * @sa @ref nua_call_model, @RFC3311, nua_update(), #nua_i_update */ -static int nua_update_client_init(nua_client_request_t *cr, +static int nua_update_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags); static int nua_update_client_request(nua_client_request_t *cr, @@ -3230,7 +3230,7 @@ return nua_client_create(nh, e, &nua_update_client_methods, tags); } -static int nua_update_client_init(nua_client_request_t *cr, +static int nua_update_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags) { @@ -3252,7 +3252,7 @@ nua_server_request_t *sr; nua_client_request_t *cri; int offer_sent = 0, retval; - + if (du == NULL) /* Call terminated */ return nua_client_return(cr, SIP_481_NO_TRANSACTION, msg); @@ -3294,7 +3294,7 @@ /* Add session timer headers */ session_timer_preferences(ss->ss_timer, sip, - NH_PGET(nh, supported), + NH_PGET(nh, supported), NH_PGET(nh, session_timer), NUA_PISSET(nh->nh_nua, nh, session_timer), NH_PGET(nh, refresher), @@ -3368,7 +3368,7 @@ * @param nh operation handle associated with the call * @param hmagic application context associated with the call * @param sip response to UPDATE request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * @@ -3387,7 +3387,7 @@ nua_dialog_usage_t *du = cr->cr_usage; nua_session_usage_t *ss = nua_dialog_usage_private(du); - nua_stack_event(nh->nh_nua, nh, + nua_stack_event(nh->nh_nua, nh, nta_outgoing_getresponse(orq), cr->cr_event, status, phrase, @@ -3405,7 +3405,7 @@ /* There is an un-ACK-ed INVITE there */ assert(du->du_cr->cr_method == sip_method_invite); - if (NH_PGET(nh, auto_ack) || + if (NH_PGET(nh, auto_ack) || /* Auto-ACK response to re-INVITE unless auto_ack is set to 0 */ (ss->ss_state == nua_callstate_ready && !NH_PISSET(nh, auto_ack))) { if (nua_invite_client_ack(du->du_cr, NULL) > 0) @@ -3429,11 +3429,11 @@ int nua_update_server_respond(nua_server_request_t *sr, tagi_t const *tags); int nua_update_server_report(nua_server_request_t *, tagi_t const *); -nua_server_methods_t const nua_update_server_methods = +nua_server_methods_t const nua_update_server_methods = { SIP_METHOD_UPDATE, nua_i_update, /* Event */ - { + { 0, /* Do not create dialog */ 1, /* In-dialog request */ 1, /* Target refresh request */ @@ -3498,7 +3498,7 @@ soa_set_remote_sdp(nh->nh_soa, NULL, sr->sr_sdp, sr->sr_sdp_len) < 0) { SU_DEBUG_5(("nua(%p): %s server: error parsing %s\n", (void *)nh, "UPDATE", Offer)); - return + return sr->sr_status = soa_error_as_sip_response(nh->nh_soa, &sr->sr_phrase); } @@ -3524,7 +3524,7 @@ sr->sr_answer_sent = 1, ss ? ss->ss_oa_sent = Answer : Answer; } else if (soa_generate_answer(nh->nh_soa, NULL) < 0) { - SU_DEBUG_5(("nua(%p): %s server: %s %s\n", + SU_DEBUG_5(("nua(%p): %s server: %s %s\n", (void *)nh, "UPDATE", "error processing", Offer)); sr->sr_status = soa_error_as_sip_response(nh->nh_soa, &sr->sr_phrase); } @@ -3538,14 +3538,14 @@ } else { sr->sr_answer_sent = 1, ss->ss_oa_sent = Answer; - ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); + ss->ss_sdp_version = soa_get_user_version(nh->nh_soa); } } if (200 <= sr->sr_status && sr->sr_status < 300) { session_timer_preferences(ss->ss_timer, sip, - NH_PGET(nh, supported), + NH_PGET(nh, supported), NH_PGET(nh, session_timer), NUA_PISSET(nh->nh_nua, nh, session_timer), NH_PGET(nh, refresher), @@ -3597,7 +3597,7 @@ if (retval >= 2 || ss == NULL) { #if 0 - signal_call_state_change(nh, NULL, status, phrase, + signal_call_state_change(nh, NULL, status, phrase, nua_callstate_terminated); #endif return retval; @@ -3606,7 +3606,7 @@ if (offer_recv_or_answer_sent) { /* signal offer received, answer sent */ enum nua_callstate state = ss->ss_state; - + if (state == nua_callstate_ready && status < 200) state = nua_callstate_received; @@ -3615,13 +3615,13 @@ if (200 <= status && status < 300 && ss->ss_state < nua_callstate_ready - && ss->ss_precondition + && ss->ss_precondition && !ss->ss_alerting && NH_PGET(nh, auto_alert)) { nua_server_request_t *sri; - + for (sri = nh->nh_ds->ds_sr; sri; sri = sr->sr_next) - if (sri->sr_method == sip_method_invite && + if (sri->sr_method == sip_method_invite && nua_server_request_is_pending(sri)) break; @@ -3642,13 +3642,13 @@ * * Hangdown a call. * - * Hangdown a call using SIP BYE method. Also the media session - * associated with the call is terminated. + * Hangdown a call using SIP BYE method. Also the media session + * associated with the call is terminated. * * @param nh Pointer to operation handle * @param tag, value, ... List of tagged parameters * - * @return + * @return * nothing * * @par Related Tags: @@ -3659,7 +3659,7 @@ * #nua_i_media_error */ -static int nua_bye_client_init(nua_client_request_t *cr, +static int nua_bye_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags); static int nua_bye_client_request(nua_client_request_t *cr, @@ -3694,7 +3694,7 @@ { nua_session_usage_t *ss = nua_session_usage_for_dialog(nh->nh_ds); - if (ss && + if (ss && nua_callstate_calling <= ss->ss_state && ss->ss_state <= nua_callstate_proceeding) return nua_client_create(nh, e, &nua_cancel_client_methods, tags); @@ -3702,7 +3702,7 @@ return nua_client_create(nh, e, &nua_bye_client_methods, tags); } -static int nua_bye_client_init(nua_client_request_t *cr, +static int nua_bye_client_init(nua_client_request_t *cr, msg_t *msg, sip_t *sip, tagi_t const *tags) { @@ -3778,12 +3778,12 @@ * @param nh operation handle associated with the call * @param hmagic application context associated with the call * @param sip response to BYE request or NULL upon an error - * (status code is in @a status and + * (status code is in @a status and * descriptive message in @a phrase parameters) * @param tags empty * * @sa nua_bye(), @ref nua_call_model, #nua_i_state, #nua_r_invite() - * + * * @END_NUA_EVENT */ @@ -3796,7 +3796,7 @@ nua_handle_t *nh = cr->cr_owner; nua_dialog_usage_t *du = cr->cr_usage; - nua_stack_event(nh->nh_nua, nh, + nua_stack_event(nh->nh_nua, nh, nta_outgoing_getresponse(orq), cr->cr_event, status, phrase, @@ -3821,7 +3821,7 @@ nua_client_bind(cr, NULL); - signal_call_state_change(nh, ss, status, "to BYE", + signal_call_state_change(nh, ss, status, "to BYE", nua_callstate_terminated); for (cri = du->du_dialog->ds_cr; cri; cri = cri->cr_next) { @@ -3857,11 +3857,11 @@ int nua_bye_server_init(nua_server_request_t *sr); int nua_bye_server_report(nua_server_request_t *sr, tagi_t const *tags); -nua_server_methods_t const nua_bye_server_methods = +nua_server_methods_t const nua_bye_server_methods = { SIP_METHOD_BYE, nua_i_bye, /* Event */ - { + { 0, /* Do not create dialog */ 1, /* In-dialog request */ 0, /* Not a target refresh request */ @@ -3949,7 +3949,7 @@ * * @brief Call state has changed. * - * This event will be sent whenever the call state changes. + * This event will be sent whenever the call state changes. * * In addition to basic changes of session status indicated with enum * ::nua_callstate, the @RFC3264 SDP Offer/Answer negotiation status is also @@ -3977,7 +3977,7 @@ * @param nh operation handle associated with the call * @param hmagic application context associated with the call * @param sip NULL - * @param tags NUTAG_CALLSTATE(), + * @param tags NUTAG_CALLSTATE(), * SOATAG_LOCAL_SDP(), SOATAG_LOCAL_SDP_STR(), * NUTAG_OFFER_SENT(), NUTAG_ANSWER_SENT(), * SOATAG_REMOTE_SDP(), SOATAG_REMOTE_SDP_STR(), @@ -3986,7 +3986,7 @@ * SOATAG_ACTIVE_IMAGE(), SOATAG_ACTIVE_CHAT(). * * @sa @ref nua_call_model, #nua_i_active, #nua_i_terminated, - * nua_invite(), #nua_r_invite, #nua_i_invite, nua_respond(), + * nua_invite(), #nua_r_invite, #nua_i_invite, nua_respond(), * NUTAG_MEDIA_ENABLE(), * NUTAG_AUTOALERT(), NUTAG_AUTOANSWER(), NUTAG_EARLY_MEDIA(), * NUTAG_EARLY_ANSWER(), NUTAG_INCLUDE_EXTRA_SDP(), @@ -4075,14 +4075,14 @@ next_state = ss->ss_state; else if (ss->ss_state == nua_callstate_terminating) return; - else + else ss->ss_state = next_state = nua_callstate_terminated; } else if (next_state > ss_state) ss->ss_state = next_state; } - if (next_state == nua_callstate_init) + if (next_state == nua_callstate_init) next_state = nua_callstate_terminated; if (ss && ss->ss_state == nua_callstate_ready) @@ -4165,7 +4165,7 @@ * * @deprecated Use #nua_i_state instead. * - * @sa @ref nua_call_model, #nua_i_state, #nua_i_terminated, + * @sa @ref nua_call_model, #nua_i_state, #nua_i_terminated, * #nua_i_invite * * @END_NUA_EVENT @@ -4222,7 +4222,7 @@ return t->local.supported; } -/** Set session timer preferences */ +/** Set session timer preferences */ static void session_timer_preferences(struct session_timer *t, sip_t const *sip, @@ -4260,7 +4260,7 @@ t->local.min_se = sip->sip_min_se->min_delta; if (t->local.expires != 0 && t->local.min_se > t->local.expires) t->local.expires = t->local.min_se; - + return nua_client_restart(cr, 100, "Re-Negotiating Session Timer"); } } @@ -4301,7 +4301,7 @@ /* Include extension parameters, if any */ if (request->sip_min_se) min_se->min_params = request->sip_min_se->min_params; - + sip_add_dup(msg, sip, (sip_header_t *)min_se); return 422; @@ -4310,7 +4310,7 @@ return 0; } -/** Store session timer parameters in request from uac / response from uas */ +/** Store session timer parameters in request from uac / response from uas */ static void session_timer_store(struct session_timer *t, sip_t const *sip) @@ -4349,7 +4349,7 @@ } /** Add timer feature and Session-Expires/Min-SE headers to request/response - * + * */ static int session_timer_add_headers(struct session_timer *t, @@ -4377,7 +4377,7 @@ if (uas) { session_timer_negotiate(t); - + refresher = t->refresher; expires = t->interval; } @@ -4440,7 +4440,7 @@ t->interval = t->local.expires; if (t->local.defaults != 0 && t->interval > t->local.defaults) t->interval = t->local.defaults; - + if (t->interval != 0) { if (t->interval < t->local.min_se) t->interval = t->local.min_se; @@ -4652,11 +4652,11 @@ int nua_options_server_respond(nua_server_request_t *sr, tagi_t const *tags); -nua_server_methods_t const nua_options_server_methods = +nua_server_methods_t const nua_options_server_methods = { SIP_METHOD_OPTIONS, nua_i_options, /* Event */ - { + { 0, /* Do not create dialog */ 0, /* Initial request */ 0, /* Not a target refresh request */ From mikej at freeswitch.org Tue Dec 16 13:24:18 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 16:24:18 -0500 Subject: [Freeswitch-trunk] [commit] r10834 - freeswitch/trunk/libs/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 16:24:18 2008 New Revision: 10834 Log: Wed Dec 3 06:00:07 CST 2008 Pekka Pessi * Updated AUTHORS, RELEASE. Modified: freeswitch/trunk/libs/sofia-sip/AUTHORS freeswitch/trunk/libs/sofia-sip/RELEASE freeswitch/trunk/libs/sofia-sip/configure.ac Modified: freeswitch/trunk/libs/sofia-sip/AUTHORS ============================================================================== --- freeswitch/trunk/libs/sofia-sip/AUTHORS (original) +++ freeswitch/trunk/libs/sofia-sip/AUTHORS Tue Dec 16 16:24:18 2008 @@ -19,6 +19,7 @@ Jacobs, Remeres Jalava, Teemu Jerris, Michael +Katcipis, Tiago Knoblich, Stefan Legostayev, Denis Lenk, Jeff Modified: freeswitch/trunk/libs/sofia-sip/RELEASE ============================================================================== --- freeswitch/trunk/libs/sofia-sip/RELEASE (original) +++ freeswitch/trunk/libs/sofia-sip/RELEASE Tue Dec 16 16:24:18 2008 @@ -1,30 +1,24 @@ -============================================== -Release notes for current version of Sofia-SIP -============================================== +====================================== +Release notes for Sofia-SIP 1.12.10rc2 +====================================== -Changes since last release --------------------------- - - +Changes since release 1.12.9 +---------------------------- -Bugs in blaa and foo have been fixed. The stack now supports -use of foobar... +Numerous bugs has been fixed. The SDP parser has been updated to accept +syntax according to RFC 4566. The TLS certificate verfication can now be +controlled through offical API. API/ABI changes and versioning ------------------------------ - - -**template**: New features in API are marked with Doxytag macro @VERSION_1_XX_X. - libsofia-sip-ua: -- **template**: Added foobar() function (sofia-sip/foobar.h). + New tags added: + - TPTAG_TLS_VERIFY_PEER() + - NUTAG_REFRESH_WITHOUT_SDP() + Tag behavour updated: + - NTATAG_SERVER_RPORT(2) now includes and uses rport even if client does not + - This release is ABI/API compatible with applications linked against any 1.12.x release. However, applications built against this release won't work against an older library. The ABI has been tested with the nua module @@ -38,36 +32,40 @@ Contributors to this release ---------------------------- - - -- **template**: First Surname (patch to nua/soa/msg) +Tiago Katcipis +Mikhail Zabaluev +Paulo Pizarro +Filippo Della Betta +Jarod Neuner +Fabio Ferrari +Jeff Lenk +Brian Czapiga +Stefano Sabatini +Fabio Margarido See the AUTHORS file in the distribution package. -Notes on new features ---------------------- - - Bugs fixed in this release -------------------------- -< notable bugs fixed in this release - - check the sf.net bug tracker; see closed bugs, - sorted by closing date - - other bugs as fixed in CVS/darcs -/> - -- **template**: #9499652 sf.net bug item title +- Configure script options --enable-ndebug and enable-expensive-checks fixed. + Patch by Fabio Margarido +- When using session-timers, expire session only at the end of negotiated + expiration time. +- Fixed #1930055: Unregister when a new public binding is detected. + Patch by Mikhail Zabaluev. +- Use SIPS scheme in Contact URI if registering with SIPS. Patch by Jarod + Neuner. +- Using lower-case "udptl" transport name in SDP. Be bug-compatible. + Report by Timo Bruhn. +- Fixed mutex handle leak on Windows. Patch by Jeff Lenk. +- Accept requests with invalid Supported header. Patch by Brian Czapiga. +- When doing event fetch (SUBSCRIBE with Expires: 0) Wait until NOTIFY is + received. +- Fixed memory leak when destroying incomplete INVITE transactions in nua. +- Not using OPTIONS keepalive on TCP. +- Fixed bug with To-tags in response to CANCEL. +- Fixed #2041747: crash when using SIPTAG_ORGANIZATION_TAG_STR +- Fixed #1904805: build with Vista PlatformSDK +- Fixed #2037585: crash when call terminated Modified: freeswitch/trunk/libs/sofia-sip/configure.ac ============================================================================== --- freeswitch/trunk/libs/sofia-sip/configure.ac (original) +++ freeswitch/trunk/libs/sofia-sip/configure.ac Tue Dec 16 16:24:18 2008 @@ -11,7 +11,7 @@ dnl --------------------------- dnl update both the version for AC_INIT and the LIBSOFIA_SIP_UA_MAJOR_MINOR -AC_INIT([sofia-sip], [1.12.9pre10rc1]) +AC_INIT([sofia-sip], [1.12.9pre10rc2]) AC_CONFIG_SRCDIR([libsofia-sip-ua/sip/sofia-sip/sip.h]) AC_SUBST(VER_LIBSOFIA_SIP_UA_MAJOR_MINOR, [1.12]) dnl Includedir specific to this sofia version From mikej at freeswitch.org Tue Dec 16 13:25:02 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 16:25:02 -0500 Subject: [Freeswitch-trunk] [commit] r10835 - freeswitch/trunk/libs/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 16:25:01 2008 New Revision: 10835 Log: Mon Dec 8 09:40:33 CST 2008 Pekka Pessi * configure.ac, RELEASE: bumped version Modified: freeswitch/trunk/libs/sofia-sip/RELEASE freeswitch/trunk/libs/sofia-sip/configure.ac Modified: freeswitch/trunk/libs/sofia-sip/RELEASE ============================================================================== --- freeswitch/trunk/libs/sofia-sip/RELEASE (original) +++ freeswitch/trunk/libs/sofia-sip/RELEASE Tue Dec 16 16:25:01 2008 @@ -1,6 +1,6 @@ -====================================== -Release notes for Sofia-SIP 1.12.10rc2 -====================================== +=================================== +Release notes for Sofia-SIP 1.12.10 +=================================== Changes since release 1.12.9 ---------------------------- Modified: freeswitch/trunk/libs/sofia-sip/configure.ac ============================================================================== --- freeswitch/trunk/libs/sofia-sip/configure.ac (original) +++ freeswitch/trunk/libs/sofia-sip/configure.ac Tue Dec 16 16:25:01 2008 @@ -11,7 +11,7 @@ dnl --------------------------- dnl update both the version for AC_INIT and the LIBSOFIA_SIP_UA_MAJOR_MINOR -AC_INIT([sofia-sip], [1.12.9pre10rc2]) +AC_INIT([sofia-sip], [1.12.10]) AC_CONFIG_SRCDIR([libsofia-sip-ua/sip/sofia-sip/sip.h]) AC_SUBST(VER_LIBSOFIA_SIP_UA_MAJOR_MINOR, [1.12]) dnl Includedir specific to this sofia version From mikej at freeswitch.org Tue Dec 16 13:25:54 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 16:25:54 -0500 Subject: [Freeswitch-trunk] [commit] r10836 - freeswitch/trunk/libs/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 16:25:54 2008 New Revision: 10836 Log: Tue Dec 9 11:11:08 CST 2008 Pekka Pessi * RELEASE, configure.ac: opening development head Modified: freeswitch/trunk/libs/sofia-sip/RELEASE freeswitch/trunk/libs/sofia-sip/configure.ac Modified: freeswitch/trunk/libs/sofia-sip/RELEASE ============================================================================== --- freeswitch/trunk/libs/sofia-sip/RELEASE (original) +++ freeswitch/trunk/libs/sofia-sip/RELEASE Tue Dec 16 16:25:54 2008 @@ -1,24 +1,30 @@ -=================================== -Release notes for Sofia-SIP 1.12.10 -=================================== +============================================== +Release notes for current version of Sofia-SIP +============================================== -Changes since release 1.12.9 ----------------------------- +Changes since last release +-------------------------- + + -Numerous bugs has been fixed. The SDP parser has been updated to accept -syntax according to RFC 4566. The TLS certificate verfication can now be -controlled through offical API. +Bugs in blaa and foo have been fixed. The stack now supports +use of foobar... API/ABI changes and versioning ------------------------------ -libsofia-sip-ua: - New tags added: - - TPTAG_TLS_VERIFY_PEER() - - NUTAG_REFRESH_WITHOUT_SDP() - Tag behavour updated: - - NTATAG_SERVER_RPORT(2) now includes and uses rport even if client does not + + +**template**: New features in API are marked with Doxytag macro @VERSION_1_XX_X. +libsofia-sip-ua: +- **template**: Added foobar() function (sofia-sip/foobar.h). - This release is ABI/API compatible with applications linked against any 1.12.x release. However, applications built against this release won't work against an older library. The ABI has been tested with the nua module @@ -32,40 +38,36 @@ Contributors to this release ---------------------------- -Tiago Katcipis -Mikhail Zabaluev -Paulo Pizarro -Filippo Della Betta -Jarod Neuner -Fabio Ferrari -Jeff Lenk -Brian Czapiga -Stefano Sabatini -Fabio Margarido + + +- **template**: First Surname (patch to nua/soa/msg) See the AUTHORS file in the distribution package. +Notes on new features +--------------------- + + Bugs fixed in this release -------------------------- -- Configure script options --enable-ndebug and enable-expensive-checks fixed. - Patch by Fabio Margarido -- When using session-timers, expire session only at the end of negotiated - expiration time. -- Fixed #1930055: Unregister when a new public binding is detected. - Patch by Mikhail Zabaluev. -- Use SIPS scheme in Contact URI if registering with SIPS. Patch by Jarod - Neuner. -- Using lower-case "udptl" transport name in SDP. Be bug-compatible. - Report by Timo Bruhn. -- Fixed mutex handle leak on Windows. Patch by Jeff Lenk. -- Accept requests with invalid Supported header. Patch by Brian Czapiga. -- When doing event fetch (SUBSCRIBE with Expires: 0) Wait until NOTIFY is - received. -- Fixed memory leak when destroying incomplete INVITE transactions in nua. -- Not using OPTIONS keepalive on TCP. -- Fixed bug with To-tags in response to CANCEL. -- Fixed #2041747: crash when using SIPTAG_ORGANIZATION_TAG_STR -- Fixed #1904805: build with Vista PlatformSDK -- Fixed #2037585: crash when call terminated +< notable bugs fixed in this release + - check the sf.net bug tracker; see closed bugs, + sorted by closing date + - other bugs as fixed in CVS/darcs +/> + +- **template**: #9499652 sf.net bug item title Modified: freeswitch/trunk/libs/sofia-sip/configure.ac ============================================================================== --- freeswitch/trunk/libs/sofia-sip/configure.ac (original) +++ freeswitch/trunk/libs/sofia-sip/configure.ac Tue Dec 16 16:25:54 2008 @@ -11,7 +11,7 @@ dnl --------------------------- dnl update both the version for AC_INIT and the LIBSOFIA_SIP_UA_MAJOR_MINOR -AC_INIT([sofia-sip], [1.12.10]) +AC_INIT([sofia-sip], [1.12.10devel]) AC_CONFIG_SRCDIR([libsofia-sip-ua/sip/sofia-sip/sip.h]) AC_SUBST(VER_LIBSOFIA_SIP_UA_MAJOR_MINOR, [1.12]) dnl Includedir specific to this sofia version From mikej at freeswitch.org Tue Dec 16 13:29:07 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 16:29:07 -0500 Subject: [Freeswitch-trunk] [commit] r10837 - freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su Message-ID: Author: mikej Date: Tue Dec 16 16:29:07 2008 New Revision: 10837 Log: SFSIP-107 don't destroy locked mutex Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c Tue Dec 16 16:29:07 2008 @@ -1020,17 +1020,15 @@ home->suh_blocks = NULL; if (home->suh_lock) { -#ifdef WIN32 - UNLOCK(home); /* we must unlock here or windows leaks handles on the next call because the mutex is locked */ -#endif -/* "In the LinuxThreads implementation, no resources are associated with mutex objects, - thus pthread_mutex_destroy actually does nothing except checking that the mutex is unlocked. " - In the Windows pthread implementation we must free the handles that are allocated */ - _su_home_destroy_mutexes(home->suh_lock); + void *suh_lock = home->suh_lock; + + home->suh_lock = NULL; + + /* Unlock, or risk assert() or leak handles on Windows */ + _su_home_unlocker(suh_lock); + _su_home_destroy_mutexes(suh_lock); } } - - home->suh_lock = NULL; } /** Free memory blocks allocated through home. From mikej at freeswitch.org Tue Dec 16 13:42:39 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 16:42:39 -0500 Subject: [Freeswitch-trunk] [commit] r10838 - freeswitch/trunk/libs/sofia-sip Message-ID: Author: mikej Date: Tue Dec 16 16:42:38 2008 New Revision: 10838 Log: .update Modified: freeswitch/trunk/libs/sofia-sip/.update Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 16:42:38 2008 @@ -1 +1 @@ -Tue Dec 16 15:22:24 CST 2008 +Tue Dec 16 15:42:18 CST 2008 From brian at freeswitch.org Tue Dec 16 15:46:51 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 18:46:51 -0500 Subject: [Freeswitch-trunk] [commit] r10840 - freeswitch/trunk/src/mod/codecs/mod_siren Message-ID: Author: brian Date: Tue Dec 16 18:46:49 2008 New Revision: 10840 Log: 60ms max Modified: freeswitch/trunk/src/mod/codecs/mod_siren/mod_siren.c Modified: freeswitch/trunk/src/mod/codecs/mod_siren/mod_siren.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_siren/mod_siren.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_siren/mod_siren.c Tue Dec 16 18:46:49 2008 @@ -147,7 +147,7 @@ SWITCH_ADD_CODEC(codec_interface, "Polycom(R) G722.1/G722.1C"); spf = 320, bpf = 640; - for (count = 4; count > 0; count--) { + for (count = 3; count > 0; count--) { switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ @@ -169,7 +169,7 @@ switch_siren_destroy); /* deinitalize a codec handle using this implementation */ } spf = 640, bpf = 1280; - for (count = 4; count > 0; count--) { + for (count = 3; count > 0; count--) { switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ From anthm at freeswitch.org Tue Dec 16 17:53:47 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 20:53:47 -0500 Subject: [Freeswitch-trunk] [commit] r10841 - in freeswitch/trunk: conf/autoload_configs src src/include src/mod/applications/mod_conference src/mod/codecs/mod_celt src/mod/codecs/mod_voipcodecs src/mod/formats/mod_local_stream Message-ID: Author: anthm Date: Tue Dec 16 20:53:46 2008 New Revision: 10841 Log: add mod_celt Added: freeswitch/trunk/src/mod/codecs/mod_celt/ freeswitch/trunk/src/mod/codecs/mod_celt/Makefile freeswitch/trunk/src/mod/codecs/mod_celt/mod_celt.c Modified: freeswitch/trunk/conf/autoload_configs/conference.conf.xml freeswitch/trunk/conf/autoload_configs/local_stream.conf.xml freeswitch/trunk/src/include/switch_loadable_module.h freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c freeswitch/trunk/src/mod/formats/mod_local_stream/mod_local_stream.c freeswitch/trunk/src/switch_pcm.c freeswitch/trunk/src/switch_time.c Modified: freeswitch/trunk/conf/autoload_configs/conference.conf.xml ============================================================================== --- freeswitch/trunk/conf/autoload_configs/conference.conf.xml (original) +++ freeswitch/trunk/conf/autoload_configs/conference.conf.xml Tue Dec 16 20:53:46 2008 @@ -150,5 +150,31 @@ + + + + --> Modified: freeswitch/trunk/conf/autoload_configs/local_stream.conf.xml ============================================================================== --- freeswitch/trunk/conf/autoload_configs/local_stream.conf.xml (original) +++ freeswitch/trunk/conf/autoload_configs/local_stream.conf.xml Tue Dec 16 20:53:46 2008 @@ -22,5 +22,13 @@ - + Modified: freeswitch/trunk/src/include/switch_loadable_module.h ============================================================================== --- freeswitch/trunk/src/include/switch_loadable_module.h (original) +++ freeswitch/trunk/src/include/switch_loadable_module.h Tue Dec 16 20:53:46 2008 @@ -41,6 +41,7 @@ #ifndef SWITCH_LOADABLE_MODULE_H #define SWITCH_LOADABLE_MODULE_H +#include #include #include @@ -324,44 +325,74 @@ break; \ } +static inline int switch_check_interval(uint32_t rate, uint32_t ptime) +{ + uint32_t max_ms = 0, ptime_div = 0; + + switch (rate) { + case 22050: + case 11025: + if (ptime < 120) return 1; + break; + case 48000: + max_ms = 20; + ptime_div = 2; + break; + case 32000: + case 16000: + max_ms = 60; + ptime_div = 2; + break; + case 8000: + max_ms = 120; + ptime_div = 2; + break; + } + + if (max_ms && ptime_div && (ptime <= max_ms && (ptime % ptime_div) == 0) && ((rate / 1000) * ptime) < SWITCH_RECOMMENDED_BUFFER_SIZE) { + return 1; + } + + return 0; +} - static inline void switch_core_codec_add_implementation(switch_memory_pool_t *pool, switch_codec_interface_t *codec_interface, - /*! enumeration defining the type of the codec */ - const switch_codec_type_t codec_type, - /*! the IANA code number */ - switch_payload_t ianacode, - /*! the IANA code name */ - const char *iananame, - /*! default fmtp to send (can be overridden by the init function) */ - char *fmtp, - /*! samples transferred per second */ - uint32_t samples_per_second, - /*! actual samples transferred per second for those who are not moron g722 RFC writers */ - uint32_t actual_samples_per_second, - /*! bits transferred per second */ - int bits_per_second, - /*! number of microseconds that denote one frame */ - int microseconds_per_packet, - /*! number of samples that denote one frame */ - uint32_t samples_per_packet, - /*! number of bytes that denote one frame decompressed */ - uint32_t decoded_bytes_per_packet, - /*! number of bytes that denote one frame compressed */ - uint32_t encoded_bytes_per_packet, - /*! number of channels represented */ - uint8_t number_of_channels, - /*! number of frames to send in one network packet */ - int codec_frames_per_packet, - /*! function to initialize a codec handle using this implementation */ - switch_core_codec_init_func_t init, - /*! function to encode raw data into encoded data */ - switch_core_codec_encode_func_t encode, - /*! function to decode encoded data into raw data */ - switch_core_codec_decode_func_t decode, - /*! deinitalize a codec handle using this implementation */ - switch_core_codec_destroy_func_t destroy) +static inline void switch_core_codec_add_implementation(switch_memory_pool_t *pool, switch_codec_interface_t *codec_interface, + /*! enumeration defining the type of the codec */ + const switch_codec_type_t codec_type, + /*! the IANA code number */ + switch_payload_t ianacode, + /*! the IANA code name */ + const char *iananame, + /*! default fmtp to send (can be overridden by the init function) */ + char *fmtp, + /*! samples transferred per second */ + uint32_t samples_per_second, + /*! actual samples transferred per second for those who are not moron g722 RFC writers */ + uint32_t actual_samples_per_second, + /*! bits transferred per second */ + int bits_per_second, + /*! number of microseconds that denote one frame */ + int microseconds_per_packet, + /*! number of samples that denote one frame */ + uint32_t samples_per_packet, + /*! number of bytes that denote one frame decompressed */ + uint32_t decoded_bytes_per_packet, + /*! number of bytes that denote one frame compressed */ + uint32_t encoded_bytes_per_packet, + /*! number of channels represented */ + uint8_t number_of_channels, + /*! number of frames to send in one network packet */ + int codec_frames_per_packet, + /*! function to initialize a codec handle using this implementation */ + switch_core_codec_init_func_t init, + /*! function to encode raw data into encoded data */ + switch_core_codec_encode_func_t encode, + /*! function to decode encoded data into raw data */ + switch_core_codec_decode_func_t decode, + /*! deinitalize a codec handle using this implementation */ + switch_core_codec_destroy_func_t destroy) { - if (codec_type == SWITCH_CODEC_TYPE_VIDEO || SWITCH_ACCEPTABLE_INTERVAL(microseconds_per_packet / 1000)) { + if (codec_type == SWITCH_CODEC_TYPE_VIDEO || switch_check_interval(actual_samples_per_second, microseconds_per_packet / 1000)) { switch_codec_implementation_t *impl = (switch_codec_implementation_t *) switch_core_alloc(pool, sizeof(*impl)); impl->codec_type = codec_type; impl->ianacode = ianacode; @@ -383,6 +414,9 @@ impl->codec_id = codec_interface->codec_id; impl->next = codec_interface->implementations; codec_interface->implementations = impl; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Rejected codec name: %s rate: %u ptime: %u\n", + iananame, actual_samples_per_second, microseconds_per_packet / 1000); } } Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Tue Dec 16 20:53:46 2008 @@ -359,9 +359,9 @@ #define SWITCH_SYSTEM_THREAD_STACKSIZE 8192 * 1024 #define SWITCH_MAX_INTERVAL 120 /* we only do up to 120ms */ #define SWITCH_INTERVAL_PAD 10 /* A little extra buffer space to be safe */ -#define SWITCH_MAX_SAMPLE_LEN 32 +#define SWITCH_MAX_SAMPLE_LEN 48 #define SWITCH_BYTES_PER_SAMPLE 2 /* slin is 2 bytes per sample */ -#define SWITCH_RECOMMENDED_BUFFER_SIZE (SWITCH_BYTES_PER_SAMPLE * SWITCH_MAX_SAMPLE_LEN * (SWITCH_MAX_INTERVAL + SWITCH_INTERVAL_PAD)) +#define SWITCH_RECOMMENDED_BUFFER_SIZE 4096 /* worst case of 32khz @60ms we only do 48khz @10ms which is 960 */ #define SWITCH_MAX_CODECS 50 #define SWITCH_MAX_STATE_HANDLERS 30 #define SWITCH_CORE_QUEUE_LEN 100000 Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c (original) +++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Tue Dec 16 20:53:46 2008 @@ -4893,7 +4893,7 @@ if (!strcasecmp(var, "rate") && !switch_strlen_zero(val)) { uint32_t tmp = atoi(val); - if (tmp == 8000 || tmp == 16000 || tmp == 32000) { + if (tmp == 8000 || tmp == 16000 || tmp == 32000 || tmp == 48000) { rate = tmp; } } else if (!strcasecmp(var, "domain") && !switch_strlen_zero(val)) { Added: freeswitch/trunk/src/mod/codecs/mod_celt/Makefile ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/codecs/mod_celt/Makefile Tue Dec 16 20:53:46 2008 @@ -0,0 +1,20 @@ +BASE=../../../.. + +CELT=celt-0.5.0 + +CELT_DIR=$(BASE)/libs/$(CELT) +LOCAL_CFLAGS=-I$(CELT_DIR)/libcelt +CELT_LA=$(CELT_DIR)/libcelt/.libs/libcelt.la +LOCAL_LIBADD=$(CELT_LA) +include $(BASE)/build/modmake.rules + +$(CELT_DIR): + $(GETLIB) $(CELT).tar.gz + +$(CELT_DIR)/Makefile: $(CELT_DIR) + cd $(CELT_DIR) && CFLAGS=$(AM_CFLAGS) ./configure --disable-shared --with-pic + +$(CELT_LA): $(CELT_DIR)/Makefile + cd $(CELT_DIR) && $(MAKE) + $(TOUCH_TARGET) + Added: freeswitch/trunk/src/mod/codecs/mod_celt/mod_celt.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/codecs/mod_celt/mod_celt.c Tue Dec 16 20:53:46 2008 @@ -0,0 +1,217 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2005/2006, 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): + * + * Brian K. West + * + * mod_celt.c -- The CELT ultra-low delay audio codec (http://www.celt-codec.org/) + * + */ + +#include "switch.h" +#include "celt.h" + +SWITCH_MODULE_LOAD_FUNCTION(mod_celt_load); +SWITCH_MODULE_DEFINITION(mod_celt, mod_celt_load, NULL, NULL); + +struct celt_context { + CELTEncoder *encoder_object; + CELTDecoder *decoder_object; + CELTMode *mode_object; + int frame_size; + int bytes_per_packet; +}; + +static switch_status_t switch_celt_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings) +{ + struct celt_context *context = NULL; + int encoding = (flags & SWITCH_CODEC_FLAG_ENCODE); + int decoding = (flags & SWITCH_CODEC_FLAG_DECODE); + + if (!(encoding || decoding) || (!(context = switch_core_alloc(codec->memory_pool, sizeof(*context))))) { + return SWITCH_STATUS_FALSE; + } + + context->mode_object = celt_mode_create(codec->implementation->actual_samples_per_second, 1, codec->implementation->samples_per_packet, NULL); + celt_mode_info(context->mode_object, CELT_GET_FRAME_SIZE, &context->frame_size); + context->bytes_per_packet = (codec->implementation->bits_per_second * context->frame_size/codec->implementation->actual_samples_per_second + 4) / 8; + + /* + if (codec->fmtp_in) { + int x, argc; + char *argv[10]; + argc = switch_separate_string(codec->fmtp_in, ';', argv, (sizeof(argv) / sizeof(argv[0]))); + for (x = 0; x < argc; x++) { + char *data = argv[x]; + char *arg; + switch_assert(data); + while (*data == ' ') { + data++; + } + if ((arg = strchr(data, '='))) { + *arg++ = '\0'; + if (!strcasecmp(data, "bitrate")) { + bit_rate = atoi(arg); + } + } + } + } + + codec->fmtp_out = switch_core_sprintf(codec->memory_pool, "bitrate=%d", bit_rate); + */ + if (encoding) { + context->encoder_object = celt_encoder_create(context->mode_object); + } + + if (decoding) { + context->decoder_object = celt_decoder_create(context->mode_object); + } + + codec->private_info = context; + return SWITCH_STATUS_SUCCESS; +} + +static switch_status_t switch_celt_destroy(switch_codec_t *codec) +{ + codec->private_info = NULL; + return SWITCH_STATUS_SUCCESS; +} + +static switch_status_t switch_celt_encode(switch_codec_t *codec, + switch_codec_t *other_codec, + void *decoded_data, + uint32_t decoded_data_len, + uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, + unsigned int *flag) +{ + struct celt_context *context = codec->private_info; + + if (!context) { + return SWITCH_STATUS_FALSE; + } + + *encoded_data_len = (uint32_t) celt_encode(context->encoder_object, (celt_int16_t *)decoded_data, NULL, + (unsigned char *)encoded_data, context->bytes_per_packet); + + return SWITCH_STATUS_SUCCESS; +} + +static switch_status_t switch_celt_decode(switch_codec_t *codec, + switch_codec_t *other_codec, + void *encoded_data, + uint32_t encoded_data_len, + uint32_t encoded_rate, void *decoded_data, uint32_t *decoded_data_len, uint32_t *decoded_rate, + unsigned int *flag) +{ + struct celt_context *context = codec->private_info; + + if (!context) { + return SWITCH_STATUS_FALSE; + } + + if (celt_decode(context->decoder_object, encoded_data, encoded_data_len, decoded_data)) { + return SWITCH_STATUS_GENERR; + } + + *decoded_data_len = codec->implementation->decoded_bytes_per_packet; + + return SWITCH_STATUS_SUCCESS; +} + +SWITCH_MODULE_LOAD_FUNCTION(mod_celt_load) +{ + switch_codec_interface_t *codec_interface; + int bytes_per_frame; + int samples_per_frame; + int ms_per_frame; + int x; + + /* connect my internal structure to the blank pointer passed to me */ + *module_interface = switch_loadable_module_create_module_interface(pool, modname); + + SWITCH_ADD_CODEC(codec_interface, "CELT ultra-low delay"); + + switch_core_codec_add_implementation(pool, + codec_interface, + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 114, /* the IANA code number */ + "CELT", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 32000, /* samples transferred per second */ + 32000, /* actual samples transferred per second */ + 32000, /* bits transferred per second */ + 10000, /* number of microseconds per frame */ + 320, /* number of samples per frame */ + 640, /* number of bytes per frame decompressed */ + 0, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_celt_init, /* function to initialize a codec handle using this implementation */ + switch_celt_encode, /* function to encode raw data into encoded data */ + switch_celt_decode, /* function to decode encoded data into raw data */ + switch_celt_destroy); /* deinitalize a codec handle using this implementation */ + ms_per_frame = 2000; + samples_per_frame = 96; + bytes_per_frame = 192; + + for (x = 0; x < 5; x++) { + switch_core_codec_add_implementation(pool, + codec_interface, + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 114, /* the IANA code number */ + "CELT", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 48000, /* samples transferred per second */ + 48000, /* actual samples transferred per second */ + 48000, /* bits transferred per second */ + ms_per_frame, /* number of microseconds per frame */ + samples_per_frame, /* number of samples per frame */ + bytes_per_frame, /* number of bytes per frame decompressed */ + 0, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_celt_init, /* function to initialize a codec handle using this implementation */ + switch_celt_encode, /* function to encode raw data into encoded data */ + switch_celt_decode, /* function to decode encoded data into raw data */ + switch_celt_destroy); /* deinitalize a codec handle using this implementation */ + ms_per_frame += 2000; + samples_per_frame += 96; + bytes_per_frame += 192; + } + + + /* indicate that the module should continue to be loaded */ + return SWITCH_STATUS_SUCCESS; +} + +/* 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: + */ Modified: freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c Tue Dec 16 20:53:46 2008 @@ -588,7 +588,7 @@ switch_adpcm_destroy); /* deinitalize a codec handle using this implementation */ } mpf = 10000, spf = 160, bpf = 320, ebpf = 160; - for (count = 12; count > 0; count--) { + for (count = 6; count > 0; count--) { switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ @@ -781,7 +781,7 @@ /* G722 */ mpf = 10000, spf = 80, bpf = 320, ebpf = 80; SWITCH_ADD_CODEC(codec_interface, "G.722"); - for (count = 12; count > 0; count--) { + for (count = 6; count > 0; count--) { switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ Modified: freeswitch/trunk/src/mod/formats/mod_local_stream/mod_local_stream.c ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_local_stream/mod_local_stream.c (original) +++ freeswitch/trunk/src/mod/formats/mod_local_stream/mod_local_stream.c Tue Dec 16 20:53:46 2008 @@ -450,7 +450,7 @@ if (!strcasecmp(var, "rate")) { int tmp = atoi(val); - if (tmp == 8000 || tmp == 16000 || tmp == 32000) { + if (tmp == 8000 || tmp == 16000 || tmp == 32000 || tmp == 48000) { source->rate = tmp; } } else if (!strcasecmp(var, "shuffle")) { Modified: freeswitch/trunk/src/switch_pcm.c ============================================================================== --- freeswitch/trunk/src/switch_pcm.c (original) +++ freeswitch/trunk/src/switch_pcm.c Tue Dec 16 20:53:46 2008 @@ -323,6 +323,7 @@ switch_codec_interface_t *codec_interface; int mpf = 10000, spf = 80, bpf = 160, ebpf = 160, bps = 128000, rate = 8000, counta = 1, countb = 12; switch_payload_t ianacode[4] = { 0, 10, 117, 119 }; + int samples_per_frame, bytes_per_frame, ms_per_frame, x; /* connect my internal structure to the blank pointer passed to me */ *module_interface = switch_loadable_module_create_module_interface(pool, modname); @@ -342,7 +343,12 @@ SWITCH_ADD_CODEC(codec_interface, "RAW Signed Linear (16 bit)"); for (counta = 1; counta <= 3; counta++) { - for (countb = 12; countb > 0; countb--) { + if (rate == 8000) { + countb = 12; + } else { + countb = 6; + } + for (; countb > 0; countb--) { switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, ianacode[counta], "L16", NULL, rate, rate, bps, mpf * countb, spf * countb, bpf * countb, ebpf * countb, 1, spf * countb, @@ -356,13 +362,186 @@ } /* these formats below are for file playing. */ + samples_per_frame = 96; + bytes_per_frame = 192; + ms_per_frame = 2000; + + for (x = 0; x < 5; x++) { + switch_core_codec_add_implementation(pool, codec_interface, + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 118, /* the IANA code number */ + "L16", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 48000, /* samples transferred per second */ + 48000, /* actual samples transferred per second */ + 768000, /* bits transferred per second */ + ms_per_frame, /* number of microseconds per frame */ + samples_per_frame, /* number of samples per frame */ + bytes_per_frame, /* number of bytes per frame decompressed */ + bytes_per_frame, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_raw_init, /* function to initialize a codec handle using this implementation */ + switch_raw_encode, /* function to encode raw data into encoded data */ + switch_raw_decode, /* function to decode encoded data into raw data */ + switch_raw_destroy); /* deinitalize a codec handle using this implementation */ + + samples_per_frame += 96; + bytes_per_frame += 192; + ms_per_frame += 2000; + + } + + + samples_per_frame = 8; + bytes_per_frame = 16; + ms_per_frame = 2000; + + for (x = 0; x < 5; x++) { + switch_core_codec_add_implementation(pool, codec_interface, + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 10, /* the IANA code number */ + "L16", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 8000, /* samples transferred per second */ + 8000, /* actual samples transferred per second */ + 128000, /* bits transferred per second */ + ms_per_frame, /* number of microseconds per frame */ + samples_per_frame, /* number of samples per frame */ + bytes_per_frame, /* number of bytes per frame decompressed */ + bytes_per_frame, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_raw_init, /* function to initialize a codec handle using this implementation */ + switch_raw_encode, /* function to encode raw data into encoded data */ + switch_raw_decode, /* function to decode encoded data into raw data */ + switch_raw_destroy); /* deinitalize a codec handle using this implementation */ + + samples_per_frame += 8; + bytes_per_frame += 16; + ms_per_frame += 2000; + + } + + + + samples_per_frame = 16; + bytes_per_frame = 32; + ms_per_frame = 2000; + + for (x = 0; x < 5; x++) { + switch_core_codec_add_implementation(pool, codec_interface, + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 10, /* the IANA code number */ + "L16", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 16000, /* samples transferred per second */ + 16000, /* actual samples transferred per second */ + 256000, /* bits transferred per second */ + ms_per_frame, /* number of microseconds per frame */ + samples_per_frame, /* number of samples per frame */ + bytes_per_frame, /* number of bytes per frame decompressed */ + bytes_per_frame, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_raw_init, /* function to initialize a codec handle using this implementation */ + switch_raw_encode, /* function to encode raw data into encoded data */ + switch_raw_decode, /* function to decode encoded data into raw data */ + switch_raw_destroy); /* deinitalize a codec handle using this implementation */ + + samples_per_frame += 16; + bytes_per_frame += 32; + ms_per_frame += 2000; + + } + + + samples_per_frame = 32; + bytes_per_frame = 64; + ms_per_frame = 2000; + + for (x = 0; x < 5; x++) { + switch_core_codec_add_implementation(pool, codec_interface, + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 10, /* the IANA code number */ + "L16", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 32000, /* samples transferred per second */ + 32000, /* actual samples transferred per second */ + 512000, /* bits transferred per second */ + ms_per_frame, /* number of microseconds per frame */ + samples_per_frame, /* number of samples per frame */ + bytes_per_frame, /* number of bytes per frame decompressed */ + bytes_per_frame, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_raw_init, /* function to initialize a codec handle using this implementation */ + switch_raw_encode, /* function to encode raw data into encoded data */ + switch_raw_decode, /* function to decode encoded data into raw data */ + switch_raw_destroy); /* deinitalize a codec handle using this implementation */ + + samples_per_frame += 32; + bytes_per_frame += 64; + ms_per_frame += 2000; + + } + + switch_core_codec_add_implementation(pool, codec_interface, + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 118, /* the IANA code number */ + "L16", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 48000, /* samples transferred per second */ + 48000, /* actual samples transferred per second */ + 768000, /* bits transferred per second */ + 20000, /* number of microseconds per frame */ + 960, /* number of samples per frame */ + 1920, /* number of bytes per frame decompressed */ + 1920, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_raw_init, /* function to initialize a codec handle using this implementation */ + switch_raw_encode, /* function to encode raw data into encoded data */ + switch_raw_decode, /* function to decode encoded data into raw data */ + switch_raw_destroy); /* deinitalize a codec handle using this implementation */ + switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_AUDIO, 118, "L16", NULL, 22050, 22050, 352800, - 20000, 441, 882, 882, 1, 1, switch_raw_init, switch_raw_encode, switch_raw_decode, switch_raw_destroy); + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 118, /* the IANA code number */ + "L16", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 22050, /* samples transferred per second */ + 22050, /* actual samples transferred per second */ + 352800, /* bits transferred per second */ + 20000, /* number of microseconds per frame */ + 441, /* number of samples per frame */ + 882, /* number of bytes per frame decompressed */ + 882, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_raw_init, /* function to initialize a codec handle using this implementation */ + switch_raw_encode, /* function to encode raw data into encoded data */ + switch_raw_decode, /* function to decode encoded data into raw data */ + switch_raw_destroy); /* deinitalize a codec handle using this implementation */ switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_AUDIO, 118, "L16", NULL, 11025, 11025, 176400, - 40000, 441, 882, 882, 1, 1, switch_raw_init, switch_raw_encode, switch_raw_decode, switch_raw_destroy); + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 118, /* the IANA code number */ + "L16", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 11025, /* samples transferred per second */ + 11025, /* actual samples transferred per second */ + 176400, /* bits transferred per second */ + 40000, /* number of microseconds per frame */ + 441, /* number of samples per frame */ + 882, /* number of bytes per frame decompressed */ + 882, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_raw_init, /* function to initialize a codec handle using this implementation */ + switch_raw_encode, /* function to encode raw data into encoded data */ + switch_raw_decode, /* function to decode encoded data into raw data */ + switch_raw_destroy); /* deinitalize a codec handle using this implementation */ Modified: freeswitch/trunk/src/switch_time.c ============================================================================== --- freeswitch/trunk/src/switch_time.c (original) +++ freeswitch/trunk/src/switch_time.c Tue Dec 16 20:53:46 2008 @@ -44,7 +44,9 @@ #endif #define MAX_TICK UINT32_MAX - 1024 -#define MS_PER_TICK 10 + +static int MS_PER_TICK = 10; + static switch_memory_pool_t *module_pool = NULL; static struct { @@ -252,6 +254,11 @@ private_info->start = private_info->reference = TIMER_MATRIX[timer->interval].tick; private_info->roll = TIMER_MATRIX[timer->interval].roll; private_info->ready = 1; + + if (timer->interval < MS_PER_TICK) { + MS_PER_TICK = timer->interval; + } + return SWITCH_STATUS_SUCCESS; } @@ -319,7 +326,7 @@ #endif timer_step(timer); - + while (globals.RUNNING == 1 && private_info->ready && TIMER_MATRIX[timer->interval].tick < private_info->reference) { check_roll(); if (globals.use_cond_yield == 1) { @@ -506,6 +513,7 @@ } #endif + if ((current_ms % MS_PER_TICK) == 0) { for (x = MS_PER_TICK; x <= MAX_ELEMENTS; x += MS_PER_TICK) { if ((current_ms % x) == 0) { @@ -525,6 +533,7 @@ } } } + if (current_ms == MAX_ELEMENTS) { current_ms = 0; } From anthm at freeswitch.org Tue Dec 16 17:55:06 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 20:55:06 -0500 Subject: [Freeswitch-trunk] [commit] r10842 - freeswitch/trunk/build Message-ID: Author: anthm Date: Tue Dec 16 20:55:06 2008 New Revision: 10842 Log: add mod_celt Modified: freeswitch/trunk/build/modules.conf.in Modified: freeswitch/trunk/build/modules.conf.in ============================================================================== --- freeswitch/trunk/build/modules.conf.in (original) +++ freeswitch/trunk/build/modules.conf.in Tue Dec 16 20:55:06 2008 @@ -28,6 +28,7 @@ codecs/mod_ilbc codecs/mod_speex #codecs/mod_siren +#codecs/mod_celt #dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml dialplans/mod_dialplan_asterisk From brian at freeswitch.org Tue Dec 16 19:39:09 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 22:39:09 -0500 Subject: [Freeswitch-trunk] [commit] r10843 - freeswitch/trunk/src Message-ID: Author: brian Date: Tue Dec 16 22:39:09 2008 New Revision: 10843 Log: finish filling out the info for the codec stuff for reference in the future Modified: freeswitch/trunk/src/switch_pcm.c Modified: freeswitch/trunk/src/switch_pcm.c ============================================================================== --- freeswitch/trunk/src/switch_pcm.c (original) +++ freeswitch/trunk/src/switch_pcm.c Tue Dec 16 22:39:09 2008 @@ -330,15 +330,44 @@ SWITCH_ADD_CODEC(codec_interface, "PROXY VIDEO PASS-THROUGH"); switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_VIDEO, 31, "PROXY-VID", NULL, 90000, 90000, 0, - 0, 0, 0, 0, 1, 1, switch_proxy_init, switch_proxy_encode, switch_proxy_decode, switch_proxy_destroy); + SWITCH_CODEC_TYPE_VIDEO, /* enumeration defining the type of the codec */ + 31, /* the IANA code number */ + "PROXY-VID", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 90000, /* samples transferred per second */ + 90000, /* actual samples transferred per second */ + 0, /* bits transferred per second */ + 0, /* number of microseconds per frame */ + 0, /* number of samples per frame */ + 0, /* number of bytes per frame decompressed */ + 0, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_proxy_init, /* function to initialize a codec handle using this implementation */ + switch_proxy_encode, /* function to encode raw data into encoded data */ + switch_proxy_decode, /* function to encode raw data into encoded data */ + switch_proxy_destroy); /* deinitalize a codec handle using this implementation */ SWITCH_ADD_CODEC(codec_interface, "PROXY PASS-THROUGH"); switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_AUDIO, 0, "PROXY", NULL, 8000, 8000, 0, - 20000, 160, 320, 320, 1, 1, - switch_proxy_init, switch_proxy_encode, switch_proxy_decode, switch_proxy_destroy); + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 0, /* the IANA code number */ + "PROXY", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 8000, /* samples transferred per second */ + 8000, /* actual samples transferred per second */ + 0, /* bits transferred per second */ + 20000, /* number of microseconds per frame */ + 160, /* number of samples per frame */ + 320, /* number of bytes per frame decompressed */ + 320, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_proxy_init, /* function to initialize a codec handle using this implementation */ + switch_proxy_encode, /* function to encode raw data into encoded data */ + switch_proxy_decode, /* function to decode encoded data into raw data */ + switch_proxy_destroy); /* deinitalize a codec handle using this implementation */ SWITCH_ADD_CODEC(codec_interface, "RAW Signed Linear (16 bit)"); From brian at freeswitch.org Tue Dec 16 19:42:56 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 22:42:56 -0500 Subject: [Freeswitch-trunk] [commit] r10844 - freeswitch/trunk/src/mod/codecs/mod_amr Message-ID: Author: brian Date: Tue Dec 16 22:42:56 2008 New Revision: 10844 Log: more codec docs Modified: freeswitch/trunk/src/mod/codecs/mod_amr/mod_amr.c Modified: freeswitch/trunk/src/mod/codecs/mod_amr/mod_amr.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_amr/mod_amr.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_amr/mod_amr.c Tue Dec 16 22:42:56 2008 @@ -320,8 +320,24 @@ SWITCH_ADD_CODEC(codec_interface, "AMR"); switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_AUDIO, 96, "AMR", "octet-align=0", 8000, 8000, 12200, 20000, 160, 320, 0, 1, 1, - switch_amr_init, switch_amr_encode, switch_amr_decode, switch_amr_destroy); + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 96, /* the IANA code number */ + "AMR", /* the IANA code name */ + "octet-align=0", /* default fmtp to send (can be overridden by the init function) */ + 8000, /* samples transferred per second */ + 8000, /* actual samples transferred per second */ + 12200, /* bits transferred per second */ + 20000, /* number of microseconds per frame */ + 160, /* number of samples per frame */ + 320, /* number of bytes per frame decompressed */ + 0, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 1, /* number of frames per network packet */ + switch_amr_init, /* function to initialize a codec handle using this implementation */ + switch_amr_encode, /* function to encode raw data into encoded data */ + switch_amr_decode, /* function to decode encoded data into raw data */ + switch_amr_destroy); /* deinitalize a codec handle using this implementation */ + /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_SUCCESS; } From brian at freeswitch.org Tue Dec 16 19:46:41 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 22:46:41 -0500 Subject: [Freeswitch-trunk] [commit] r10845 - freeswitch/trunk/src/mod/codecs/mod_voipcodecs Message-ID: Author: brian Date: Tue Dec 16 22:46:41 2008 New Revision: 10845 Log: more docs Modified: freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c Modified: freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c Tue Dec 16 22:46:41 2008 @@ -881,8 +881,23 @@ #if SWITCH_MAX_INTERVAL >= 90 SWITCH_ADD_CODEC(codec_interface, "LPC-10"); switch_core_codec_add_implementation(pool, codec_interface, - SWITCH_CODEC_TYPE_AUDIO, 7, "LPC", NULL, 8000, 8000, 2400, - 90000, 720, 1440, 28, 1, 4, switch_lpc10_init, switch_lpc10_encode, switch_lpc10_decode, switch_lpc10_destroy); + SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ + 7, /* the IANA code number */ + "LPC", /* the IANA code name */ + NULL, /* default fmtp to send (can be overridden by the init function) */ + 8000, /* samples transferred per second */ + 8000, /* actual samples transferred per second */ + 2400, /* bits transferred per second */ + 90000, /* number of microseconds per frame */ + 720, /* number of samples per frame */ + 1440, /* number of bytes per frame decompressed */ + 28, /* number of bytes per frame compressed */ + 1, /* number of channels represented */ + 4, /* number of frames per network packet */ + switch_lpc10_init, /* function to initialize a codec handle using this implementation */ + switch_lpc10_encode, /* function to encode raw data into encoded data */ + switch_lpc10_decode, /* function to decode encoded data into raw data */ + switch_lpc10_destroy); /* deinitalize a codec handle using this implementation */ #endif /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_SUCCESS; From mikej at freeswitch.org Tue Dec 16 20:29:48 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 16 Dec 2008 23:29:48 -0500 Subject: [Freeswitch-trunk] [commit] r10846 - freeswitch/trunk/src/mod/applications/mod_limit Message-ID: Author: mikej Date: Tue Dec 16 23:29:48 2008 New Revision: 10846 Log: fix segfault on invalid usage Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c (original) +++ freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Tue Dec 16 23:29:48 2008 @@ -439,6 +439,9 @@ argv[3]); } else if (!strcasecmp(argv[0], "delete")) { sql = switch_mprintf("delete from db_data where realm='%q' and data_key='%q'", argv[1], argv[2]); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "USAGE: db %s\n", DB_USAGE); + return; } switch_assert(sql); From anthm at freeswitch.org Wed Dec 17 06:21:54 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 09:21:54 -0500 Subject: [Freeswitch-trunk] [commit] r10848 - freeswitch/trunk/src/mod/applications/mod_conference Message-ID: Author: anthm Date: Wed Dec 17 09:21:53 2008 New Revision: 10848 Log: allow conf command from dp Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c (original) +++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Wed Dec 17 09:21:53 2008 @@ -3729,10 +3729,6 @@ cmd = "help"; } - if (session) { - return SWITCH_STATUS_FALSE; - } - if (stream->param_event) { http = switch_event_get_header(stream->param_event, "http-host"); } From brian at freeswitch.org Wed Dec 17 07:20:33 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 10:20:33 -0500 Subject: [Freeswitch-trunk] [commit] r10850 - freeswitch/trunk/conf/autoload_configs Message-ID: Author: brian Date: Wed Dec 17 10:20:32 2008 New Revision: 10850 Log: no 48k flite Modified: freeswitch/trunk/conf/autoload_configs/conference.conf.xml Modified: freeswitch/trunk/conf/autoload_configs/conference.conf.xml ============================================================================== --- freeswitch/trunk/conf/autoload_configs/conference.conf.xml (original) +++ freeswitch/trunk/conf/autoload_configs/conference.conf.xml Wed Dec 17 10:20:32 2008 @@ -172,8 +172,6 @@ - - --> From anthm at freeswitch.org Wed Dec 17 07:35:41 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 10:35:41 -0500 Subject: [Freeswitch-trunk] [commit] r10851 - freeswitch/trunk/src/mod/languages/mod_spidermonkey Message-ID: Author: anthm Date: Wed Dec 17 10:35:40 2008 New Revision: 10851 Log: fix seg in js Modified: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Modified: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c (original) +++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Wed Dec 17 10:35:40 2008 @@ -1778,6 +1778,8 @@ struct js_session *jss = JS_GetPrivate(cx, obj); switch_channel_t *channel; + METHOD_SANITY_CHECK(); + channel = switch_core_session_get_channel(jss->session); if (argc > 1) { @@ -1799,10 +1801,7 @@ struct js_session *jss = JS_GetPrivate(cx, obj); switch_channel_t *channel; - if (!jss || !jss->session) { - *rval = BOOLEAN_TO_JSVAL(JS_FALSE); - return JS_TRUE; - } + METHOD_SANITY_CHECK(); channel = switch_core_session_get_channel(jss->session); From mikej at freeswitch.org Wed Dec 17 09:02:47 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 12:02:47 -0500 Subject: [Freeswitch-trunk] [commit] r10852 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: mikej Date: Wed Dec 17 12:02:46 2008 New Revision: 10852 Log: MODENDP-163 fix info dtmf support on some devices that do not send it properly Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Wed Dec 17 12:02:46 2008 @@ -3516,7 +3516,7 @@ int tmp; /* move signal_ptr where we need it (right past Signal=) */ signal_ptr = signal_ptr + 7; - if (*signal_ptr && strlen(signal_ptr) == 1 && is_dtmf(*signal_ptr)) { + if (*signal_ptr && (*signal_ptr == '*' || *signal_ptr == '#' || *signal_ptr == 'A' || *signal_ptr == 'B' || *signal_ptr == 'C' || *signal_ptr == 'D')) { dtmf.digit = *signal_ptr; } else { tmp = atoi(signal_ptr); From ericdc at freeswitch.org Wed Dec 17 11:36:18 2008 From: ericdc at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 14:36:18 -0500 Subject: [Freeswitch-trunk] [commit] r10856 - freeswitch/trunk/src/mod/applications/mod_http Message-ID: Author: ericdc Date: Wed Dec 17 14:36:15 2008 New Revision: 10856 Log: Fixed json validation error. Modified: freeswitch/trunk/src/mod/applications/mod_http/mod_http.c Modified: freeswitch/trunk/src/mod/applications/mod_http/mod_http.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_http/mod_http.c (original) +++ freeswitch/trunk/src/mod/applications/mod_http/mod_http.c Wed Dec 17 14:36:15 2008 @@ -1,37 +1,3 @@ -/* - * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * Copyright (C) 2008, Eric des Courtis - * - * 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. - * - * Eric des Courtis - * Copyright (C) Benbria. All Rights Reserved. - * - * Contributor(s): - * - * Eric des Courtis - * - * - * mod_http.c -- HTTP client implementation for FreeSWITCH - * - * The purpose is to provide laguages like LUA with a _fast_ HTTP - * client implementation. - * - * Support for SSL will be provided in future versions. - * Initial release does not include win32 support. - * - */ - #include #include #include @@ -174,6 +140,12 @@ GARBAGE_ADD(request.url); strcpy(request.url, url); json_http_headers = json_tokener_parse(headers_str); + if(is_error(json_http_headers)){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; + } i = 0; json_object_object_foreach(json_http_headers, key, val){ From ericdc at freeswitch.org Wed Dec 17 11:40:38 2008 From: ericdc at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 14:40:38 -0500 Subject: [Freeswitch-trunk] [commit] r10857 - freeswitch/trunk/src/mod/applications/mod_http Message-ID: Author: ericdc Date: Wed Dec 17 14:40:37 2008 New Revision: 10857 Log: Re added missing file header Modified: freeswitch/trunk/src/mod/applications/mod_http/mod_http.c Modified: freeswitch/trunk/src/mod/applications/mod_http/mod_http.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_http/mod_http.c (original) +++ freeswitch/trunk/src/mod/applications/mod_http/mod_http.c Wed Dec 17 14:40:37 2008 @@ -1,3 +1,38 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2008, Eric des Courtis + * + * 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. + * + * Eric des Courtis + * Copyright (C) Benbria. All Rights Reserved. + * + * Contributor(s): + * + * Eric des Courtis + * + * + * mod_http.c -- HTTP client implementation for FreeSWITCH + * + * The purpose is to provide laguages like LUA with a _fast_ HTTP + * client implementation. + * + * Support for SSL will be provided in future versions. + * Initial release does not include win32 support. + * + */ + + #include #include #include From anthm at freeswitch.org Wed Dec 17 12:43:14 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 15:43:14 -0500 Subject: [Freeswitch-trunk] [commit] r10858 - freeswitch/trunk/src Message-ID: Author: anthm Date: Wed Dec 17 15:43:13 2008 New Revision: 10858 Log: fix bottleneck in sql thread Modified: freeswitch/trunk/src/switch_core_db.c freeswitch/trunk/src/switch_core_sqldb.c Modified: freeswitch/trunk/src/switch_core_db.c ============================================================================== --- freeswitch/trunk/src/switch_core_db.c (original) +++ freeswitch/trunk/src/switch_core_db.c Wed Dec 17 15:43:13 2008 @@ -86,7 +86,7 @@ if (ret == SQLITE_BUSY || ret == SQLITE_LOCKED) { if (sane > 1) { switch_safe_free(err); - switch_yield(20000); + switch_cond_next(); continue; } } else { Modified: freeswitch/trunk/src/switch_core_sqldb.c ============================================================================== --- freeswitch/trunk/src/switch_core_sqldb.c (original) +++ freeswitch/trunk/src/switch_core_sqldb.c Wed Dec 17 15:43:13 2008 @@ -38,7 +38,7 @@ static struct { switch_core_db_t *db; switch_core_db_t *event_db; - switch_queue_t *sql_queue; + switch_queue_t *sql_queue[2]; switch_memory_pool_t *memory_pool; int thread_running; } sql_manager; @@ -61,7 +61,7 @@ while (begin_retries > 0) { again = 0; - switch_core_db_exec(db, "begin transaction", NULL, NULL, &errmsg); + switch_core_db_exec(db, "BEGIN", NULL, NULL, &errmsg); if (errmsg) { begin_retries--; @@ -74,7 +74,7 @@ errmsg = NULL; if (again) { - switch_core_db_exec(db, "end transaction", NULL, NULL, NULL); + switch_core_db_exec(db, "COMMIT", NULL, NULL, NULL); goto again; } @@ -109,7 +109,7 @@ done: - switch_core_db_exec(db, "end transaction", NULL, NULL, NULL); + switch_core_db_exec(db, "COMMIT", NULL, NULL, NULL); return status; } @@ -151,13 +151,13 @@ void *pop; uint32_t itterations = 0; uint8_t trans = 0, nothing_in_queue = 0; - uint32_t target = 1000; + uint32_t target = 50000; switch_size_t len = 0, sql_len = SQLLEN; char *tmp, *sqlbuf = (char *) malloc(sql_len); char *sql; switch_size_t newlen; int lc = 0; - + switch_assert(sqlbuf); if (!sql_manager.event_db) { @@ -167,7 +167,8 @@ sql_manager.thread_running = 1; for (;;) { - if (switch_queue_trypop(sql_manager.sql_queue, &pop) == SWITCH_STATUS_SUCCESS) { + if (switch_queue_trypop(sql_manager.sql_queue[0], &pop) == SWITCH_STATUS_SUCCESS || + switch_queue_trypop(sql_manager.sql_queue[1], &pop) == SWITCH_STATUS_SUCCESS) { sql = (char *) pop; if (sql) { @@ -201,9 +202,9 @@ } else { nothing_in_queue = 1; } - - - if (trans && ((itterations == target) || nothing_in_queue)) { + + + if (trans && ((itterations == target) || (nothing_in_queue && ++lc >= 500))) { if (switch_core_db_persistant_execute_trans(sql_manager.event_db, sqlbuf, 100) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "SQL thread unable to commit transaction, records lost!\n"); } @@ -212,19 +213,19 @@ nothing_in_queue = 0; len = 0; *sqlbuf = '\0'; - } - - if (++lc == 300000) { - switch_core_db_exec(sql_manager.db, "vacuum;", NULL, NULL, NULL); lc = 0; } - + if (nothing_in_queue) { switch_cond_next(); } } - while (switch_queue_trypop(sql_manager.sql_queue, &pop) == SWITCH_STATUS_SUCCESS) { + while (switch_queue_trypop(sql_manager.sql_queue[0], &pop) == SWITCH_STATUS_SUCCESS) { + free(pop); + } + + while (switch_queue_trypop(sql_manager.sql_queue[1], &pop) == SWITCH_STATUS_SUCCESS) { free(pop); } @@ -288,17 +289,20 @@ sql = switch_mprintf ("update channels set read_codec='%q',read_rate='%q',write_codec='%q',write_rate='%q' where uuid='%q'", - switch_event_get_header_nil(event, "channel-read-codec-name"), switch_event_get_header_nil(event, - "channel-read-codec-rate"), - switch_event_get_header_nil(event, "channel-write-codec-name"), switch_event_get_header_nil(event, - "channel-write-codec-rate"), + switch_event_get_header_nil(event, "channel-read-codec-name"), + switch_event_get_header_nil(event, "channel-read-codec-rate"), + switch_event_get_header_nil(event, "channel-write-codec-name"), + switch_event_get_header_nil(event, "channel-write-codec-rate"), switch_event_get_header_nil(event, "unique-id")); break; case SWITCH_EVENT_CHANNEL_EXECUTE: sql = switch_mprintf("update channels set application='%q',application_data='%q' where uuid='%q'", switch_event_get_header_nil(event, "application"), - switch_event_get_header_nil(event, "application-data"), switch_event_get_header_nil(event, "unique-id") - ); + switch_event_get_header_nil(event, "application-data"), + switch_event_get_header_nil(event, "unique-id") + + ); + break; case SWITCH_EVENT_CHANNEL_STATE: { @@ -384,7 +388,11 @@ } if (sql) { - switch_queue_push(sql_manager.sql_queue, sql); + if (switch_stristr("update channels", sql)) { + switch_queue_push(sql_manager.sql_queue[1], sql); + } else { + switch_queue_push(sql_manager.sql_queue[0], sql); + } sql = NULL; } } @@ -442,7 +450,7 @@ " read_rate VARCHAR(255),\n" " write_codec VARCHAR(255),\n" " write_rate VARCHAR(255)\n" - ");\n"; + ");\ncreate index uuindex on channels (uuid);\n"; char create_calls_sql[] = "CREATE TABLE calls (\n" " created VARCHAR(255),\n" @@ -458,7 +466,9 @@ " callee_dest_num VARCHAR(255),\n" " callee_chan_name VARCHAR(255),\n" " callee_uuid VARCHAR(255)\n" - ");\n"; + ");\n" + "create index eruuindex on calls (caller_uuid);\n" + "create index eeuuindex on calls (callee_uuid);\n"; char create_interfaces_sql[] = "CREATE TABLE interfaces (\n" " type VARCHAR(255),\n" @@ -488,6 +498,17 @@ switch_core_db_test_reactive(sql_manager.db, "select sticky from aliases", "DROP TABLE aliases", create_alias_sql); switch_core_db_exec(sql_manager.db, "delete from complete where sticky=0", NULL, NULL, NULL); switch_core_db_exec(sql_manager.db, "delete from aliases where sticky=0", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists alias1 on aliases (alias)", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists complete1 on complete (a1)", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists complete2 on complete (a2)", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists complete3 on complete (a3)", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists complete4 on complete (a4)", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists complete5 on complete (a5)", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists complete6 on complete (a6)", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists complete7 on complete (a7)", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists complete8 on complete (a8)", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists complete9 on complete (a9)", NULL, NULL, NULL); + switch_core_db_exec(sql_manager.db, "create index if not exists complete10 on complete (a10)", NULL, NULL, NULL); switch_core_db_exec(sql_manager.db, create_channels_sql, NULL, NULL, NULL); switch_core_db_exec(sql_manager.db, create_calls_sql, NULL, NULL, NULL); switch_core_db_exec(sql_manager.db, create_interfaces_sql, NULL, NULL, NULL); @@ -497,12 +518,14 @@ } } - switch_queue_create(&sql_manager.sql_queue, SWITCH_SQL_QUEUE_LEN, sql_manager.memory_pool); + switch_queue_create(&sql_manager.sql_queue[0], SWITCH_SQL_QUEUE_LEN, sql_manager.memory_pool); + switch_queue_create(&sql_manager.sql_queue[1], SWITCH_SQL_QUEUE_LEN, sql_manager.memory_pool); switch_threadattr_create(&thd_attr, sql_manager.memory_pool); switch_threadattr_detach_set(thd_attr, 1); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); switch_thread_create(&thread, thd_attr, switch_core_sql_thread, NULL, sql_manager.memory_pool); + while (!sql_manager.thread_running) { switch_yield(10000); } @@ -510,10 +533,14 @@ void switch_core_sqldb_stop(void) { - switch_queue_push(sql_manager.sql_queue, NULL); + switch_queue_push(sql_manager.sql_queue[0], NULL); + switch_queue_push(sql_manager.sql_queue[1], NULL); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Waiting for unfinished SQL transactions\n"); - while (switch_queue_size(sql_manager.sql_queue) > 0) { + while (switch_queue_size(sql_manager.sql_queue[0]) > 0) { + switch_yield(10000); + } + while (switch_queue_size(sql_manager.sql_queue[1]) > 0) { switch_yield(10000); } From mikej at freeswitch.org Wed Dec 17 13:05:53 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 16:05:53 -0500 Subject: [Freeswitch-trunk] [commit] r10859 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: mikej Date: Wed Dec 17 16:05:52 2008 New Revision: 10859 Log: fix bottleneck in sql Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Wed Dec 17 16:05:52 2008 @@ -2981,6 +2981,34 @@ test_sql = switch_mprintf("delete from sip_authentication where hostname='%q'", mod_sofia_globals.hostname); switch_core_db_test_reactive(profile->master_db, test_sql, "DROP TABLE sip_authentication", auth_sql); free(test_sql); + + switch_core_db_exec(profile->master_db, "create index if not exists sr_call_id on sip_registrations (call_id)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sr_sip_user on sip_registrations (sip_user)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sr_sip_host on sip_registrations (sip_host)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sr_profile_name on sip_registrations (profile_name)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sr_presence_host on sip_registrations (presence_host)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sr_contact on sip_registrations (contact)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sr_expires on sip_registrations (expires)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sr_hostname on sip_registrations (hostname)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sr_status on sip_registrations (status)", NULL, NULL, NULL); + + switch_core_db_exec(profile->master_db, "create index if not exists ss_call_id on sip_subscriptions (call_id)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists ss_hostname on sip_subscriptions (hostname)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists ss_sip_user on sip_subscriptions (sip_user)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists ss_sip_host on sip_subscriptions (sip_host)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists ss_presence_host on sip_subscriptions (presence_host)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists ss_event on sip_subscriptions (event)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists ss_proto on sip_subscriptions (proto)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists ss_sub_to_user on sip_subscriptions (sub_to_user)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists ss_sub_to_host on sip_subscriptions (sub_to_host)", NULL, NULL, NULL); + + switch_core_db_exec(profile->master_db, "create index if not exists sd_uuid on sip_dialogs (uuid)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sd_hostname on sip_dialogs (hostname)", NULL, NULL, NULL); + + switch_core_db_exec(profile->master_db, "create index if not exists sp_hostname on sip_presence (hostname)", NULL, NULL, NULL); + + switch_core_db_exec(profile->master_db, "create index if not exists sa_nonce on sip_authentication (nonce)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sa_hostname on sip_authentication (hostname)", NULL, NULL, NULL); } #ifdef SWITCH_HAVE_ODBC From mikej at freeswitch.org Wed Dec 17 13:22:33 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 16:22:33 -0500 Subject: [Freeswitch-trunk] [commit] r10860 - freeswitch/trunk/src/mod/applications/mod_limit Message-ID: Author: mikej Date: Wed Dec 17 16:22:33 2008 New Revision: 10860 Log: indexes are good Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c (original) +++ freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Wed Dec 17 16:22:33 2008 @@ -239,6 +239,18 @@ switch_core_db_test_reactive(db, "select * from limit_data", NULL, limit_sql); switch_core_db_test_reactive(db, "select * from db_data", NULL, db_sql); switch_core_db_test_reactive(db, "select * from group_data", NULL, group_sql); + + switch_core_db_exec(db, "create index if not exists ld_hostname on limit_data (hostname)", NULL, NULL, NULL); + switch_core_db_exec(db, "create index if not exists ld_uuid on limit_data (uuid)", NULL, NULL, NULL); + switch_core_db_exec(db, "create index if not exists ld_realm on limit_data (realm)", NULL, NULL, NULL); + switch_core_db_exec(db, "create index if not exists ld_id on limit_data (id)", NULL, NULL, NULL); + + switch_core_db_exec(db, "create index if not exists dd_realm on db_data (realm)", NULL, NULL, NULL); + switch_core_db_exec(db, "create index if not exists dd_data_key on db_data (data_key)", NULL, NULL, NULL); + + switch_core_db_exec(db, "create index if not exists gd_groupname on group_data (groupname)", NULL, NULL, NULL); + switch_core_db_exec(db, "create index if not exists gd_url on group_data (url)", NULL, NULL, NULL); + } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open SQL Database!\n"); status = SWITCH_STATUS_FALSE; From anthm at freeswitch.org Wed Dec 17 13:50:34 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 16:50:34 -0500 Subject: [Freeswitch-trunk] [commit] r10861 - freeswitch/trunk/src Message-ID: Author: anthm Date: Wed Dec 17 16:50:34 2008 New Revision: 10861 Log: MODAPP-182 Modified: freeswitch/trunk/src/switch_core_io.c freeswitch/trunk/src/switch_ivr.c Modified: freeswitch/trunk/src/switch_core_io.c ============================================================================== --- freeswitch/trunk/src/switch_core_io.c (original) +++ freeswitch/trunk/src/switch_core_io.c Wed Dec 17 16:50:34 2008 @@ -539,6 +539,10 @@ switch_mutex_unlock(session->read_codec->mutex); switch_mutex_unlock(session->codec_read_mutex); + if (switch_core_session_private_event_count(session)) { + switch_ivr_parse_all_events(session); + } + return status; } Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Wed Dec 17 16:50:34 2008 @@ -539,6 +539,8 @@ { while (switch_ivr_parse_next_event(session) == SWITCH_STATUS_SUCCESS); + switch_ivr_sleep(session, 0, SWITCH_TRUE, NULL); + return SWITCH_STATUS_SUCCESS; } From anthm at freeswitch.org Wed Dec 17 14:13:24 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 17:13:24 -0500 Subject: [Freeswitch-trunk] [commit] r10862 - freeswitch/trunk/src Message-ID: Author: anthm Date: Wed Dec 17 17:13:24 2008 New Revision: 10862 Log: update Modified: freeswitch/trunk/src/switch_core_io.c Modified: freeswitch/trunk/src/switch_core_io.c ============================================================================== --- freeswitch/trunk/src/switch_core_io.c (original) +++ freeswitch/trunk/src/switch_core_io.c Wed Dec 17 17:13:24 2008 @@ -598,7 +598,10 @@ if (switch_test_flag(frame, SFF_PROXY_PACKET) || pass_cng) { /* Fast PASS! */ - return perform_write(session, frame, flag, stream_id); + switch_mutex_lock(session->codec_write_mutex); + status = perform_write(session, frame, flag, stream_id); + switch_mutex_unlock(session->codec_write_mutex); + return status; } switch_assert(frame->codec != NULL); From anthm at freeswitch.org Wed Dec 17 14:45:21 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 17:45:21 -0500 Subject: [Freeswitch-trunk] [commit] r10863 - freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr Message-ID: Author: anthm Date: Wed Dec 17 17:45:21 2008 New Revision: 10863 Log: avoiding seg Modified: freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c Wed Dec 17 17:45:21 2008 @@ -343,7 +343,9 @@ } } - if (profile->caller_extension && profile->caller_extension->last_application->application_name) { + if (profile->caller_extension && + profile->caller_extension->last_application && + profile->caller_extension->last_application->application_name) { if (rc_avpair_add(rad_config, &send, PW_FS_LASTAPP, (void *) profile->caller_extension->last_application->application_name, -1, PW_FS_PEC) == NULL) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed adding Freeswitch-Lastapp: %s\n", profile->source); From mikej at freeswitch.org Wed Dec 17 15:11:49 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 18:11:49 -0500 Subject: [Freeswitch-trunk] [commit] r10864 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: mikej Date: Wed Dec 17 18:11:49 2008 New Revision: 10864 Log: typo Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Wed Dec 17 18:11:49 2008 @@ -2986,7 +2986,7 @@ switch_core_db_exec(profile->master_db, "create index if not exists sr_sip_user on sip_registrations (sip_user)", NULL, NULL, NULL); switch_core_db_exec(profile->master_db, "create index if not exists sr_sip_host on sip_registrations (sip_host)", NULL, NULL, NULL); switch_core_db_exec(profile->master_db, "create index if not exists sr_profile_name on sip_registrations (profile_name)", NULL, NULL, NULL); - switch_core_db_exec(profile->master_db, "create index if not exists sr_presence_host on sip_registrations (presence_host)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists sr_presence_hosts on sip_registrations (presence_hosts)", NULL, NULL, NULL); switch_core_db_exec(profile->master_db, "create index if not exists sr_contact on sip_registrations (contact)", NULL, NULL, NULL); switch_core_db_exec(profile->master_db, "create index if not exists sr_expires on sip_registrations (expires)", NULL, NULL, NULL); switch_core_db_exec(profile->master_db, "create index if not exists sr_hostname on sip_registrations (hostname)", NULL, NULL, NULL); @@ -2996,7 +2996,7 @@ switch_core_db_exec(profile->master_db, "create index if not exists ss_hostname on sip_subscriptions (hostname)", NULL, NULL, NULL); switch_core_db_exec(profile->master_db, "create index if not exists ss_sip_user on sip_subscriptions (sip_user)", NULL, NULL, NULL); switch_core_db_exec(profile->master_db, "create index if not exists ss_sip_host on sip_subscriptions (sip_host)", NULL, NULL, NULL); - switch_core_db_exec(profile->master_db, "create index if not exists ss_presence_host on sip_subscriptions (presence_host)", NULL, NULL, NULL); + switch_core_db_exec(profile->master_db, "create index if not exists ss_presence_hosts on sip_subscriptions (presence_hosts)", NULL, NULL, NULL); switch_core_db_exec(profile->master_db, "create index if not exists ss_event on sip_subscriptions (event)", NULL, NULL, NULL); switch_core_db_exec(profile->master_db, "create index if not exists ss_proto on sip_subscriptions (proto)", NULL, NULL, NULL); switch_core_db_exec(profile->master_db, "create index if not exists ss_sub_to_user on sip_subscriptions (sub_to_user)", NULL, NULL, NULL); From ericdc at freeswitch.org Wed Dec 17 16:28:18 2008 From: ericdc at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 19:28:18 -0500 Subject: [Freeswitch-trunk] [commit] r10865 - freeswitch/trunk/src/mod/applications/mod_http Message-ID: Author: ericdc Date: Wed Dec 17 19:28:17 2008 New Revision: 10865 Log: Major update. Many bug fixes. Modified: freeswitch/trunk/src/mod/applications/mod_http/http_req.c freeswitch/trunk/src/mod/applications/mod_http/mod_http.c Modified: freeswitch/trunk/src/mod/applications/mod_http/http_req.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_http/http_req.c (original) +++ freeswitch/trunk/src/mod/applications/mod_http/http_req.c Wed Dec 17 19:28:17 2008 @@ -308,6 +308,29 @@ sm.buf = buf; sm.buf_len = buf_len; + fprintf( + stderr, + "ERRORS\n" + "VERSION = %d\n" + "STATUS_CODE = %d\n" + "PHRASE = %d\n" + "HEADER = %d\n" + "NEWLINE = %d\n" + "SYNTAX_ERROR = %d\n", + VERSION, + STATUS_CODE, + PHRASE, + HEADER, + NEWLINE, + SYNTAX_ERROR + ); + + fprintf( + stderr, + "buf = \"%s\"\n", + buf + ); + pos = sm.pos; token = get_next_token(&sm); if(token != VERSION){ @@ -379,7 +402,13 @@ if(token != HEADER && token != PHRASE && token != STATUS_CODE) break; }while(token != SYNTAX_ERROR); - + + fprintf( + stderr, + "HEADERS = %d\n", + nt + ); + if(nt != 0){ response->headers = (http_header_t *)malloc(sizeof(http_header_t)*nt); if(response->headers == NULL){ @@ -441,7 +470,6 @@ return ERROR; } - response->body = (char *)malloc((buf_len - sm.pos + 1) * sizeof(char)); if(response->body == NULL){ perror("Could not allocate memory for body"); Modified: freeswitch/trunk/src/mod/applications/mod_http/mod_http.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_http/mod_http.c (original) +++ freeswitch/trunk/src/mod/applications/mod_http/mod_http.c Wed Dec 17 19:28:17 2008 @@ -96,6 +96,7 @@ char *buf; char *method; char *url; + char *headers_dec; char *headers_str; char *value; char *body; @@ -132,11 +133,19 @@ if(argc != HTTP_PARAMS && argc != (HTTP_PARAMS - 1)){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n"); + stream->write_function(stream, "-ERR\n1\n"); return SWITCH_STATUS_SUCCESS; } method = argv[0]; + if(strcasecmp( "GET", method) == 0) request.method = GET; + else if(strcasecmp("POST", method) == 0) request.method = POST; + else if(strcasecmp("HEAD", method) == 0) request.method = HEAD; + else if(strcasecmp("DELETE", method) == 0) request.method = DELETE; + else if(strcasecmp("PUT", method) == 0) request.method = PUT; + + + url = argv[1]; headers_str = argv[2]; if(argc == HTTP_PARAMS){ @@ -145,7 +154,7 @@ body = (char *)malloc(1 * sizeof(char)); if(body == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n"); + stream->write_function(stream, "-ERR\n2\n"); return SWITCH_STATUS_SUCCESS; } body[0] = '\0'; @@ -155,7 +164,7 @@ buf = (char *)malloc(HTTP_BUFFER_SIZE * sizeof(char)); if(buf == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n"); + stream->write_function(stream, "-ERR\n3\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } @@ -167,50 +176,63 @@ request.url = (char *)malloc((l + 1) * sizeof(char)); if(request.url == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n"); + stream->write_function(stream, "-ERR\n4\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } GARBAGE_ADD(request.url); strcpy(request.url, url); - json_http_headers = json_tokener_parse(headers_str); + + + l = strlen(headers_str); + + headers_dec = url_decode(headers_str, l); + GARBAGE_ADD(headers_dec); + + json_http_headers = json_tokener_parse(headers_dec); if(is_error(json_http_headers)){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n"); + stream->write_function(stream, "-ERR\n5\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } + i = 0; json_object_object_foreach(json_http_headers, key, val){ i++; } request.header_len = i; - headers = (http_header_t *)malloc(i * sizeof(http_header_t)); + headers = (http_header_t *)malloc(i * sizeof(http_header_t)); + request.headers = headers; GARBAGE_ADD(headers); i = 0; json_object_object_foreach(json_http_headers, key, val){ l = strlen(key); + request.headers[i].field_name = (char *)malloc((l + 1) * sizeof(char)); if(request.headers[i].field_name == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n"); + stream->write_function(stream, "-ERR\n6\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } + GARBAGE_ADD(request.headers[i].field_name); + strcpy(request.headers[i].field_name, key); a += strlen(key); - value = json_object_to_json_string(val); + value = json_object_get_string(val); + /* value = json_object_to_json_string(val); */ l = strlen(value); request.headers[i].value = (char *)malloc((l + 1) * sizeof(char)); if(request.headers[i].value == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n"); + stream->write_function(stream, "-ERR\n7\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } @@ -230,6 +252,7 @@ }else request.body_len = 0; ret = http_req(&request, &response); + if(response.version != NULL) GARBAGE_ADD(response.version); if(response.phrase != NULL) GARBAGE_ADD(response.phrase); if(response.headers != NULL) GARBAGE_ADD(response.headers); @@ -242,7 +265,7 @@ if(ret == ERROR){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n"); + stream->write_function(stream, "-ERR\n8\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } @@ -262,7 +285,7 @@ json_response = (char *)malloc(l * sizeof(char)); if(json_response == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n"); + stream->write_function(stream, "-ERR\n9\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } @@ -272,7 +295,7 @@ t = (char *)malloc((response.body_len + 1) * sizeof(char)); if(t == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n"); + stream->write_function(stream, "-ERR\n10\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } From ericdc at freeswitch.org Wed Dec 17 16:31:07 2008 From: ericdc at freeswitch.org (FreeSWITCH SVN) Date: Wed, 17 Dec 2008 19:31:07 -0500 Subject: [Freeswitch-trunk] [commit] r10866 - freeswitch/trunk/src/mod/applications/mod_http Message-ID: Author: ericdc Date: Wed Dec 17 19:31:07 2008 New Revision: 10866 Log: Removed debug information. Modified: freeswitch/trunk/src/mod/applications/mod_http/http_req.c Modified: freeswitch/trunk/src/mod/applications/mod_http/http_req.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_http/http_req.c (original) +++ freeswitch/trunk/src/mod/applications/mod_http/http_req.c Wed Dec 17 19:31:07 2008 @@ -308,29 +308,6 @@ sm.buf = buf; sm.buf_len = buf_len; - fprintf( - stderr, - "ERRORS\n" - "VERSION = %d\n" - "STATUS_CODE = %d\n" - "PHRASE = %d\n" - "HEADER = %d\n" - "NEWLINE = %d\n" - "SYNTAX_ERROR = %d\n", - VERSION, - STATUS_CODE, - PHRASE, - HEADER, - NEWLINE, - SYNTAX_ERROR - ); - - fprintf( - stderr, - "buf = \"%s\"\n", - buf - ); - pos = sm.pos; token = get_next_token(&sm); if(token != VERSION){ @@ -403,12 +380,6 @@ if(token != HEADER && token != PHRASE && token != STATUS_CODE) break; }while(token != SYNTAX_ERROR); - fprintf( - stderr, - "HEADERS = %d\n", - nt - ); - if(nt != 0){ response->headers = (http_header_t *)malloc(sizeof(http_header_t)*nt); if(response->headers == NULL){ From ericdc at freeswitch.org Thu Dec 18 07:07:55 2008 From: ericdc at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 10:07:55 -0500 Subject: [Freeswitch-trunk] [commit] r10868 - freeswitch/trunk/src/mod/applications/mod_http Message-ID: Author: ericdc Date: Thu Dec 18 10:07:54 2008 New Revision: 10868 Log: Fixed json validation. Modified: freeswitch/trunk/src/mod/applications/mod_http/mod_http.c Modified: freeswitch/trunk/src/mod/applications/mod_http/mod_http.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_http/mod_http.c (original) +++ freeswitch/trunk/src/mod/applications/mod_http/mod_http.c Thu Dec 18 10:07:54 2008 @@ -106,6 +106,7 @@ struct json_object *json_http_headers; char *key; struct json_object *val; + enum json_type jsontype; struct lh_entry *entry; int i; int j; @@ -133,7 +134,7 @@ if(argc != HTTP_PARAMS && argc != (HTTP_PARAMS - 1)){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n1\n"); + stream->write_function(stream, "-ERR\n"); return SWITCH_STATUS_SUCCESS; } @@ -154,7 +155,7 @@ body = (char *)malloc(1 * sizeof(char)); if(body == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n2\n"); + stream->write_function(stream, "-ERR\n"); return SWITCH_STATUS_SUCCESS; } body[0] = '\0'; @@ -164,7 +165,7 @@ buf = (char *)malloc(HTTP_BUFFER_SIZE * sizeof(char)); if(buf == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n3\n"); + stream->write_function(stream, "-ERR\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } @@ -176,7 +177,7 @@ request.url = (char *)malloc((l + 1) * sizeof(char)); if(request.url == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n4\n"); + stream->write_function(stream, "-ERR\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } @@ -193,12 +194,19 @@ json_http_headers = json_tokener_parse(headers_dec); if(is_error(json_http_headers)){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n5\n"); + stream->write_function(stream, "-ERR\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } - + jsontype = json_object_get_type(json_http_headers); + if(jsontype != json_type_object){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; + } + i = 0; json_object_object_foreach(json_http_headers, key, val){ i++; @@ -216,7 +224,7 @@ request.headers[i].field_name = (char *)malloc((l + 1) * sizeof(char)); if(request.headers[i].field_name == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n6\n"); + stream->write_function(stream, "-ERR\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } @@ -226,13 +234,21 @@ strcpy(request.headers[i].field_name, key); a += strlen(key); + jsontype = json_object_get_type(val); + if(jsontype != json_type_string){ + switch_safe_free(ccmd); + stream->write_function(stream, "-ERR\n"); + GARBAGE_CLEANUP(); + return SWITCH_STATUS_SUCCESS; + } + value = json_object_get_string(val); /* value = json_object_to_json_string(val); */ l = strlen(value); request.headers[i].value = (char *)malloc((l + 1) * sizeof(char)); if(request.headers[i].value == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n7\n"); + stream->write_function(stream, "-ERR\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } @@ -265,7 +281,7 @@ if(ret == ERROR){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n8\n"); + stream->write_function(stream, "-ERR\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } @@ -285,7 +301,7 @@ json_response = (char *)malloc(l * sizeof(char)); if(json_response == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n9\n"); + stream->write_function(stream, "-ERR\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } @@ -295,7 +311,7 @@ t = (char *)malloc((response.body_len + 1) * sizeof(char)); if(t == NULL){ switch_safe_free(ccmd); - stream->write_function(stream, "-ERR\n10\n"); + stream->write_function(stream, "-ERR\n"); GARBAGE_CLEANUP(); return SWITCH_STATUS_SUCCESS; } From cparker at freeswitch.org Thu Dec 18 07:51:48 2008 From: cparker at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 10:51:48 -0500 Subject: [Freeswitch-trunk] [commit] r10869 - freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr Message-ID: Author: cparker Date: Thu Dec 18 10:51:48 2008 New Revision: 10869 Log: Fix potential seg_fault reported in MODEVENT-35 Modified: freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c Thu Dec 18 10:51:48 2008 @@ -554,7 +554,8 @@ goto end; } } - if (profile->caller_extension && profile->caller_extension->last_application->application_name) { + if (profile->caller_extension && profile->caller_extension->last_application && + profile->caller_extension->last_application->application_name) { if (rc_avpair_add(rad_config, &send, PW_FS_LASTAPP, (void *) profile->caller_extension->last_application->application_name, -1, PW_FS_PEC) == NULL) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed adding Freeswitch-Lastapp: %s\n", profile->source); From mikej at freeswitch.org Thu Dec 18 12:02:06 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 15:02:06 -0500 Subject: [Freeswitch-trunk] [commit] r10871 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: mikej Date: Thu Dec 18 15:02:05 2008 New Revision: 10871 Log: force -ggdb into sofia build Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/Makefile.am Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/Makefile.am ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/Makefile.am (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/Makefile.am Thu Dec 18 15:02:05 2008 @@ -44,7 +44,7 @@ $(mod_sofia_la_SOURCES) : $(BUILT_SOURCES) $(SOFIALA): $(SOFIA_DIR) $(SOFIA_DIR)/.update - cd $(SOFIA_DIR) && $(MAKE) + cd $(SOFIA_DIR) && $(MAKE) SOFIA_CFLAGS="$(AM_CFLAGS)" $(TOUCH_TARGET) ../../../../libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua_tag.h: $(SOFIALA) From anthm at freeswitch.org Thu Dec 18 12:33:21 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 15:33:21 -0500 Subject: [Freeswitch-trunk] [commit] r10873 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Thu Dec 18 15:33:21 2008 New Revision: 10873 Log: prevent seg in sofia dialog refresh on null dialog Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Thu Dec 18 15:33:21 2008 @@ -1210,7 +1210,9 @@ unsigned delta = (unsigned) (exptime * -1); switch_snprintf(sstr, sizeof(sstr), "active;expires=%u", delta); switch_snprintf(expires_str, sizeof(expires_str), "%u", delta); - nua_dialog_usage_set_refresh_range(nh->nh_ds->ds_usage, delta, delta); + if (nh && nh->nh_ds && nh->nh_ds->ds_usage) { + nua_dialog_usage_set_refresh_range(nh->nh_ds->ds_usage, delta, delta); + } } nua_notify(nh, @@ -1661,9 +1663,9 @@ } - - nua_dialog_usage_set_refresh_range(nh->nh_ds->ds_usage, exp_delta + SUB_OVERLAP, exp_delta + SUB_OVERLAP); - + if (nh && nh->nh_ds && nh->nh_ds->ds_usage) { + nua_dialog_usage_set_refresh_range(nh->nh_ds->ds_usage, exp_delta + SUB_OVERLAP, exp_delta + SUB_OVERLAP); + } nua_respond(nh, SIP_202_ACCEPTED, SIPTAG_CONTACT_STR(contact_str), NUTAG_WITH_THIS(nua), SIPTAG_SUBSCRIPTION_STATE_STR(sstr), From mikej at freeswitch.org Thu Dec 18 14:23:31 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 17:23:31 -0500 Subject: [Freeswitch-trunk] [commit] r10874 - freeswitch/trunk/libs/xmlrpc-c/Windows Message-ID: Author: mikej Date: Thu Dec 18 17:23:31 2008 New Revision: 10874 Log: fix build warnings. Modified: freeswitch/trunk/libs/xmlrpc-c/Windows/abyss.2008.vcproj freeswitch/trunk/libs/xmlrpc-c/Windows/xmlparse.2008.vcproj freeswitch/trunk/libs/xmlrpc-c/Windows/xmlrpc.2008.vcproj freeswitch/trunk/libs/xmlrpc-c/Windows/xmltok.2008.vcproj Modified: freeswitch/trunk/libs/xmlrpc-c/Windows/abyss.2008.vcproj ============================================================================== --- freeswitch/trunk/libs/xmlrpc-c/Windows/abyss.2008.vcproj (original) +++ freeswitch/trunk/libs/xmlrpc-c/Windows/abyss.2008.vcproj Thu Dec 18 17:23:31 2008 @@ -54,7 +54,7 @@ ProgramDataBaseFileName=".\Debug\abyss/" WarningLevel="3" SuppressStartupBanner="true" - DebugInformationFormat="4" + DebugInformationFormat="3" /> Author: mikej Date: Thu Dec 18 17:53:01 2008 New Revision: 10875 Log: MODAPP-181 add ability to skip greeting when leaving a voicemail. Modified: freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Modified: freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml ============================================================================== --- freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml (original) +++ freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml Thu Dec 18 17:53:01 2008 @@ -30,6 +30,7 @@ + Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original) +++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Thu Dec 18 17:53:01 2008 @@ -74,6 +74,7 @@ char play_saved_messages_key[2]; char main_menu_key[2]; + char skip_greet_key[2]; char config_menu_key[2]; char record_greeting_key[2]; char choose_greeting_key[2]; @@ -270,6 +271,7 @@ char *play_saved_messages_key = "2"; char *main_menu_key = "0"; + char *skip_greet_key = "#"; char *config_menu_key = "5"; char *record_greeting_key = "1"; char *choose_greeting_key = "2"; @@ -450,6 +452,8 @@ play_saved_messages_key = val; } else if (!strcasecmp(var, "main-menu-key") && !switch_strlen_zero(val)) { main_menu_key = val; + } else if (!strcasecmp(var, "skip-greet-key") && val && is_dtmf(*val)) { + skip_greet_key = val; } else if (!strcasecmp(var, "config-menu-key") && !switch_strlen_zero(val)) { config_menu_key = val; } else if (!strcasecmp(var, "record-greeting-key") && !switch_strlen_zero(val)) { @@ -717,6 +721,7 @@ *profile->play_new_messages_key = *play_new_messages_key; *profile->play_saved_messages_key = *play_saved_messages_key; *profile->main_menu_key = *main_menu_key; + *profile->skip_greet_key = *skip_greet_key; *profile->config_menu_key = *config_menu_key; *profile->record_greeting_key = *record_greeting_key; *profile->choose_greeting_key = *choose_greeting_key; @@ -1048,7 +1053,7 @@ record_file: *message_len = 0; - TRY_CODE(switch_ivr_phrase_macro(session, macro_name, NULL, NULL, NULL)); + if (macro_name) TRY_CODE(switch_ivr_phrase_macro(session, macro_name, NULL, NULL, NULL)); TRY_CODE(switch_ivr_gentones(session, profile->tone_spec, 0, NULL)); memset(&fh, 0, sizeof(fh)); @@ -2639,6 +2644,7 @@ switch_time_t ts = switch_timestamp_now(); char *dbuf = NULL; char *vm_storage_dir = NULL; + char *record_macro = VM_RECORD_MESSAGE_MACRO; int send_main = 0; int send_notify = 0; int insert_db = 1; @@ -2830,6 +2836,8 @@ goto end; } } + } else if (*profile->skip_greet_key && !strcasecmp(buf, profile->skip_greet_key)) { + record_macro = NULL; } else { goto greet; } @@ -2858,7 +2866,7 @@ switch_snprintf(key_buf, sizeof(key_buf), "%s:%s", profile->operator_key, profile->vmain_key); memset(buf, 0, sizeof(buf)); - status = create_file(session, profile, VM_RECORD_MESSAGE_MACRO, file_path, &message_len, SWITCH_TRUE, key_buf, buf); + status = create_file(session, profile, record_macro, file_path, &message_len, SWITCH_TRUE, key_buf, buf); if ((status == SWITCH_STATUS_NOTFOUND)) { goto end; From anthm at freeswitch.org Thu Dec 18 15:07:32 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 18:07:32 -0500 Subject: [Freeswitch-trunk] [commit] r10876 - in freeswitch/trunk/src: . include mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Thu Dec 18 18:07:32 2008 New Revision: 10876 Log: adjustment Modified: freeswitch/trunk/src/include/switch_core.h freeswitch/trunk/src/include/switch_utils.h freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c freeswitch/trunk/src/switch_core_codec.c freeswitch/trunk/src/switch_core_io.c Modified: freeswitch/trunk/src/include/switch_core.h ============================================================================== --- freeswitch/trunk/src/include/switch_core.h (original) +++ freeswitch/trunk/src/include/switch_core.h Thu Dec 18 18:07:32 2008 @@ -1165,6 +1165,12 @@ SWITCH_DECLARE(void) switch_core_session_unset_write_codec(_In_ switch_core_session_t *session); +SWITCH_DECLARE(void) switch_core_session_lock_codec_write(_In_ switch_core_session_t *session); +SWITCH_DECLARE(void) switch_core_session_unlock_codec_write(_In_ switch_core_session_t *session); +SWITCH_DECLARE(void) switch_core_session_lock_codec_read(_In_ switch_core_session_t *session); +SWITCH_DECLARE(void) switch_core_session_unlock_codec_read(_In_ switch_core_session_t *session); + + SWITCH_DECLARE(switch_status_t) switch_core_session_get_read_impl(switch_core_session_t *session, switch_codec_implementation_t *impp); SWITCH_DECLARE(switch_status_t) switch_core_session_get_write_impl(switch_core_session_t *session, switch_codec_implementation_t *impp); SWITCH_DECLARE(switch_status_t) switch_core_session_get_video_read_impl(switch_core_session_t *session, switch_codec_implementation_t *impp); Modified: freeswitch/trunk/src/include/switch_utils.h ============================================================================== --- freeswitch/trunk/src/include/switch_utils.h (original) +++ freeswitch/trunk/src/include/switch_utils.h Thu Dec 18 18:07:32 2008 @@ -56,7 +56,7 @@ SWITCH_DECLARE(int) switch_isupper(int c); SWITCH_DECLARE(int) switch_isxdigit(int c); - +#define switch_goto_status(_status, _label) status = _status; goto _label #define switch_samples_per_packet(rate, interval) ((uint32_t)((float)rate / (1000.0f / (float)interval))) #define SWITCH_SMAX 32767 #define SWITCH_SMIN -32768 Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Thu Dec 18 18:07:32 2008 @@ -738,14 +738,20 @@ tech_pvt->codec_ms = codec_ms; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Changing codec ptime to %d. I bet you have a linksys/sipura =D\n", tech_pvt->codec_ms); - switch_core_codec_destroy(&tech_pvt->read_codec); + + switch_core_session_lock_codec_write(session); + switch_core_session_lock_codec_read(session); + + switch_core_codec_destroy(&tech_pvt->read_codec); switch_core_codec_destroy(&tech_pvt->write_codec); + if (sofia_glue_tech_set_codec(tech_pvt, 2) != SWITCH_STATUS_SUCCESS) { *frame = NULL; + switch_core_session_unlock_codec_write(session); + switch_core_session_unlock_codec_read(session); return SWITCH_STATUS_GENERR; } - - + if ((val = switch_channel_get_variable(tech_pvt->channel, "rtp_timeout_sec"))) { int v = atoi(val); if (v >= 0) { @@ -784,6 +790,10 @@ } tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES; + + switch_core_session_unlock_codec_write(session); + switch_core_session_unlock_codec_read(session); + } } Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Thu Dec 18 18:07:32 2008 @@ -1532,27 +1532,32 @@ switch_status_t sofia_glue_tech_set_codec(private_object_t *tech_pvt, int force) { int ms; - + switch_status_t status = SWITCH_STATUS_SUCCESS; + int resetting = 0; + if (!tech_pvt->iananame) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No audio codec available\n"); - return SWITCH_STATUS_FALSE; + switch_goto_status(SWITCH_STATUS_FALSE, end); } if (tech_pvt->read_codec.implementation) { if (!force) { - return SWITCH_STATUS_SUCCESS; + switch_goto_status(SWITCH_STATUS_SUCCESS, end); } if (strcasecmp(tech_pvt->read_codec.implementation->iananame, tech_pvt->iananame) || tech_pvt->read_codec.implementation->samples_per_second != tech_pvt->rm_rate) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Changing Codec from %s to %s\n", tech_pvt->read_codec.implementation->iananame, tech_pvt->rm_encoding); + switch_core_session_lock_codec_write(tech_pvt->session); + switch_core_session_lock_codec_read(tech_pvt->session); + resetting = 1; switch_core_codec_destroy(&tech_pvt->read_codec); switch_core_codec_destroy(&tech_pvt->write_codec); switch_core_session_reset(tech_pvt->session, SWITCH_TRUE); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Already using %s\n", tech_pvt->read_codec.implementation->iananame); - return SWITCH_STATUS_SUCCESS; + switch_goto_status(SWITCH_STATUS_SUCCESS, end); } } @@ -1565,7 +1570,7 @@ SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE | tech_pvt->profile->codec_flags, NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n"); - return SWITCH_STATUS_FALSE; + switch_goto_status(SWITCH_STATUS_FALSE, end); } if (switch_core_codec_init(&tech_pvt->write_codec, @@ -1577,7 +1582,7 @@ SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE | tech_pvt->profile->codec_flags, NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n"); - return SWITCH_STATUS_FALSE; + switch_goto_status(SWITCH_STATUS_FALSE, end); } if (switch_rtp_ready(tech_pvt->rtp_session)) { @@ -1590,7 +1595,7 @@ if (!tech_pvt->read_codec.implementation) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n"); - return SWITCH_STATUS_FALSE; + switch_goto_status(SWITCH_STATUS_FALSE, end); } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Set Codec %s %s/%ld %d ms %d samples\n", @@ -1612,7 +1617,13 @@ switch_rtp_set_default_payload(tech_pvt->rtp_session, tech_pvt->pt); } - return SWITCH_STATUS_SUCCESS; + end: + if (resetting) { + switch_core_session_unlock_codec_write(tech_pvt->session); + switch_core_session_unlock_codec_read(tech_pvt->session); + } + + return status; } Modified: freeswitch/trunk/src/switch_core_codec.c ============================================================================== --- freeswitch/trunk/src/switch_core_codec.c (original) +++ freeswitch/trunk/src/switch_core_codec.c Thu Dec 18 18:07:32 2008 @@ -58,6 +58,26 @@ switch_mutex_unlock(session->codec_read_mutex); } +SWITCH_DECLARE(void) switch_core_session_lock_codec_write(switch_core_session_t *session) +{ + switch_mutex_lock(session->codec_write_mutex); +} + +SWITCH_DECLARE(void) switch_core_session_unlock_codec_write(switch_core_session_t *session) +{ + switch_mutex_unlock(session->codec_write_mutex); +} + +SWITCH_DECLARE(void) switch_core_session_lock_codec_read(switch_core_session_t *session) +{ + switch_mutex_lock(session->codec_read_mutex); +} + +SWITCH_DECLARE(void) switch_core_session_unlock_codec_read(switch_core_session_t *session) +{ + switch_mutex_unlock(session->codec_read_mutex); +} + SWITCH_DECLARE(void) switch_core_session_unset_write_codec(switch_core_session_t *session) { switch_mutex_t *mutex = NULL; @@ -550,7 +570,8 @@ { switch_mutex_t *mutex; switch_memory_pool_t *pool; - + int free_pool = 0; + switch_assert(codec != NULL); if (!codec->implementation) { @@ -558,6 +579,10 @@ return SWITCH_STATUS_NOT_INITALIZED; } + if (switch_test_flag(codec, SWITCH_CODEC_FLAG_FREE_POOL)) { + free_pool = 1; + } + pool = codec->memory_pool; mutex = codec->mutex; @@ -571,7 +596,7 @@ if (mutex) switch_mutex_unlock(mutex); - if (switch_test_flag(codec, SWITCH_CODEC_FLAG_FREE_POOL)) { + if (free_pool) { switch_core_destroy_memory_pool(&pool); } Modified: freeswitch/trunk/src/switch_core_io.c ============================================================================== --- freeswitch/trunk/src/switch_core_io.c (original) +++ freeswitch/trunk/src/switch_core_io.c Thu Dec 18 18:07:32 2008 @@ -643,363 +643,364 @@ do_resample = TRUE; } - if (need_codec) { - if (!switch_test_flag(session, SSF_WARN_TRANSCODE)) { + if (!need_codec) { + do_write = TRUE; + goto done; + } + + if (!switch_test_flag(session, SSF_WARN_TRANSCODE)) { switch_core_session_message_t msg = { 0 }; msg.message_id = SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY; switch_core_session_receive_message(session, &msg); switch_set_flag(session, SSF_WARN_TRANSCODE); - } + } - if (frame->codec) { - session->raw_write_frame.datalen = session->raw_write_frame.buflen; - status = switch_core_codec_decode(frame->codec, - session->write_codec, - frame->data, - frame->datalen, - session->write_codec->implementation->actual_samples_per_second, - session->raw_write_frame.data, &session->raw_write_frame.datalen, &session->raw_write_frame.rate, &flag); + if (frame->codec) { + session->raw_write_frame.datalen = session->raw_write_frame.buflen; + status = switch_core_codec_decode(frame->codec, + session->write_codec, + frame->data, + frame->datalen, + session->write_codec->implementation->actual_samples_per_second, + session->raw_write_frame.data, &session->raw_write_frame.datalen, &session->raw_write_frame.rate, &flag); - if (do_resample && status == SWITCH_STATUS_SUCCESS) { - status = SWITCH_STATUS_RESAMPLE; - } - - switch (status) { - case SWITCH_STATUS_RESAMPLE: - write_frame = &session->raw_write_frame; - if (!session->write_resampler) { - switch_mutex_lock(session->resample_mutex); - status = switch_resample_create(&session->write_resampler, - frame->codec->implementation->actual_samples_per_second, - frame->codec->implementation->decoded_bytes_per_packet, - session->write_codec->implementation->actual_samples_per_second, - session->write_codec->implementation->decoded_bytes_per_packet, session->pool); - switch_mutex_unlock(session->resample_mutex); - if (status != SWITCH_STATUS_SUCCESS) { - goto done; - } - } - break; - case SWITCH_STATUS_SUCCESS: - session->raw_write_frame.samples = session->raw_write_frame.datalen / sizeof(int16_t); - session->raw_write_frame.timestamp = frame->timestamp; - session->raw_write_frame.rate = frame->rate; - session->raw_write_frame.m = frame->m; - session->raw_write_frame.ssrc = frame->ssrc; - session->raw_write_frame.seq = frame->seq; - session->raw_write_frame.payload = frame->payload; - write_frame = &session->raw_write_frame; - break; - case SWITCH_STATUS_BREAK: - status = SWITCH_STATUS_SUCCESS; goto error; - case SWITCH_STATUS_NOOP: - if (session->write_resampler) { - switch_mutex_lock(session->resample_mutex); - switch_resample_destroy(&session->write_resampler); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deactivating write resampler\n"); - switch_mutex_unlock(session->resample_mutex); + if (do_resample && status == SWITCH_STATUS_SUCCESS) { + status = SWITCH_STATUS_RESAMPLE; + } + + switch (status) { + case SWITCH_STATUS_RESAMPLE: + write_frame = &session->raw_write_frame; + if (!session->write_resampler) { + switch_mutex_lock(session->resample_mutex); + status = switch_resample_create(&session->write_resampler, + frame->codec->implementation->actual_samples_per_second, + frame->codec->implementation->decoded_bytes_per_packet, + session->write_codec->implementation->actual_samples_per_second, + session->write_codec->implementation->decoded_bytes_per_packet, session->pool); + switch_mutex_unlock(session->resample_mutex); + if (status != SWITCH_STATUS_SUCCESS) { + goto done; } - write_frame = frame; - status = SWITCH_STATUS_SUCCESS; - break; - default: - if (status == SWITCH_STATUS_NOT_INITALIZED) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); - goto error; - } - if (ptime_mismatch) { - status = perform_write(session, frame, flags, stream_id); - status = SWITCH_STATUS_SUCCESS; goto error; - } - - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s decoder error!\n", frame->codec->codec_interface->interface_name); + } + break; + case SWITCH_STATUS_SUCCESS: + session->raw_write_frame.samples = session->raw_write_frame.datalen / sizeof(int16_t); + session->raw_write_frame.timestamp = frame->timestamp; + session->raw_write_frame.rate = frame->rate; + session->raw_write_frame.m = frame->m; + session->raw_write_frame.ssrc = frame->ssrc; + session->raw_write_frame.seq = frame->seq; + session->raw_write_frame.payload = frame->payload; + write_frame = &session->raw_write_frame; + break; + case SWITCH_STATUS_BREAK: + status = SWITCH_STATUS_SUCCESS; goto error; + case SWITCH_STATUS_NOOP: + if (session->write_resampler) { + switch_mutex_lock(session->resample_mutex); + switch_resample_destroy(&session->write_resampler); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deactivating write resampler\n"); + switch_mutex_unlock(session->resample_mutex); + } + write_frame = frame; + status = SWITCH_STATUS_SUCCESS; + break; + default: + if (status == SWITCH_STATUS_NOT_INITALIZED) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); goto error; } + if (ptime_mismatch) { + status = perform_write(session, frame, flags, stream_id); + status = SWITCH_STATUS_SUCCESS; goto error; + } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s decoder error!\n", frame->codec->codec_interface->interface_name); + goto error; } + } - if (session->write_resampler) { - short *data = write_frame->data; + if (session->write_resampler) { + short *data = write_frame->data; - switch_mutex_lock(session->resample_mutex); + switch_mutex_lock(session->resample_mutex); - session->write_resampler->from_len = write_frame->datalen / 2; - switch_short_to_float(data, session->write_resampler->from, session->write_resampler->from_len); + session->write_resampler->from_len = write_frame->datalen / 2; + switch_short_to_float(data, session->write_resampler->from, session->write_resampler->from_len); - session->write_resampler->to_len = (uint32_t) - switch_resample_process(session->write_resampler, session->write_resampler->from, - session->write_resampler->from_len, session->write_resampler->to, session->write_resampler->to_size, 0); + session->write_resampler->to_len = (uint32_t) + switch_resample_process(session->write_resampler, session->write_resampler->from, + session->write_resampler->from_len, session->write_resampler->to, session->write_resampler->to_size, 0); - switch_float_to_short(session->write_resampler->to, data, session->write_resampler->to_len); + switch_float_to_short(session->write_resampler->to, data, session->write_resampler->to_len); - write_frame->samples = session->write_resampler->to_len; - write_frame->datalen = write_frame->samples * 2; - write_frame->rate = session->write_resampler->to_rate; - switch_mutex_unlock(session->resample_mutex); - } + write_frame->samples = session->write_resampler->to_len; + write_frame->datalen = write_frame->samples * 2; + write_frame->rate = session->write_resampler->to_rate; + switch_mutex_unlock(session->resample_mutex); + } - if (session->bugs) { - switch_media_bug_t *bp, *dp, *last = NULL; + if (session->bugs) { + switch_media_bug_t *bp, *dp, *last = NULL; - switch_thread_rwlock_rdlock(session->bug_rwlock); - for (bp = session->bugs; bp; bp = bp->next) { - switch_bool_t ok = SWITCH_TRUE; - if (!bp->ready) { - continue; - } - if (switch_test_flag(bp, SMBF_WRITE_STREAM)) { + switch_thread_rwlock_rdlock(session->bug_rwlock); + for (bp = session->bugs; bp; bp = bp->next) { + switch_bool_t ok = SWITCH_TRUE; + if (!bp->ready) { + continue; + } + if (switch_test_flag(bp, SMBF_WRITE_STREAM)) { - switch_mutex_lock(bp->write_mutex); - switch_buffer_write(bp->raw_write_buffer, write_frame->data, write_frame->datalen); - switch_mutex_unlock(bp->write_mutex); - if (bp->callback) { - ok = bp->callback(bp, bp->user_data, SWITCH_ABC_TYPE_WRITE); - } + switch_mutex_lock(bp->write_mutex); + switch_buffer_write(bp->raw_write_buffer, write_frame->data, write_frame->datalen); + switch_mutex_unlock(bp->write_mutex); + if (bp->callback) { + ok = bp->callback(bp, bp->user_data, SWITCH_ABC_TYPE_WRITE); } + } - if (switch_test_flag(bp, SMBF_WRITE_REPLACE)) { - do_bugs = 0; - if (bp->callback) { - bp->write_replace_frame_in = write_frame; - bp->write_replace_frame_out = write_frame; - if ((ok = bp->callback(bp, bp->user_data, SWITCH_ABC_TYPE_WRITE_REPLACE)) == SWITCH_TRUE) { - write_frame = bp->write_replace_frame_out; - } + if (switch_test_flag(bp, SMBF_WRITE_REPLACE)) { + do_bugs = 0; + if (bp->callback) { + bp->write_replace_frame_in = write_frame; + bp->write_replace_frame_out = write_frame; + if ((ok = bp->callback(bp, bp->user_data, SWITCH_ABC_TYPE_WRITE_REPLACE)) == SWITCH_TRUE) { + write_frame = bp->write_replace_frame_out; } } + } - if (bp->stop_time && bp->stop_time <= switch_timestamp(NULL)) { - ok = SWITCH_FALSE; - } + if (bp->stop_time && bp->stop_time <= switch_timestamp(NULL)) { + ok = SWITCH_FALSE; + } - if (ok == SWITCH_FALSE) { - bp->ready = 0; - if (last) { - last->next = bp->next; - } else { - session->bugs = bp->next; - } - dp = bp; - bp = last; - switch_core_media_bug_close(&dp); - if (!bp) { - break; - } - continue; + if (ok == SWITCH_FALSE) { + bp->ready = 0; + if (last) { + last->next = bp->next; + } else { + session->bugs = bp->next; + } + dp = bp; + bp = last; + switch_core_media_bug_close(&dp); + if (!bp) { + break; } - last = bp; + continue; } - switch_thread_rwlock_unlock(session->bug_rwlock); + last = bp; } + switch_thread_rwlock_unlock(session->bug_rwlock); + } - if (do_bugs) { - do_write = TRUE; - write_frame = frame; - goto done; - } + if (do_bugs) { + do_write = TRUE; + write_frame = frame; + goto done; + } - if (session->write_codec) { - if (write_frame->datalen == session->write_codec->implementation->decoded_bytes_per_packet) { - perfect = TRUE; - } else { - if (!session->raw_write_buffer) { - switch_size_t bytes = session->write_codec->implementation->decoded_bytes_per_packet; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, - "Engaging Write Buffer at %u bytes to accommodate %u->%u\n", - (uint32_t) bytes, write_frame->datalen, session->write_codec->implementation->decoded_bytes_per_packet); - if ((status = switch_buffer_create_dynamic(&session->raw_write_buffer, - bytes * SWITCH_BUFFER_BLOCK_FRAMES, - bytes * SWITCH_BUFFER_START_FRAMES, 0)) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Write Buffer Failed!\n"); - goto error; - } + if (session->write_codec) { + if (write_frame->datalen == session->write_codec->implementation->decoded_bytes_per_packet) { + perfect = TRUE; + } else { + if (!session->raw_write_buffer) { + switch_size_t bytes = session->write_codec->implementation->decoded_bytes_per_packet; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, + "Engaging Write Buffer at %u bytes to accommodate %u->%u\n", + (uint32_t) bytes, write_frame->datalen, session->write_codec->implementation->decoded_bytes_per_packet); + if ((status = switch_buffer_create_dynamic(&session->raw_write_buffer, + bytes * SWITCH_BUFFER_BLOCK_FRAMES, + bytes * SWITCH_BUFFER_START_FRAMES, 0)) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Write Buffer Failed!\n"); + goto error; } + } - if (!(switch_buffer_write(session->raw_write_buffer, write_frame->data, write_frame->datalen))) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Write Buffer %u bytes Failed!\n", write_frame->datalen); - status = SWITCH_STATUS_MEMERR; goto error; - } + if (!(switch_buffer_write(session->raw_write_buffer, write_frame->data, write_frame->datalen))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Write Buffer %u bytes Failed!\n", write_frame->datalen); + status = SWITCH_STATUS_MEMERR; goto error; } + } - if (perfect) { - enc_frame = write_frame; - session->enc_write_frame.datalen = session->enc_write_frame.buflen; - - status = switch_core_codec_encode(session->write_codec, - frame->codec, - enc_frame->data, - enc_frame->datalen, - session->write_codec->implementation->actual_samples_per_second, - session->enc_write_frame.data, &session->enc_write_frame.datalen, &session->enc_write_frame.rate, &flag); - - switch (status) { - case SWITCH_STATUS_RESAMPLE: - /* switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Fixme 2\n"); */ - case SWITCH_STATUS_SUCCESS: - session->enc_write_frame.codec = session->write_codec; - session->enc_write_frame.samples = enc_frame->datalen / sizeof(int16_t); - if (frame->codec->implementation->samples_per_packet != session->write_codec->implementation->samples_per_packet) { - session->enc_write_frame.timestamp = 0; - } else { - session->enc_write_frame.timestamp = frame->timestamp; - } - session->enc_write_frame.payload = session->write_codec->implementation->ianacode; - session->enc_write_frame.m = frame->m; - session->enc_write_frame.ssrc = frame->ssrc; - session->enc_write_frame.seq = frame->seq; - write_frame = &session->enc_write_frame; - break; - case SWITCH_STATUS_NOOP: - enc_frame->codec = session->write_codec; - enc_frame->samples = enc_frame->datalen / sizeof(int16_t); - enc_frame->timestamp = frame->timestamp; - enc_frame->m = frame->m; - enc_frame->seq = frame->seq; - enc_frame->ssrc = frame->ssrc; - enc_frame->payload = enc_frame->codec->implementation->ianacode; - write_frame = enc_frame; - status = SWITCH_STATUS_SUCCESS; - break; - case SWITCH_STATUS_NOT_INITALIZED: - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); - write_frame = NULL; - goto error; - default: - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s encoder error!\n", - session->read_codec->codec_interface->interface_name); - write_frame = NULL; - goto error; - } - if (flag & SFF_CNG) { - switch_set_flag(write_frame, SFF_CNG); + if (perfect) { + enc_frame = write_frame; + session->enc_write_frame.datalen = session->enc_write_frame.buflen; + + status = switch_core_codec_encode(session->write_codec, + frame->codec, + enc_frame->data, + enc_frame->datalen, + session->write_codec->implementation->actual_samples_per_second, + session->enc_write_frame.data, &session->enc_write_frame.datalen, &session->enc_write_frame.rate, &flag); + + switch (status) { + case SWITCH_STATUS_RESAMPLE: + /* switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Fixme 2\n"); */ + case SWITCH_STATUS_SUCCESS: + session->enc_write_frame.codec = session->write_codec; + session->enc_write_frame.samples = enc_frame->datalen / sizeof(int16_t); + if (frame->codec->implementation->samples_per_packet != session->write_codec->implementation->samples_per_packet) { + session->enc_write_frame.timestamp = 0; + } else { + session->enc_write_frame.timestamp = frame->timestamp; } - status = perform_write(session, write_frame, flags, stream_id); + session->enc_write_frame.payload = session->write_codec->implementation->ianacode; + session->enc_write_frame.m = frame->m; + session->enc_write_frame.ssrc = frame->ssrc; + session->enc_write_frame.seq = frame->seq; + write_frame = &session->enc_write_frame; + break; + case SWITCH_STATUS_NOOP: + enc_frame->codec = session->write_codec; + enc_frame->samples = enc_frame->datalen / sizeof(int16_t); + enc_frame->timestamp = frame->timestamp; + enc_frame->m = frame->m; + enc_frame->seq = frame->seq; + enc_frame->ssrc = frame->ssrc; + enc_frame->payload = enc_frame->codec->implementation->ianacode; + write_frame = enc_frame; + status = SWITCH_STATUS_SUCCESS; + break; + case SWITCH_STATUS_NOT_INITALIZED: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); + write_frame = NULL; + goto error; + default: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s encoder error!\n", + session->read_codec->codec_interface->interface_name); + write_frame = NULL; + goto error; + } + if (flag & SFF_CNG) { + switch_set_flag(write_frame, SFF_CNG); + } + status = perform_write(session, write_frame, flags, stream_id); + goto error; + } else { + switch_size_t used = switch_buffer_inuse(session->raw_write_buffer); + uint32_t bytes = session->write_codec->implementation->decoded_bytes_per_packet; + switch_size_t frames = (used / bytes); + + status = SWITCH_STATUS_SUCCESS; + if (!frames) { goto error; } else { - switch_size_t used = switch_buffer_inuse(session->raw_write_buffer); - uint32_t bytes = session->write_codec->implementation->decoded_bytes_per_packet; - switch_size_t frames = (used / bytes); + switch_size_t x; + for (x = 0; x < frames; x++) { + if ((session->raw_write_frame.datalen = (uint32_t) + switch_buffer_read(session->raw_write_buffer, session->raw_write_frame.data, bytes)) != 0) { + int rate; + enc_frame = &session->raw_write_frame; + session->raw_write_frame.rate = session->write_codec->implementation->actual_samples_per_second; + session->enc_write_frame.datalen = session->enc_write_frame.buflen; + + if (frame->codec && frame->codec->implementation) { + rate = frame->codec->implementation->actual_samples_per_second; + } else { + rate = session->write_codec->implementation->actual_samples_per_second; + } - status = SWITCH_STATUS_SUCCESS; - if (!frames) { - goto error; - } else { - switch_size_t x; - for (x = 0; x < frames; x++) { - if ((session->raw_write_frame.datalen = (uint32_t) - switch_buffer_read(session->raw_write_buffer, session->raw_write_frame.data, bytes)) != 0) { - int rate; - enc_frame = &session->raw_write_frame; - session->raw_write_frame.rate = session->write_codec->implementation->actual_samples_per_second; - session->enc_write_frame.datalen = session->enc_write_frame.buflen; - - if (frame->codec && frame->codec->implementation) { - rate = frame->codec->implementation->actual_samples_per_second; - } else { - rate = session->write_codec->implementation->actual_samples_per_second; - } + status = switch_core_codec_encode(session->write_codec, + frame->codec, + enc_frame->data, + enc_frame->datalen, + rate, + session->enc_write_frame.data, + &session->enc_write_frame.datalen, &session->enc_write_frame.rate, &flag); + switch (status) { + case SWITCH_STATUS_RESAMPLE: + session->enc_write_frame.codec = session->write_codec; + session->enc_write_frame.samples = enc_frame->datalen / sizeof(int16_t); + session->enc_write_frame.m = frame->m; + session->enc_write_frame.ssrc = frame->ssrc; + session->enc_write_frame.payload = session->write_codec->implementation->ianacode; + write_frame = &session->enc_write_frame; + if (!session->write_resampler) { + switch_mutex_lock(session->resample_mutex); + status = switch_resample_create(&session->write_resampler, + frame->codec->implementation->actual_samples_per_second, + frame->codec->implementation->decoded_bytes_per_packet, + session->write_codec->implementation->actual_samples_per_second, + session->write_codec->implementation->decoded_bytes_per_packet, session->pool); + switch_mutex_unlock(session->resample_mutex); - status = switch_core_codec_encode(session->write_codec, - frame->codec, - enc_frame->data, - enc_frame->datalen, - rate, - session->enc_write_frame.data, - &session->enc_write_frame.datalen, &session->enc_write_frame.rate, &flag); - switch (status) { - case SWITCH_STATUS_RESAMPLE: - session->enc_write_frame.codec = session->write_codec; - session->enc_write_frame.samples = enc_frame->datalen / sizeof(int16_t); - session->enc_write_frame.m = frame->m; - session->enc_write_frame.ssrc = frame->ssrc; - session->enc_write_frame.payload = session->write_codec->implementation->ianacode; - write_frame = &session->enc_write_frame; - if (!session->write_resampler) { - switch_mutex_lock(session->resample_mutex); - status = switch_resample_create(&session->write_resampler, - frame->codec->implementation->actual_samples_per_second, - frame->codec->implementation->decoded_bytes_per_packet, - session->write_codec->implementation->actual_samples_per_second, - session->write_codec->implementation->decoded_bytes_per_packet, session->pool); - switch_mutex_unlock(session->resample_mutex); - - if (status != SWITCH_STATUS_SUCCESS) { - goto done; - } - } - break; - case SWITCH_STATUS_SUCCESS: - session->enc_write_frame.codec = session->write_codec; - session->enc_write_frame.samples = enc_frame->datalen / sizeof(int16_t); - session->enc_write_frame.m = frame->m; - session->enc_write_frame.ssrc = frame->ssrc; - session->enc_write_frame.payload = session->write_codec->implementation->ianacode; - write_frame = &session->enc_write_frame; - break; - case SWITCH_STATUS_NOOP: - if (session->write_resampler) { - switch_mutex_lock(session->resample_mutex); - switch_resample_destroy(&session->write_resampler); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deactivating write resampler\n"); - switch_mutex_unlock(session->resample_mutex); + if (status != SWITCH_STATUS_SUCCESS) { + goto done; } - enc_frame->codec = session->write_codec; - enc_frame->samples = enc_frame->datalen / sizeof(int16_t); - enc_frame->m = frame->m; - enc_frame->ssrc = frame->ssrc; - enc_frame->payload = enc_frame->codec->implementation->ianacode; - write_frame = enc_frame; - status = SWITCH_STATUS_SUCCESS; - break; - case SWITCH_STATUS_NOT_INITALIZED: - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); - write_frame = NULL; - goto error; - default: - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s encoder error %d!\n", - session->read_codec->codec_interface->interface_name, status); - write_frame = NULL; - goto error; } - - if (session->read_resampler) { - short *data = write_frame->data; + break; + case SWITCH_STATUS_SUCCESS: + session->enc_write_frame.codec = session->write_codec; + session->enc_write_frame.samples = enc_frame->datalen / sizeof(int16_t); + session->enc_write_frame.m = frame->m; + session->enc_write_frame.ssrc = frame->ssrc; + session->enc_write_frame.payload = session->write_codec->implementation->ianacode; + write_frame = &session->enc_write_frame; + break; + case SWITCH_STATUS_NOOP: + if (session->write_resampler) { switch_mutex_lock(session->resample_mutex); - - session->read_resampler->from_len = - switch_short_to_float(data, session->read_resampler->from, (int) write_frame->datalen / 2); - session->read_resampler->to_len = (uint32_t) - switch_resample_process(session->read_resampler, session->read_resampler->from, - session->read_resampler->from_len, - session->read_resampler->to, session->read_resampler->to_size, 0); - switch_float_to_short(session->read_resampler->to, data, write_frame->datalen * 2); - write_frame->samples = session->read_resampler->to_len; - write_frame->datalen = session->read_resampler->to_len * 2; - write_frame->rate = session->read_resampler->to_rate; + switch_resample_destroy(&session->write_resampler); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deactivating write resampler\n"); switch_mutex_unlock(session->resample_mutex); - - } - if (flag & SFF_CNG) { - switch_set_flag(write_frame, SFF_CNG); } + enc_frame->codec = session->write_codec; + enc_frame->samples = enc_frame->datalen / sizeof(int16_t); + enc_frame->m = frame->m; + enc_frame->ssrc = frame->ssrc; + enc_frame->payload = enc_frame->codec->implementation->ianacode; + write_frame = enc_frame; + status = SWITCH_STATUS_SUCCESS; + break; + case SWITCH_STATUS_NOT_INITALIZED: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); + write_frame = NULL; + goto error; + default: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s encoder error %d!\n", + session->read_codec->codec_interface->interface_name, status); + write_frame = NULL; + goto error; + } - if ((status = perform_write(session, write_frame, flags, stream_id)) != SWITCH_STATUS_SUCCESS) { - break; - } + if (session->read_resampler) { + short *data = write_frame->data; + switch_mutex_lock(session->resample_mutex); + + session->read_resampler->from_len = + switch_short_to_float(data, session->read_resampler->from, (int) write_frame->datalen / 2); + session->read_resampler->to_len = (uint32_t) + switch_resample_process(session->read_resampler, session->read_resampler->from, + session->read_resampler->from_len, + session->read_resampler->to, session->read_resampler->to_size, 0); + switch_float_to_short(session->read_resampler->to, data, write_frame->datalen * 2); + write_frame->samples = session->read_resampler->to_len; + write_frame->datalen = session->read_resampler->to_len * 2; + write_frame->rate = session->read_resampler->to_rate; + switch_mutex_unlock(session->resample_mutex); + + } + if (flag & SFF_CNG) { + switch_set_flag(write_frame, SFF_CNG); + } + + if ((status = perform_write(session, write_frame, flags, stream_id)) != SWITCH_STATUS_SUCCESS) { + break; } } - goto error; } + goto error; } } - } else { - do_write = TRUE; } - + done: if (do_write) { From mikej at freeswitch.org Thu Dec 18 15:24:19 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 18:24:19 -0500 Subject: [Freeswitch-trunk] [commit] r10877 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nta libsofia-sip-ua/tport Message-ID: Author: mikej Date: Thu Dec 18 18:24:19 2008 New Revision: 10877 Log: SFSIP-112 sofia does not compile w/ gcc 4.3 x86 w/ -Werror Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_logging.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Thu Dec 18 18:24:19 2008 @@ -1 +1 @@ -Tue Dec 16 15:42:18 CST 2008 +Thur Dec 18 17:23:18 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c Thu Dec 18 18:24:19 2008 @@ -1593,7 +1593,7 @@ if (maxsize > UINT32_MAX) maxsize = UINT32_MAX; agent->sa_maxsize = maxsize; - if (max_proceeding == 0) max_proceeding = SIZE_MAX; + if (max_proceeding == 0) max_proceeding = UINT32_MAX; agent->sa_max_proceeding = max_proceeding; if (max_forwards == 0) max_forwards = 70; /* Default value */ Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_logging.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_logging.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_logging.c Thu Dec 18 18:24:19 2008 @@ -232,7 +232,7 @@ n += iov[i].mv_len; tport_stamp(self, msg, stamp, what, n, via, now); - su_log(stamp); + su_log("%s", stamp); su_log(" " MSG_SEPARATOR); for (i = 0; truncated == 0 && i < iovlen && i < 80; i++) { From mikej at freeswitch.org Thu Dec 18 15:32:58 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 18:32:58 -0500 Subject: [Freeswitch-trunk] [commit] r10878 - freeswitch/trunk/libs/pcre Message-ID: Author: mikej Date: Thu Dec 18 18:32:58 2008 New Revision: 10878 Log: FSCORE-258 pcre compile warnings Modified: freeswitch/trunk/libs/pcre/pcretest.c Modified: freeswitch/trunk/libs/pcre/pcretest.c ============================================================================== --- freeswitch/trunk/libs/pcre/pcretest.c (original) +++ freeswitch/trunk/libs/pcre/pcretest.c Thu Dec 18 18:32:58 2008 @@ -794,7 +794,7 @@ if (offsets == NULL) { printf("** Failed to get %d bytes of memory for offsets vector\n", - size_offsets_max * sizeof(int)); + size_offsets_max * (int)sizeof(int)); yield = 1; goto EXIT; } @@ -1736,7 +1736,7 @@ if (offsets == NULL) { printf("** Failed to get %d bytes of memory for offsets vector\n", - size_offsets_max * sizeof(int)); + size_offsets_max * (int)sizeof(int)); yield = 1; goto EXIT; } From mikej at freeswitch.org Thu Dec 18 15:50:06 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 18:50:06 -0500 Subject: [Freeswitch-trunk] [commit] r10879 - freeswitch/trunk/src/mod/applications/mod_voicemail Message-ID: Author: mikej Date: Thu Dec 18 18:50:05 2008 New Revision: 10879 Log: MODAPP-181 add ability to skip greeting when leaving a voicemail. Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original) +++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Thu Dec 18 18:50:05 2008 @@ -452,7 +452,7 @@ play_saved_messages_key = val; } else if (!strcasecmp(var, "main-menu-key") && !switch_strlen_zero(val)) { main_menu_key = val; - } else if (!strcasecmp(var, "skip-greet-key") && val && is_dtmf(*val)) { + } else if (!strcasecmp(var, "skip-greet-key") && val && (!*val || is_dtmf(*val))) { skip_greet_key = val; } else if (!strcasecmp(var, "config-menu-key") && !switch_strlen_zero(val)) { config_menu_key = val; From mcollins at freeswitch.org Thu Dec 18 15:50:17 2008 From: mcollins at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 18:50:17 -0500 Subject: [Freeswitch-trunk] [commit] r10880 - freeswitch/trunk/docs/phrase Message-ID: Author: mcollins Date: Thu Dec 18 18:50:16 2008 New Revision: 10880 Log: Add new 1.0.2 prompts to phrase_en.xml Modified: freeswitch/trunk/docs/phrase/phrase_en.xml Modified: freeswitch/trunk/docs/phrase/phrase_en.xml ============================================================================== --- freeswitch/trunk/docs/phrase/phrase_en.xml (original) +++ freeswitch/trunk/docs/phrase/phrase_en.xml Thu Dec 18 18:50:16 2008 @@ -267,12 +267,20 @@ - + + + + + + + + + + + + + + From mrene at freeswitch.org Thu Dec 18 20:11:52 2008 From: mrene at freeswitch.org (FreeSWITCH SVN) Date: Thu, 18 Dec 2008 23:11:52 -0500 Subject: [Freeswitch-trunk] [commit] r10881 - freeswitch/trunk/src/mod/applications/mod_limit Message-ID: Author: mrene Date: Thu Dec 18 23:11:51 2008 New Revision: 10881 Log: Fix counter bug Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c (original) +++ freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Thu Dec 18 23:11:51 2008 @@ -816,14 +816,11 @@ /* Did we already run on this channel before? */ if ((channel_hash = switch_channel_get_private(channel, "limit_hash"))) { - /* Yes, but check if we did that realm+id */ - if (!switch_core_hash_find(channel_hash, hashkey)) { - /* No, add it to our table so the state handler can take care of it */ - switch_core_hash_insert(channel_hash, hashkey, item); - } else { - /* Yes, dont touch total counter */ - increment = 0; - } + /* Yes, but check if we did that realm+id + If we didnt, allow incrementing the counter. + If we did, dont touch it but do the validation anyways + */ + increment = !!!switch_core_hash_find(channel_hash, hashkey); } else { /* This is the first limit check on this channel, create a hashtable, set our prviate data and add a state handler */ new_channel = 1; @@ -852,6 +849,10 @@ if (increment) { item->total_usage++; + if (!new_channel) { + switch_core_hash_insert(channel_hash, hashkey, item); + } + if (interval == 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Usage for %s is now %d/%d\n", hashkey, item->total_usage, max); } else { From anthm at freeswitch.org Fri Dec 19 08:55:46 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Fri, 19 Dec 2008 11:55:46 -0500 Subject: [Freeswitch-trunk] [commit] r10882 - freeswitch/trunk/src/mod/applications/mod_limit Message-ID: Author: anthm Date: Fri Dec 19 11:55:44 2008 New Revision: 10882 Log: add patch to see limit usage Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c (original) +++ freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Fri Dec 19 11:55:44 2008 @@ -26,7 +26,8 @@ * Anthony Minessale II * Ken Rice - * + * Bret McDanel + * * mod_limit.c -- Resource Limit Module * */ @@ -750,6 +751,45 @@ switch_mutex_unlock(globals.mutex); } + +#define LIMIT_USAGE_USAGE " " +SWITCH_STANDARD_API(limit_usage_function) +{ + int argc = 0; + char *argv[6] = { 0 }; + char *mydata = NULL; + char *sql = NULL; + char *realm = NULL; + char *id = NULL; + char buf[80] = ""; + callback_t cbt = { 0 }; + + + if (!switch_strlen_zero(cmd)) { + mydata = strdup(cmd); + switch_assert(mydata); + argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); + } + + if (argc < 2) { + stream->write_function(stream, "USAGE: limit_usage %s\n", LIMIT_USAGE_USAGE); + return SWITCH_STATUS_SUCCESS; + } + + + realm = argv[0]; + id = argv[1]; + + cbt.buf = buf; + cbt.len = sizeof(buf); + sql = switch_mprintf("select count(hostname) from limit_data where realm='%q' and id like '%q'", realm, id); + limit_execute_sql_callback(NULL, sql, sql2str_callback, &cbt); + switch_safe_free(sql); + + stream->write_function(stream, "%s\n", buf); + return SWITCH_STATUS_SUCCESS; +} + #define LIMITHASH_USAGE " [/interval] [number [dialplan [context]]]" #define LIMITHASH_DESC "limit access to a resource and transfer to an extension if the limit is exceeded" SWITCH_STANDARD_APP(limit_hash_function) @@ -941,6 +981,7 @@ SWITCH_ADD_APP(app_interface, "group", "Manage a group", GROUP_DESC, group_function, GROUP_USAGE, SAF_SUPPORT_NOMEDIA); SWITCH_ADD_API(commands_api_interface, "limit_hash_usage", "Gets the usage count of a limited resource", limit_hash_usage_function, LIMIT_HASH_USAGE_USAGE); + SWITCH_ADD_API(commands_api_interface, "limit_usage", "Gets the usage count of a limited resource", limit_usage_function, " "); SWITCH_ADD_API(commands_api_interface, "db", "db get/set", db_api_function, "[insert|delete|select]///"); switch_console_set_complete("add db insert"); switch_console_set_complete("add db delete"); From anthm at freeswitch.org Fri Dec 19 09:12:28 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Fri, 19 Dec 2008 12:12:28 -0500 Subject: [Freeswitch-trunk] [commit] r10883 - freeswitch/trunk/src Message-ID: Author: anthm Date: Fri Dec 19 12:12:27 2008 New Revision: 10883 Log: remove unneeded fflush Modified: freeswitch/trunk/src/switch_log.c Modified: freeswitch/trunk/src/switch_log.c ============================================================================== --- freeswitch/trunk/src/switch_log.c (original) +++ freeswitch/trunk/src/switch_log.c Fri Dec 19 12:12:27 2008 @@ -376,9 +376,7 @@ switch_safe_free(data); switch_safe_free(new_fmt); - if (handle) { - fflush(handle); - } + } SWITCH_DECLARE(switch_status_t) switch_log_init(switch_memory_pool_t *pool, switch_bool_t colorize) From anthm at freeswitch.org Fri Dec 19 09:25:53 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Fri, 19 Dec 2008 12:25:53 -0500 Subject: [Freeswitch-trunk] [commit] r10884 - freeswitch/trunk/scripts/socket/FreeSWITCH Message-ID: Author: anthm Date: Fri Dec 19 12:25:52 2008 New Revision: 10884 Log: fix bug in FS Client.pm Modified: freeswitch/trunk/scripts/socket/FreeSWITCH/Client.pm Modified: freeswitch/trunk/scripts/socket/FreeSWITCH/Client.pm ============================================================================== --- freeswitch/trunk/scripts/socket/FreeSWITCH/Client.pm (original) +++ freeswitch/trunk/scripts/socket/FreeSWITCH/Client.pm Fri Dec 19 12:25:52 2008 @@ -73,7 +73,7 @@ while(length($h->{body}) < $h->{'content-length'}) { my $buf; recv $s, $buf, $h->{'content-length'} - length($h->{body}), 0; - if (!$buf) { + if ($buf eq '') { $h->{socketerror} = "yes"; return $h; } @@ -152,9 +152,9 @@ my $r = $self->sendmsg({ 'command' => "api " . shift }); - if ($r->{body}) { + if ($r->{body} ne '') { $reply = $r->{body}; - } elsif ($r->{'reply-text'}) { + } elsif ($r->{'reply-text'} ne '') { $reply = $r->{'reply-text'}; } else { $reply = "socketerror"; From brian at freeswitch.org Fri Dec 19 13:40:03 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 19 Dec 2008 16:40:03 -0500 Subject: [Freeswitch-trunk] [commit] r10886 - freeswitch/trunk/src/mod/formats/mod_sndfile Message-ID: Author: brian Date: Fri Dec 19 16:39:59 2008 New Revision: 10886 Log: mod_sndfile can now record 16bit for the various rates including 48kHz Modified: freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c Modified: freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c (original) +++ freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c Fri Dec 19 16:39:59 2008 @@ -95,12 +95,9 @@ context->sfinfo.channels = handle->channels; context->sfinfo.samplerate = handle->samplerate; - if (handle->samplerate == 8000 || handle->samplerate == 16000) { + if (handle->samplerate == 8000 || handle->samplerate == 16000 || + handle->samplerate == 24000 || handle->samplerate == 32000 || handle->samplerate == 48000) { context->sfinfo.format |= SF_FORMAT_PCM_16; - } else if (handle->samplerate == 24000) { - context->sfinfo.format |= SF_FORMAT_PCM_24; - } else if (handle->samplerate == 32000) { - context->sfinfo.format |= SF_FORMAT_PCM_32; } sf_command(context->handle, SFC_FILE_TRUNCATE, &frames, sizeof(frames)); @@ -119,13 +116,17 @@ context->sfinfo.channels = 1; context->sfinfo.samplerate = 16000; } else if (!strcmp(ext, "r24")) { - context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_24; + context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_16; context->sfinfo.channels = 1; context->sfinfo.samplerate = 24000; } else if (!strcmp(ext, "r32")) { - context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_32; + context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_16; context->sfinfo.channels = 1; context->sfinfo.samplerate = 32000; + } else if (!strcmp(ext, "r48")) { + context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_16; + context->sfinfo.channels = 1; + context->sfinfo.samplerate = 48000; } else if (!strcmp(ext, "gsm")) { context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_GSM610; context->sfinfo.channels = 1; From brian at freeswitch.org Fri Dec 19 13:45:59 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 19 Dec 2008 16:45:59 -0500 Subject: [Freeswitch-trunk] [commit] r10887 - freeswitch/trunk/src/mod/formats/mod_sndfile Message-ID: Author: brian Date: Fri Dec 19 16:45:58 2008 New Revision: 10887 Log: forgot to register r48 Modified: freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c Modified: freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c (original) +++ freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c Fri Dec 19 16:45:58 2008 @@ -299,7 +299,7 @@ char buffer[128]; int format, major_count, subtype_count, m, s; int len, x, skip; - char *extras[] = { "r8", "r16", "r24", "r32", "gsm", "ul", "al", NULL }; + char *extras[] = { "r8", "r16", "r24", "r32", "r48", "gsm", "ul", "al", NULL }; int exlen = (sizeof(extras) / sizeof(extras[0])); buffer[0] = 0; From brian at freeswitch.org Fri Dec 19 13:58:58 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 19 Dec 2008 16:58:58 -0500 Subject: [Freeswitch-trunk] [commit] r10888 - freeswitch/trunk/src/mod/formats/mod_sndfile Message-ID: Author: brian Date: Fri Dec 19 16:58:57 2008 New Revision: 10888 Log: this part was correct to begin with and r48 serves no purpose in this extra formats Modified: freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c Modified: freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c (original) +++ freeswitch/trunk/src/mod/formats/mod_sndfile/mod_sndfile.c Fri Dec 19 16:58:57 2008 @@ -116,17 +116,13 @@ context->sfinfo.channels = 1; context->sfinfo.samplerate = 16000; } else if (!strcmp(ext, "r24")) { - context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_16; + context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_24; context->sfinfo.channels = 1; context->sfinfo.samplerate = 24000; } else if (!strcmp(ext, "r32")) { - context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_16; + context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_32; context->sfinfo.channels = 1; context->sfinfo.samplerate = 32000; - } else if (!strcmp(ext, "r48")) { - context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_16; - context->sfinfo.channels = 1; - context->sfinfo.samplerate = 48000; } else if (!strcmp(ext, "gsm")) { context->sfinfo.format = SF_FORMAT_RAW | SF_FORMAT_GSM610; context->sfinfo.channels = 1; @@ -299,7 +295,7 @@ char buffer[128]; int format, major_count, subtype_count, m, s; int len, x, skip; - char *extras[] = { "r8", "r16", "r24", "r32", "r48", "gsm", "ul", "al", NULL }; + char *extras[] = { "r8", "r16", "r24", "r32", "gsm", "ul", "al", NULL }; int exlen = (sizeof(extras) / sizeof(extras[0])); buffer[0] = 0; From brian at freeswitch.org Fri Dec 19 16:02:10 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 19 Dec 2008 19:02:10 -0500 Subject: [Freeswitch-trunk] [commit] r10889 - freeswitch/trunk/src/mod/codecs/mod_celt Message-ID: Author: brian Date: Fri Dec 19 19:02:09 2008 New Revision: 10889 Log: update celt version Modified: freeswitch/trunk/src/mod/codecs/mod_celt/Makefile Modified: freeswitch/trunk/src/mod/codecs/mod_celt/Makefile ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_celt/Makefile (original) +++ freeswitch/trunk/src/mod/codecs/mod_celt/Makefile Fri Dec 19 19:02:09 2008 @@ -1,6 +1,6 @@ BASE=../../../.. -CELT=celt-0.5.0 +CELT=celt-0.5.1 CELT_DIR=$(BASE)/libs/$(CELT) LOCAL_CFLAGS=-I$(CELT_DIR)/libcelt From anthm at freeswitch.org Fri Dec 19 16:35:10 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Fri, 19 Dec 2008 19:35:10 -0500 Subject: [Freeswitch-trunk] [commit] r10890 - in freeswitch/trunk/libs/esl: . src src/include Message-ID: Author: anthm Date: Fri Dec 19 19:35:09 2008 New Revision: 10890 Log: add esl and fs_cli Added: freeswitch/trunk/libs/esl/ freeswitch/trunk/libs/esl/Makefile freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/ freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/esl_event.c freeswitch/trunk/libs/esl/src/esl_threadmutex.c freeswitch/trunk/libs/esl/src/include/ freeswitch/trunk/libs/esl/src/include/esl.h freeswitch/trunk/libs/esl/src/include/esl_event.h freeswitch/trunk/libs/esl/src/include/esl_threadmutex.h freeswitch/trunk/libs/esl/testclient.c Added: freeswitch/trunk/libs/esl/Makefile ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/Makefile Fri Dec 19 19:35:09 2008 @@ -0,0 +1,26 @@ +PWD=$(shell pwd) +INCS=-I$(PWD)/src/include +LIBEDIT_DIR=../../libs/libedit +CFLAGS=$(INCS) -g -ggdb -I$(LIBEDIT_DIR)/src/ +MYLIB=libesl.a + +OBJS=src/esl.o src/esl_event.o src/esl_threadmutex.o + +all: $(MYLIB) fs_cli + +$(MYLIB): $(OBJS) $(HEADERS) + ar rcs $(MYLIB) $(OBJS) + ranlib $(MYLIB) + +%.o: %.c + $(CC) $(CC_CFLAGS) $(CFLAGS) -c $< -o $@ + +test: $(MYLIB) + $(CC) $(CC_CFLAGS) $(CFLAGS) testclient.c -o testclient -L. -lesl + +fs_cli: $(MYLIB) fs_cli.c + $(CC) $(CC_CFLAGS) $(CFLAGS) fs_cli.c -o fs_cli -L. -L$(LIBEDIT_DIR)/src/.libs -lesl -ledit -lncurses -lpthread + +clean: + rm -f *.o src/*.o testclient fs_cli libesl.a *~ src/*~ src/include/*~ + Added: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 19 19:35:09 2008 @@ -0,0 +1,245 @@ +#include +#include +#include +#include +#include + +#include +static char prompt_str[512] = ""; +static char hostname[512] = ""; + +char *prompt(EditLine * e) +{ + if (*prompt_str == '\0') { + gethostname(hostname, sizeof(hostname)); + snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", hostname); + } + + return prompt_str; + +} + +static EditLine *el; +static History *myhistory; +static HistEvent ev; +static char *hfile = NULL; +static int running = 1; +static int thread_running = 0; +static esl_mutex_t *global_mutex; + +static void handle_SIGINT(int sig) +{ + if (sig); + return; +} + +static const char* COLORS[] = { ESL_SEQ_DEFAULT_COLOR, ESL_SEQ_FRED, ESL_SEQ_FRED, + ESL_SEQ_FRED, ESL_SEQ_FMAGEN, ESL_SEQ_FCYAN, ESL_SEQ_FGREEN, ESL_SEQ_FYELLOW }; + + +static void *msg_thread_run(esl_thread_t *me, void *obj) +{ + + esl_handle_t *handle = (esl_handle_t *) obj; + + thread_running = 1; + + while(thread_running && handle->connected) { + fd_set rfds, efds; + struct timeval tv = { 0, 50 * 1000 }; + int max, activity, i = 0; + + esl_mutex_lock(global_mutex); + FD_ZERO(&rfds); + FD_ZERO(&efds); + FD_SET(handle->sock, &rfds); + FD_SET(handle->sock, &efds); + + max = handle->sock + 1; + + if ((activity = select(max, &rfds, NULL, &efds, &tv)) < 0) { + esl_mutex_unlock(global_mutex); + goto done; + } + + + if (activity && FD_ISSET(handle->sock, &rfds)) { + esl_recv(handle); + if (handle->last_event) { + const char *type = esl_event_get_header(handle->last_event, "content-type"); + if (!strcasecmp(type, "log/data")) { + int level; + if (strstr(handle->last_event->body, "[CONSOLE]")) { + level = 0; + } else if (strstr(handle->last_event->body, "[ALERT]")) { + level = 1; + } else if (strstr(handle->last_event->body, "[CRIT]")) { + level = 2; + } else if (strstr(handle->last_event->body, "[ERROR]")) { + level = 3; + } else if (strstr(handle->last_event->body, "[WARNING]")) { + level = 4; + } else if (strstr(handle->last_event->body, "[NOTICE]")) { + level = 5; + } else if (strstr(handle->last_event->body, "[INFO]")) { + level = 6; + } else if (strstr(handle->last_event->body, "[DEBUG]")) { + level = 7; + } + + printf("%s%s%s", COLORS[level], handle->last_event->body, ESL_SEQ_DEFAULT_COLOR); + } + } + + } + + esl_mutex_unlock(global_mutex); + usleep(1000); + } + + done: + + thread_running = 0; + + return NULL; +} + +static int process_command(esl_handle_t *handle, const char *cmd) +{ + if (!strcasecmp(cmd, "exit")) { + return -1; + } + + if (!strncasecmp(cmd, "loglevel", 8)) { + const char *level = cmd + 8; + + while(*level == ' ') level++; + if (!esl_strlen_zero(level)) { + char cb[128] = ""; + + snprintf(cb, sizeof(cb), "log %s\n\n", level); + esl_mutex_lock(global_mutex); + esl_send_recv(handle, cb); + printf("%s\n", handle->last_reply); + esl_mutex_unlock(global_mutex); + } + + goto end; + } + + + printf("Unknown command [%s]\n", cmd); + + end: + + return 0; + +} + +int main(void) +{ + esl_handle_t handle = {0}; + int count; + const char *line; + char cmd_str[1024] = ""; + char hfile[512] = "/tmp/fs_cli_history"; + char *home = getenv("HOME"); + + if (home) { + snprintf(hfile, sizeof(hfile), "%s/.fs_cli_history", home); + } + + esl_mutex_create(&global_mutex); + + signal(SIGINT, handle_SIGINT); + gethostname(hostname, sizeof(hostname)); + + handle.debug = 0; + + + // um ya add some command line parsing for host port and pass + + if (esl_connect(&handle, "localhost", 8021, "ClueCon")) { + printf("Error Connecting [%s]\n", handle.err); + goto done; + } + + esl_thread_create_detached(msg_thread_run, &handle); + + el = el_init(__FILE__, stdout, stdout, stdout); + el_set(el, EL_PROMPT, &prompt); + el_set(el, EL_EDITOR, "emacs"); + myhistory = history_init(); + + if (myhistory == 0) { + fprintf(stderr, "history could not be initialized\n"); + goto done; + } + + history(myhistory, &ev, H_SETSIZE, 800); + el_set(el, EL_HIST, history, myhistory); + history(myhistory, &ev, H_LOAD, hfile); + + + snprintf(cmd_str, sizeof(cmd_str), "log info\n\n"); + esl_mutex_lock(global_mutex); + esl_send_recv(&handle, cmd_str); + esl_mutex_unlock(global_mutex); + + while (running) { + + line = el_gets(el, &count); + + if (count > 1) { + if (!esl_strlen_zero(line)) { + char *cmd = strdup(line); + char *p; + const LineInfo *lf = el_line(el); + char *foo = (char *) lf->buffer; + if ((p = strrchr(cmd, '\r')) || (p = strrchr(cmd, '\n'))) { + *p = '\0'; + } + assert(cmd != NULL); + history(myhistory, &ev, H_ENTER, line); + + if (!strncasecmp(cmd, "...", 3)) { + goto done; + } else if (*cmd == '/') { + if (process_command(&handle, cmd + 1)) { + running = 0; + } + } else { + snprintf(cmd_str, sizeof(cmd_str), "api %s\n\n", cmd); + esl_mutex_lock(global_mutex); + esl_send_recv(&handle, cmd_str); + printf("%s\n", handle.last_event->body); + esl_mutex_unlock(global_mutex); + } + + el_deletestr(el, strlen(foo) + 1); + memset(foo, 0, strlen(foo)); + free(cmd); + } + } + + usleep(1000); + + } + + + done: + + history(myhistory, &ev, H_SAVE, hfile); + + /* Clean up our memory */ + history_end(myhistory); + el_end(el); + + esl_disconnect(&handle); + + thread_running = 0; + + esl_mutex_destroy(&global_mutex); + + return 0; +} Added: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/src/esl.c Fri Dec 19 19:35:09 2008 @@ -0,0 +1,333 @@ +/* + * 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 + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * 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. + */ + +#include + +#ifndef HAVE_GETHOSTBYNAME_R +extern int gethostbyname_r (const char *__name, + struct hostent *__result_buf, + char *__buf, size_t __buflen, + struct hostent **__result, + int *__h_errnop); +#endif + + + +size_t esl_url_encode(const char *url, char *buf, size_t len) +{ + const char *p; + size_t x = 0; + const char urlunsafe[] = "\r\n \"#%&+:;<=>?@[\\]^`{|}"; + const char hex[] = "0123456789ABCDEF"; + + if (!buf) { + return 0; + } + + if (!url) { + return 0; + } + + len--; + + for (p = url; *p; p++) { + if (x >= len) { + break; + } + if (*p < ' ' || *p > '~' || strchr(urlunsafe, *p)) { + if ((x + 3) >= len) { + break; + } + buf[x++] = '%'; + buf[x++] = hex[*p >> 4]; + buf[x++] = hex[*p & 0x0f]; + } else { + buf[x++] = *p; + } + } + buf[x] = '\0'; + + return x; +} + +char *esl_url_decode(char *s) +{ + char *o; + unsigned int tmp; + + for (o = s; *s; s++, o++) { + if (*s == '%' && strlen(s) > 2 && sscanf(s + 1, "%2x", &tmp) == 1) { + *o = (char) tmp; + s += 2; + } else { + *o = *s; + } + } + *o = '\0'; + return s; +} + + + +esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password) +{ + + struct hostent *result; + char sendbuf[256]; + char recvbuf[256]; + int rval; + const char *hval; + + handle->sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + + if (handle->sock == ESL_SOCK_INVALID) { + snprintf(handle->err, sizeof(handle->err), "Socket Error"); + return ESL_FAIL; + } + + memset(&handle->sockaddr, 0, sizeof(handle->sockaddr)); + handle->sockaddr.sin_family = AF_INET; + handle->sockaddr.sin_port = htons(port); + + memset(&handle->hostent, 0, sizeof(handle->hostent)); + +#ifdef HAVE_GETHOSTBYNAME_R_FIVE + rval = gethostbyname_r(host, &handle->hostent, handle->hostbuf, sizeof(handle->hostbuf), &handle->errno); + result = handle->hostent; +#else + rval = gethostbyname_r(host, &handle->hostent, handle->hostbuf, sizeof(handle->hostbuf), &result, &handle->errno); +#endif + + if (rval) { + strerror_r(handle->errno, handle->err, sizeof(handle->err)); + goto fail; + } + + memcpy(&handle->sockaddr.sin_addr, result->h_addr, result->h_length); + + rval = connect(handle->sock, (struct sockaddr *) &handle->sockaddr, sizeof(handle->sockaddr)); + + if (rval) { + strerror_r(handle->errno, handle->err, sizeof(handle->err)); + goto fail; + } + + if (esl_recv(handle)) { + snprintf(handle->err, sizeof(handle->err), "Connection Error"); + goto fail; + } + + hval = esl_event_get_header(handle->last_event, "content-type"); + + if (strcasecmp(hval, "auth/request")) { + snprintf(handle->err, sizeof(handle->err), "Connection Error"); + goto fail; + } + + snprintf(sendbuf, sizeof(sendbuf), "auth %s\n\n", password); + esl_send(handle, sendbuf); + + + if (esl_recv(handle)) { + snprintf(handle->err, sizeof(handle->err), "Connection Error"); + goto fail; + } + + + hval = esl_event_get_header(handle->last_event, "reply-text"); + + if (strcasecmp(hval, "+OK accepted")) { + snprintf(handle->err, sizeof(handle->err), "Connection Error"); + goto fail; + } + + handle->connected = 1; + + return ESL_SUCCESS; + + fail: + + esl_disconnect(handle); + return ESL_FAIL; +} + +esl_status_t esl_disconnect(esl_handle_t *handle) +{ + esl_event_safe_destroy(&handle->last_event); + + if (handle->sock != ESL_SOCK_INVALID) { + close(handle->sock); + handle->sock = ESL_SOCK_INVALID; + return ESL_SUCCESS; + } + + handle->connected = 0; + + return ESL_FAIL; +} + +esl_status_t esl_recv(esl_handle_t *handle) +{ + char *c; + esl_ssize_t rrval; + int crc = 0; + esl_event_t *revent = NULL; + char *beg; + char *hname, *hval; + char *col; + char *cl; + ssize_t len; + + esl_event_safe_destroy(&handle->last_event); + memset(handle->header_buf, 0, sizeof(handle->header_buf)); + + c = handle->header_buf; + beg = c; + + for(;;) { + rrval = recv(handle->sock, c, 1, 0); + + if (rrval < 0) { + strerror_r(handle->errno, handle->err, sizeof(handle->err)); + goto fail; + } else if (rrval > 0) { + if (*c == '\n') { + if (++crc == 2) { + break; + } + + if (!revent) { + esl_event_create(&revent, ESL_EVENT_COMMAND); + } + + hname = beg; + hval = col = NULL; + + if (hname && (col = strchr(hname, ':'))) { + hval = col + 1; + *col = '\0'; + while(*hval == ' ') hval++; + } + + *c = '\0'; + + if (hname && hval) { + if (handle->debug > 1) { + printf("RECV HEADER [%s] = [%s]\n", hname, hval); + } + esl_event_add_header_string(revent, ESL_STACK_BOTTOM, hname, hval); + } + + beg = c+1; + + + } else { + crc = 0; + } + + c++; + } + } + + if (!revent) { + goto fail; + } + + if ((cl = esl_event_get_header(revent, "content-length"))) { + char *body; + esl_ssize_t sofar = 0; + + len = atol(cl); + body = malloc(len+1); + esl_assert(body); + *(body + len) = '\0'; + + do { + esl_ssize_t r; + if ((r = recv(handle->sock, body + sofar, len - sofar, 0)) < 0) { + strerror_r(handle->errno, handle->err, sizeof(handle->err)); + goto fail; + } + sofar += r; + } while (sofar < len); + + revent->body = body; + } + + + + handle->last_event = revent; + + if (handle->last_event) { + const char *reply = esl_event_get_header(handle->last_event, "reply-text"); + if (!esl_strlen_zero(reply)) { + strncpy(handle->last_reply, reply, sizeof(handle->last_reply)); + } + } + + + if (handle->debug) { + char *foo; + esl_event_serialize(handle->last_event, &foo, ESL_FALSE); + printf("RECV MESSAGE\n%s\n", foo); + free(foo); + } + + return ESL_SUCCESS; + + fail: + + esl_disconnect(handle); + return ESL_FAIL; + +} + +esl_status_t esl_send(esl_handle_t *handle, const char *cmd) +{ + if (handle->debug) { + printf("SEND\n%s\n", cmd); + } + + send(handle->sock, cmd, strlen(cmd), 0); +} + + +esl_status_t esl_send_recv(esl_handle_t *handle, const char *cmd) +{ + esl_send(handle, cmd); + esl_recv(handle); +} + + + + Added: freeswitch/trunk/libs/esl/src/esl_event.c ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/src/esl_event.c Fri Dec 19 19:35:09 2008 @@ -0,0 +1,553 @@ +/* + * 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 + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * 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. + */ + +#include +#include + +static char *my_dup(const char *s) +{ + size_t len = strlen(s) + 1; + void *new = malloc(len); + esl_assert(new); + + return (char *) memcpy(new, s, len); +} + +#ifndef ALLOC +#define ALLOC(size) malloc(size) +#endif +#ifndef DUP +#define DUP(str) my_dup(str) +#endif +#ifndef FREE +#define FREE(ptr) esl_safe_free(ptr) +#endif + +/* make sure this is synced with the esl_event_types_t enum in esl_types.h + also never put any new ones before EVENT_ALL +*/ +static char *EVENT_NAMES[] = { + "CUSTOM", + "CHANNEL_CREATE", + "CHANNEL_DESTROY", + "CHANNEL_STATE", + "CHANNEL_ANSWER", + "CHANNEL_HANGUP", + "CHANNEL_EXECUTE", + "CHANNEL_EXECUTE_COMPLETE", + "CHANNEL_BRIDGE", + "CHANNEL_UNBRIDGE", + "CHANNEL_PROGRESS", + "CHANNEL_PROGRESS_MEDIA", + "CHANNEL_OUTGOING", + "CHANNEL_PARK", + "CHANNEL_UNPARK", + "CHANNEL_APPLICATION", + "CHANNEL_ORIGINATE", + "CHANNEL_UUID", + "API", + "LOG", + "INBOUND_CHAN", + "OUTBOUND_CHAN", + "STARTUP", + "SHUTDOWN", + "PUBLISH", + "UNPUBLISH", + "TALK", + "NOTALK", + "SESSION_CRASH", + "MODULE_LOAD", + "MODULE_UNLOAD", + "DTMF", + "MESSAGE", + "PRESENCE_IN", + "NOTIFY_IN", + "PRESENCE_OUT", + "PRESENCE_PROBE", + "MESSAGE_WAITING", + "MESSAGE_QUERY", + "ROSTER", + "CODEC", + "BACKGROUND_JOB", + "DETECTED_SPEECH", + "DETECTED_TONE", + "PRIVATE_COMMAND", + "HEARTBEAT", + "TRAP", + "ADD_SCHEDULE", + "DEL_SCHEDULE", + "EXE_SCHEDULE", + "RE_SCHEDULE", + "RELOADXML", + "NOTIFY", + "SEND_MESSAGE", + "RECV_MESSAGE", + "REQUEST_PARAMS", + "CHANNEL_DATA", + "GENERAL", + "COMMAND", + "SESSION_HEARTBEAT", + "ALL" +}; + +const char *esl_event_name(esl_event_types_t event) +{ + return EVENT_NAMES[event]; +} + +esl_status_t esl_name_event(const char *name, esl_event_types_t *type) +{ + esl_event_types_t x; + + for (x = 0; x <= ESL_EVENT_ALL; x++) { + if ((strlen(name) > 13 && !strcasecmp(name + 13, EVENT_NAMES[x])) || !strcasecmp(name, EVENT_NAMES[x])) { + *type = x; + return ESL_SUCCESS; + } + } + + return ESL_FAIL; +} + + +esl_status_t esl_event_create_subclass(esl_event_t **event, esl_event_types_t event_id, const char *subclass_name) +{ + *event = NULL; + + if (event_id != ESL_EVENT_CUSTOM && subclass_name) { + return ESL_FAIL; + } + + *event = ALLOC(sizeof(esl_event_t)); + esl_assert(*event); + + + memset(*event, 0, sizeof(esl_event_t)); + + (*event)->event_id = event_id; + + if (subclass_name) { + (*event)->subclass_name = DUP(subclass_name); + esl_event_add_header_string(*event, ESL_STACK_BOTTOM, "Event-Subclass", subclass_name); + } + + return ESL_SUCCESS; +} + + +const char *esl_priority_name(esl_priority_t priority) +{ + switch (priority) { /*lol */ + case ESL_PRIORITY_NORMAL: + return "NORMAL"; + case ESL_PRIORITY_LOW: + return "LOW"; + case ESL_PRIORITY_HIGH: + return "HIGH"; + default: + return "INVALID"; + } +} + +esl_status_t esl_event_set_priority(esl_event_t *event, esl_priority_t priority) +{ + event->priority = priority; + esl_event_add_header_string(event, ESL_STACK_TOP, "priority", esl_priority_name(priority)); + return ESL_SUCCESS; +} + +#define ESL_HASH_KEY_STRING -1 + +static unsigned int esl_ci_hashfunc_default(const char *char_key, esl_ssize_t *klen) + +{ + unsigned int hash = 0; + const unsigned char *key = (const unsigned char *)char_key; + const unsigned char *p; + esl_ssize_t i; + + if (*klen == ESL_HASH_KEY_STRING) { + for (p = key; *p; p++) { + hash = hash * 33 + tolower(*p); + } + *klen = p - key; + } + else { + for (p = key, i = *klen; i; i--, p++) { + hash = hash * 33 + tolower(*p); + } + } + + return hash; +} + + +char *esl_event_get_header(esl_event_t *event, const char *header_name) +{ + esl_event_header_t *hp; + esl_ssize_t hlen = -1; + unsigned long hash = 0; + + esl_assert(event); + + if (!header_name) return NULL; + + hash = esl_ci_hashfunc_default(header_name, &hlen); + + for (hp = event->headers; hp; hp = hp->next) { + if ((!hp->hash || hash == hp->hash) && !strcasecmp(hp->name, header_name) ) { + return hp->value; + } + } + return NULL; +} + +char *esl_event_get_body(esl_event_t *event) +{ + return (event ? event->body : NULL); +} + +esl_status_t esl_event_del_header(esl_event_t *event, const char *header_name) +{ + esl_event_header_t *hp, *lp = NULL, *tp; + esl_status_t status = ESL_FAIL; + int x = 0; + esl_ssize_t hlen = -1; + unsigned long hash = 0; + + tp = event->headers; + while (tp) { + hp = tp; + tp = tp->next; + + x++; + esl_assert(x < 1000); + hash = esl_ci_hashfunc_default(header_name, &hlen); + + if ((!hp->hash || hash == hp->hash) && !strcasecmp(header_name, hp->name)) { + if (lp) { + lp->next = hp->next; + } else { + event->headers = hp->next; + } + if (hp == event->last_header || !hp->next) { + event->last_header = lp; + } + FREE(hp->name); + FREE(hp->value); + memset(hp, 0, sizeof(*hp)); + FREE(hp); + + status = ESL_SUCCESS; + } else { + lp = hp; + } + } + + return status; +} + +esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, char *data) +{ + esl_event_header_t *header; + esl_ssize_t hlen = -1; + + header = ALLOC(sizeof(*header)); + esl_assert(header); + + memset(header, 0, sizeof(*header)); + + header->name = DUP(header_name); + header->value = data; + header->hash = esl_ci_hashfunc_default(header->name, &hlen); + + if (stack == ESL_STACK_TOP) { + header->next = event->headers; + event->headers = header; + if (!event->last_header) { + event->last_header = header; + } + } else { + if (event->last_header) { + event->last_header->next = header; + } else { + event->headers = header; + header->next = NULL; + } + event->last_header = header; + } + + return ESL_SUCCESS; +} + +esl_status_t esl_event_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *fmt, ...) +{ + int ret = 0; + char *data; + va_list ap; + + va_start(ap, fmt); + ret = vasprintf(&data, fmt, ap); + va_end(ap); + + if (ret == -1) { + return ESL_FAIL; + } + + return esl_event_base_add_header(event, stack, header_name, data); +} + +esl_status_t esl_event_add_header_string(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *data) +{ + if (data) { + return esl_event_base_add_header(event, stack, header_name, DUP(data)); + } + return ESL_FAIL; +} + +esl_status_t esl_event_add_body(esl_event_t *event, const char *fmt, ...) +{ + int ret = 0; + char *data; + + va_list ap; + if (fmt) { + va_start(ap, fmt); + ret = vasprintf(&data, fmt, ap); + va_end(ap); + + if (ret == -1) { + return ESL_FAIL; + } else { + esl_safe_free(event->body); + event->body = data; + return ESL_SUCCESS; + } + } else { + return ESL_FAIL; + } +} + +void esl_event_destroy(esl_event_t **event) +{ + esl_event_t *ep = *event; + esl_event_header_t *hp, *this; + + if (ep) { + for (hp = ep->headers; hp;) { + this = hp; + hp = hp->next; + FREE(this->name); + FREE(this->value); + memset(this, 0, sizeof(*this)); + FREE(this); + } + FREE(ep->body); + FREE(ep->subclass_name); + memset(ep, 0, sizeof(*ep)); + FREE(ep); + } + *event = NULL; +} + + + +esl_status_t esl_event_dup(esl_event_t **event, esl_event_t *todup) +{ + esl_event_header_t *header, *hp, *hp2, *last = NULL; + + if (esl_event_create_subclass(event, todup->event_id, todup->subclass_name) != ESL_SUCCESS) { + return ESL_FAIL; + } + + if (todup->subclass_name) { + (*event)->subclass_name = DUP(todup->subclass_name); + } + (*event)->event_user_data = todup->event_user_data; + (*event)->bind_user_data = todup->bind_user_data; + + hp2 = (*event)->headers; + + for (hp = todup->headers; hp; hp = hp->next) { + header = ALLOC(sizeof(*header)); + esl_assert(header); + + memset(header, 0, sizeof(*header)); + + header->name = DUP(hp->name); + header->value = DUP(hp->value); + + if (last) { + last->next = header; + } else { + (*event)->headers = header; + } + + (*event)->last_header = last = header; + } + + if (todup->body) { + (*event)->body = DUP(todup->body); + } + + (*event)->key = todup->key; + + return ESL_SUCCESS; +} + +esl_status_t esl_event_serialize(esl_event_t *event, char **str, esl_bool_t encode) +{ + size_t len = 0; + esl_event_header_t *hp; + size_t llen = 0, dlen = 0, blocksize = 512, encode_len = 1536, new_len = 0; + char *buf; + char *encode_buf = NULL; /* used for url encoding of variables to make sure unsafe things stay out of the serialized copy */ + + *str = NULL; + + dlen = blocksize * 2; + + if (!(buf = malloc(dlen))) { + return ESL_FAIL; + } + + /* go ahead and give ourselves some space to work with, should save a few reallocs */ + if (!(encode_buf = malloc(encode_len))) { + esl_safe_free(buf); + return ESL_FAIL; + } + + /* esl_log_printf(ESL_CHANNEL_LOG, ESL_LOG_INFO, "hit serialized!.\n"); */ + for (hp = event->headers; hp; hp = hp->next) { + /* + * grab enough memory to store 3x the string (url encode takes one char and turns it into %XX) + * so we could end up with a string that is 3 times the originals length, unlikely but rather + * be safe than destroy the string, also add one for the null. And try to be smart about using + * the memory, allocate and only reallocate if we need more. This avoids an alloc, free CPU + * destroying loop. + */ + new_len = (strlen(hp->value) * 3) + 1; + + if (encode_len < new_len) { + char *tmp; + /* esl_log_printf(ESL_CHANNEL_LOG, ESL_LOG_INFO, "Allocing %d was %d.\n", ((strlen(hp->value) * 3) + 1), encode_len); */ + /* we can use realloc for initial alloc as well, if encode_buf is zero it treats it as a malloc */ + + /* keep track of the size of our allocation */ + encode_len = new_len; + + if (!(tmp = realloc(encode_buf, encode_len))) { + /* oh boy, ram's gone, give back what little we grabbed and bail */ + esl_safe_free(buf); + esl_safe_free(encode_buf); + return ESL_FAIL; + } + + encode_buf = tmp; + } + + /* handle any bad things in the string like newlines : etc that screw up the serialized format */ + if (encode) { + esl_url_encode(hp->value, encode_buf, encode_len); + } else { + snprintf(encode_buf, encode_len, "[%s]", hp->value); + } + + llen = strlen(hp->name) + strlen(encode_buf) + 8; + + if ((len + llen) > dlen) { + char *m; + dlen += (blocksize + (len + llen)); + if ((m = realloc(buf, dlen))) { + buf = m; + } else { + /* we seem to be out of memory trying to resize the serialize string, give back what we already have and give up */ + esl_safe_free(buf); + esl_safe_free(encode_buf); + return ESL_FAIL; + } + } + + snprintf(buf + len, dlen - len, "%s: %s\n", hp->name, *encode_buf == '\0' ? "_undef_" : encode_buf); + len = strlen(buf); + } + + /* we are done with the memory we used for encoding, give it back */ + esl_safe_free(encode_buf); + + if (event->body) { + int blen = (int) strlen(event->body); + llen = blen; + + if (blen) { + llen += 25; + } else { + llen += 5; + } + + if ((len + llen) > dlen) { + char *m; + dlen += (blocksize + (len + llen)); + if ((m = realloc(buf, dlen))) { + buf = m; + } else { + esl_safe_free(buf); + return ESL_FAIL; + } + } + + if (blen) { + snprintf(buf + len, dlen - len, "\n%s", event->body); + } else { + snprintf(buf + len, dlen - len, "\n"); + } + } else { + snprintf(buf + len, dlen - len, "\n"); + } + + *str = buf; + + return ESL_SUCCESS; +} + + +/* 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: + */ Added: freeswitch/trunk/libs/esl/src/esl_threadmutex.c ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/src/esl_threadmutex.c Fri Dec 19 19:35:09 2008 @@ -0,0 +1,237 @@ +/* + * Cross Platform Thread/Mutex abstraction + * Copyright(C) 2007 Michael Jerris + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so. + * + * This work is provided under this license on an "as is" basis, without warranty of any kind, + * either expressed or implied, including, without limitation, warranties that the covered code + * is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire + * risk as to the quality and performance of the covered code is with you. Should any covered + * code prove defective in any respect, you (not the initial developer or any other contributor) + * assume the cost of any necessary servicing, repair or correction. This disclaimer of warranty + * constitutes an essential part of this license. No use of any covered code is authorized hereunder + * except under this disclaimer. + * + */ + +#ifdef WIN32 +/* required for TryEnterCriticalSection definition. Must be defined before windows.h include */ +#define _WIN32_WINNT 0x0400 +#endif + +#include "esl.h" +#include "esl_threadmutex.h" + +#ifdef WIN32 +#include + +#define ESL_THREAD_CALLING_CONVENTION __stdcall + +struct esl_mutex { + CRITICAL_SECTION mutex; +}; + +#else + +#include + +#define ESL_THREAD_CALLING_CONVENTION + +struct esl_mutex { + pthread_mutex_t mutex; +}; + +#endif + +struct esl_thread { +#ifdef WIN32 + void *handle; +#else + pthread_t handle; +#endif + void *private_data; + esl_thread_function_t function; + size_t stack_size; +#ifndef WIN32 + pthread_attr_t attribute; +#endif +}; + +size_t thread_default_stacksize = 0; + +void esl_thread_override_default_stacksize(size_t size) +{ + thread_default_stacksize = size; +} + +static void * ESL_THREAD_CALLING_CONVENTION thread_launch(void *args) +{ + void *exit_val; + esl_thread_t *thread = (esl_thread_t *)args; + exit_val = thread->function(thread, thread->private_data); +#ifndef WIN32 + pthread_attr_destroy(&thread->attribute); +#endif + free(thread); + + return exit_val; +} + +esl_status_t esl_thread_create_detached(esl_thread_function_t func, void *data) +{ + return esl_thread_create_detached_ex(func, data, thread_default_stacksize); +} + +esl_status_t esl_thread_create_detached_ex(esl_thread_function_t func, void *data, size_t stack_size) +{ + esl_thread_t *thread = NULL; + esl_status_t status = ESL_FAIL; + + if (!func || !(thread = (esl_thread_t *)malloc(sizeof(esl_thread_t)))) { + goto done; + } + + thread->private_data = data; + thread->function = func; + thread->stack_size = stack_size; + +#if defined(WIN32) + thread->handle = (void *)_beginthreadex(NULL, (unsigned)thread->stack_size, (unsigned int (__stdcall *)(void *))thread_launch, thread, 0, NULL); + if (!thread->handle) { + goto fail; + } + CloseHandle(thread->handle); + + status = ESL_SUCCESS; + goto done; +#else + + if (pthread_attr_init(&thread->attribute) != 0) goto fail; + + if (pthread_attr_setdetachstate(&thread->attribute, PTHREAD_CREATE_DETACHED) != 0) goto failpthread; + + if (thread->stack_size && pthread_attr_setstacksize(&thread->attribute, thread->stack_size) != 0) goto failpthread; + + if (pthread_create(&thread->handle, &thread->attribute, thread_launch, thread) != 0) goto failpthread; + + status = ESL_SUCCESS; + goto done; + failpthread: + pthread_attr_destroy(&thread->attribute); +#endif + + fail: + if (thread) { + free(thread); + } + done: + return status; +} + + +esl_status_t esl_mutex_create(esl_mutex_t **mutex) +{ + esl_status_t status = ESL_FAIL; +#ifndef WIN32 + pthread_mutexattr_t attr; +#endif + esl_mutex_t *check = NULL; + + check = (esl_mutex_t *)malloc(sizeof(**mutex)); + if (!check) + goto done; +#ifdef WIN32 + InitializeCriticalSection(&check->mutex); +#else + if (pthread_mutexattr_init(&attr)) + goto done; + + if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE)) + goto fail; + + if (pthread_mutex_init(&check->mutex, &attr)) + goto fail; + + goto success; + + fail: + pthread_mutexattr_destroy(&attr); + goto done; + + success: +#endif + *mutex = check; + status = ESL_SUCCESS; + + done: + return status; +} + +esl_status_t esl_mutex_destroy(esl_mutex_t **mutex) +{ + esl_mutex_t *mp = *mutex; + *mutex = NULL; + if (!mp) { + return ESL_FAIL; + } +#ifdef WIN32 + DeleteCriticalSection(&mp->mutex); +#else + if (pthread_mutex_destroy(&mp->mutex)) + return ESL_FAIL; +#endif + free(mp); + return ESL_SUCCESS; +} + +esl_status_t esl_mutex_lock(esl_mutex_t *mutex) +{ +#ifdef WIN32 + EnterCriticalSection(&mutex->mutex); +#else + if (pthread_mutex_lock(&mutex->mutex)) + return ESL_FAIL; +#endif + return ESL_SUCCESS; +} + +esl_status_t esl_mutex_trylock(esl_mutex_t *mutex) +{ +#ifdef WIN32 + if (!TryEnterCriticalSection(&mutex->mutex)) + return ESL_FAIL; +#else + if (pthread_mutex_trylock(&mutex->mutex)) + return ESL_FAIL; +#endif + return ESL_SUCCESS; +} + +esl_status_t esl_mutex_unlock(esl_mutex_t *mutex) +{ +#ifdef WIN32 + LeaveCriticalSection(&mutex->mutex); +#else + if (pthread_mutex_unlock(&mutex->mutex)) + return ESL_FAIL; +#endif + return ESL_SUCCESS; +} + + + + + +/* 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 expandtab: + */ Added: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/src/include/esl.h Fri Dec 19 19:35:09 2008 @@ -0,0 +1,233 @@ +/* + * 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 + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * 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 _ESL_H_ +#define _ESL_H_ + +typedef struct esl_event_header esl_event_header_t; +typedef struct esl_event esl_event_t; + + +#define ESL_SEQ_ESC "\033[" +/* Ansi Control character suffixes */ +#define ESL_SEQ_HOME_CHAR 'H' +#define ESL_SEQ_HOME_CHAR_STR "H" +#define ESL_SEQ_CLEARLINE_CHAR '1' +#define ESL_SEQ_CLEARLINE_CHAR_STR "1" +#define ESL_SEQ_CLEARLINEEND_CHAR "K" +#define ESL_SEQ_CLEARSCR_CHAR0 '2' +#define ESL_SEQ_CLEARSCR_CHAR1 'J' +#define ESL_SEQ_CLEARSCR_CHAR "2J" +#define ESL_SEQ_DEFAULT_COLOR ESL_SEQ_ESC ESL_SEQ_END_COLOR /* Reset to Default fg/bg color */ +#define ESL_SEQ_AND_COLOR ";" /* To add multiple color definitions */ +#define ESL_SEQ_END_COLOR "m" /* To end color definitions */ +/* Foreground colors values */ +#define ESL_SEQ_F_BLACK "30" +#define ESL_SEQ_F_RED "31" +#define ESL_SEQ_F_GREEN "32" +#define ESL_SEQ_F_YELLOW "33" +#define ESL_SEQ_F_BLUE "34" +#define ESL_SEQ_F_MAGEN "35" +#define ESL_SEQ_F_CYAN "36" +#define ESL_SEQ_F_WHITE "37" +/* Background colors values */ +#define ESL_SEQ_B_BLACK "40" +#define ESL_SEQ_B_RED "41" +#define ESL_SEQ_B_GREEN "42" +#define ESL_SEQ_B_YELLOW "43" +#define ESL_SEQ_B_BLUE "44" +#define ESL_SEQ_B_MAGEN "45" +#define ESL_SEQ_B_CYAN "46" +#define ESL_SEQ_B_WHITE "47" +/* Preset escape sequences - Change foreground colors only */ +#define ESL_SEQ_FBLACK ESL_SEQ_ESC ESL_SEQ_F_BLACK ESL_SEQ_END_COLOR +#define ESL_SEQ_FRED ESL_SEQ_ESC ESL_SEQ_F_RED ESL_SEQ_END_COLOR +#define ESL_SEQ_FGREEN ESL_SEQ_ESC ESL_SEQ_F_GREEN ESL_SEQ_END_COLOR +#define ESL_SEQ_FYELLOW ESL_SEQ_ESC ESL_SEQ_F_YELLOW ESL_SEQ_END_COLOR +#define ESL_SEQ_FBLUE ESL_SEQ_ESC ESL_SEQ_F_BLUE ESL_SEQ_END_COLOR +#define ESL_SEQ_FMAGEN ESL_SEQ_ESC ESL_SEQ_F_MAGEN ESL_SEQ_END_COLOR +#define ESL_SEQ_FCYAN ESL_SEQ_ESC ESL_SEQ_F_CYAN ESL_SEQ_END_COLOR +#define ESL_SEQ_FWHITE ESL_SEQ_ESC ESL_SEQ_F_WHITE ESL_SEQ_END_COLOR +#define ESL_SEQ_BBLACK ESL_SEQ_ESC ESL_SEQ_B_BLACK ESL_SEQ_END_COLOR +#define ESL_SEQ_BRED ESL_SEQ_ESC ESL_SEQ_B_RED ESL_SEQ_END_COLOR +#define ESL_SEQ_BGREEN ESL_SEQ_ESC ESL_SEQ_B_GREEN ESL_SEQ_END_COLOR +#define ESL_SEQ_BYELLOW ESL_SEQ_ESC ESL_SEQ_B_YELLOW ESL_SEQ_END_COLOR +#define ESL_SEQ_BBLUE ESL_SEQ_ESC ESL_SEQ_B_BLUE ESL_SEQ_END_COLOR +#define ESL_SEQ_BMAGEN ESL_SEQ_ESC ESL_SEQ_B_MAGEN ESL_SEQ_END_COLOR +#define ESL_SEQ_BCYAN ESL_SEQ_ESC ESL_SEQ_B_CYAN ESL_SEQ_END_COLOR +#define ESL_SEQ_BWHITE ESL_SEQ_ESC ESL_SEQ_B_WHITE ESL_SEQ_END_COLOR +/* Preset escape sequences */ +#define ESL_SEQ_HOME ESL_SEQ_ESC ESL_SEQ_HOME_CHAR_STR +#define ESL_SEQ_CLEARLINE ESL_SEQ_ESC ESL_SEQ_CLEARLINE_CHAR_STR +#define ESL_SEQ_CLEARLINEEND ESL_SEQ_ESC ESL_SEQ_CLEARLINEEND_CHAR +#define ESL_SEQ_CLEARSCR ESL_SEQ_ESC ESL_SEQ_CLEARSCR_CHAR ESL_SEQ_HOME + +#if !defined(_XOPEN_SOURCE) && !defined(__FreeBSD__) && !defined(__NetBSD__) +#define _XOPEN_SOURCE 600 +#endif + +#ifndef HAVE_STRINGS_H +#define HAVE_STRINGS_H 1 +#endif +#ifndef HAVE_SYS_SOCKET_H +#define HAVE_SYS_SOCKET_H 1 +#endif + +#ifndef __WINDOWS__ +#if defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32) +#define __WINDOWS__ +#endif +#endif + +#ifdef _MSC_VER +#ifndef __inline__ +#define __inline__ __inline +#endif +#if (_MSC_VER >= 1400) /* VC8+ */ +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE +#endif +#ifndef _CRT_NONSTDC_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE +#endif +#endif +#ifndef strcasecmp +#define strcasecmp(s1, s2) _stricmp(s1, s2) +#endif +#ifndef strncasecmp +#define strncasecmp(s1, s2, n) _strnicmp(s1, s2, n) +#endif +#ifndef snprintf +#define snprintf _snprintf +#endif +#ifndef S_IRUSR +#define S_IRUSR _S_IREAD +#endif +#ifndef S_IWUSR +#define S_IWUSR _S_IWRITE +#endif +#undef HAVE_STRINGS_H +#undef HAVE_SYS_SOCKET_H +#endif + +#include +#ifndef WIN32 +#include +#endif + +#include +#include +#include +#ifdef HAVE_STRINGS_H +#include +#endif +#include + + +#define esl_assert(_x) assert(_x) +#define esl_safe_free(_x) if (_x) free(_x); _x = NULL +#define esl_strlen_zero(s) (!s || *(s) == '\0') +#define esl_strlen_zero_buf(s) (*(s) == '\0') + +#ifdef WIN32 +#include +typedef HANDLE esl_socket_t; +typedef unsigned __int64 uint64_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int8 uint8_t; +typedef __int64 int64_t; +typedef __int32 int32_t; +typedef __int16 int16_t; +typedef __int8 int8_t; +typedef intptr_t esl_ssize_t; +typedef int esl_filehandle_t; +#else +#include +#include +#include +#include +#include +#include +#include +#define ESL_SOCK_INVALID -1 +typedef int esl_socket_t; +typedef ssize_t esl_ssize_t; +typedef int esl_filehandle_t; +#endif + +typedef int16_t esl_port_t; + +typedef enum { + ESL_SUCCESS, + ESL_FAIL +} esl_status_t; + + +typedef struct { + struct sockaddr_in sockaddr; + struct hostent hostent; + char hostbuf[256]; + esl_socket_t sock; + char err[256]; + int errno; + char header_buf[4196]; + char last_reply[1024]; + esl_event_t *last_event; + int debug; + int connected; +} esl_handle_t; + +typedef enum { + ESL_TRUE = 1, + ESL_FALSE = 0 +} esl_bool_t; + + +#include "esl_event.h" +#include "esl_threadmutex.h" + +size_t esl_url_encode(const char *url, char *buf, size_t len); +char *esl_url_decode(char *s); + +esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password); +esl_status_t esl_disconnect(esl_handle_t *handle); +esl_status_t esl_send(esl_handle_t *handle, const char *cmd); +esl_status_t esl_recv(esl_handle_t *handle); +esl_status_t esl_send_recv(esl_handle_t *handle, const char *cmd); + + +#endif + + + Added: freeswitch/trunk/libs/esl/src/include/esl_event.h ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/src/include/esl_event.h Fri Dec 19 19:35:09 2008 @@ -0,0 +1,284 @@ +/* + * 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 + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * 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 ESL_EVENT_H +#define ESL_EVENT_H + +#include + +typedef enum { + ESL_STACK_BOTTOM, + ESL_STACK_TOP +} esl_stack_t; + +typedef enum { + ESL_EVENT_CUSTOM, + ESL_EVENT_CHANNEL_CREATE, + ESL_EVENT_CHANNEL_DESTROY, + ESL_EVENT_CHANNEL_STATE, + ESL_EVENT_CHANNEL_ANSWER, + ESL_EVENT_CHANNEL_HANGUP, + ESL_EVENT_CHANNEL_EXECUTE, + ESL_EVENT_CHANNEL_EXECUTE_COMPLETE, + ESL_EVENT_CHANNEL_BRIDGE, + ESL_EVENT_CHANNEL_UNBRIDGE, + ESL_EVENT_CHANNEL_PROGRESS, + ESL_EVENT_CHANNEL_PROGRESS_MEDIA, + ESL_EVENT_CHANNEL_OUTGOING, + ESL_EVENT_CHANNEL_PARK, + ESL_EVENT_CHANNEL_UNPARK, + ESL_EVENT_CHANNEL_APPLICATION, + ESL_EVENT_CHANNEL_ORIGINATE, + ESL_EVENT_CHANNEL_UUID, + ESL_EVENT_API, + ESL_EVENT_LOG, + ESL_EVENT_INBOUND_CHAN, + ESL_EVENT_OUTBOUND_CHAN, + ESL_EVENT_STARTUP, + ESL_EVENT_SHUTDOWN, + ESL_EVENT_PUBLISH, + ESL_EVENT_UNPUBLISH, + ESL_EVENT_TALK, + ESL_EVENT_NOTALK, + ESL_EVENT_SESSION_CRASH, + ESL_EVENT_MODULE_LOAD, + ESL_EVENT_MODULE_UNLOAD, + ESL_EVENT_DTMF, + ESL_EVENT_MESSAGE, + ESL_EVENT_PRESENCE_IN, + ESL_EVENT_NOTIFY_IN, + ESL_EVENT_PRESENCE_OUT, + ESL_EVENT_PRESENCE_PROBE, + ESL_EVENT_MESSAGE_WAITING, + ESL_EVENT_MESSAGE_QUERY, + ESL_EVENT_ROSTER, + ESL_EVENT_CODEC, + ESL_EVENT_BACKGROUND_JOB, + ESL_EVENT_DETECTED_SPEECH, + ESL_EVENT_DETECTED_TONE, + ESL_EVENT_PRIVATE_COMMAND, + ESL_EVENT_HEARTBEAT, + ESL_EVENT_TRAP, + ESL_EVENT_ADD_SCHEDULE, + ESL_EVENT_DEL_SCHEDULE, + ESL_EVENT_EXE_SCHEDULE, + ESL_EVENT_RE_SCHEDULE, + ESL_EVENT_RELOADXML, + ESL_EVENT_NOTIFY, + ESL_EVENT_SEND_MESSAGE, + ESL_EVENT_RECV_MESSAGE, + ESL_EVENT_REQUEST_PARAMS, + ESL_EVENT_CHANNEL_DATA, + ESL_EVENT_GENERAL, + ESL_EVENT_COMMAND, + ESL_EVENT_SESSION_HEARTBEAT, + ESL_EVENT_ALL +} esl_event_types_t; + +typedef enum { + ESL_PRIORITY_NORMAL, + ESL_PRIORITY_LOW, + ESL_PRIORITY_HIGH +} esl_priority_t; + +/*! \brief An event Header */ + struct esl_event_header { + /*! the header name */ + char *name; + /*! the header value */ + char *value; + /*! hash of the header name */ + unsigned long hash; + struct esl_event_header *next; +}; + + +/*! \brief Representation of an event */ +struct esl_event { + /*! the event id (descriptor) */ + esl_event_types_t event_id; + /*! the priority of the event */ + esl_priority_t priority; + /*! the owner of the event */ + char *owner; + /*! the subclass of the event */ + char *subclass_name; + /*! the event headers */ + esl_event_header_t *headers; + /*! the event headers tail pointer */ + esl_event_header_t *last_header; + /*! the body of the event */ + char *body; + /*! user data from the subclass provider */ + void *bind_user_data; + /*! user data from the event sender */ + void *event_user_data; + /*! unique key */ + unsigned long key; + struct esl_event *next; +}; + + + +#define ESL_EVENT_SUBCLASS_ANY NULL + +/*! + \brief Create an event + \param event a NULL pointer on which to create the event + \param event_id the event id enumeration of the desired event + \param subclass_name the subclass name for custom event (only valid when event_id is ESL_EVENT_CUSTOM) + \return ESL_STATUS_SUCCESS on success +*/ +esl_status_t esl_event_create_subclass(esl_event_t **event, esl_event_types_t event_id, const char *subclass_name); + +/*! + \brief Set the priority of an event + \param event the event to set the priority on + \param priority the event priority + \return ESL_STATUS_SUCCESS +*/ +esl_status_t esl_event_set_priority(esl_event_t *event, esl_priority_t priority); + +/*! + \brief Retrieve a header value from an event + \param event the event to read the header from + \param header_name the name of the header to read + \return the value of the requested header +*/ +char *esl_event_get_header(esl_event_t *event, const char *header_name); + +/*! + \brief Retrieve the body value from an event + \param event the event to read the body from + \return the value of the body or NULL +*/ +char *esl_event_get_body(esl_event_t *event); + +/*! + \brief Add a header to an event + \param event the event to add the header to + \param stack the stack sense (stack it on the top or on the bottom) + \param header_name the name of the header to add + \param fmt the value of the header (varargs see standard sprintf family) + \return ESL_STATUS_SUCCESS if the header was added +*/ +esl_status_t esl_event_add_header(esl_event_t *event, esl_stack_t stack, + const char *header_name, const char *fmt, ...); //PRINTF_FUNCTION(4, 5); + +/*! + \brief Add a string header to an event + \param event the event to add the header to + \param stack the stack sense (stack it on the top or on the bottom) + \param header_name the name of the header to add + \param data the value of the header + \return ESL_STATUS_SUCCESS if the header was added +*/ +esl_status_t esl_event_add_header_string(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *data); + +esl_status_t esl_event_del_header(esl_event_t *event, const char *header_name); + +/*! + \brief Destroy an event + \param event pointer to the pointer to event to destroy +*/ +void esl_event_destroy(esl_event_t **event); +#define esl_event_safe_destroy(_event) if (_event) esl_event_destroy(_event) + +/*! + \brief Duplicate an event + \param event a NULL pointer on which to duplicate the event + \param todup an event to duplicate + \return ESL_STATUS_SUCCESS if the event was duplicated +*/ +esl_status_t esl_event_dup(esl_event_t **event, esl_event_t *todup); + +/*! + \brief Render the name of an event id enumeration + \param event the event id to render the name of + \return the rendered name +*/ +const char *esl_event_name(esl_event_types_t event); + +/*! + \brief return the event id that matches a given event name + \param name the name of the event + \param type the event id to return + \return ESL_STATUS_SUCCESS if there was a match +*/ +esl_status_t esl_name_event(const char *name, esl_event_types_t *type); + +/*! + \brief Render a string representation of an event sutable for printing or network transport + \param event the event to render + \param str a string pointer to point at the allocated data + \param encode url encode the headers + \return ESL_STATUS_SUCCESS if the operation was successful + \note you must free the resulting string when you are finished with it +*/ +esl_status_t esl_event_serialize(esl_event_t *event, char **str, esl_bool_t encode); + +/*! + \brief Add a body to an event + \param event the event to add to body to + \param fmt optional body of the event (varargs see standard sprintf family) + \return ESL_STATUS_SUCCESS if the body was added to the event + \note the body parameter can be shadowed by the esl_event_reserve_subclass_detailed function +*/ +esl_status_t esl_event_add_body(esl_event_t *event, const char *fmt, ...); + +/*! + \brief Create a new event assuming it will not be custom event and therefore hiding the unused parameters + \param event a NULL pointer on which to create the event + \param id the event id enumeration of the desired event + \return ESL_STATUS_SUCCESS on success +*/ +#define esl_event_create(event, id) esl_event_create_subclass(event, id, ESL_EVENT_SUBCLASS_ANY) + +const char *esl_priority_name(esl_priority_t priority); + +///\} + + +#endif + +/* 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: + */ + Added: freeswitch/trunk/libs/esl/src/include/esl_threadmutex.h ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/src/include/esl_threadmutex.h Fri Dec 19 19:35:09 2008 @@ -0,0 +1,51 @@ +/* + * Cross Platform Thread/Mutex abstraction + * Copyright(C) 2007 Michael Jerris + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so. + * + * This work is provided under this license on an "as is" basis, without warranty of any kind, + * either expressed or implied, including, without limitation, warranties that the covered code + * is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire + * risk as to the quality and performance of the covered code is with you. Should any covered + * code prove defective in any respect, you (not the initial developer or any other contributor) + * assume the cost of any necessary servicing, repair or correction. This disclaimer of warranty + * constitutes an essential part of this license. No use of any covered code is authorized hereunder + * except under this disclaimer. + * + */ + + +#ifndef _ESL_THREADMUTEX_H +#define _ESL_THREADMUTEX_H + +#include "esl.h" + +typedef struct esl_mutex esl_mutex_t; +typedef struct esl_thread esl_thread_t; +typedef void *(*esl_thread_function_t) (esl_thread_t *, void *); + +esl_status_t esl_thread_create_detached(esl_thread_function_t func, void *data); +esl_status_t esl_thread_create_detached_ex(esl_thread_function_t func, void *data, size_t stack_size); +void esl_thread_override_default_stacksize(size_t size); +esl_status_t esl_mutex_create(esl_mutex_t **mutex); +esl_status_t esl_mutex_destroy(esl_mutex_t **mutex); +esl_status_t esl_mutex_lock(esl_mutex_t *mutex); +esl_status_t esl_mutex_trylock(esl_mutex_t *mutex); +esl_status_t esl_mutex_unlock(esl_mutex_t *mutex); + +#endif + +/* 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 expandtab: + */ + Added: freeswitch/trunk/libs/esl/testclient.c ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/testclient.c Fri Dec 19 19:35:09 2008 @@ -0,0 +1,19 @@ +#include +#include +#include + + +int main(void) +{ + esl_handle_t handle = {0}; + + handle.debug = 1; + + esl_connect(&handle, "localhost", 8021, "ClueCon"); + + esl_send_recv(&handle, "api status\n\n"); + + esl_disconnect(&handle); + + return 0; +} From mrene at freeswitch.org Fri Dec 19 18:14:12 2008 From: mrene at freeswitch.org (FreeSWITCH SVN) Date: Fri, 19 Dec 2008 21:14:12 -0500 Subject: [Freeswitch-trunk] [commit] r10891 - freeswitch/trunk/src/mod/applications/mod_limit Message-ID: Author: mrene Date: Fri Dec 19 21:14:10 2008 New Revision: 10891 Log: Fix leak and remove extra \n Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c (original) +++ freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Fri Dec 19 21:14:10 2008 @@ -240,17 +240,17 @@ switch_core_db_test_reactive(db, "select * from limit_data", NULL, limit_sql); switch_core_db_test_reactive(db, "select * from db_data", NULL, db_sql); switch_core_db_test_reactive(db, "select * from group_data", NULL, group_sql); - - switch_core_db_exec(db, "create index if not exists ld_hostname on limit_data (hostname)", NULL, NULL, NULL); - switch_core_db_exec(db, "create index if not exists ld_uuid on limit_data (uuid)", NULL, NULL, NULL); - switch_core_db_exec(db, "create index if not exists ld_realm on limit_data (realm)", NULL, NULL, NULL); - switch_core_db_exec(db, "create index if not exists ld_id on limit_data (id)", NULL, NULL, NULL); - - switch_core_db_exec(db, "create index if not exists dd_realm on db_data (realm)", NULL, NULL, NULL); - switch_core_db_exec(db, "create index if not exists dd_data_key on db_data (data_key)", NULL, NULL, NULL); - - switch_core_db_exec(db, "create index if not exists gd_groupname on group_data (groupname)", NULL, NULL, NULL); - switch_core_db_exec(db, "create index if not exists gd_url on group_data (url)", NULL, NULL, NULL); + + switch_core_db_exec(db, "create index if not exists ld_hostname on limit_data (hostname)", NULL, NULL, NULL); + switch_core_db_exec(db, "create index if not exists ld_uuid on limit_data (uuid)", NULL, NULL, NULL); + switch_core_db_exec(db, "create index if not exists ld_realm on limit_data (realm)", NULL, NULL, NULL); + switch_core_db_exec(db, "create index if not exists ld_id on limit_data (id)", NULL, NULL, NULL); + + switch_core_db_exec(db, "create index if not exists dd_realm on db_data (realm)", NULL, NULL, NULL); + switch_core_db_exec(db, "create index if not exists dd_data_key on db_data (data_key)", NULL, NULL, NULL); + + switch_core_db_exec(db, "create index if not exists gd_groupname on group_data (groupname)", NULL, NULL, NULL); + switch_core_db_exec(db, "create index if not exists gd_url on group_data (url)", NULL, NULL, NULL); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open SQL Database!\n"); @@ -773,7 +773,7 @@ if (argc < 2) { stream->write_function(stream, "USAGE: limit_usage %s\n", LIMIT_USAGE_USAGE); - return SWITCH_STATUS_SUCCESS; + goto end; } @@ -786,7 +786,10 @@ limit_execute_sql_callback(NULL, sql, sql2str_callback, &cbt); switch_safe_free(sql); - stream->write_function(stream, "%s\n", buf); + stream->write_function(stream, "%s", buf); + +end: + switch_safe_free(mydata); return SWITCH_STATUS_SUCCESS; } From anthm at freeswitch.org Fri Dec 19 21:24:55 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sat, 20 Dec 2008 00:24:55 -0500 Subject: [Freeswitch-trunk] [commit] r10892 - in freeswitch/trunk/libs/esl: . src src/include Message-ID: Author: anthm Date: Sat Dec 20 00:24:51 2008 New Revision: 10892 Log: work in progress Added: freeswitch/trunk/libs/esl/src/esl_config.c freeswitch/trunk/libs/esl/src/include/esl_config.h Modified: freeswitch/trunk/libs/esl/Makefile freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/libs/esl/Makefile ============================================================================== --- freeswitch/trunk/libs/esl/Makefile (original) +++ freeswitch/trunk/libs/esl/Makefile Sat Dec 20 00:24:51 2008 @@ -4,7 +4,7 @@ CFLAGS=$(INCS) -g -ggdb -I$(LIBEDIT_DIR)/src/ MYLIB=libesl.a -OBJS=src/esl.o src/esl_event.o src/esl_threadmutex.o +OBJS=src/esl.o src/esl_event.o src/esl_threadmutex.o src/esl_config.o all: $(MYLIB) fs_cli Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Sat Dec 20 00:24:51 2008 @@ -61,14 +61,18 @@ esl_mutex_unlock(global_mutex); goto done; } - - if (activity && FD_ISSET(handle->sock, &rfds)) { - esl_recv(handle); + if (esl_recv(handle)) { + running = thread_running = 0; + esl_mutex_unlock(global_mutex); + esl_log(ESL_LOG_WARNING, "Disconnected.\n"); + goto done; + } + if (handle->last_event) { const char *type = esl_event_get_header(handle->last_event, "content-type"); if (!strcasecmp(type, "log/data")) { - int level; + int level = 0; if (strstr(handle->last_event->body, "[CONSOLE]")) { level = 0; } else if (strstr(handle->last_event->body, "[ALERT]")) { @@ -88,6 +92,10 @@ } printf("%s%s%s", COLORS[level], handle->last_event->body, ESL_SEQ_DEFAULT_COLOR); + } else if (0 && !strcasecmp(type, "text/disconnect-notice")) { + running = thread_running = 0; + } else { + printf("INCOMING DATA [%s]\n%s", type, handle->last_event->body); } } @@ -106,28 +114,29 @@ static int process_command(esl_handle_t *handle, const char *cmd) { - if (!strcasecmp(cmd, "exit")) { + if ( + !strcasecmp(cmd, "exit") || + !strcasecmp(cmd, "quit") || + !strcasecmp(cmd, "bye") + ) { return -1; } - if (!strncasecmp(cmd, "loglevel", 8)) { - const char *level = cmd + 8; - - while(*level == ' ') level++; - if (!esl_strlen_zero(level)) { - char cb[128] = ""; - - snprintf(cb, sizeof(cb), "log %s\n\n", level); - esl_mutex_lock(global_mutex); - esl_send_recv(handle, cb); - printf("%s\n", handle->last_reply); - esl_mutex_unlock(global_mutex); - } - + if ( + !strncasecmp(cmd, "event", 5) || + !strncasecmp(cmd, "noevent", 7) || + !strncasecmp(cmd, "nixevent", 8) || + !strncasecmp(cmd, "log", 3) || + !strncasecmp(cmd, "nolog", 5) || + !strncasecmp(cmd, "filter", 6) + ) { + esl_mutex_lock(global_mutex); + esl_send_recv(handle, cmd); + printf("%s\n", handle->last_reply); + esl_mutex_unlock(global_mutex); goto end; } - - + printf("Unknown command [%s]\n", cmd); end: @@ -136,17 +145,35 @@ } -int main(void) +typedef struct { + char host[128]; + char pass[128]; + esl_port_t port; +} cli_profile_t; + +static cli_profile_t profiles[128] = { 0 }; +static int pcount; + +int main(int argc, char *argv[]) { esl_handle_t handle = {0}; int count; const char *line; char cmd_str[1024] = ""; char hfile[512] = "/tmp/fs_cli_history"; + char cfile[512] = "/tmp/fs_cli_config"; char *home = getenv("HOME"); - + esl_config_t cfg; + cli_profile_t *profile = &profiles[0]; + + strncpy(profiles[0].host, "localhost", sizeof(profiles[0].host)); + strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass)); + profiles[0].port = 8021; + pcount = 1; + if (home) { snprintf(hfile, sizeof(hfile), "%s/.fs_cli_history", home); + snprintf(cfile, sizeof(cfile), "%s/.fs_cli_config", home); } esl_mutex_create(&global_mutex); @@ -155,15 +182,27 @@ gethostname(hostname, sizeof(hostname)); handle.debug = 0; - - // um ya add some command line parsing for host port and pass + + if (esl_config_open_file(&cfg, cfile)) { + char *var, *val; + while (esl_config_next_pair(&cfg, &var, &val)) { + + } + esl_config_close_file(&cfg); + } - if (esl_connect(&handle, "localhost", 8021, "ClueCon")) { + + if (esl_connect(&handle, profile->host, profile->port, profile->pass)) { printf("Error Connecting [%s]\n", handle.err); - goto done; + return -1; } - + + + if (handle.debug) { + esl_global_set_default_logger(7); + } + esl_thread_create_detached(msg_thread_run, &handle); el = el_init(__FILE__, stdout, stdout, stdout); Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Sat Dec 20 00:24:51 2008 @@ -32,6 +32,7 @@ */ #include +#include #ifndef HAVE_GETHOSTBYNAME_R extern int gethostbyname_r (const char *__name, @@ -43,6 +44,230 @@ +/* Written by Marc Espie, public domain */ +#define ESL_CTYPE_NUM_CHARS 256 + +const short _esl_C_toupper_[1 + ESL_CTYPE_NUM_CHARS] = { + EOF, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff +}; + +const short *_esl_toupper_tab_ = _esl_C_toupper_; + +int esl_toupper(int c) +{ + if ((unsigned int)c > 255) + return(c); + if (c < -1) + return EOF; + return((_esl_toupper_tab_ + 1)[c]); +} + +const short _esl_C_tolower_[1 + ESL_CTYPE_NUM_CHARS] = { + EOF, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff +}; + +const short *_esl_tolower_tab_ = _esl_C_tolower_; + +int esl_tolower(int c) +{ + if ((unsigned int)c > 255) + return(c); + if (c < -1) + return EOF; + return((_esl_tolower_tab_ + 1)[c]); +} + +const char *esl_stristr(const char *instr, const char *str) +{ +/* +** Rev History: 16/07/97 Greg Thayer Optimized +** 07/04/95 Bob Stout ANSI-fy +** 02/03/94 Fred Cole Original +** 09/01/03 Bob Stout Bug fix (lines 40-41) per Fred Bulback +** +** Hereby donated to public domain. +*/ + const char *pptr, *sptr, *start; + + if (!str || !instr) + return NULL; + + for (start = str; *start; start++) { + /* find start of pattern in string */ + for (; ((*start) && (esl_toupper(*start) != esl_toupper(*instr))); start++); + + if (!*start) + return NULL; + + pptr = instr; + sptr = start; + + while (esl_toupper(*sptr) == esl_toupper(*pptr)) { + sptr++; + pptr++; + + /* if end of pattern then pattern was found */ + if (!*pptr) + return (start); + + if (!*sptr) + return NULL; + } + } + return NULL; +} + + +static void null_logger(const char *file, const char *func, int line, int level, const char *fmt, ...) +{ + if (file && func && line && level && fmt) { + return; + } + return; +} + + +static const char *LEVEL_NAMES[] = { + "EMERG", + "ALERT", + "CRIT", + "ERROR", + "WARNING", + "NOTICE", + "INFO", + "DEBUG", + NULL +}; + +static int esl_log_level = 7; + +static const char *cut_path(const char *in) +{ + const char *p, *ret = in; + char delims[] = "/\\"; + char *i; + + for (i = delims; *i; i++) { + p = in; + while ((p = strchr(p, *i)) != 0) { + ret = ++p; + } + } + return ret; +} + + +static void default_logger(const char *file, const char *func, int line, int level, const char *fmt, ...) +{ + const char *fp; + char data[1024]; + va_list ap; + + if (level < 0 || level > 7) { + level = 7; + } + if (level > esl_log_level) { + return; + } + + fp = cut_path(file); + + va_start(ap, fmt); + + vsnprintf(data, sizeof(data), fmt, ap); + + + fprintf(stderr, "[%s] %s:%d %s() %s", LEVEL_NAMES[level], file, line, func, data); + + va_end(ap); + +} + +esl_logger_t esl_log = null_logger; + +void esl_global_set_logger(esl_logger_t logger) +{ + if (logger) { + esl_log = logger; + } else { + esl_log = null_logger; + } +} + +void esl_global_set_default_logger(int level) +{ + if (level < 0 || level > 7) { + level = 7; + } + + esl_log = default_logger; + esl_log_level = level; +} + size_t esl_url_encode(const char *url, char *buf, size_t len) { const char *p; @@ -138,10 +363,12 @@ rval = connect(handle->sock, (struct sockaddr *) &handle->sockaddr, sizeof(handle->sockaddr)); if (rval) { - strerror_r(handle->errno, handle->err, sizeof(handle->err)); + snprintf(handle->err, sizeof(handle->err), "Socket Connection Error"); goto fail; } - + + handle->connected = 1; + if (esl_recv(handle)) { snprintf(handle->err, sizeof(handle->err), "Connection Error"); goto fail; @@ -171,8 +398,6 @@ goto fail; } - handle->connected = 1; - return ESL_SUCCESS; fail: @@ -184,7 +409,9 @@ esl_status_t esl_disconnect(esl_handle_t *handle) { esl_event_safe_destroy(&handle->last_event); - + esl_event_safe_destroy(&handle->last_ievent); + esl_event_safe_destroy(&handle->info_event); + if (handle->sock != ESL_SOCK_INVALID) { close(handle->sock); handle->sock = ESL_SOCK_INVALID; @@ -207,20 +434,29 @@ char *col; char *cl; ssize_t len; - + int zc = 0; + esl_event_safe_destroy(&handle->last_event); memset(handle->header_buf, 0, sizeof(handle->header_buf)); c = handle->header_buf; beg = c; - for(;;) { + while(handle->connected) { rrval = recv(handle->sock, c, 1, 0); - if (rrval < 0) { + if (rrval == 0) { + + if (++zc >= 100) { + esl_disconnect(handle); + return ESL_FAIL; + } + } else if (rrval < 0) { strerror_r(handle->errno, handle->err, sizeof(handle->err)); goto fail; - } else if (rrval > 0) { + } else { + zc = 0; + if (*c == '\n') { if (++crc == 2) { break; @@ -243,7 +479,7 @@ if (hname && hval) { if (handle->debug > 1) { - printf("RECV HEADER [%s] = [%s]\n", hname, hval); + esl_log(ESL_LOG_DEBUG, "RECV HEADER [%s] = [%s]\n", hname, hval); } esl_event_add_header_string(revent, ESL_STACK_BOTTOM, hname, hval); } @@ -289,17 +525,84 @@ handle->last_event = revent; if (handle->last_event) { - const char *reply = esl_event_get_header(handle->last_event, "reply-text"); - if (!esl_strlen_zero(reply)) { - strncpy(handle->last_reply, reply, sizeof(handle->last_reply)); + const char *hval = esl_event_get_header(handle->last_event, "reply-text"); + + if (!esl_strlen_zero(hval)) { + strncpy(handle->last_reply, hval, sizeof(handle->last_reply)); + } + + hval = esl_event_get_header(handle->last_event, "content-type"); + + if (!esl_strlen_zero(hval) && !strcasecmp(hval, "text/event-plain") && handle->last_event->body) { + const char *en; + esl_event_types_t et = ESL_EVENT_COMMAND; + char *body = strdup(handle->last_event->body); + char *beg; + char *hname, *hval; + char *col; + char *cl; + ssize_t len; + char *c; + + esl_event_safe_destroy(&handle->last_ievent); + + if ((en = esl_stristr("event-name:", body))) { + en++; + while(*en == ' ') en++; + if (en) { + esl_name_event(en, &et); + } + } + + esl_event_create(&handle->last_ievent, et); + + beg = body; + + while(beg) { + if (!(c = strchr(beg, '\n'))) { + break; + } + + hname = beg; + hval = col = NULL; + + if (hname && (col = strchr(hname, ':'))) { + hval = col + 1; + *col = '\0'; + while(*hval == ' ') hval++; + } + + *c = '\0'; + + if (hname && hval) { + esl_url_decode(hval); + + if (handle->debug > 1) { + esl_log(ESL_LOG_DEBUG, "RECV INNER HEADER [%s] = [%s]\n", hname, hval); + } + esl_event_add_header_string(handle->last_ievent, ESL_STACK_BOTTOM, hname, hval); + } + + beg = c + 1; + } + + free(body); + + if (handle->debug) { + char *foo; + esl_event_serialize(handle->last_ievent, &foo, ESL_FALSE); + esl_log(ESL_LOG_DEBUG, "RECV EVENT\n%s\n", foo); + free(foo); + } } + } if (handle->debug) { char *foo; esl_event_serialize(handle->last_event, &foo, ESL_FALSE); - printf("RECV MESSAGE\n%s\n", foo); + esl_log(ESL_LOG_DEBUG, "RECV MESSAGE\n%s\n", foo); free(foo); } @@ -314,11 +617,17 @@ esl_status_t esl_send(esl_handle_t *handle, const char *cmd) { + const char *e = cmd + strlen(cmd) -1; + if (handle->debug) { - printf("SEND\n%s\n", cmd); + esl_log(ESL_LOG_DEBUG, "SEND\n%s\n", cmd); } send(handle->sock, cmd, strlen(cmd), 0); + + if (!(*e == '\n' && *(e-1) == '\n')) { + send(handle->sock, "\n\n", 2, 0); + } } Added: freeswitch/trunk/libs/esl/src/esl_config.c ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/src/esl_config.c Sat Dec 20 00:24:51 2008 @@ -0,0 +1,251 @@ +/* + * 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 + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * 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. + */ + +#include "esl.h" +#include "esl_config.h" + +int esl_config_open_file(esl_config_t *cfg, const char *file_path) +{ + FILE *f; + const char *path = NULL; + char path_buf[1024]; + + if (file_path[0] == '/') { + path = file_path; + } else { + snprintf(path_buf, sizeof(path_buf), "%s%s%s", ESL_CONFIG_DIR, ESL_PATH_SEPARATOR, file_path); + path = path_buf; + } + + if (!path) { + return 0; + } + + memset(cfg, 0, sizeof(*cfg)); + cfg->lockto = -1; + esl_log(ESL_LOG_DEBUG, "Configuration file is %s.\n", path); + f = fopen(path, "r"); + + if (!f) { + if (file_path[0] != '/') { + int last = -1; + char *var, *val; + + snprintf(path_buf, sizeof(path_buf), "%s%sopenesl.conf", ESL_CONFIG_DIR, ESL_PATH_SEPARATOR); + path = path_buf; + + if ((f = fopen(path, "r")) == 0) { + return 0; + } + + cfg->file = f; + esl_set_string(cfg->path, path); + + while (esl_config_next_pair(cfg, &var, &val)) { + if ((cfg->sectno != last) && !strcmp(cfg->section, file_path)) { + cfg->lockto = cfg->sectno; + return 1; + } + } + + esl_config_close_file(cfg); + memset(cfg, 0, sizeof(*cfg)); + return 0; + } + + return 0; + } else { + cfg->file = f; + esl_set_string(cfg->path, path); + return 1; + } +} + +void esl_config_close_file(esl_config_t *cfg) +{ + + if (cfg->file) { + fclose(cfg->file); + } + + memset(cfg, 0, sizeof(*cfg)); +} + + + +int esl_config_next_pair(esl_config_t *cfg, char **var, char **val) +{ + int ret = 0; + char *p, *end; + + *var = *val = NULL; + + if (!cfg->path) { + return 0; + } + + for (;;) { + cfg->lineno++; + + if (!fgets(cfg->buf, sizeof(cfg->buf), cfg->file)) { + ret = 0; + break; + } + *var = cfg->buf; + + if (**var == '[' && (end = strchr(*var, ']')) != 0) { + *end = '\0'; + (*var)++; + if (**var == '+') { + (*var)++; + esl_copy_string(cfg->section, *var, sizeof(cfg->section)); + cfg->sectno++; + + if (cfg->lockto > -1 && cfg->sectno != cfg->lockto) { + break; + } + cfg->catno = 0; + cfg->lineno = 0; + *var = (char *) ""; + *val = (char *) ""; + return 1; + } else { + esl_copy_string(cfg->category, *var, sizeof(cfg->category)); + cfg->catno++; + } + continue; + } + + + + if (**var == '#' || **var == ';' || **var == '\n' || **var == '\r') { + continue; + } + + if (!strncmp(*var, "__END__", 7)) { + break; + } + + + if ((end = strchr(*var, ';')) && *(end+1) == *end) { + *end = '\0'; + end--; + } else if ((end = strchr(*var, '\n')) != 0) { + if (*(end - 1) == '\r') { + end--; + } + *end = '\0'; + } + + p = *var; + while ((*p == ' ' || *p == '\t') && p != end) { + *p = '\0'; + p++; + } + *var = p; + + + if ((*val = strchr(*var, '=')) == 0) { + ret = -1; + /* log_printf(0, server.log, "Invalid syntax on %s: line %d\n", cfg->path, cfg->lineno); */ + continue; + } else { + p = *val - 1; + *(*val) = '\0'; + (*val)++; + if (*(*val) == '>') { + *(*val) = '\0'; + (*val)++; + } + + while ((*p == ' ' || *p == '\t') && p != *var) { + *p = '\0'; + p--; + } + + p = *val; + while ((*p == ' ' || *p == '\t') && p != end) { + *p = '\0'; + p++; + } + *val = p; + ret = 1; + break; + } + } + + + return ret; + +} + +int esl_config_get_cas_bits(char *strvalue, unsigned char *outbits) +{ + char cas_bits[5]; + unsigned char bit = 0x8; + char *double_colon = strchr(strvalue, ':'); + if (!double_colon) { + esl_log(ESL_LOG_ERROR, "No CAS bits specified: %s, :xxxx definition expected, where x is 1 or 0\n", double_colon); + return -1; + } + double_colon++; + *outbits = 0; + cas_bits[4] = 0; + if (sscanf(double_colon, "%c%c%c%c", &cas_bits[0], &cas_bits[1], &cas_bits[2], &cas_bits[3]) != 4) { + esl_log(ESL_LOG_ERROR, "Invalid CAS bits specified: %s, :xxxx definition expected, where x is 1 or 0\n", double_colon); + return -1; + } + esl_log(ESL_LOG_DEBUG, "CAS bits specification found: %s\n", cas_bits); + int x = 0; + for (; cas_bits[x]; x++) { + if ('1' == cas_bits[x]) { + *outbits |= bit; + } else if ('0' != cas_bits[x]) { + esl_log(ESL_LOG_ERROR, "Invalid CAS pattern specified: %s, just 0 or 1 allowed for each bit\n"); + return -1; + } + bit >>= 1; + } + return 0; +} + +/* 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 expandtab: + */ Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Sat Dec 20 00:24:51 2008 @@ -34,6 +34,9 @@ #ifndef _ESL_H_ #define _ESL_H_ +#define esl_copy_string(_x, _y, _z) strncpy(_x, _y, _z - 1) +#define esl_set_string(_x, _y) esl_copy_string(_x, _y, sizeof(_x)) + typedef struct esl_event_header esl_event_header_t; typedef struct esl_event esl_event_t; @@ -204,6 +207,8 @@ char header_buf[4196]; char last_reply[1024]; esl_event_t *last_event; + esl_event_t *last_ievent; + esl_event_t *info_event; int debug; int connected; } esl_handle_t; @@ -213,12 +218,44 @@ ESL_FALSE = 0 } esl_bool_t; +#ifndef __FUNCTION__ +#define __FUNCTION__ (const char *)__func__ +#endif + +#define ESL_PRE __FILE__, __FUNCTION__, __LINE__ +#define ESL_LOG_LEVEL_DEBUG 7 +#define ESL_LOG_LEVEL_INFO 6 +#define ESL_LOG_LEVEL_NOTICE 5 +#define ESL_LOG_LEVEL_WARNING 4 +#define ESL_LOG_LEVEL_ERROR 3 +#define ESL_LOG_LEVEL_CRIT 2 +#define ESL_LOG_LEVEL_ALERT 1 +#define ESL_LOG_LEVEL_EMERG 0 + +#define ESL_LOG_DEBUG ESL_PRE, ESL_LOG_LEVEL_DEBUG +#define ESL_LOG_INFO ESL_PRE, ESL_LOG_LEVEL_INFO +#define ESL_LOG_NOTICE ESL_PRE, ESL_LOG_LEVEL_NOTICE +#define ESL_LOG_WARNING ESL_PRE, ESL_LOG_LEVEL_WARNING +#define ESL_LOG_ERROR ESL_PRE, ESL_LOG_LEVEL_ERROR +#define ESL_LOG_CRIT ESL_PRE, ESL_LOG_LEVEL_CRIT +#define ESL_LOG_ALERT ESL_PRE, ESL_LOG_LEVEL_ALERT +#define ESL_LOG_EMERG ESL_PRE, ESL_LOG_LEVEL_EMERG +typedef void (*esl_logger_t)(const char *file, const char *func, int line, int level, const char *fmt, ...); + +extern esl_logger_t esl_log; + +void esl_global_set_logger(esl_logger_t logger); +void esl_global_set_default_logger(int level); #include "esl_event.h" #include "esl_threadmutex.h" +#include "esl_config.h" size_t esl_url_encode(const char *url, char *buf, size_t len); char *esl_url_decode(char *s); +int esl_toupper(int c); +int esl_tolower(int c); + esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password); esl_status_t esl_disconnect(esl_handle_t *handle); @@ -226,7 +263,6 @@ esl_status_t esl_recv(esl_handle_t *handle); esl_status_t esl_send_recv(esl_handle_t *handle, const char *cmd); - #endif Added: freeswitch/trunk/libs/esl/src/include/esl_config.h ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/src/include/esl_config.h Sat Dec 20 00:24:51 2008 @@ -0,0 +1,138 @@ +/* + * 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 + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * 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. + */ + +/** + * @defgroup config Config File Parser + * @ingroup config + * This module implements a basic interface and file format parser + * + *
+ *
+ * EXAMPLE 
+ * 
+ * [category1]
+ * var1 => val1
+ * var2 => val2
+ * \# lines that begin with \# are comments
+ * \#var3 => val3
+ * 
+ * @{ + */ + +#ifndef ESL_CONFIG_H +#define ESL_CONFIG_H + +#include "esl.h" +#define ESL_URL_SEPARATOR "://" + + +#ifdef WIN32 +#define ESL_PATH_SEPARATOR "\\" +#ifndef ESL_CONFIG_DIR +#define ESL_CONFIG_DIR "c:\\openesl" +#endif +#define esl_is_file_path(file) (*(file +1) == ':' || *file == '/' || strstr(file, SWITCH_URL_SEPARATOR)) +#else +#define ESL_PATH_SEPARATOR "/" +#ifndef ESL_CONFIG_DIR +#define ESL_CONFIG_DIR "/etc/openesl" +#endif +#define esl_is_file_path(file) ((*file == '/') || strstr(file, SWITCH_URL_SEPARATOR)) +#endif + +typedef struct esl_config esl_config_t; + +/*! \brief A simple file handle representing an open configuration file **/ +struct esl_config { + /*! FILE stream buffer to the opened file */ + FILE *file; + /*! path to the file */ + char path[512]; + /*! current category */ + char category[256]; + /*! current section */ + char section[256]; + /*! buffer of current line being read */ + char buf[1024]; + /*! current line number in file */ + int lineno; + /*! current category number in file */ + int catno; + /*! current section number in file */ + int sectno; + + int lockto; +}; + +/*! + \brief Open a configuration file + \param cfg (esl_config_t *) config handle to use + \param file_path path to the file + \return 1 (true) on success 0 (false) on failure +*/ +int esl_config_open_file(esl_config_t * cfg, const char *file_path); + +/*! + \brief Close a previously opened configuration file + \param cfg (esl_config_t *) config handle to use +*/ +void esl_config_close_file(esl_config_t * cfg); + +/*! + \brief Retrieve next name/value pair from configuration file + \param cfg (esl_config_t *) config handle to use + \param var pointer to aim at the new variable name + \param val pointer to aim at the new value +*/ +int esl_config_next_pair(esl_config_t * cfg, char **var, char **val); + +/*! + \brief Retrieve the CAS bits from a configuration string value + \param strvalue pointer to the configuration string value (expected to be in format whatever:xxxx) + \param outbits pointer to aim at the CAS bits +*/ +int esl_config_get_cas_bits(char *strvalue, unsigned char *outbits); + + +/** @} */ +#endif +/* 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 expandtab: + */ From anthm at freeswitch.org Sat Dec 20 06:56:10 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sat, 20 Dec 2008 09:56:10 -0500 Subject: [Freeswitch-trunk] [commit] r10893 - in freeswitch/trunk: libs/esl libs/esl/src src src/include src/mod/event_handlers/mod_event_socket Message-ID: Author: anthm Date: Sat Dec 20 09:56:08 2008 New Revision: 10893 Log: change event_socket to have more info about log lines Modified: freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/src/include/switch_log.h freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c freeswitch/trunk/src/switch_log.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Sat Dec 20 09:56:08 2008 @@ -71,30 +71,34 @@ if (handle->last_event) { const char *type = esl_event_get_header(handle->last_event, "content-type"); - if (!strcasecmp(type, "log/data")) { - int level = 0; - if (strstr(handle->last_event->body, "[CONSOLE]")) { - level = 0; - } else if (strstr(handle->last_event->body, "[ALERT]")) { - level = 1; - } else if (strstr(handle->last_event->body, "[CRIT]")) { - level = 2; - } else if (strstr(handle->last_event->body, "[ERROR]")) { - level = 3; - } else if (strstr(handle->last_event->body, "[WARNING]")) { - level = 4; - } else if (strstr(handle->last_event->body, "[NOTICE]")) { - level = 5; - } else if (strstr(handle->last_event->body, "[INFO]")) { - level = 6; - } else if (strstr(handle->last_event->body, "[DEBUG]")) { - level = 7; - } + int known = 0; - printf("%s%s%s", COLORS[level], handle->last_event->body, ESL_SEQ_DEFAULT_COLOR); - } else if (0 && !strcasecmp(type, "text/disconnect-notice")) { - running = thread_running = 0; - } else { + if (!esl_strlen_zero(type)) { + if (!strcasecmp(type, "log/data")) { + int level = 0, tchannel = 0; + const char *lname = esl_event_get_header(handle->last_event, "log-level"); + const char *channel = esl_event_get_header(handle->last_event, "text-channel"); + const char *file = esl_event_get_header(handle->last_event, "log-file"); + + if (channel) { + tchannel = atoi(channel); + } + + if (lname) { + level = atoi(lname); + } + + if (tchannel == 0 || (file && !strcmp(file, "switch_console.c"))) { + printf("%s%s%s", COLORS[level], handle->last_event->body, ESL_SEQ_DEFAULT_COLOR); + } + known++; + } else if (!strcasecmp(type, "text/disconnect-notice")) { + running = thread_running = 0; + known++; + } + } + + if (!known) { printf("INCOMING DATA [%s]\n%s", type, handle->last_event->body); } } @@ -108,6 +112,7 @@ done: thread_running = 0; + esl_log(ESL_LOG_DEBUG, "Thread Done\n"); return NULL; } @@ -181,7 +186,7 @@ signal(SIGINT, handle_SIGINT); gethostname(hostname, sizeof(hostname)); - handle.debug = 0; + handle.debug = 1; if (esl_config_open_file(&cfg, cfile)) { Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Sat Dec 20 09:56:08 2008 @@ -446,7 +446,6 @@ rrval = recv(handle->sock, c, 1, 0); if (rrval == 0) { - if (++zc >= 100) { esl_disconnect(handle); return ESL_FAIL; @@ -588,6 +587,27 @@ free(body); + if ((cl = esl_event_get_header(handle->last_ievent, "content-length"))) { + esl_ssize_t sofar = 0; + + len = atol(cl); + body = malloc(len+1); + esl_assert(body); + *(body + len) = '\0'; + + do { + esl_ssize_t r; + if ((r = recv(handle->sock, body + sofar, len - sofar, 0)) < 0) { + strerror_r(handle->errno, handle->err, sizeof(handle->err)); + goto fail; + } + sofar += r; + } while (sofar < len); + + handle->last_ievent->body = body; + } + + if (handle->debug) { char *foo; esl_event_serialize(handle->last_ievent, &foo, ESL_FALSE); Modified: freeswitch/trunk/src/include/switch_log.h ============================================================================== --- freeswitch/trunk/src/include/switch_log.h (original) +++ freeswitch/trunk/src/include/switch_log.h Sat Dec 20 09:56:08 2008 @@ -63,7 +63,7 @@ char *content; const char *userdata; /* To maintain abi, only add new elements to the end of this struct and do not delete any elements */ - + switch_text_channel_t channel; } switch_log_node_t; typedef switch_status_t (*switch_log_function_t) (const switch_log_node_t *node, switch_log_level_t level); Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Sat Dec 20 09:56:08 2008 @@ -134,29 +134,32 @@ static switch_status_t socket_logger(const switch_log_node_t *node, switch_log_level_t level) { listener_t *l; - + switch_mutex_lock(globals.listener_mutex); for (l = listen_list.listeners; l; l = l->next) { if (switch_test_flag(l, LFLAG_LOG) && l->level >= node->level) { - char *data = strdup(node->data); - if (data) { - if (switch_queue_trypush(l->log_queue, data) == SWITCH_STATUS_SUCCESS) { - if (l->lost_logs) { - int ll = l->lost_logs; - switch_event_t *event; - l->lost_logs = 0; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Lost %d log lines!\n", ll); - if (switch_event_create(&event, SWITCH_EVENT_TRAP) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "info", "lost %d log lines", ll); - switch_event_fire(&event); - } + switch_log_node_t *dnode = malloc(sizeof(*node)); + + switch_assert(dnode); + *dnode = *node; + dnode->data = strdup(node->data); + switch_assert(dnode->data); + + if (switch_queue_trypush(l->log_queue, dnode) == SWITCH_STATUS_SUCCESS) { + if (l->lost_logs) { + int ll = l->lost_logs; + switch_event_t *event; + l->lost_logs = 0; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Lost %d log lines!\n", ll); + if (switch_event_create(&event, SWITCH_EVENT_TRAP) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "info", "lost %d log lines", ll); + switch_event_fire(&event); } - } else { - switch_safe_free(data); - l->lost_logs++; } } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error!\n"); + switch_safe_free(dnode->data); + switch_safe_free(dnode); + l->lost_logs++; } } } @@ -171,7 +174,11 @@ if (listener->log_queue) { while (switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) { - if (pop) free(pop); + switch_log_node_t *dnode = (switch_log_node_t *) pop; + if (dnode) { + free(dnode->data); + free(dnode); + } } } @@ -981,17 +988,32 @@ if (!*mbuf) { if (switch_test_flag(listener, LFLAG_LOG)) { if (switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) { - char *data = (char *) pop; - - - if (data) { - switch_snprintf(buf, sizeof(buf), "Content-Type: log/data\nContent-Length: %" SWITCH_SSIZE_T_FMT "\n\n", strlen(data)); + switch_log_node_t *dnode = (switch_log_node_t *) pop; + + if (dnode->data) { + switch_snprintf(buf, sizeof(buf), + "Content-Type: log/data\n" + "Content-Length: %" SWITCH_SSIZE_T_FMT "\n" + "Log-Level: %d\n" + "Text-Channel: %d\n" + "Log-File: %s\n" + "Log-Func: %s\n" + "Log->Line: %d\n" + "\n", + strlen(dnode->data), + dnode->level, + dnode->channel, + dnode->file, + dnode->func, + dnode->line + ); len = strlen(buf); switch_socket_send(listener->sock, buf, &len); - len = strlen(data); - switch_socket_send(listener->sock, data, &len); + len = strlen(dnode->data); + switch_socket_send(listener->sock, dnode->data, &len); - free(data); + free(dnode->data); + free(dnode); } do_sleep = 0; } Modified: freeswitch/trunk/src/switch_log.c ============================================================================== --- freeswitch/trunk/src/switch_log.c (original) +++ freeswitch/trunk/src/switch_log.c Sat Dec 20 09:56:08 2008 @@ -352,7 +352,7 @@ node = malloc(sizeof(*node)); switch_assert(node); } - + node->data = data; data = NULL; switch_set_string(node->file, filep); @@ -361,7 +361,7 @@ node->level = level; node->content = content; node->timestamp = now; - + node->channel = channel; if (switch_queue_trypush(LOG_QUEUE, node) != SWITCH_STATUS_SUCCESS) { free(node->data); From anthm at freeswitch.org Sat Dec 20 06:57:32 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sat, 20 Dec 2008 09:57:32 -0500 Subject: [Freeswitch-trunk] [commit] r10894 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Sat Dec 20 09:57:31 2008 New Revision: 10894 Log: update Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Sat Dec 20 09:57:31 2008 @@ -46,7 +46,7 @@ while(thread_running && handle->connected) { fd_set rfds, efds; - struct timeval tv = { 0, 50 * 1000 }; + struct timeval tv = { 0, 10 * 1000 }; int max, activity, i = 0; esl_mutex_lock(global_mutex); @@ -186,7 +186,7 @@ signal(SIGINT, handle_SIGINT); gethostname(hostname, sizeof(hostname)); - handle.debug = 1; + handle.debug = 0; if (esl_config_open_file(&cfg, cfile)) { From anthm at freeswitch.org Sat Dec 20 07:40:33 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sat, 20 Dec 2008 10:40:33 -0500 Subject: [Freeswitch-trunk] [commit] r10895 - in freeswitch/trunk/libs/esl: . src src/include Message-ID: Author: anthm Date: Sat Dec 20 10:40:33 2008 New Revision: 10895 Log: add more code for listener Modified: freeswitch/trunk/libs/esl/Makefile freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/libs/esl/Makefile ============================================================================== --- freeswitch/trunk/libs/esl/Makefile (original) +++ freeswitch/trunk/libs/esl/Makefile Sat Dec 20 10:40:33 2008 @@ -3,24 +3,28 @@ LIBEDIT_DIR=../../libs/libedit CFLAGS=$(INCS) -g -ggdb -I$(LIBEDIT_DIR)/src/ MYLIB=libesl.a - +LIBS=-lesl -lncurses -lpthread +LDFLAGS=-L. OBJS=src/esl.o src/esl_event.o src/esl_threadmutex.o src/esl_config.o -all: $(MYLIB) fs_cli +all: $(MYLIB) fs_cli testclient testserver $(MYLIB): $(OBJS) $(HEADERS) ar rcs $(MYLIB) $(OBJS) ranlib $(MYLIB) -%.o: %.c - $(CC) $(CC_CFLAGS) $(CFLAGS) -c $< -o $@ +testserver: $(MYLIB) testserver.c + $(CC) $(CC_CFLAGS) $(CFLAGS) testserver.c -o testserver $(LDFLAGS) $(LIBS) -test: $(MYLIB) - $(CC) $(CC_CFLAGS) $(CFLAGS) testclient.c -o testclient -L. -lesl +testclient: $(MYLIB) testclient.c + $(CC) $(CC_CFLAGS) $(CFLAGS) testclient.c -o testclient $(LDFLAGS) $(LIBS) fs_cli: $(MYLIB) fs_cli.c - $(CC) $(CC_CFLAGS) $(CFLAGS) fs_cli.c -o fs_cli -L. -L$(LIBEDIT_DIR)/src/.libs -lesl -ledit -lncurses -lpthread + $(CC) $(CC_CFLAGS) $(CFLAGS) fs_cli.c -o fs_cli $(LDFLAGS) -L$(LIBEDIT_DIR)/src/.libs $(LIBS) -ledit + +%.o: %.c + $(CC) $(CC_CFLAGS) $(CFLAGS) -c $< -o $@ clean: - rm -f *.o src/*.o testclient fs_cli libesl.a *~ src/*~ src/include/*~ + rm -f *.o src/*.o testclient testserver fs_cli libesl.a *~ src/*~ src/include/*~ Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Sat Dec 20 10:40:33 2008 @@ -323,6 +323,59 @@ } +esl_status_t esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback) +{ + esl_socket_t server_sock = ESL_SOCK_INVALID; + int reuse_addr = 1; + struct sockaddr_in addr; + esl_status_t status = ESL_SUCCESS; + + if ((server_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { + return ESL_FAIL; + } + + setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, &reuse_addr, sizeof(reuse_addr)); + + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_ANY); + addr.sin_port = htons(port); + + if (bind(server_sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + status = ESL_FAIL; + goto end; + } + + if (listen(server_sock, 10000) < 0) { + status = ESL_FAIL; + goto end; + } + + for (;;) { + int client_sock; + struct sockaddr_in echoClntAddr; + unsigned int clntLen; + + clntLen = sizeof(echoClntAddr); + + if ((client_sock = accept(server_sock, (struct sockaddr *) &echoClntAddr, &clntLen)) == ESL_SOCK_INVALID) { + status = ESL_FAIL; + goto end; + } + + callback(server_sock, client_sock, echoClntAddr); + } + + end: + + if (server_sock != ESL_SOCK_INVALID) { + close(server_sock); + server_sock = ESL_SOCK_INVALID; + } + + return status; + +} esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password) { Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Sat Dec 20 10:40:33 2008 @@ -256,6 +256,9 @@ int esl_toupper(int c); int esl_tolower(int c); +typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr); + +esl_status_t esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback); esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password); esl_status_t esl_disconnect(esl_handle_t *handle); From anthm at freeswitch.org Sat Dec 20 10:34:35 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sat, 20 Dec 2008 13:34:35 -0500 Subject: [Freeswitch-trunk] [commit] r10896 - in freeswitch/trunk/libs/esl: . src src/include Message-ID: Author: anthm Date: Sat Dec 20 13:34:34 2008 New Revision: 10896 Log: update Modified: freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Sat Dec 20 13:34:34 2008 @@ -25,7 +25,7 @@ static char *hfile = NULL; static int running = 1; static int thread_running = 0; -static esl_mutex_t *global_mutex; + static void handle_SIGINT(int sig) { @@ -45,30 +45,12 @@ thread_running = 1; while(thread_running && handle->connected) { - fd_set rfds, efds; - struct timeval tv = { 0, 10 * 1000 }; - int max, activity, i = 0; - - esl_mutex_lock(global_mutex); - FD_ZERO(&rfds); - FD_ZERO(&efds); - FD_SET(handle->sock, &rfds); - FD_SET(handle->sock, &efds); - - max = handle->sock + 1; + esl_status_t status = esl_recv_timed(handle, 10); - if ((activity = select(max, &rfds, NULL, &efds, &tv)) < 0) { - esl_mutex_unlock(global_mutex); - goto done; - } - if (activity && FD_ISSET(handle->sock, &rfds)) { - if (esl_recv(handle)) { - running = thread_running = 0; - esl_mutex_unlock(global_mutex); - esl_log(ESL_LOG_WARNING, "Disconnected.\n"); - goto done; - } - + if (status == ESL_FAIL) { + esl_log(ESL_LOG_WARNING, "Disconnected.\n"); + running = thread_running = 0; + } else if (status == ESL_SUCCESS) { if (handle->last_event) { const char *type = esl_event_get_header(handle->last_event, "content-type"); int known = 0; @@ -102,10 +84,8 @@ printf("INCOMING DATA [%s]\n%s", type, handle->last_event->body); } } - } - esl_mutex_unlock(global_mutex); usleep(1000); } @@ -135,10 +115,10 @@ !strncasecmp(cmd, "nolog", 5) || !strncasecmp(cmd, "filter", 6) ) { - esl_mutex_lock(global_mutex); + esl_send_recv(handle, cmd); - printf("%s\n", handle->last_reply); - esl_mutex_unlock(global_mutex); + printf("%s\n", handle->last_sr_reply); + goto end; } @@ -181,8 +161,6 @@ snprintf(cfile, sizeof(cfile), "%s/.fs_cli_config", home); } - esl_mutex_create(&global_mutex); - signal(SIGINT, handle_SIGINT); gethostname(hostname, sizeof(hostname)); @@ -226,9 +204,7 @@ snprintf(cmd_str, sizeof(cmd_str), "log info\n\n"); - esl_mutex_lock(global_mutex); esl_send_recv(&handle, cmd_str); - esl_mutex_unlock(global_mutex); while (running) { @@ -254,10 +230,10 @@ } } else { snprintf(cmd_str, sizeof(cmd_str), "api %s\n\n", cmd); - esl_mutex_lock(global_mutex); esl_send_recv(&handle, cmd_str); - printf("%s\n", handle.last_event->body); - esl_mutex_unlock(global_mutex); + if (handle.last_sr_event) { + printf("%s\n", handle.last_sr_event->body); + } } el_deletestr(el, strlen(foo) + 1); @@ -283,7 +259,5 @@ thread_running = 0; - esl_mutex_destroy(&global_mutex); - return 0; } Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Sat Dec 20 13:34:34 2008 @@ -322,6 +322,76 @@ return s; } +esl_status_t esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in addr) +{ + handle->sock = socket; + handle->addr = addr; + + if (handle->sock == ESL_SOCK_INVALID) { + return ESL_FAIL; + } + + + if (!handle->mutex) { + esl_mutex_create(&handle->mutex); + } + + handle->connected = 1; + + esl_send_recv(handle, "connect\n\n"); + + + if (handle->last_sr_event) { + handle->info_event = handle->last_sr_event; + handle->last_sr_event = NULL; + return ESL_SUCCESS; + } + + handle->connected = 0; + + return ESL_FAIL; +} + +esl_status_t esl_sendevent(esl_handle_t *handle, esl_event_t *event) +{ + char *txt; + + esl_event_serialize(handle->last_ievent, &txt, ESL_TRUE); + + if (handle->debug) { + esl_log(ESL_LOG_DEBUG, "SEND EVENT\n%s\n", txt); + } + + send(handle->sock, "sendevent\n", 10, 0); + send(handle->sock, txt, strlen(txt), 0); + send(handle->sock, "\n\n", 2, 0); + + free(txt); +} + +esl_status_t esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid) +{ + char cmd_buf[128] = "sendmsg"; + char app_buf[512] = ""; + char arg_buf[512] = ""; + char send_buf[1292] = ""; + + if (uuid) { + snprintf(cmd_buf, sizeof(cmd_buf), "sendmsg %s", uuid); + } + + if (app) { + snprintf(app_buf, sizeof(app_buf), "execute-app-name: %s\n", app); + } + + if (arg) { + snprintf(arg_buf, sizeof(arg_buf), "execute-app-arg: %s\n", arg); + } + + snprintf(send_buf, sizeof(send_buf), "%s\ncall-command: execute\n%s%s\n", cmd_buf, app_buf, arg_buf); + + esl_send_recv(handle, send_buf); +} esl_status_t esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback) { @@ -386,6 +456,10 @@ int rval; const char *hval; + if (!handle->mutex) { + esl_mutex_create(&handle->mutex); + } + handle->sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if (handle->sock == ESL_SOCK_INVALID) { @@ -450,21 +524,27 @@ snprintf(handle->err, sizeof(handle->err), "Connection Error"); goto fail; } - + return ESL_SUCCESS; fail: esl_disconnect(handle); + return ESL_FAIL; } esl_status_t esl_disconnect(esl_handle_t *handle) { esl_event_safe_destroy(&handle->last_event); + esl_event_safe_destroy(&handle->last_sr_event); esl_event_safe_destroy(&handle->last_ievent); esl_event_safe_destroy(&handle->info_event); + if (handle->mutex) { + esl_mutex_destroy(&handle->mutex); + } + if (handle->sock != ESL_SOCK_INVALID) { close(handle->sock); handle->sock = ESL_SOCK_INVALID; @@ -476,7 +556,45 @@ return ESL_FAIL; } -esl_status_t esl_recv(esl_handle_t *handle) +esl_status_t esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event) +{ + fd_set rfds, efds; + struct timeval tv = { 0, ms * 1000 }; + int max, activity, i = 0; + esl_status_t status = ESL_SUCCESS; + + esl_mutex_lock(handle->mutex); + FD_ZERO(&rfds); + FD_ZERO(&efds); + FD_SET(handle->sock, &rfds); + FD_SET(handle->sock, &efds); + + max = handle->sock + 1; + + if ((activity = select(max, &rfds, NULL, &efds, &tv)) < 0) { + status = ESL_FAIL; + goto done; + } + + if (activity && FD_ISSET(handle->sock, &rfds)) { + if (esl_recv_event(handle, save_event)) { + status = ESL_FAIL; + goto done; + } + } else { + status = ESL_BREAK; + } + + done: + + esl_mutex_unlock(handle->mutex); + + return status; + +} + + +esl_status_t esl_recv_event(esl_handle_t *handle, esl_event_t **save_event) { char *c; esl_ssize_t rrval; @@ -489,6 +607,8 @@ ssize_t len; int zc = 0; + esl_mutex_lock(handle->mutex); + esl_event_safe_destroy(&handle->last_event); memset(handle->header_buf, 0, sizeof(handle->header_buf)); @@ -501,6 +621,7 @@ if (rrval == 0) { if (++zc >= 100) { esl_disconnect(handle); + esl_mutex_unlock(handle->mutex); return ESL_FAIL; } } else if (rrval < 0) { @@ -530,6 +651,7 @@ *c = '\0'; if (hname && hval) { + esl_url_decode(hval); if (handle->debug > 1) { esl_log(ESL_LOG_DEBUG, "RECV HEADER [%s] = [%s]\n", hname, hval); } @@ -572,23 +694,25 @@ revent->body = body; } - - - handle->last_event = revent; + if (save_event) { + *save_event = revent; + } else { + handle->last_event = revent; + } - if (handle->last_event) { - const char *hval = esl_event_get_header(handle->last_event, "reply-text"); + if (revent) { + const char *hval = esl_event_get_header(revent, "reply-text"); if (!esl_strlen_zero(hval)) { strncpy(handle->last_reply, hval, sizeof(handle->last_reply)); } - hval = esl_event_get_header(handle->last_event, "content-type"); + hval = esl_event_get_header(revent, "content-type"); - if (!esl_strlen_zero(hval) && !strcasecmp(hval, "text/event-plain") && handle->last_event->body) { + if (!esl_strlen_zero(hval) && !strcasecmp(hval, "text/event-plain") && revent->body) { const char *en; esl_event_types_t et = ESL_EVENT_COMMAND; - char *body = strdup(handle->last_event->body); + char *body = strdup(revent->body); char *beg; char *hname, *hval; char *col; @@ -669,15 +793,15 @@ } } + if (handle->debug) { + char *foo; + esl_event_serialize(revent, &foo, ESL_FALSE); + esl_log(ESL_LOG_DEBUG, "RECV MESSAGE\n%s\n", foo); + free(foo); + } } - - if (handle->debug) { - char *foo; - esl_event_serialize(handle->last_event, &foo, ESL_FALSE); - esl_log(ESL_LOG_DEBUG, "RECV MESSAGE\n%s\n", foo); - free(foo); - } + esl_mutex_unlock(handle->mutex); return ESL_SUCCESS; @@ -706,8 +830,21 @@ esl_status_t esl_send_recv(esl_handle_t *handle, const char *cmd) { + const char *hval; + + esl_mutex_lock(handle->mutex); esl_send(handle, cmd); - esl_recv(handle); + esl_recv_event(handle, &handle->last_sr_event); + + if (handle->last_sr_event) { + hval = esl_event_get_header(handle->last_sr_event, "reply-text"); + + if (!esl_strlen_zero(hval)) { + strncpy(handle->last_sr_reply, hval, sizeof(handle->last_sr_reply)); + } + } + + esl_mutex_unlock(handle->mutex); } Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Sat Dec 20 13:34:34 2008 @@ -34,6 +34,7 @@ #ifndef _ESL_H_ #define _ESL_H_ + #define esl_copy_string(_x, _y, _z) strncpy(_x, _y, _z - 1) #define esl_set_string(_x, _y) esl_copy_string(_x, _y, sizeof(_x)) @@ -193,10 +194,13 @@ typedef enum { ESL_SUCCESS, - ESL_FAIL + ESL_FAIL, + ESL_BREAK } esl_status_t; +#include + typedef struct { struct sockaddr_in sockaddr; struct hostent hostent; @@ -206,11 +210,15 @@ int errno; char header_buf[4196]; char last_reply[1024]; + char last_sr_reply[1024]; esl_event_t *last_event; + esl_event_t *last_sr_event; esl_event_t *last_ievent; esl_event_t *info_event; int debug; int connected; + struct sockaddr_in addr; + esl_mutex_t *mutex; } esl_handle_t; typedef enum { @@ -258,13 +266,19 @@ typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr); +esl_status_t esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in addr); esl_status_t esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback); +esl_status_t esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid); +esl_status_t esl_sendevent(esl_handle_t *handle, esl_event_t *event); esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password); esl_status_t esl_disconnect(esl_handle_t *handle); esl_status_t esl_send(esl_handle_t *handle, const char *cmd); -esl_status_t esl_recv(esl_handle_t *handle); +esl_status_t esl_recv_event(esl_handle_t *handle, esl_event_t **save_event); +esl_status_t esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event); esl_status_t esl_send_recv(esl_handle_t *handle, const char *cmd); +#define esl_recv(_h) esl_recv_event(_h, NULL) +#define esl_recv_timed(_h, _ms) esl_recv_event_timed(_h, _ms, NULL) #endif From brian at freeswitch.org Sun Dec 21 11:48:34 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Sun, 21 Dec 2008 14:48:34 -0500 Subject: [Freeswitch-trunk] [commit] r10897 - freeswitch/trunk/conf Message-ID: Author: brian Date: Sun Dec 21 14:48:33 2008 New Revision: 10897 Log: update vars Modified: freeswitch/trunk/conf/vars.xml Modified: freeswitch/trunk/conf/vars.xml ============================================================================== --- freeswitch/trunk/conf/vars.xml (original) +++ freeswitch/trunk/conf/vars.xml Sun Dec 21 14:48:33 2008 @@ -35,6 +35,8 @@ speex at 32000h@20i - Speex 32kHz using 20ms ptime. G7221 at 16000h - G722.1 16kHz (aka Siren 7) G7221 at 32000h - G722.1C 32kHz (aka Siren 14) + CELT at 32000h - CELT 32kHz, only 10ms supported + CELT at 48000h - CELT 48kHz, only 10ms supported GSM at 40i - GSM 8kHz using 40ms ptime. (GSM is done in multiples of 20, Default is 20ms) G722 - G722 16kHz using default 20ms ptime. (multiples of 10) PCMU - G711 8kHz ulaw using default 20ms ptime. (multiples of 10) From anthm at freeswitch.org Sun Dec 21 13:54:44 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sun, 21 Dec 2008 16:54:44 -0500 Subject: [Freeswitch-trunk] [commit] r10898 - in freeswitch/trunk/libs/esl: . src src/include Message-ID: Author: anthm Date: Sun Dec 21 16:54:43 2008 New Revision: 10898 Log: update Modified: freeswitch/trunk/libs/esl/Makefile freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/esl_event.c freeswitch/trunk/libs/esl/src/include/esl.h freeswitch/trunk/libs/esl/testclient.c Modified: freeswitch/trunk/libs/esl/Makefile ============================================================================== --- freeswitch/trunk/libs/esl/Makefile (original) +++ freeswitch/trunk/libs/esl/Makefile Sun Dec 21 16:54:43 2008 @@ -1,15 +1,19 @@ PWD=$(shell pwd) INCS=-I$(PWD)/src/include LIBEDIT_DIR=../../libs/libedit -CFLAGS=$(INCS) -g -ggdb -I$(LIBEDIT_DIR)/src/ +DEBUG=-g -ggdb +PICKY=-O2 -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes +CFLAGS=$(INCS) -D_GNU_SOURCE $(DEBUG) -I$(LIBEDIT_DIR)/src/ $(PICKY) MYLIB=libesl.a LIBS=-lesl -lncurses -lpthread LDFLAGS=-L. OBJS=src/esl.o src/esl_event.o src/esl_threadmutex.o src/esl_config.o +SRC=src/esl.c src/esl_event.c src/esl_threadmutex.c src/esl_config.c +HEADERS=src/include/esl_config.h src/include/esl_event.h src/include/esl.h src/include/esl_threadmutex.h all: $(MYLIB) fs_cli testclient testserver -$(MYLIB): $(OBJS) $(HEADERS) +$(MYLIB): $(OBJS) $(HEADERS) $(SRC) ar rcs $(MYLIB) $(OBJS) ranlib $(MYLIB) Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Sun Dec 21 16:54:43 2008 @@ -5,28 +5,21 @@ #include #include + static char prompt_str[512] = ""; static char hostname[512] = ""; -char *prompt(EditLine * e) +static char *prompt(EditLine * e) { - if (*prompt_str == '\0') { - gethostname(hostname, sizeof(hostname)); - snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", hostname); - } - return prompt_str; - } static EditLine *el; static History *myhistory; static HistEvent ev; -static char *hfile = NULL; static int running = 1; static int thread_running = 0; - static void handle_SIGINT(int sig) { if (sig); @@ -89,8 +82,6 @@ usleep(1000); } - done: - thread_running = 0; esl_log(ESL_LOG_DEBUG, "Thread Done\n"); @@ -131,17 +122,33 @@ } typedef struct { + char name[128]; char host[128]; - char pass[128]; esl_port_t port; + char pass[128]; } cli_profile_t; -static cli_profile_t profiles[128] = { 0 }; +static cli_profile_t profiles[128] = {{{0}}}; static int pcount; + +static int get_profile(const char *name, cli_profile_t **profile) +{ + int x; + + for (x = 0; x < pcount; x++) { + if (!strcmp(profiles[x].name, name)) { + *profile = &profiles[x]; + return 0; + } + } + + return -1; +} + int main(int argc, char *argv[]) { - esl_handle_t handle = {0}; + esl_handle_t handle = {{0}}; int count; const char *line; char cmd_str[1024] = ""; @@ -150,11 +157,13 @@ char *home = getenv("HOME"); esl_config_t cfg; cli_profile_t *profile = &profiles[0]; + int cur = 0; strncpy(profiles[0].host, "localhost", sizeof(profiles[0].host)); strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass)); + strncpy(profiles[0].name, "default", sizeof(profiles[0].name)); profiles[0].port = 8021; - pcount = 1; + pcount++; if (home) { snprintf(hfile, sizeof(hfile), "%s/.fs_cli_history", home); @@ -165,27 +174,58 @@ gethostname(hostname, sizeof(hostname)); handle.debug = 0; - + esl_global_set_default_logger(7); if (esl_config_open_file(&cfg, cfile)) { char *var, *val; + char cur_cat[128] = ""; + while (esl_config_next_pair(&cfg, &var, &val)) { + if (strcmp(cur_cat, cfg.category)) { + cur++; + esl_set_string(cur_cat, cfg.category); + esl_set_string(profiles[cur].name, cur_cat); + esl_set_string(profiles[cur].host, "localhost"); + esl_set_string(profiles[cur].pass, "ClueCon"); + profiles[cur].port = 8021; + esl_log(ESL_LOG_INFO, "Found Profile [%s]\n", profiles[cur].name); + pcount++; + } + if (!strcasecmp(var, "host")) { + esl_set_string(profiles[cur].host, val); + } else if (!strcasecmp(var, "password")) { + esl_set_string(profiles[cur].pass, val); + } else if (!strcasecmp(var, "port")) { + int pt = atoi(val); + if (pt > 0) { + profiles[cur].port = pt; + } + } } esl_config_close_file(&cfg); } - - if (esl_connect(&handle, profile->host, profile->port, profile->pass)) { - printf("Error Connecting [%s]\n", handle.err); - return -1; + if (argv[1]) { + if (get_profile(argv[1], &profile)) { + esl_log(ESL_LOG_INFO, "Chosen profile %s does not exist using builtin default\n", argv[1]); + profile = &profiles[0]; + } else { + esl_log(ESL_LOG_INFO, "Chosen profile %s\n", profile->name); + } } + esl_log(ESL_LOG_INFO, "Using profile %s\n", profile->name); + + gethostname(hostname, sizeof(hostname)); + snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", profile->name); - if (handle.debug) { - esl_global_set_default_logger(7); + + if (esl_connect(&handle, profile->host, profile->port, profile->pass)) { + esl_log(ESL_LOG_ERROR, "Error Connecting [%s]\n", handle.err); + return -1; } - + esl_thread_create_detached(msg_thread_run, &handle); el = el_init(__FILE__, stdout, stdout, stdout); @@ -194,7 +234,7 @@ myhistory = history_init(); if (myhistory == 0) { - fprintf(stderr, "history could not be initialized\n"); + esl_log(ESL_LOG_ERROR, "history could not be initialized\n"); goto done; } @@ -202,10 +242,11 @@ el_set(el, EL_HIST, history, myhistory); history(myhistory, &ev, H_LOAD, hfile); - snprintf(cmd_str, sizeof(cmd_str), "log info\n\n"); esl_send_recv(&handle, cmd_str); + esl_log(ESL_LOG_INFO, "FS CLI Ready.\n"); + while (running) { line = el_gets(el, &count); Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Sun Dec 21 16:54:43 2008 @@ -32,7 +32,6 @@ */ #include -#include #ifndef HAVE_GETHOSTBYNAME_R extern int gethostbyname_r (const char *__name, @@ -367,6 +366,8 @@ send(handle->sock, "\n\n", 2, 0); free(txt); + + return ESL_SUCCESS; } esl_status_t esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid) @@ -390,7 +391,7 @@ snprintf(send_buf, sizeof(send_buf), "%s\ncall-command: execute\n%s%s\n", cmd_buf, app_buf, arg_buf); - esl_send_recv(handle, send_buf); + return esl_send_recv(handle, send_buf); } esl_status_t esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback) @@ -452,7 +453,6 @@ struct hostent *result; char sendbuf[256]; - char recvbuf[256]; int rval; const char *hval; @@ -560,7 +560,7 @@ { fd_set rfds, efds; struct timeval tv = { 0, ms * 1000 }; - int max, activity, i = 0; + int max, activity; esl_status_t status = ESL_SUCCESS; esl_mutex_lock(handle->mutex); @@ -820,21 +820,31 @@ esl_log(ESL_LOG_DEBUG, "SEND\n%s\n", cmd); } - send(handle->sock, cmd, strlen(cmd), 0); + if (send(handle->sock, cmd, strlen(cmd), 0)) { + strerror_r(handle->errno, handle->err, sizeof(handle->err)); + return ESL_FAIL; + } if (!(*e == '\n' && *(e-1) == '\n')) { - send(handle->sock, "\n\n", 2, 0); + if (send(handle->sock, "\n\n", 2, 0)) { + strerror_r(handle->errno, handle->err, sizeof(handle->err)); + return ESL_FAIL; + } } + + return ESL_SUCCESS; + } esl_status_t esl_send_recv(esl_handle_t *handle, const char *cmd) { const char *hval; - + esl_status_t status; + esl_mutex_lock(handle->mutex); esl_send(handle, cmd); - esl_recv_event(handle, &handle->last_sr_event); + status = esl_recv_event(handle, &handle->last_sr_event); if (handle->last_sr_event) { hval = esl_event_get_header(handle->last_sr_event, "reply-text"); @@ -845,6 +855,8 @@ } esl_mutex_unlock(handle->mutex); + + return status; } Modified: freeswitch/trunk/libs/esl/src/esl_event.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl_event.c (original) +++ freeswitch/trunk/libs/esl/src/esl_event.c Sun Dec 21 16:54:43 2008 @@ -31,6 +31,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + #include #include @@ -56,7 +57,7 @@ /* make sure this is synced with the esl_event_types_t enum in esl_types.h also never put any new ones before EVENT_ALL */ -static char *EVENT_NAMES[] = { +static const char *EVENT_NAMES[] = { "CUSTOM", "CHANNEL_CREATE", "CHANNEL_DESTROY", @@ -277,7 +278,7 @@ return status; } -esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, char *data) +static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, char *data) { esl_event_header_t *header; esl_ssize_t hlen = -1; Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Sun Dec 21 16:54:43 2008 @@ -149,15 +149,19 @@ #include #endif +#include #include #include #include +#include +#include +#include + #ifdef HAVE_STRINGS_H #include #endif #include - #define esl_assert(_x) assert(_x) #define esl_safe_free(_x) if (_x) free(_x); _x = NULL #define esl_strlen_zero(s) (!s || *(s) == '\0') @@ -261,6 +265,7 @@ size_t esl_url_encode(const char *url, char *buf, size_t len); char *esl_url_decode(char *s); +const char *esl_stristr(const char *instr, const char *str); int esl_toupper(int c); int esl_tolower(int c); Modified: freeswitch/trunk/libs/esl/testclient.c ============================================================================== --- freeswitch/trunk/libs/esl/testclient.c (original) +++ freeswitch/trunk/libs/esl/testclient.c Sun Dec 21 16:54:43 2008 @@ -5,7 +5,7 @@ int main(void) { - esl_handle_t handle = {0}; + esl_handle_t handle = {{0}}; handle.debug = 1; From mikej at freeswitch.org Sun Dec 21 14:13:20 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 21 Dec 2008 17:13:20 -0500 Subject: [Freeswitch-trunk] [commit] r10899 - in freeswitch/trunk/libs/esl/src: . include Message-ID: Author: mikej Date: Sun Dec 21 17:13:20 2008 New Revision: 10899 Log: start of windows port Modified: freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/esl_config.c freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Sun Dec 21 17:13:20 2008 @@ -32,13 +32,16 @@ */ #include +#ifndef WIN32 +#define closesocket(x) close(x) +#endif #ifndef HAVE_GETHOSTBYNAME_R extern int gethostbyname_r (const char *__name, struct hostent *__result_buf, char *__buf, size_t __buflen, struct hostent **__result, - int *__h_errnop); + int *__h_errnump); #endif @@ -440,7 +443,7 @@ end: if (server_sock != ESL_SOCK_INVALID) { - close(server_sock); + closesocket(server_sock); server_sock = ESL_SOCK_INVALID; } @@ -474,14 +477,14 @@ memset(&handle->hostent, 0, sizeof(handle->hostent)); #ifdef HAVE_GETHOSTBYNAME_R_FIVE - rval = gethostbyname_r(host, &handle->hostent, handle->hostbuf, sizeof(handle->hostbuf), &handle->errno); + rval = gethostbyname_r(host, &handle->hostent, handle->hostbuf, sizeof(handle->hostbuf), &handle->errnum); result = handle->hostent; #else - rval = gethostbyname_r(host, &handle->hostent, handle->hostbuf, sizeof(handle->hostbuf), &result, &handle->errno); + rval = gethostbyname_r(host, &handle->hostent, handle->hostbuf, sizeof(handle->hostbuf), &result, &handle->errnum); #endif if (rval) { - strerror_r(handle->errno, handle->err, sizeof(handle->err)); + strerror_r(handle->errnum, handle->err, sizeof(handle->err)); goto fail; } @@ -546,7 +549,7 @@ } if (handle->sock != ESL_SOCK_INVALID) { - close(handle->sock); + closesocket(handle->sock); handle->sock = ESL_SOCK_INVALID; return ESL_SUCCESS; } @@ -604,7 +607,7 @@ char *hname, *hval; char *col; char *cl; - ssize_t len; + esl_ssize_t len; int zc = 0; esl_mutex_lock(handle->mutex); @@ -625,7 +628,7 @@ return ESL_FAIL; } } else if (rrval < 0) { - strerror_r(handle->errno, handle->err, sizeof(handle->err)); + strerror_r(handle->errnum, handle->err, sizeof(handle->err)); goto fail; } else { zc = 0; @@ -685,7 +688,7 @@ do { esl_ssize_t r; if ((r = recv(handle->sock, body + sofar, len - sofar, 0)) < 0) { - strerror_r(handle->errno, handle->err, sizeof(handle->err)); + strerror_r(handle->errnum, handle->err, sizeof(handle->err)); goto fail; } sofar += r; @@ -717,7 +720,7 @@ char *hname, *hval; char *col; char *cl; - ssize_t len; + esl_ssize_t len; char *c; esl_event_safe_destroy(&handle->last_ievent); @@ -775,7 +778,7 @@ do { esl_ssize_t r; if ((r = recv(handle->sock, body + sofar, len - sofar, 0)) < 0) { - strerror_r(handle->errno, handle->err, sizeof(handle->err)); + strerror_r(handle->errnum, handle->err, sizeof(handle->err)); goto fail; } sofar += r; Modified: freeswitch/trunk/libs/esl/src/esl_config.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl_config.c (original) +++ freeswitch/trunk/libs/esl/src/esl_config.c Sun Dec 21 17:13:20 2008 @@ -214,19 +214,24 @@ char cas_bits[5]; unsigned char bit = 0x8; char *double_colon = strchr(strvalue, ':'); + int x = 0; + if (!double_colon) { esl_log(ESL_LOG_ERROR, "No CAS bits specified: %s, :xxxx definition expected, where x is 1 or 0\n", double_colon); return -1; } + double_colon++; *outbits = 0; cas_bits[4] = 0; + if (sscanf(double_colon, "%c%c%c%c", &cas_bits[0], &cas_bits[1], &cas_bits[2], &cas_bits[3]) != 4) { esl_log(ESL_LOG_ERROR, "Invalid CAS bits specified: %s, :xxxx definition expected, where x is 1 or 0\n", double_colon); return -1; } + esl_log(ESL_LOG_DEBUG, "CAS bits specification found: %s\n", cas_bits); - int x = 0; + for (; cas_bits[x]; x++) { if ('1' == cas_bits[x]) { *outbits |= bit; Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Sun Dec 21 17:13:20 2008 @@ -153,9 +153,11 @@ #include #include #include +#ifndef WIN32 #include #include #include +#endif #ifdef HAVE_STRINGS_H #include @@ -168,8 +170,9 @@ #define esl_strlen_zero_buf(s) (*(s) == '\0') #ifdef WIN32 +#include #include -typedef HANDLE esl_socket_t; +typedef SOCKET esl_socket_t; typedef unsigned __int64 uint64_t; typedef unsigned __int32 uint32_t; typedef unsigned __int16 uint16_t; @@ -180,6 +183,7 @@ typedef __int8 int8_t; typedef intptr_t esl_ssize_t; typedef int esl_filehandle_t; +#define ESL_SOCK_INVALID INVALID_SOCKET #else #include #include @@ -211,7 +215,7 @@ char hostbuf[256]; esl_socket_t sock; char err[256]; - int errno; + int errnum; char header_buf[4196]; char last_reply[1024]; char last_sr_reply[1024]; From anthm at freeswitch.org Sun Dec 21 14:14:11 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sun, 21 Dec 2008 17:14:11 -0500 Subject: [Freeswitch-trunk] [commit] r10900 - freeswitch/trunk/libs/esl/src Message-ID: Author: anthm Date: Sun Dec 21 17:14:10 2008 New Revision: 10900 Log: windows port Modified: freeswitch/trunk/libs/esl/src/esl.c Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Sun Dec 21 17:14:10 2008 @@ -824,13 +824,13 @@ } if (send(handle->sock, cmd, strlen(cmd), 0)) { - strerror_r(handle->errno, handle->err, sizeof(handle->err)); + strerror_r(handle->errnum, handle->err, sizeof(handle->err)); return ESL_FAIL; } if (!(*e == '\n' && *(e-1) == '\n')) { if (send(handle->sock, "\n\n", 2, 0)) { - strerror_r(handle->errno, handle->err, sizeof(handle->err)); + strerror_r(handle->errnum, handle->err, sizeof(handle->err)); return ESL_FAIL; } } From mikej at freeswitch.org Sun Dec 21 14:17:14 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Sun, 21 Dec 2008 17:17:14 -0500 Subject: [Freeswitch-trunk] [commit] r10901 - freeswitch/trunk/libs/esl/src Message-ID: Author: mikej Date: Sun Dec 21 17:17:14 2008 New Revision: 10901 Log: windows port Modified: freeswitch/trunk/libs/esl/src/esl.c Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Sun Dec 21 17:17:14 2008 @@ -562,10 +562,12 @@ esl_status_t esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event) { fd_set rfds, efds; - struct timeval tv = { 0, ms * 1000 }; + struct timeval tv = { 0 }; int max, activity; esl_status_t status = ESL_SUCCESS; + tv.tv_usec = ms * 1000; + esl_mutex_lock(handle->mutex); FD_ZERO(&rfds); FD_ZERO(&efds); From anthm at freeswitch.org Sun Dec 21 15:31:40 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sun, 21 Dec 2008 18:31:40 -0500 Subject: [Freeswitch-trunk] [commit] r10902 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Sun Dec 21 18:31:39 2008 New Revision: 10902 Log: update Added: freeswitch/trunk/libs/esl/testserver.c Added: freeswitch/trunk/libs/esl/testserver.c ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/testserver.c Sun Dec 21 18:31:39 2008 @@ -0,0 +1,36 @@ +#include +#include +#include + +static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr) +{ + esl_handle_t handle = {{0}}; + + if (fork()) { + close(client_sock); + return; + } + + + esl_attach_handle(&handle, client_sock, addr); + handle.debug = 2; + + printf("Connected! %d\n", handle.sock); + + + + esl_execute(&handle, "answer", NULL, NULL); + esl_execute(&handle, "playback", "/ram/swimp.raw", NULL); + + sleep(30); + + esl_disconnect(&handle); +} + +int main(void) +{ + esl_global_set_default_logger(7); + esl_listen("localhost", 8084, mycallback); + + return 0; +} From anthm at freeswitch.org Sun Dec 21 15:31:58 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Sun, 21 Dec 2008 18:31:58 -0500 Subject: [Freeswitch-trunk] [commit] r10903 - in freeswitch/trunk/libs/esl/src: . include Message-ID: Author: anthm Date: Sun Dec 21 18:31:57 2008 New Revision: 10903 Log: support mac Modified: freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Sun Dec 21 18:31:57 2008 @@ -36,14 +36,6 @@ #define closesocket(x) close(x) #endif -#ifndef HAVE_GETHOSTBYNAME_R -extern int gethostbyname_r (const char *__name, - struct hostent *__result_buf, - char *__buf, size_t __buflen, - struct hostent **__result, - int *__h_errnump); -#endif - /* Written by Marc Espie, public domain */ @@ -456,7 +448,7 @@ struct hostent *result; char sendbuf[256]; - int rval; + int rval = 0; const char *hval; if (!handle->mutex) { @@ -476,19 +468,18 @@ memset(&handle->hostent, 0, sizeof(handle->hostent)); -#ifdef HAVE_GETHOSTBYNAME_R_FIVE - rval = gethostbyname_r(host, &handle->hostent, handle->hostbuf, sizeof(handle->hostbuf), &handle->errnum); - result = handle->hostent; -#else - rval = gethostbyname_r(host, &handle->hostent, handle->hostbuf, sizeof(handle->hostbuf), &result, &handle->errnum); -#endif + if ((result = gethostbyname(host))) { + handle->hostent = *result; + } else { + rval = -1; + } if (rval) { strerror_r(handle->errnum, handle->err, sizeof(handle->err)); goto fail; } - memcpy(&handle->sockaddr.sin_addr, result->h_addr, result->h_length); + memcpy(&handle->sockaddr.sin_addr, result->h_addr_list[0], result->h_length); rval = connect(handle->sock, (struct sockaddr *) &handle->sockaddr, sizeof(handle->sockaddr)); Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Sun Dec 21 18:31:57 2008 @@ -35,6 +35,10 @@ #define _ESL_H_ +#include +int vasprintf(char **ret, const char *format, va_list ap); + + #define esl_copy_string(_x, _y, _z) strncpy(_x, _y, _z - 1) #define esl_set_string(_x, _y) esl_copy_string(_x, _y, sizeof(_x)) From mikej at freeswitch.org Sun Dec 21 21:05:46 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 22 Dec 2008 00:05:46 -0500 Subject: [Freeswitch-trunk] [commit] r10905 - freeswitch/trunk/libs/esl/src Message-ID: Author: mikej Date: Mon Dec 22 00:05:44 2008 New Revision: 10905 Log: SO_REUSEADDR on windows Modified: freeswitch/trunk/libs/esl/src/esl.c Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Mon Dec 22 00:05:44 2008 @@ -389,10 +389,20 @@ return esl_send_recv(handle, send_buf); } +static int esl_socket_reuseaddr(esl_socket_t socket) +{ +#ifdef WIN32 + BOOL reuse_addr = TRUE; + return setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse_addr, sizeof(reuse_addr)); +#else + int reuse_addr = 1; + return setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, &reuse_addr, sizeof(reuse_addr)); +#endif +} + esl_status_t esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback) { esl_socket_t server_sock = ESL_SOCK_INVALID; - int reuse_addr = 1; struct sockaddr_in addr; esl_status_t status = ESL_SUCCESS; @@ -400,8 +410,8 @@ return ESL_FAIL; } - setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, &reuse_addr, sizeof(reuse_addr)); - + esl_socket_reuseaddr(server_sock); + memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); From mikej at freeswitch.org Sun Dec 21 21:37:55 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 22 Dec 2008 00:37:55 -0500 Subject: [Freeswitch-trunk] [commit] r10906 - in freeswitch/trunk/libs/esl/src: . include Message-ID: Author: mikej Date: Mon Dec 22 00:37:54 2008 New Revision: 10906 Log: windows port Modified: freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/esl_event.c freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Mon Dec 22 00:37:54 2008 @@ -429,8 +429,12 @@ for (;;) { int client_sock; - struct sockaddr_in echoClntAddr; - unsigned int clntLen; + struct sockaddr_in echoClntAddr; +#ifdef WIN32 + int clntLen; +#else + unsigned int clntLen; +#endif clntLen = sizeof(echoClntAddr); @@ -572,9 +576,18 @@ esl_mutex_lock(handle->mutex); FD_ZERO(&rfds); FD_ZERO(&efds); + +#ifdef WIN32 +#pragma warning( push ) +#pragma warning( disable : 4127 ) FD_SET(handle->sock, &rfds); FD_SET(handle->sock, &efds); - +#pragma warning( pop ) +#else + FD_SET(handle->sock, &rfds); + FD_SET(handle->sock, &efds); +#endif + max = handle->sock + 1; if ((activity = select(max, &rfds, NULL, &efds, &tv)) < 0) { Modified: freeswitch/trunk/libs/esl/src/esl_event.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl_event.c (original) +++ freeswitch/trunk/libs/esl/src/esl_event.c Mon Dec 22 00:37:54 2008 @@ -255,7 +255,7 @@ esl_assert(x < 1000); hash = esl_ci_hashfunc_default(header_name, &hlen); - if ((!hp->hash || hash == hp->hash) && !strcasecmp(header_name, hp->name)) { + if (hp->name && (!hp->hash || hash == hp->hash) && !strcasecmp(header_name, hp->name)) { if (lp) { lp->next = hp->next; } else { Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Mon Dec 22 00:37:54 2008 @@ -167,8 +167,15 @@ #include #endif #include + +#if (_MSC_VER >= 1400) // VC8+ +#define esl_assert(expr) assert(expr);__analysis_assume( expr ) +#endif +#ifndef esl_assert #define esl_assert(_x) assert(_x) +#endif + #define esl_safe_free(_x) if (_x) free(_x); _x = NULL #define esl_strlen_zero(s) (!s || *(s) == '\0') #define esl_strlen_zero_buf(s) (*(s) == '\0') @@ -188,6 +195,7 @@ typedef intptr_t esl_ssize_t; typedef int esl_filehandle_t; #define ESL_SOCK_INVALID INVALID_SOCKET +#define strerror_r(num, buf, size) strerror_s(buf, size, num) #else #include #include From mikej at freeswitch.org Mon Dec 22 08:27:42 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 22 Dec 2008 11:27:42 -0500 Subject: [Freeswitch-trunk] [commit] r10907 - in freeswitch/trunk/libs/esl/src: . include Message-ID: Author: mikej Date: Mon Dec 22 11:27:39 2008 New Revision: 10907 Log: null terminating snprintf Modified: freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/esl_config.c freeswitch/trunk/libs/esl/src/esl_event.c freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Mon Dec 22 11:27:39 2008 @@ -175,6 +175,24 @@ return NULL; } +#ifdef WIN32 +#ifndef vsnprintf +#define vsnprintf _vsnprintf +#endif +#endif + +int esl_snprintf(char *buffer, size_t count, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start(ap, fmt); + ret = vsnprintf(buffer, count-1, fmt, ap); + if (ret < 0) + buffer[count-1] = '\0'; + va_end(ap); + return ret; +} static void null_logger(const char *file, const char *func, int line, int level, const char *fmt, ...) { Modified: freeswitch/trunk/libs/esl/src/esl_config.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl_config.c (original) +++ freeswitch/trunk/libs/esl/src/esl_config.c Mon Dec 22 11:27:39 2008 @@ -43,7 +43,7 @@ if (file_path[0] == '/') { path = file_path; } else { - snprintf(path_buf, sizeof(path_buf), "%s%s%s", ESL_CONFIG_DIR, ESL_PATH_SEPARATOR, file_path); + esl_snprintf(path_buf, sizeof(path_buf), "%s%s%s", ESL_CONFIG_DIR, ESL_PATH_SEPARATOR, file_path); path = path_buf; } @@ -61,7 +61,7 @@ int last = -1; char *var, *val; - snprintf(path_buf, sizeof(path_buf), "%s%sopenesl.conf", ESL_CONFIG_DIR, ESL_PATH_SEPARATOR); + esl_snprintf(path_buf, sizeof(path_buf), "%s%sopenesl.conf", ESL_CONFIG_DIR, ESL_PATH_SEPARATOR); path = path_buf; if ((f = fopen(path, "r")) == 0) { Modified: freeswitch/trunk/libs/esl/src/esl_event.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl_event.c (original) +++ freeswitch/trunk/libs/esl/src/esl_event.c Mon Dec 22 11:27:39 2008 @@ -481,7 +481,7 @@ if (encode) { esl_url_encode(hp->value, encode_buf, encode_len); } else { - snprintf(encode_buf, encode_len, "[%s]", hp->value); + esl_snprintf(encode_buf, encode_len, "[%s]", hp->value); } llen = strlen(hp->name) + strlen(encode_buf) + 8; Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Mon Dec 22 11:27:39 2008 @@ -284,6 +284,8 @@ const char *esl_stristr(const char *instr, const char *str); int esl_toupper(int c); int esl_tolower(int c); +int esl_snprintf(char *buffer, size_t count, const char *fmt, ...); + typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr); From mikej at freeswitch.org Mon Dec 22 08:44:43 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 22 Dec 2008 11:44:43 -0500 Subject: [Freeswitch-trunk] [commit] r10908 - freeswitch/trunk/libs/esl/src Message-ID: Author: mikej Date: Mon Dec 22 11:44:43 2008 New Revision: 10908 Log: windows build Modified: freeswitch/trunk/libs/esl/src/esl.c Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Mon Dec 22 11:44:43 2008 @@ -738,7 +738,7 @@ } if (revent) { - const char *hval = esl_event_get_header(revent, "reply-text"); + hval = esl_event_get_header(revent, "reply-text"); if (!esl_strlen_zero(hval)) { strncpy(handle->last_reply, hval, sizeof(handle->last_reply)); @@ -750,12 +750,6 @@ const char *en; esl_event_types_t et = ESL_EVENT_COMMAND; char *body = strdup(revent->body); - char *beg; - char *hname, *hval; - char *col; - char *cl; - esl_ssize_t len; - char *c; esl_event_safe_destroy(&handle->last_ievent); From mikej at freeswitch.org Mon Dec 22 08:50:47 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 22 Dec 2008 11:50:47 -0500 Subject: [Freeswitch-trunk] [commit] r10909 - in freeswitch/trunk: . libs/esl libs/esl/src Message-ID: Author: mikej Date: Mon Dec 22 11:50:45 2008 New Revision: 10909 Log: add esl to windows build Added: freeswitch/trunk/libs/esl/esl.2008.vcproj Modified: freeswitch/trunk/Freeswitch.2008.sln freeswitch/trunk/libs/esl/ (props changed) freeswitch/trunk/libs/esl/src/esl_event.c Modified: freeswitch/trunk/Freeswitch.2008.sln ============================================================================== --- freeswitch/trunk/Freeswitch.2008.sln (original) +++ freeswitch/trunk/Freeswitch.2008.sln Mon Dec 22 11:50:45 2008 @@ -998,6 +998,8 @@ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} = {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "esl", "libs\esl\esl.2008.vcproj", "{CF405366-9558-4AE8-90EF-5E21B51CCB4E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -1754,6 +1756,12 @@ {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|Win32 + {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|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|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1852,6 +1860,7 @@ {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} {419C8F80-D858-4B48-A25C-AF4007608137} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {CF405366-9558-4AE8-90EF-5E21B51CCB4E} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} {5927104D-C14C-4AC8-925C-4AB681762E75} = {C120A020-773F-4EA3-923F-B67AF28B750D} {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {C120A020-773F-4EA3-923F-B67AF28B750D} {4F92B672-DADB-4047-8D6A-4BB3796733FD} = {C120A020-773F-4EA3-923F-B67AF28B750D} Added: freeswitch/trunk/libs/esl/esl.2008.vcproj ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/esl.2008.vcproj Mon Dec 22 11:50:45 2008 @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modified: freeswitch/trunk/libs/esl/src/esl_event.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl_event.c (original) +++ freeswitch/trunk/libs/esl/src/esl_event.c Mon Dec 22 11:50:45 2008 @@ -311,6 +311,43 @@ return ESL_SUCCESS; } +static int esl_vasprintf(char **ret, const char *fmt, va_list ap) +{ +#ifndef WIN32 + return vasprintf(ret, fmt, ap); +#else + char *buf; + int len; + size_t buflen; + va_list ap2; + char *tmp = NULL; + +#ifdef _MSC_VER +#if _MSC_VER >= 1500 + /* hack for incorrect assumption in msvc header files for code analysis */ + __analysis_assume(tmp); +#endif + ap2 = ap; +#else + va_copy(ap2, ap); +#endif + + len = vsnprintf(tmp, 0, fmt, ap2); + + if (len > 0 && (buf = malloc((buflen = (size_t) (len + 1)))) != NULL) { + len = vsnprintf(buf, buflen, fmt, ap); + *ret = buf; + } else { + *ret = NULL; + len = -1; + } + + va_end(ap2); + return len; +#endif +} + + esl_status_t esl_event_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *fmt, ...) { int ret = 0; @@ -318,7 +355,7 @@ va_list ap; va_start(ap, fmt); - ret = vasprintf(&data, fmt, ap); + ret = esl_vasprintf(&data, fmt, ap); va_end(ap); if (ret == -1) { @@ -344,7 +381,7 @@ va_list ap; if (fmt) { va_start(ap, fmt); - ret = vasprintf(&data, fmt, ap); + ret = esl_vasprintf(&data, fmt, ap); va_end(ap); if (ret == -1) { From mikej at freeswitch.org Mon Dec 22 09:59:16 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 22 Dec 2008 12:59:16 -0500 Subject: [Freeswitch-trunk] [commit] r10910 - in freeswitch/trunk/libs/esl: . src src/include Message-ID: Author: mikej Date: Mon Dec 22 12:59:14 2008 New Revision: 10910 Log: macros to export symbols Modified: freeswitch/trunk/libs/esl/esl.2008.vcproj freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/esl_config.c freeswitch/trunk/libs/esl/src/esl_event.c freeswitch/trunk/libs/esl/src/esl_threadmutex.c freeswitch/trunk/libs/esl/src/include/esl.h freeswitch/trunk/libs/esl/src/include/esl_config.h freeswitch/trunk/libs/esl/src/include/esl_event.h freeswitch/trunk/libs/esl/src/include/esl_threadmutex.h Modified: freeswitch/trunk/libs/esl/esl.2008.vcproj ============================================================================== --- freeswitch/trunk/libs/esl/esl.2008.vcproj (original) +++ freeswitch/trunk/libs/esl/esl.2008.vcproj Mon Dec 22 12:59:14 2008 @@ -42,7 +42,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="src/include" - PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE" + PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;ESL_EXPORTS" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" @@ -120,7 +120,7 @@ 255) return(c); @@ -126,7 +126,7 @@ const short *_esl_tolower_tab_ = _esl_C_tolower_; -int esl_tolower(int c) +ESL_DECLARE(int) esl_tolower(int c) { if ((unsigned int)c > 255) return(c); @@ -135,7 +135,7 @@ return((_esl_tolower_tab_ + 1)[c]); } -const char *esl_stristr(const char *instr, const char *str) +ESL_DECLARE(const char *)esl_stristr(const char *instr, const char *str) { /* ** Rev History: 16/07/97 Greg Thayer Optimized @@ -181,7 +181,7 @@ #endif #endif -int esl_snprintf(char *buffer, size_t count, const char *fmt, ...) +ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...) { va_list ap; int ret; @@ -280,7 +280,7 @@ esl_log_level = level; } -size_t esl_url_encode(const char *url, char *buf, size_t len) +ESL_DECLARE(size_t) esl_url_encode(const char *url, char *buf, size_t len) { const char *p; size_t x = 0; @@ -317,7 +317,7 @@ return x; } -char *esl_url_decode(char *s) +ESL_DECLARE(char *)esl_url_decode(char *s) { char *o; unsigned int tmp; @@ -334,7 +334,7 @@ return s; } -esl_status_t esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in addr) +ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in addr) { handle->sock = socket; handle->addr = addr; @@ -364,7 +364,7 @@ return ESL_FAIL; } -esl_status_t esl_sendevent(esl_handle_t *handle, esl_event_t *event) +ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event) { char *txt; @@ -383,7 +383,7 @@ return ESL_SUCCESS; } -esl_status_t esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid) +ESL_DECLARE(esl_status_t) esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid) { char cmd_buf[128] = "sendmsg"; char app_buf[512] = ""; @@ -418,7 +418,7 @@ #endif } -esl_status_t esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback) +ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback) { esl_socket_t server_sock = ESL_SOCK_INVALID; struct sockaddr_in addr; @@ -475,7 +475,7 @@ } -esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password) +ESL_DECLARE(esl_status_t) esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password) { struct hostent *result; @@ -560,7 +560,7 @@ return ESL_FAIL; } -esl_status_t esl_disconnect(esl_handle_t *handle) +ESL_DECLARE(esl_status_t) esl_disconnect(esl_handle_t *handle) { esl_event_safe_destroy(&handle->last_event); esl_event_safe_destroy(&handle->last_sr_event); @@ -582,7 +582,7 @@ return ESL_FAIL; } -esl_status_t esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event) +ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event) { fd_set rfds, efds; struct timeval tv = { 0 }; @@ -631,7 +631,7 @@ } -esl_status_t esl_recv_event(esl_handle_t *handle, esl_event_t **save_event) +ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, esl_event_t **save_event) { char *c; esl_ssize_t rrval; @@ -843,7 +843,7 @@ } -esl_status_t esl_send(esl_handle_t *handle, const char *cmd) +ESL_DECLARE(esl_status_t) esl_send(esl_handle_t *handle, const char *cmd) { const char *e = cmd + strlen(cmd) -1; @@ -868,7 +868,7 @@ } -esl_status_t esl_send_recv(esl_handle_t *handle, const char *cmd) +ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd) { const char *hval; esl_status_t status; Modified: freeswitch/trunk/libs/esl/src/esl_config.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl_config.c (original) +++ freeswitch/trunk/libs/esl/src/esl_config.c Mon Dec 22 12:59:14 2008 @@ -34,7 +34,7 @@ #include "esl.h" #include "esl_config.h" -int esl_config_open_file(esl_config_t *cfg, const char *file_path) +ESL_DECLARE(int) esl_config_open_file(esl_config_t *cfg, const char *file_path) { FILE *f; const char *path = NULL; @@ -91,7 +91,7 @@ } } -void esl_config_close_file(esl_config_t *cfg) +ESL_DECLARE(void) esl_config_close_file(esl_config_t *cfg) { if (cfg->file) { @@ -103,7 +103,7 @@ -int esl_config_next_pair(esl_config_t *cfg, char **var, char **val) +ESL_DECLARE(int) esl_config_next_pair(esl_config_t *cfg, char **var, char **val) { int ret = 0; char *p, *end; @@ -209,7 +209,7 @@ } -int esl_config_get_cas_bits(char *strvalue, unsigned char *outbits) +ESL_DECLARE(int) esl_config_get_cas_bits(char *strvalue, unsigned char *outbits) { char cas_bits[5]; unsigned char bit = 0x8; Modified: freeswitch/trunk/libs/esl/src/esl_event.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl_event.c (original) +++ freeswitch/trunk/libs/esl/src/esl_event.c Mon Dec 22 12:59:14 2008 @@ -121,12 +121,12 @@ "ALL" }; -const char *esl_event_name(esl_event_types_t event) +ESL_DECLARE(const char *)esl_event_name(esl_event_types_t event) { return EVENT_NAMES[event]; } -esl_status_t esl_name_event(const char *name, esl_event_types_t *type) +ESL_DECLARE(esl_status_t) esl_name_event(const char *name, esl_event_types_t *type) { esl_event_types_t x; @@ -141,7 +141,7 @@ } -esl_status_t esl_event_create_subclass(esl_event_t **event, esl_event_types_t event_id, const char *subclass_name) +ESL_DECLARE(esl_status_t) esl_event_create_subclass(esl_event_t **event, esl_event_types_t event_id, const char *subclass_name) { *event = NULL; @@ -166,7 +166,7 @@ } -const char *esl_priority_name(esl_priority_t priority) +ESL_DECLARE(const char *)esl_priority_name(esl_priority_t priority) { switch (priority) { /*lol */ case ESL_PRIORITY_NORMAL: @@ -180,7 +180,7 @@ } } -esl_status_t esl_event_set_priority(esl_event_t *event, esl_priority_t priority) +ESL_DECLARE(esl_status_t) esl_event_set_priority(esl_event_t *event, esl_priority_t priority) { event->priority = priority; esl_event_add_header_string(event, ESL_STACK_TOP, "priority", esl_priority_name(priority)); @@ -213,7 +213,7 @@ } -char *esl_event_get_header(esl_event_t *event, const char *header_name) +ESL_DECLARE(char *)esl_event_get_header(esl_event_t *event, const char *header_name) { esl_event_header_t *hp; esl_ssize_t hlen = -1; @@ -233,12 +233,12 @@ return NULL; } -char *esl_event_get_body(esl_event_t *event) +ESL_DECLARE(char *)esl_event_get_body(esl_event_t *event) { return (event ? event->body : NULL); } -esl_status_t esl_event_del_header(esl_event_t *event, const char *header_name) +ESL_DECLARE(esl_status_t) esl_event_del_header(esl_event_t *event, const char *header_name) { esl_event_header_t *hp, *lp = NULL, *tp; esl_status_t status = ESL_FAIL; @@ -311,6 +311,8 @@ return ESL_SUCCESS; } +int vasprintf(char **ret, const char *format, va_list ap); + static int esl_vasprintf(char **ret, const char *fmt, va_list ap) { #ifndef WIN32 @@ -348,7 +350,7 @@ } -esl_status_t esl_event_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *fmt, ...) +ESL_DECLARE(esl_status_t) esl_event_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *fmt, ...) { int ret = 0; char *data; @@ -365,7 +367,7 @@ return esl_event_base_add_header(event, stack, header_name, data); } -esl_status_t esl_event_add_header_string(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *data) +ESL_DECLARE(esl_status_t) esl_event_add_header_string(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *data) { if (data) { return esl_event_base_add_header(event, stack, header_name, DUP(data)); @@ -373,7 +375,7 @@ return ESL_FAIL; } -esl_status_t esl_event_add_body(esl_event_t *event, const char *fmt, ...) +ESL_DECLARE(esl_status_t) esl_event_add_body(esl_event_t *event, const char *fmt, ...) { int ret = 0; char *data; @@ -396,7 +398,7 @@ } } -void esl_event_destroy(esl_event_t **event) +ESL_DECLARE(void) esl_event_destroy(esl_event_t **event) { esl_event_t *ep = *event; esl_event_header_t *hp, *this; @@ -420,7 +422,7 @@ -esl_status_t esl_event_dup(esl_event_t **event, esl_event_t *todup) +ESL_DECLARE(esl_status_t) esl_event_dup(esl_event_t **event, esl_event_t *todup) { esl_event_header_t *header, *hp, *hp2, *last = NULL; @@ -463,7 +465,7 @@ return ESL_SUCCESS; } -esl_status_t esl_event_serialize(esl_event_t *event, char **str, esl_bool_t encode) +ESL_DECLARE(esl_status_t) esl_event_serialize(esl_event_t *event, char **str, esl_bool_t encode) { size_t len = 0; esl_event_header_t *hp; Modified: freeswitch/trunk/libs/esl/src/esl_threadmutex.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl_threadmutex.c (original) +++ freeswitch/trunk/libs/esl/src/esl_threadmutex.c Mon Dec 22 12:59:14 2008 @@ -80,7 +80,7 @@ return exit_val; } -esl_status_t esl_thread_create_detached(esl_thread_function_t func, void *data) +ESL_DECLARE(esl_status_t) esl_thread_create_detached(esl_thread_function_t func, void *data) { return esl_thread_create_detached_ex(func, data, thread_default_stacksize); } @@ -132,7 +132,7 @@ } -esl_status_t esl_mutex_create(esl_mutex_t **mutex) +ESL_DECLARE(esl_status_t) esl_mutex_create(esl_mutex_t **mutex) { esl_status_t status = ESL_FAIL; #ifndef WIN32 @@ -170,7 +170,7 @@ return status; } -esl_status_t esl_mutex_destroy(esl_mutex_t **mutex) +ESL_DECLARE(esl_status_t) esl_mutex_destroy(esl_mutex_t **mutex) { esl_mutex_t *mp = *mutex; *mutex = NULL; @@ -187,7 +187,7 @@ return ESL_SUCCESS; } -esl_status_t esl_mutex_lock(esl_mutex_t *mutex) +ESL_DECLARE(esl_status_t) esl_mutex_lock(esl_mutex_t *mutex) { #ifdef WIN32 EnterCriticalSection(&mutex->mutex); @@ -198,7 +198,7 @@ return ESL_SUCCESS; } -esl_status_t esl_mutex_trylock(esl_mutex_t *mutex) +ESL_DECLARE(esl_status_t) esl_mutex_trylock(esl_mutex_t *mutex) { #ifdef WIN32 if (!TryEnterCriticalSection(&mutex->mutex)) @@ -210,7 +210,7 @@ return ESL_SUCCESS; } -esl_status_t esl_mutex_unlock(esl_mutex_t *mutex) +ESL_DECLARE(esl_status_t) esl_mutex_unlock(esl_mutex_t *mutex) { #ifdef WIN32 LeaveCriticalSection(&mutex->mutex); Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Mon Dec 22 12:59:14 2008 @@ -34,10 +34,7 @@ #ifndef _ESL_H_ #define _ESL_H_ - #include -int vasprintf(char **ret, const char *format, va_list ap); - #define esl_copy_string(_x, _y, _z) strncpy(_x, _y, _z - 1) #define esl_set_string(_x, _y) esl_copy_string(_x, _y, sizeof(_x)) @@ -45,7 +42,6 @@ typedef struct esl_event_header esl_event_header_t; typedef struct esl_event esl_event_t; - #define ESL_SEQ_ESC "\033[" /* Ansi Control character suffixes */ #define ESL_SEQ_HOME_CHAR 'H' @@ -196,7 +192,23 @@ typedef int esl_filehandle_t; #define ESL_SOCK_INVALID INVALID_SOCKET #define strerror_r(num, buf, size) strerror_s(buf, size, num) +#if defined(ESL_DECLARE_STATIC) +#define ESL_DECLARE(type) type __stdcall +#define ESL_DECLARE_NONSTD(type) type __cdecl +#define ESL_DECLARE_DATA +#elif defined(ESL_EXPORTS) +#define ESL_DECLARE(type) __declspec(dllexport) type __stdcall +#define ESL_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl +#define ESL_DECLARE_DATA __declspec(dllexport) +#else +#define ESL_DECLARE(type) __declspec(dllimport) type __stdcall +#define ESL_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl +#define ESL_DECLARE_DATA __declspec(dllimport) +#endif #else +#define ESL_DECLARE(type) type +#define ESL_DECLARE_NONSTD(type) type +#define ESL_DECLARE_DATA #include #include #include @@ -218,7 +230,6 @@ ESL_BREAK } esl_status_t; - #include typedef struct { @@ -279,27 +290,27 @@ #include "esl_threadmutex.h" #include "esl_config.h" -size_t esl_url_encode(const char *url, char *buf, size_t len); -char *esl_url_decode(char *s); -const char *esl_stristr(const char *instr, const char *str); -int esl_toupper(int c); -int esl_tolower(int c); -int esl_snprintf(char *buffer, size_t count, const char *fmt, ...); +ESL_DECLARE(size_t) esl_url_encode(const char *url, char *buf, size_t len); +ESL_DECLARE(char *)esl_url_decode(char *s); +ESL_DECLARE(const char *)esl_stristr(const char *instr, const char *str); +ESL_DECLARE(int) esl_toupper(int c); +ESL_DECLARE(int) esl_tolower(int c); +ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...); typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr); -esl_status_t esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in addr); -esl_status_t esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback); -esl_status_t esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid); -esl_status_t esl_sendevent(esl_handle_t *handle, esl_event_t *event); - -esl_status_t esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password); -esl_status_t esl_disconnect(esl_handle_t *handle); -esl_status_t esl_send(esl_handle_t *handle, const char *cmd); -esl_status_t esl_recv_event(esl_handle_t *handle, esl_event_t **save_event); -esl_status_t esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event); -esl_status_t esl_send_recv(esl_handle_t *handle, const char *cmd); +ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in addr); +ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback); +ESL_DECLARE(esl_status_t) esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid); +ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event); + +ESL_DECLARE(esl_status_t) esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password); +ESL_DECLARE(esl_status_t) esl_disconnect(esl_handle_t *handle); +ESL_DECLARE(esl_status_t) esl_send(esl_handle_t *handle, const char *cmd); +ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, esl_event_t **save_event); +ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event); +ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd); #define esl_recv(_h) esl_recv_event(_h, NULL) #define esl_recv_timed(_h, _ms) esl_recv_event_timed(_h, _ms, NULL) Modified: freeswitch/trunk/libs/esl/src/include/esl_config.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl_config.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl_config.h Mon Dec 22 12:59:14 2008 @@ -100,13 +100,13 @@ \param file_path path to the file \return 1 (true) on success 0 (false) on failure */ -int esl_config_open_file(esl_config_t * cfg, const char *file_path); +ESL_DECLARE(int) esl_config_open_file(esl_config_t * cfg, const char *file_path); /*! \brief Close a previously opened configuration file \param cfg (esl_config_t *) config handle to use */ -void esl_config_close_file(esl_config_t * cfg); +ESL_DECLARE(void) esl_config_close_file(esl_config_t * cfg); /*! \brief Retrieve next name/value pair from configuration file @@ -114,14 +114,14 @@ \param var pointer to aim at the new variable name \param val pointer to aim at the new value */ -int esl_config_next_pair(esl_config_t * cfg, char **var, char **val); +ESL_DECLARE(int) esl_config_next_pair(esl_config_t * cfg, char **var, char **val); /*! \brief Retrieve the CAS bits from a configuration string value \param strvalue pointer to the configuration string value (expected to be in format whatever:xxxx) \param outbits pointer to aim at the CAS bits */ -int esl_config_get_cas_bits(char *strvalue, unsigned char *outbits); +ESL_DECLARE(int) esl_config_get_cas_bits(char *strvalue, unsigned char *outbits); /** @} */ Modified: freeswitch/trunk/libs/esl/src/include/esl_event.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl_event.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl_event.h Mon Dec 22 12:59:14 2008 @@ -159,7 +159,7 @@ \param subclass_name the subclass name for custom event (only valid when event_id is ESL_EVENT_CUSTOM) \return ESL_STATUS_SUCCESS on success */ -esl_status_t esl_event_create_subclass(esl_event_t **event, esl_event_types_t event_id, const char *subclass_name); +ESL_DECLARE(esl_status_t) esl_event_create_subclass(esl_event_t **event, esl_event_types_t event_id, const char *subclass_name); /*! \brief Set the priority of an event @@ -167,7 +167,7 @@ \param priority the event priority \return ESL_STATUS_SUCCESS */ -esl_status_t esl_event_set_priority(esl_event_t *event, esl_priority_t priority); +ESL_DECLARE(esl_status_t) esl_event_set_priority(esl_event_t *event, esl_priority_t priority); /*! \brief Retrieve a header value from an event @@ -175,14 +175,14 @@ \param header_name the name of the header to read \return the value of the requested header */ -char *esl_event_get_header(esl_event_t *event, const char *header_name); +ESL_DECLARE(char *)esl_event_get_header(esl_event_t *event, const char *header_name); /*! \brief Retrieve the body value from an event \param event the event to read the body from \return the value of the body or NULL */ -char *esl_event_get_body(esl_event_t *event); +ESL_DECLARE(char *)esl_event_get_body(esl_event_t *event); /*! \brief Add a header to an event @@ -192,7 +192,7 @@ \param fmt the value of the header (varargs see standard sprintf family) \return ESL_STATUS_SUCCESS if the header was added */ -esl_status_t esl_event_add_header(esl_event_t *event, esl_stack_t stack, +ESL_DECLARE(esl_status_t) esl_event_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *fmt, ...); //PRINTF_FUNCTION(4, 5); /*! @@ -203,15 +203,15 @@ \param data the value of the header \return ESL_STATUS_SUCCESS if the header was added */ -esl_status_t esl_event_add_header_string(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *data); +ESL_DECLARE(esl_status_t) esl_event_add_header_string(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *data); -esl_status_t esl_event_del_header(esl_event_t *event, const char *header_name); +ESL_DECLARE(esl_status_t) esl_event_del_header(esl_event_t *event, const char *header_name); /*! \brief Destroy an event \param event pointer to the pointer to event to destroy */ -void esl_event_destroy(esl_event_t **event); +ESL_DECLARE(void) esl_event_destroy(esl_event_t **event); #define esl_event_safe_destroy(_event) if (_event) esl_event_destroy(_event) /*! @@ -220,14 +220,14 @@ \param todup an event to duplicate \return ESL_STATUS_SUCCESS if the event was duplicated */ -esl_status_t esl_event_dup(esl_event_t **event, esl_event_t *todup); +ESL_DECLARE(esl_status_t) esl_event_dup(esl_event_t **event, esl_event_t *todup); /*! \brief Render the name of an event id enumeration \param event the event id to render the name of \return the rendered name */ -const char *esl_event_name(esl_event_types_t event); +ESL_DECLARE(const char *)esl_event_name(esl_event_types_t event); /*! \brief return the event id that matches a given event name @@ -235,7 +235,7 @@ \param type the event id to return \return ESL_STATUS_SUCCESS if there was a match */ -esl_status_t esl_name_event(const char *name, esl_event_types_t *type); +ESL_DECLARE(esl_status_t) esl_name_event(const char *name, esl_event_types_t *type); /*! \brief Render a string representation of an event sutable for printing or network transport @@ -245,7 +245,7 @@ \return ESL_STATUS_SUCCESS if the operation was successful \note you must free the resulting string when you are finished with it */ -esl_status_t esl_event_serialize(esl_event_t *event, char **str, esl_bool_t encode); +ESL_DECLARE(esl_status_t) esl_event_serialize(esl_event_t *event, char **str, esl_bool_t encode); /*! \brief Add a body to an event @@ -254,7 +254,7 @@ \return ESL_STATUS_SUCCESS if the body was added to the event \note the body parameter can be shadowed by the esl_event_reserve_subclass_detailed function */ -esl_status_t esl_event_add_body(esl_event_t *event, const char *fmt, ...); +ESL_DECLARE(esl_status_t) esl_event_add_body(esl_event_t *event, const char *fmt, ...); /*! \brief Create a new event assuming it will not be custom event and therefore hiding the unused parameters @@ -264,7 +264,7 @@ */ #define esl_event_create(event, id) esl_event_create_subclass(event, id, ESL_EVENT_SUBCLASS_ANY) -const char *esl_priority_name(esl_priority_t priority); +ESL_DECLARE(const char *)esl_priority_name(esl_priority_t priority); ///\} Modified: freeswitch/trunk/libs/esl/src/include/esl_threadmutex.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl_threadmutex.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl_threadmutex.h Mon Dec 22 12:59:14 2008 @@ -27,14 +27,14 @@ typedef struct esl_thread esl_thread_t; typedef void *(*esl_thread_function_t) (esl_thread_t *, void *); -esl_status_t esl_thread_create_detached(esl_thread_function_t func, void *data); +ESL_DECLARE(esl_status_t) esl_thread_create_detached(esl_thread_function_t func, void *data); esl_status_t esl_thread_create_detached_ex(esl_thread_function_t func, void *data, size_t stack_size); void esl_thread_override_default_stacksize(size_t size); -esl_status_t esl_mutex_create(esl_mutex_t **mutex); -esl_status_t esl_mutex_destroy(esl_mutex_t **mutex); -esl_status_t esl_mutex_lock(esl_mutex_t *mutex); -esl_status_t esl_mutex_trylock(esl_mutex_t *mutex); -esl_status_t esl_mutex_unlock(esl_mutex_t *mutex); +ESL_DECLARE(esl_status_t) esl_mutex_create(esl_mutex_t **mutex); +ESL_DECLARE(esl_status_t) esl_mutex_destroy(esl_mutex_t **mutex); +ESL_DECLARE(esl_status_t) esl_mutex_lock(esl_mutex_t *mutex); +ESL_DECLARE(esl_status_t) esl_mutex_trylock(esl_mutex_t *mutex); +ESL_DECLARE(esl_status_t) esl_mutex_unlock(esl_mutex_t *mutex); #endif From mikej at freeswitch.org Mon Dec 22 10:53:09 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 22 Dec 2008 13:53:09 -0500 Subject: [Freeswitch-trunk] [commit] r10911 - in freeswitch/trunk: . libs/esl libs/esl/src libs/esl/src/include Message-ID: Author: mikej Date: Mon Dec 22 13:53:09 2008 New Revision: 10911 Log: fs_cli now builds on windows, does not yet work Added: freeswitch/trunk/libs/esl/fs_cli.2008.vcproj freeswitch/trunk/libs/esl/src/esl.2008.vcproj Removed: freeswitch/trunk/libs/esl/esl.2008.vcproj Modified: freeswitch/trunk/Freeswitch.2008.sln freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/ (props changed) freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/Freeswitch.2008.sln ============================================================================== --- freeswitch/trunk/Freeswitch.2008.sln (original) +++ freeswitch/trunk/Freeswitch.2008.sln Mon Dec 22 13:53:09 2008 @@ -998,7 +998,12 @@ {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} = {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "esl", "libs\esl\esl.2008.vcproj", "{CF405366-9558-4AE8-90EF-5E21B51CCB4E}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "esl", "libs\esl\src\esl.2008.vcproj", "{CF405366-9558-4AE8-90EF-5E21B51CCB4E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fs_cli", "libs\esl\fs_cli.2008.vcproj", "{D2FB8043-D208-4AEE-8F18-3B5857C871B9}" + ProjectSection(ProjectDependencies) = postProject + {CF405366-9558-4AE8-90EF-5E21B51CCB4E} = {CF405366-9558-4AE8-90EF-5E21B51CCB4E} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1762,6 +1767,10 @@ {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|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE Added: freeswitch/trunk/libs/esl/fs_cli.2008.vcproj ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/fs_cli.2008.vcproj Mon Dec 22 13:53:09 2008 @@ -0,0 +1,258 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Mon Dec 22 13:53:09 2008 @@ -2,13 +2,20 @@ #include #include #include -#include +#ifdef WIN32 +#define strdup(src) _strdup(src) +#define usleep(time) Sleep(time/1000) +#else +#include #include +#define HAVE_EDITLINE +#endif static char prompt_str[512] = ""; static char hostname[512] = ""; +#ifdef HAVE_EDITLINE static char *prompt(EditLine * e) { return prompt_str; @@ -17,6 +24,8 @@ static EditLine *el; static History *myhistory; static HistEvent ev; +#endif + static int running = 1; static int thread_running = 0; @@ -149,8 +158,8 @@ int main(int argc, char *argv[]) { esl_handle_t handle = {{0}}; - int count; - const char *line; + int count = 0; + const char *line = NULL; char cmd_str[1024] = ""; char hfile[512] = "/tmp/fs_cli_history"; char cfile[512] = "/tmp/fs_cli_config"; @@ -199,7 +208,7 @@ } else if (!strcasecmp(var, "port")) { int pt = atoi(val); if (pt > 0) { - profiles[cur].port = pt; + profiles[cur].port = (esl_port_t)pt; } } } @@ -227,7 +236,8 @@ } esl_thread_create_detached(msg_thread_run, &handle); - + +#ifdef HAVE_EDITLINE el = el_init(__FILE__, stdout, stdout, stdout); el_set(el, EL_PROMPT, &prompt); el_set(el, EL_EDITOR, "emacs"); @@ -241,7 +251,8 @@ history(myhistory, &ev, H_SETSIZE, 800); el_set(el, EL_HIST, history, myhistory); history(myhistory, &ev, H_LOAD, hfile); - +#endif + snprintf(cmd_str, sizeof(cmd_str), "log info\n\n"); esl_send_recv(&handle, cmd_str); @@ -249,19 +260,28 @@ while (running) { +#ifdef HAVE_EDITLINE line = el_gets(el, &count); - +#endif + if (count > 1) { if (!esl_strlen_zero(line)) { char *cmd = strdup(line); char *p; + +#ifdef HAVE_EDITLINE const LineInfo *lf = el_line(el); char *foo = (char *) lf->buffer; +#endif + if ((p = strrchr(cmd, '\r')) || (p = strrchr(cmd, '\n'))) { *p = '\0'; } assert(cmd != NULL); + +#ifdef HAVE_EDITLINE history(myhistory, &ev, H_ENTER, line); +#endif if (!strncasecmp(cmd, "...", 3)) { goto done; @@ -277,8 +297,10 @@ } } +#ifdef HAVE_EDITLINE el_deletestr(el, strlen(foo) + 1); memset(foo, 0, strlen(foo)); +#endif free(cmd); } } @@ -290,11 +312,13 @@ done: +#ifdef HAVE_EDITLINE history(myhistory, &ev, H_SAVE, hfile); /* Clean up our memory */ history_end(myhistory); el_end(el); +#endif esl_disconnect(&handle); Added: freeswitch/trunk/libs/esl/src/esl.2008.vcproj ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/src/esl.2008.vcproj Mon Dec 22 13:53:09 2008 @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Mon Dec 22 13:53:09 2008 @@ -175,23 +175,23 @@ return NULL; } -#ifdef WIN32 -#ifndef vsnprintf -#define vsnprintf _vsnprintf -#endif -#endif - -ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...) -{ - va_list ap; - int ret; - - va_start(ap, fmt); - ret = vsnprintf(buffer, count-1, fmt, ap); - if (ret < 0) - buffer[count-1] = '\0'; - va_end(ap); - return ret; +#ifdef WIN32 +#ifndef vsnprintf +#define vsnprintf _vsnprintf +#endif +#endif + +ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start(ap, fmt); + ret = vsnprintf(buffer, count-1, fmt, ap); + if (ret < 0) + buffer[count-1] = '\0'; + va_end(ap); + return ret; } static void null_logger(const char *file, const char *func, int line, int level, const char *fmt, ...) @@ -261,7 +261,7 @@ esl_logger_t esl_log = null_logger; -void esl_global_set_logger(esl_logger_t logger) +ESL_DECLARE(void) esl_global_set_logger(esl_logger_t logger) { if (logger) { esl_log = logger; @@ -270,7 +270,7 @@ } } -void esl_global_set_default_logger(int level) +ESL_DECLARE(void) esl_global_set_default_logger(int level) { if (level < 0 || level > 7) { level = 7; @@ -410,7 +410,7 @@ static int esl_socket_reuseaddr(esl_socket_t socket) { #ifdef WIN32 - BOOL reuse_addr = TRUE; + BOOL reuse_addr = TRUE; return setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse_addr, sizeof(reuse_addr)); #else int reuse_addr = 1; @@ -596,11 +596,11 @@ FD_ZERO(&efds); #ifdef WIN32 -#pragma warning( push ) +#pragma warning( push ) #pragma warning( disable : 4127 ) FD_SET(handle->sock, &rfds); FD_SET(handle->sock, &efds); -#pragma warning( pop ) +#pragma warning( pop ) #else FD_SET(handle->sock, &rfds); FD_SET(handle->sock, &efds); Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Mon Dec 22 13:53:09 2008 @@ -163,10 +163,10 @@ #include #endif #include - -#if (_MSC_VER >= 1400) // VC8+ -#define esl_assert(expr) assert(expr);__analysis_assume( expr ) -#endif + +#if (_MSC_VER >= 1400) // VC8+ +#define esl_assert(expr) assert(expr);__analysis_assume( expr ) +#endif #ifndef esl_assert #define esl_assert(_x) assert(_x) @@ -192,23 +192,23 @@ typedef int esl_filehandle_t; #define ESL_SOCK_INVALID INVALID_SOCKET #define strerror_r(num, buf, size) strerror_s(buf, size, num) -#if defined(ESL_DECLARE_STATIC) -#define ESL_DECLARE(type) type __stdcall -#define ESL_DECLARE_NONSTD(type) type __cdecl -#define ESL_DECLARE_DATA -#elif defined(ESL_EXPORTS) -#define ESL_DECLARE(type) __declspec(dllexport) type __stdcall -#define ESL_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl -#define ESL_DECLARE_DATA __declspec(dllexport) -#else -#define ESL_DECLARE(type) __declspec(dllimport) type __stdcall -#define ESL_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl -#define ESL_DECLARE_DATA __declspec(dllimport) -#endif +#if defined(ESL_DECLARE_STATIC) +#define ESL_DECLARE(type) type __stdcall +#define ESL_DECLARE_NONSTD(type) type __cdecl +#define ESL_DECLARE_DATA +#elif defined(ESL_EXPORTS) +#define ESL_DECLARE(type) __declspec(dllexport) type __stdcall +#define ESL_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl +#define ESL_DECLARE_DATA __declspec(dllexport) +#else +#define ESL_DECLARE(type) __declspec(dllimport) type __stdcall +#define ESL_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl +#define ESL_DECLARE_DATA __declspec(dllimport) +#endif #else -#define ESL_DECLARE(type) type -#define ESL_DECLARE_NONSTD(type) type -#define ESL_DECLARE_DATA +#define ESL_DECLARE(type) type +#define ESL_DECLARE_NONSTD(type) type +#define ESL_DECLARE_DATA #include #include #include @@ -281,10 +281,10 @@ #define ESL_LOG_EMERG ESL_PRE, ESL_LOG_LEVEL_EMERG typedef void (*esl_logger_t)(const char *file, const char *func, int line, int level, const char *fmt, ...); -extern esl_logger_t esl_log; +ESL_DECLARE_DATA extern esl_logger_t esl_log; -void esl_global_set_logger(esl_logger_t logger); -void esl_global_set_default_logger(int level); +ESL_DECLARE(void) esl_global_set_logger(esl_logger_t logger); +ESL_DECLARE(void) esl_global_set_default_logger(int level); #include "esl_event.h" #include "esl_threadmutex.h" @@ -295,7 +295,7 @@ ESL_DECLARE(const char *)esl_stristr(const char *instr, const char *str); ESL_DECLARE(int) esl_toupper(int c); ESL_DECLARE(int) esl_tolower(int c); -ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...); +ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...); typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr); From brian at freeswitch.org Mon Dec 22 11:20:54 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 22 Dec 2008 14:20:54 -0500 Subject: [Freeswitch-trunk] [commit] r10912 - in freeswitch/trunk: src/mod/codecs/mod_g729 support-d Message-ID: Author: brian Date: Mon Dec 22 14:20:53 2008 New Revision: 10912 Log: clean up and tweaks Modified: freeswitch/trunk/src/mod/codecs/mod_g729/mod_g729.c freeswitch/trunk/support-d/prereq.sh Modified: freeswitch/trunk/src/mod/codecs/mod_g729/mod_g729.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_g729/mod_g729.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_g729/mod_g729.c Mon Dec 22 14:20:53 2008 @@ -38,7 +38,7 @@ SWITCH_MODULE_DEFINITION(mod_g729, mod_g729_load, NULL, NULL); #ifndef G729_PASSTHROUGH -#include "g729/g729.h" +#include "g729.h" struct g729_context { struct dec_state decoder_object; Modified: freeswitch/trunk/support-d/prereq.sh ============================================================================== --- freeswitch/trunk/support-d/prereq.sh (original) +++ freeswitch/trunk/support-d/prereq.sh Mon Dec 22 14:20:53 2008 @@ -1,7 +1,7 @@ UNAME=`uname` -NEEDED_PACKAGES_YUM='automake autoconf libtool screen gdb gcc-c++ compat-gcc-32 compat-gcc-32-c++ subversion ncurses-devel unixODBC-devel' +NEEDED_PACKAGES_YUM='automake autoconf libtool screen gdb gcc-c++ compat-gcc-32 compat-gcc-32-c++ subversion ncurses-devel unixODBC-devel make wget' NEEDED_PACAKGES_APT='automake autoconf libtool screen gdb libncurses5-dev unixodbc-dev subversion emacs22-nox gcc g++ ' NEEDED_PACKAGES_PKG_ADD='' From anthm at freeswitch.org Mon Dec 22 13:17:41 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 22 Dec 2008 16:17:41 -0500 Subject: [Freeswitch-trunk] [commit] r10913 - freeswitch/trunk/src Message-ID: Author: anthm Date: Mon Dec 22 16:17:41 2008 New Revision: 10913 Log: update Modified: freeswitch/trunk/src/switch_pcm.c Modified: freeswitch/trunk/src/switch_pcm.c ============================================================================== --- freeswitch/trunk/src/switch_pcm.c (original) +++ freeswitch/trunk/src/switch_pcm.c Mon Dec 22 16:17:41 2008 @@ -422,11 +422,11 @@ } - samples_per_frame = 8; - bytes_per_frame = 16; + samples_per_frame = 16; + bytes_per_frame = 32; ms_per_frame = 2000; - for (x = 0; x < 5; x++) { + for (x = 0; x < 4; x++) { switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ 10, /* the IANA code number */ @@ -446,19 +446,19 @@ switch_raw_decode, /* function to decode encoded data into raw data */ switch_raw_destroy); /* deinitalize a codec handle using this implementation */ - samples_per_frame += 8; - bytes_per_frame += 16; + samples_per_frame += 16; + bytes_per_frame += 32; ms_per_frame += 2000; } - samples_per_frame = 16; - bytes_per_frame = 32; + samples_per_frame = 32; + bytes_per_frame = 64; ms_per_frame = 2000; - for (x = 0; x < 5; x++) { + for (x = 0; x < 4; x++) { switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ 10, /* the IANA code number */ @@ -478,18 +478,18 @@ switch_raw_decode, /* function to decode encoded data into raw data */ switch_raw_destroy); /* deinitalize a codec handle using this implementation */ - samples_per_frame += 16; - bytes_per_frame += 32; + samples_per_frame += 32; + bytes_per_frame += 64; ms_per_frame += 2000; } - samples_per_frame = 32; - bytes_per_frame = 64; + samples_per_frame = 64; + bytes_per_frame = 128; ms_per_frame = 2000; - for (x = 0; x < 5; x++) { + for (x = 0; x < 4; x++) { switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */ 10, /* the IANA code number */ @@ -509,8 +509,8 @@ switch_raw_decode, /* function to decode encoded data into raw data */ switch_raw_destroy); /* deinitalize a codec handle using this implementation */ - samples_per_frame += 32; - bytes_per_frame += 64; + samples_per_frame += 64; + bytes_per_frame += 128; ms_per_frame += 2000; } From brian at freeswitch.org Mon Dec 22 15:42:06 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Mon, 22 Dec 2008 18:42:06 -0500 Subject: [Freeswitch-trunk] [commit] r10914 - freeswitch/trunk/conf/dialplan Message-ID: Author: brian Date: Mon Dec 22 18:42:04 2008 New Revision: 10914 Log: grrr woops Modified: freeswitch/trunk/conf/dialplan/default.xml Modified: freeswitch/trunk/conf/dialplan/default.xml ============================================================================== --- freeswitch/trunk/conf/dialplan/default.xml (original) +++ freeswitch/trunk/conf/dialplan/default.xml Mon Dec 22 18:42:04 2008 @@ -91,7 +91,7 @@ - + From anthm at freeswitch.org Tue Dec 23 09:36:52 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 12:36:52 -0500 Subject: [Freeswitch-trunk] [commit] r10917 - in freeswitch/trunk/src: . include mod/applications/mod_commands mod/applications/mod_dptools mod/applications/mod_voicemail mod/endpoints/mod_sofia mod/xml_int/mod_xml_rpc Message-ID: Author: anthm Date: Tue Dec 23 12:36:50 2008 New Revision: 10917 Log: add group concept Modified: freeswitch/trunk/src/include/switch_xml.h freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c freeswitch/trunk/src/switch_ivr.c freeswitch/trunk/src/switch_xml.c Modified: freeswitch/trunk/src/include/switch_xml.h ============================================================================== --- freeswitch/trunk/src/include/switch_xml.h (original) +++ freeswitch/trunk/src/include/switch_xml.h Tue Dec 23 12:36:50 2008 @@ -142,6 +142,7 @@ ///\param value the value ///\return an xml node or NULL SWITCH_DECLARE(switch_xml_t) switch_xml_find_child(switch_xml_t node, const char *childname, const char *attrname, const char *value); +SWITCH_DECLARE(switch_xml_t) switch_xml_find_child_multi(switch_xml_t node, const char *childname, ...); ///\brief returns the next tag of the same name in the same section and depth or NULL ///\ if not found @@ -334,11 +335,20 @@ switch_event_t *params); SWITCH_DECLARE(switch_status_t) switch_xml_locate_domain(const char *domain_name, switch_event_t *params, switch_xml_t *root, switch_xml_t *domain); + +SWITCH_DECLARE(switch_status_t) switch_xml_locate_group(const char *group_name, + const char *domain_name, + switch_xml_t *root, + switch_xml_t *domain, + switch_xml_t *group, + switch_event_t *params); + SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *key, const char *user_name, const char *domain_name, const char *ip, - switch_xml_t *root, switch_xml_t *domain, switch_xml_t *user, switch_event_t *params); + switch_xml_t *root, switch_xml_t *domain, switch_xml_t *user, switch_xml_t *ingroup, + switch_event_t *params); ///\brief open a config in the core registry ///\param file_path the name of the config section e.g. modules.conf Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Tue Dec 23 12:36:50 2008 @@ -77,6 +77,245 @@ return SWITCH_STATUS_SUCCESS; } +SWITCH_STANDARD_API(group_call_function) +{ + char *domain; + char *group_name = NULL; + char *flags; + int ok = 0; + switch_channel_t *channel = NULL; + char *fp = NULL; + const char *call_delim = ","; + + if (switch_strlen_zero(cmd)) { + goto end; + } + + if (session) { + channel = switch_core_session_get_channel(session); + } + + group_name = strdup(cmd); + switch_assert(group_name); + + if ((flags = strchr(group_name, '+'))) { + *flags++ = '\0'; + for (fp = flags; fp && *fp; fp++) { + switch(*fp) { + case 'F': + call_delim = "|"; + break; + case 'A': + call_delim = ","; + break; + default: + break; + } + } + } + + domain = strchr(group_name, '@'); + + if (domain) { + *domain++ = '\0'; + } else { + domain = switch_core_get_variable("domain"); + } + + if (!switch_strlen_zero(domain)) { + switch_xml_t xml, x_domain, x_group; + switch_event_t *params; + switch_stream_handle_t dstream = { 0 }; + + SWITCH_STANDARD_STREAM(dstream); + + switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "group", group_name); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", "group_call"); + + if (switch_xml_locate_group(group_name, domain, &xml, &x_domain, &x_group, params) == SWITCH_STATUS_SUCCESS) { + switch_xml_t x_user, x_users, x_param, x_params; + + if ((x_users = switch_xml_child(x_group, "users"))) { + ok++; + + for(x_user = switch_xml_child(x_users, "user"); x_user; x_user = x_user->next) { + const char *id = switch_xml_attr_soft(x_user, "id"); + const char *dest = NULL; + char *d_dest = NULL; + + if ((x_params = switch_xml_child(x_domain, "params"))) { + for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) { + const char *var = switch_xml_attr(x_param, "name"); + const char *val = switch_xml_attr(x_param, "value"); + + if (!strcasecmp(var, "group-dial-string")) { + dest = val; + break; + } + + if (!strcasecmp(var, "dial-string")) { + dest = val; + } + } + } + + if ((x_params = switch_xml_child(x_group, "params"))) { + for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) { + const char *var = switch_xml_attr(x_param, "name"); + const char *val = switch_xml_attr(x_param, "value"); + + if (!strcasecmp(var, "group-dial-string")) { + dest = val; + break; + } + + if (!strcasecmp(var, "dial-string")) { + dest = val; + } + } + } + + 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(x_param, "name"); + const char *val = switch_xml_attr(x_param, "value"); + + if (!strcasecmp(var, "group-dial-string")) { + dest = val; + break; + } + + if (!strcasecmp(var, "dial-string")) { + dest = val; + } + } + } + + if (dest) { + if (channel) { + switch_channel_set_variable(channel, "dialed_group", group_name); + switch_channel_set_variable(channel, "dialed_user", id); + switch_channel_set_variable(channel, "dialed_domain", domain); + d_dest = switch_channel_expand_variables(channel, dest); + } else { + switch_event_del_header(params, "dialed_user"); + switch_event_del_header(params, "dialed_group"); + switch_event_del_header(params, "dialed_domain"); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "dialed_user", id); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "dialed_group", group_name); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "dialed_domain", domain); + d_dest = switch_event_expand_headers(params, dest); + } + } else { + d_dest = switch_mprintf("user/%s@%s", id, domain); + } + + if (d_dest) { + if (!switch_stristr("error/", d_dest)) { + dstream.write_function(&dstream, "%s%s", d_dest, call_delim); + } + + if (d_dest != dest) { + free(d_dest); + } + } + } + + if (ok && dstream.data) { + char *data = (char *) dstream.data; + char c = end_of(data); + char *p; + + if (c == ',' || c == '|') { + end_of(data) = '\0'; + } + + for (p = data; p && *p; p++) { + if (*p == '{') { + *p = '['; + } else if (*p == '}') { + *p = ']'; + } + } + + + stream->write_function(stream, "%s", data); + free(dstream.data); + } else { + ok = 0; + } + + } + switch_xml_free(xml); + } + switch_event_destroy(¶ms); + } + + end: + + switch_safe_free(group_name); + + if (!ok) { + stream->write_function(stream, "error/NO_ROUTE_DESTINATION"); + } + + return SWITCH_STATUS_SUCCESS; +} + + +SWITCH_STANDARD_API(in_group_function) +{ + switch_xml_t x_domain, xml = NULL, x_user = NULL, x_group; + int argc; + char *mydata = NULL, *argv[2], *user, *domain; + char delim = ','; + switch_event_t *params = NULL; + const char *rval = "false"; + char *group; + + if (switch_strlen_zero(cmd) || !(mydata = strdup(cmd))) { + goto end; + } + + if ((argc = switch_separate_string(mydata, delim, argv, (sizeof(argv) / sizeof(argv[0])))) < 2) { + goto end; + } + + user = argv[0]; + group = argv[1]; + + if ((domain = strchr(user, '@'))) { + *domain++ = '\0'; + } else { + domain = switch_core_get_variable("domain"); + } + + switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "user", user); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain); + + if (switch_xml_locate_group(group, domain, &xml, &x_domain, &x_group, params) == SWITCH_STATUS_SUCCESS) { + switch_xml_t x_users; + if ((x_users = switch_xml_child(x_group, "users"))) { + if ((x_user = switch_xml_find_child(x_users, "user", "id", user))) { + rval = "true"; + } + } + } + + end: + + stream->write_function(stream, "%s", rval); + + switch_xml_free(xml); + free(mydata); + switch_event_destroy(¶ms); + + return SWITCH_STATUS_SUCCESS; +} + SWITCH_STANDARD_API(user_data_function) { switch_xml_t x_domain, xml = NULL, x_user = NULL, x_param, x_params; @@ -111,7 +350,7 @@ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "type", type); switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "key", key); - if (key && type && switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, params) == SWITCH_STATUS_SUCCESS) { + if (key && type && switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, NULL, params) == SWITCH_STATUS_SUCCESS) { if (!strcmp(type, "attr")) { const char *attr = switch_xml_attr_soft(x_user, key); stream->write_function(stream, "%s", attr); @@ -201,7 +440,7 @@ goto end; } - if (switch_xml_locate_user(key, user, domain, NULL, &xml, &x_domain, &x_user, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_xml_locate_user(key, user, domain, NULL, &xml, &x_domain, &x_user, NULL, NULL) != SWITCH_STATUS_SUCCESS) { err = "can't find user"; goto end; } @@ -2940,6 +3179,9 @@ switch_api_interface_t *commands_api_interface; *module_interface = switch_loadable_module_create_module_interface(pool, modname); + SWITCH_ADD_API(commands_api_interface, "group_call", "Generate a dial string to call a group", group_call_function, "[@]"); + SWITCH_ADD_API(commands_api_interface, "in_group", "determine if a user is in a group", in_group_function, "[@] "); + SWITCH_ADD_API(commands_api_interface, "uuid_flush_dtmf", "Flush dtmf on a given uuid", uuid_flush_dtmf_function, ""); SWITCH_ADD_API(commands_api_interface, "md5", "md5", md5_function, ""); SWITCH_ADD_API(commands_api_interface, "hupall", "hupall", hupall_api_function, " [ ]"); Modified: freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c (original) +++ freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c Tue Dec 23 12:36:50 2008 @@ -2002,6 +2002,108 @@ return cause; } + +/* fake chan_group */ +switch_endpoint_interface_t *group_endpoint_interface; +static switch_call_cause_t group_outgoing_channel(switch_core_session_t *session, + switch_event_t *var_event, + switch_caller_profile_t *outbound_profile, + switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags); +switch_io_routines_t group_io_routines = { + /*.outgoing_channel */ group_outgoing_channel +}; + +static switch_call_cause_t group_outgoing_channel(switch_core_session_t *session, + switch_event_t *var_event, + switch_caller_profile_t *outbound_profile, + switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags) +{ + char *group; + switch_call_cause_t cause; + char *template = NULL, *dest = NULL; + switch_originate_flag_t myflags = SOF_NONE; + char *cid_name_override = NULL; + char *cid_num_override = NULL; + const char *var; + unsigned int timelimit = 60; + char *domain = NULL; + switch_channel_t *new_channel = NULL; + + group = strdup(outbound_profile->destination_number); + + if (!group) goto done; + + if ((domain = strchr(group, '@'))) { + *domain++ = '\0'; + } else { + domain = switch_core_get_variable("domain"); + } + + if (!domain) { + goto done; + } + + template = switch_mprintf("${group_call(%s@%s)}", group, domain); + + if (session) { + switch_channel_t *channel = switch_core_session_get_channel(session); + dest = switch_channel_expand_variables(channel, template); + if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE))) { + timelimit = atoi(var); + } + } else if (var_event) { + dest = switch_event_expand_headers(var_event, template); + } + if (!dest) { + goto done; + } + + if (var_event) { + cid_name_override = switch_event_get_header(var_event, "origination_caller_id_name"); + cid_num_override = switch_event_get_header(var_event, "origination_caller_id_number"); + if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE))) { + timelimit = atoi(var); + } + } + + if ((flags & SOF_FORKED_DIAL)) { + myflags |= SOF_NOBLOCK; + } + + + if (switch_ivr_originate(session, new_session, &cause, dest, timelimit, NULL, + cid_name_override, cid_num_override, NULL, var_event, myflags) == SWITCH_STATUS_SUCCESS) { + const char *context; + switch_caller_profile_t *cp; + + new_channel = switch_core_session_get_channel(*new_session); + + if ((context = switch_channel_get_variable(new_channel, "group_context"))) { + if ((cp = switch_channel_get_caller_profile(new_channel))) { + cp->context = switch_core_strdup(cp->pool, context); + } + } + switch_core_session_rwunlock(*new_session); + } + + + done: + + if (dest && dest != template) { + switch_safe_free(dest); + } + + switch_safe_free(template); + + if (cause == SWITCH_CAUSE_NONE) { + cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; + } + + return cause; +} + + + /* fake chan_user */ switch_endpoint_interface_t *user_endpoint_interface; static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session, @@ -2017,7 +2119,7 @@ switch_caller_profile_t *outbound_profile, switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags) { - switch_xml_t x_domain = NULL, xml = NULL, x_user = NULL, x_param, x_params; + switch_xml_t x_domain = NULL, xml = NULL, x_user = NULL, x_group = NULL, x_param, x_params; char *user = NULL, *domain = NULL; const char *dest = NULL; static switch_call_cause_t cause = SWITCH_CAUSE_NONE; @@ -2030,20 +2132,24 @@ user = strdup(outbound_profile->destination_number); - if (!user) - goto done; + if (!user) goto done; - if (!(domain = strchr(user, '@'))) { + if ((domain = strchr(user, '@'))) { + *domain++ = '\0'; + } else { + domain = switch_core_get_variable("domain"); + } + + if (!domain) { goto done; } - - *domain++ = '\0'; + switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS); switch_assert(params); switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "as_channel", "true"); - if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, params) != SWITCH_STATUS_SUCCESS) { + if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, &x_group, params) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Can't find user [%s@%s]\n", user, domain); cause = SWITCH_CAUSE_SUBSCRIBER_ABSENT; goto done; @@ -2061,6 +2167,18 @@ } } + if ((x_params = switch_xml_child(x_group, "params"))) { + for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) { + const char *var = switch_xml_attr(x_param, "name"); + const char *val = switch_xml_attr(x_param, "value"); + + if (!strcasecmp(var, "dial-string")) { + dest = val; + break; + } + } + } + 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(x_param, "name"); @@ -2107,6 +2225,9 @@ switch_event_dup(&event, var_event); switch_event_del_header(event, "dialer_user"); switch_event_del_header(event, "dialer_domain"); + if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE))) { + timelimit = atoi(var); + } } else { switch_event_create(&event, SWITCH_EVENT_REQUEST_PARAMS); switch_assert(event); @@ -2318,6 +2439,10 @@ error_endpoint_interface->interface_name = "error"; error_endpoint_interface->io_routines = &error_io_routines; + group_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE); + group_endpoint_interface->interface_name = "group"; + group_endpoint_interface->io_routines = &group_io_routines; + user_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE); user_endpoint_interface->interface_name = "user"; user_endpoint_interface->io_routines = &user_io_routines; Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original) +++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Tue Dec 23 12:36:50 2008 @@ -1888,7 +1888,7 @@ switch_channel_event_set_data(channel, params); if (switch_xml_locate_user("id", myid, domain_name, switch_channel_get_variable(channel, "network_addr"), - &xx_domain_root, &xx_domain, &xx_user, params) == SWITCH_STATUS_SUCCESS) { + &xx_domain_root, &xx_domain, &xx_user, NULL, params) == SWITCH_STATUS_SUCCESS) { switch_xml_free(xx_domain_root); } @@ -1981,7 +1981,7 @@ if (switch_xml_locate_user("id", myid, domain_name, switch_channel_get_variable(channel, "network_addr"), - &x_domain_root, &x_domain, &x_user, params) != SWITCH_STATUS_SUCCESS) { + &x_domain_root, &x_domain, &x_user, NULL, params) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Can't find user [%s@%s]\n", myid, domain_name); ok = 0; } @@ -2679,7 +2679,7 @@ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "mailbox", id); if (switch_xml_locate_user("id", id, domain_name, switch_channel_get_variable(channel, "network_addr"), - &x_domain_root, &x_domain, &x_user, params) == SWITCH_STATUS_SUCCESS) { + &x_domain_root, &x_domain, &x_user, NULL, 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"); Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Tue Dec 23 12:36:50 2008 @@ -1394,7 +1394,7 @@ const char *a1_hash = NULL; char *sql; char *mailbox = NULL; - switch_xml_t domain, xml = NULL, user, param, uparams, dparams; + switch_xml_t domain, xml = NULL, user, param, uparams, dparams, group, gparams = NULL; char hexdigest[2 * SU_MD5_DIGEST_SIZE + 1] = ""; char *domain_name = NULL; switch_event_t *params = NULL; @@ -1529,7 +1529,7 @@ } if (switch_xml_locate_user("id", switch_strlen_zero(username) ? "nobody" : username, - domain_name, ip, &xml, &domain, &user, params) != SWITCH_STATUS_SUCCESS) { + domain_name, ip, &xml, &domain, &user, &group, params) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Can't find user [%s@%s]\n" "You must define a domain called '%s' in your directory and add a user with the id=\"%s\" attribute\n" "and you must configure your device to use the proper domain in it's authentication credentials.\n" @@ -1545,6 +1545,9 @@ dparams = switch_xml_child(domain, "params"); uparams = switch_xml_child(user, "params"); + if (group) { + gparams = switch_xml_child(group, "params"); + } if (!(dparams || uparams)) { ret = AUTH_OK; @@ -1575,6 +1578,30 @@ } } + if (gparams) { + for (param = switch_xml_child(gparams, "param"); param; param = param->next) { + const char *var = switch_xml_attr_soft(param, "name"); + const char *val = switch_xml_attr_soft(param, "value"); + + if (!strcasecmp(var, "sip-forbid-register") && switch_true(val)) { + ret = AUTH_FORBIDDEN; + goto end; + } + + if (!strcasecmp(var, "password")) { + passwd = val; + } + + if (!strcasecmp(var, "auth-acl")) { + auth_acl = val; + } + + if (!strcasecmp(var, "a1-hash")) { + a1_hash = val; + } + } + } + if (uparams) { for (param = switch_xml_child(uparams, "param"); param; param = param->next) { const char *var = switch_xml_attr_soft(param, "name"); @@ -1670,7 +1697,7 @@ switch_event_create(v_event, SWITCH_EVENT_REQUEST_PARAMS); } if (v_event && *v_event) { - switch_xml_t xparams[2]; + switch_xml_t xparams[3]; int i = 0; switch_event_add_header_string(*v_event, SWITCH_STACK_BOTTOM, "sip_mailbox", mailbox); @@ -1684,11 +1711,15 @@ xparams[i++] = dparams; } + if (group && (gparams = switch_xml_child(group, "variables"))) { + xparams[i++] = gparams; + } + if ((uparams = switch_xml_child(user, "variables"))) { xparams[i++] = uparams; } - if (dparams || uparams) { + if (i <= 3) { int j = 0; for (j = 0; j < i; j++) { Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c ============================================================================== --- freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c (original) +++ freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c Tue Dec 23 12:36:50 2008 @@ -206,7 +206,7 @@ switch_assert(params); switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "mailbox", "check"); - if (switch_xml_locate_user("id", user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, params) != SWITCH_STATUS_SUCCESS) { + if (switch_xml_locate_user("id", user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, NULL, params) != SWITCH_STATUS_SUCCESS) { switch_event_destroy(¶ms); goto fail; } Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Tue Dec 23 12:36:50 2008 @@ -1920,7 +1920,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *session, const char *data) { - switch_xml_t x_domain, xml = NULL, x_user, x_param, x_params; + switch_xml_t x_domain, xml = NULL, x_user, x_param, x_params, x_group = NULL; char *user, *mailbox, *domain; switch_channel_t *channel = switch_core_session_get_channel(session); switch_status_t status = SWITCH_STATUS_FALSE; @@ -1937,7 +1937,7 @@ *domain++ = '\0'; - if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, &x_group, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", user, domain); goto done; } @@ -1959,6 +1959,17 @@ } } + if (x_group && (x_params = switch_xml_child(x_group, "variables"))) { + for (x_param = switch_xml_child(x_params, "variable"); x_param; x_param = x_param->next) { + const char *var = switch_xml_attr(x_param, "name"); + const char *val = switch_xml_attr(x_param, "value"); + + if (var && val) { + switch_channel_set_variable(channel, var, val); + } + } + } + if ((x_params = switch_xml_child(x_user, "variables"))) { for (x_param = switch_xml_child(x_params, "variable"); x_param; x_param = x_param->next) { const char *var = switch_xml_attr(x_param, "name"); Modified: freeswitch/trunk/src/switch_xml.c ============================================================================== --- freeswitch/trunk/src/switch_xml.c (original) +++ freeswitch/trunk/src/switch_xml.c Tue Dec 23 12:36:50 2008 @@ -300,6 +300,62 @@ return p; } +SWITCH_DECLARE(switch_xml_t) switch_xml_find_child_multi(switch_xml_t node, const char *childname, ...) +{ + switch_xml_t p = NULL; + const char *names[256] = {0}; + const char *vals[256] = {0}; + int x, i = 0; + va_list ap; + const char *attrname, *value; + + va_start(ap, childname); + + while(i < 255) { + if ((attrname = va_arg(ap, const char *))) { + value = va_arg(ap, const char *); + } + if (attrname && value) { + names[i] = attrname; + vals[i] = value; + } else { + break; + } + i++; + } + + va_end(ap); + + if (!(childname && i)) { + return node; + } + + for (p = switch_xml_child(node, childname); p; p = p->next) { + for (x = 0; x < i; x++) { + if (names[x] && vals[x]) { + const char *aname = switch_xml_attr(p, names[x]); + + if (aname) { + if (*vals[x] == '!') { + const char *sval = vals[x] + 1; + if (sval && strcasecmp(aname, sval)) { + goto done; + } + } else { + if (!strcasecmp(aname, vals[x])) { + goto done; + } + } + } + } + } + } + + done: + + return p; +} + // returns the first child tag with the given name or NULL if not found SWITCH_DECLARE(switch_xml_t) switch_xml_child(switch_xml_t xml, const char *name) { @@ -1528,6 +1584,93 @@ return status; } +SWITCH_DECLARE(switch_status_t) switch_xml_locate_group(const char *group_name, + const char *domain_name, + switch_xml_t *root, + switch_xml_t *domain, + switch_xml_t *group, + switch_event_t *params) +{ + switch_status_t status = SWITCH_STATUS_FALSE; + switch_event_t *my_params = NULL; + switch_xml_t groups = NULL; + + *root = NULL; + *group = NULL; + *domain = NULL; + + if (!params) { + switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS); + switch_assert(my_params); + params = my_params; + } + + if (group_name) { + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "group_name", group_name); + } + + if (domain_name) { + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain_name); + } + + if ((status = switch_xml_locate_domain(domain_name, params, root, domain)) != SWITCH_STATUS_SUCCESS) { + goto end; + } + + status = SWITCH_STATUS_FALSE; + + if ((groups = switch_xml_child(*domain, "groups"))) { + if ((*group = switch_xml_find_child(groups, "group", "name", group_name))) { + status = SWITCH_STATUS_SUCCESS; + } + } + + end: + + if (my_params) { + switch_event_destroy(&my_params); + } + + return status; +} + + +static switch_status_t find_user_in_tag(switch_xml_t tag, const char *ip, const char *user_name, const char *key, switch_event_t *params, switch_xml_t *user) +{ + const char *type = "!pointer"; + const char *val; + + if (params && (val = switch_event_get_header(params, "user_type"))) { + if (!strcasecmp(val, "any")) { + type = NULL; + } else { + type = val; + } + } + + if (ip) { + if ((*user = switch_xml_find_child_multi(tag, "user", "ip", ip, "type", type, NULL))) { + return SWITCH_STATUS_SUCCESS; + } + } + + if (user_name) { + if (params && switch_event_get_header(params, (char *) "mailbox")) { + if ((*user = switch_xml_find_child_multi(tag, "user", "mailbox", user_name, "type", type, NULL))) { + return SWITCH_STATUS_SUCCESS; + } + } + + if ((*user = switch_xml_find_child_multi(tag, "user", key, user_name, "type", type, NULL))) { + return SWITCH_STATUS_SUCCESS; + } + } + + return SWITCH_STATUS_FALSE; + +} + + SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *key, const char *user_name, const char *domain_name, @@ -1535,11 +1678,13 @@ switch_xml_t *root, switch_xml_t *domain, switch_xml_t *user, + switch_xml_t *ingroup, switch_event_t *params) { switch_status_t status = SWITCH_STATUS_FALSE; - switch_event_t *my_params = NULL; - + switch_event_t *my_params = NULL, *search_params = NULL; + switch_xml_t group = NULL, groups = NULL, users = NULL; + *root = NULL; *user = NULL; *domain = NULL; @@ -1570,26 +1715,27 @@ status = SWITCH_STATUS_FALSE; - if (ip) { - if ((*user = switch_xml_find_child(*domain, "user", "ip", ip))) { - status = SWITCH_STATUS_SUCCESS; - goto end; - } - } + if (params != my_params) { + search_params = params; + } - if (user_name) { - if (params != my_params && switch_event_get_header(params, (char *) "mailbox")) { - if ((*user = switch_xml_find_child(*domain, "user", "mailbox", user_name))) { - status = SWITCH_STATUS_SUCCESS; - goto end; + if ((groups = switch_xml_child(*domain, "groups"))) { + for (group = switch_xml_child(groups, "group"); group; group = group->next) { + if ((users = switch_xml_child(group, "users"))) { + if ((status = find_user_in_tag(users, ip, user_name, key, params, user)) == SWITCH_STATUS_SUCCESS) { + if (ingroup) { + *ingroup = group; + } + break; + } } } + } - if ((*user = switch_xml_find_child(*domain, "user", key, user_name))) { - status = SWITCH_STATUS_SUCCESS; - goto end; - } + if (status != SWITCH_STATUS_SUCCESS) { + status = find_user_in_tag(*domain, ip, user_name, key, params, user); } + end: From brian at freeswitch.org Tue Dec 23 09:45:48 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 12:45:48 -0500 Subject: [Freeswitch-trunk] [commit] r10918 - in freeswitch/trunk/conf: dialplan directory Message-ID: Author: brian Date: Tue Dec 23 12:45:47 2008 New Revision: 10918 Log: group examples Modified: freeswitch/trunk/conf/dialplan/default.xml freeswitch/trunk/conf/directory/default.xml Modified: freeswitch/trunk/conf/dialplan/default.xml ============================================================================== --- freeswitch/trunk/conf/dialplan/default.xml (original) +++ freeswitch/trunk/conf/dialplan/default.xml Tue Dec 23 12:45:47 2008 @@ -240,6 +240,24 @@ + + + + + + + + + + + + + + + + + + Modified: freeswitch/trunk/conf/directory/default.xml ============================================================================== --- freeswitch/trunk/conf/directory/default.xml (original) +++ freeswitch/trunk/conf/directory/default.xml Tue Dec 23 12:45:47 2008 @@ -31,7 +31,43 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From mikej at freeswitch.org Tue Dec 23 09:46:26 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 12:46:26 -0500 Subject: [Freeswitch-trunk] [commit] r10919 - in freeswitch/trunk/src/mod/languages/mod_managed: . managed Message-ID: Author: mikej Date: Tue Dec 23 12:46:25 2008 New Revision: 10919 Log: swigall Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx Tue Dec 23 12:46:25 2008 @@ -2290,7 +2290,7 @@ int jresult ; int result; - result = (int) 32; + result = (int) 48; jresult = result; return jresult; @@ -2312,7 +2312,7 @@ int jresult ; int result; - result = (int) (2*32*(120+10)); + result = (int) 4096; jresult = result; return jresult; @@ -6323,6 +6323,38 @@ } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_lock_codec_write(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_lock_codec_write(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_unlock_codec_write(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_unlock_codec_write(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_lock_codec_read(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_lock_codec_read(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_unlock_codec_read(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_unlock_codec_read(arg1); +} + + SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_read_impl(void * jarg1, void * jarg2) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; @@ -19729,7 +19761,7 @@ { size_t ii; switch_byte_t *b = (switch_byte_t *) arg1->write_frame_data; - for (ii = 0; ii < (size_t)(2*32*(120+10)); ii++) b[ii] = *((switch_byte_t *) arg2 + ii); + for (ii = 0; ii < (size_t)4096; ii++) b[ii] = *((switch_byte_t *) arg2 + ii); } } @@ -22592,6 +22624,29 @@ } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_channel_set(void * jarg1, int jarg2) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + switch_text_channel_t arg2 ; + + arg1 = (switch_log_node_t *)jarg1; + arg2 = (switch_text_channel_t)jarg2; + if (arg1) (arg1)->channel = arg2; + +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_log_node_t_channel_get(void * jarg1) { + int jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + switch_text_channel_t result; + + arg1 = (switch_log_node_t *)jarg1; + result = (switch_text_channel_t) ((arg1)->channel); + jresult = result; + return jresult; +} + + SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_log_node_t() { void * jresult ; switch_log_node_t *result = 0 ; @@ -23109,6 +23164,21 @@ } +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_find_child_multi(void * jarg1, char * jarg2) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = 0 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (char *)jarg2; + result = (switch_xml_t)switch_xml_find_child_multi(arg1,(char const *)arg2,arg3); + jresult = (void *)result; + return jresult; +} + + SWIGEXPORT char * SWIGSTDCALL CSharp_switch_xml_attr(void * jarg1, char * jarg2) { char * jresult ; switch_xml_t arg1 = (switch_xml_t) 0 ; @@ -23428,7 +23498,29 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_user(char * jarg1, char * jarg2, char * jarg3, char * jarg4, void * jarg5, void * jarg6, void * jarg7, void * jarg8) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_group(char * jarg1, char * jarg2, void * jarg3, void * jarg4, void * jarg5, void * jarg6) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_xml_t *arg3 = (switch_xml_t *) 0 ; + switch_xml_t *arg4 = (switch_xml_t *) 0 ; + switch_xml_t *arg5 = (switch_xml_t *) 0 ; + switch_event_t *arg6 = (switch_event_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_xml_t *)jarg3; + arg4 = (switch_xml_t *)jarg4; + arg5 = (switch_xml_t *)jarg5; + arg6 = (switch_event_t *)jarg6; + result = (switch_status_t)switch_xml_locate_group((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_user(char * jarg1, char * jarg2, char * jarg3, char * jarg4, void * jarg5, void * jarg6, void * jarg7, void * jarg8, void * jarg9) { int jresult ; char *arg1 = (char *) 0 ; char *arg2 = (char *) 0 ; @@ -23437,7 +23529,8 @@ switch_xml_t *arg5 = (switch_xml_t *) 0 ; switch_xml_t *arg6 = (switch_xml_t *) 0 ; switch_xml_t *arg7 = (switch_xml_t *) 0 ; - switch_event_t *arg8 = (switch_event_t *) 0 ; + switch_xml_t *arg8 = (switch_xml_t *) 0 ; + switch_event_t *arg9 = (switch_event_t *) 0 ; switch_status_t result; arg1 = (char *)jarg1; @@ -23447,8 +23540,9 @@ arg5 = (switch_xml_t *)jarg5; arg6 = (switch_xml_t *)jarg6; arg7 = (switch_xml_t *)jarg7; - arg8 = (switch_event_t *)jarg8; - result = (switch_status_t)switch_xml_locate_user((char const *)arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8); + arg8 = (switch_xml_t *)jarg8; + arg9 = (switch_event_t *)jarg9; + result = (switch_status_t)switch_xml_locate_user((char const *)arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8,arg9); jresult = result; return jresult; } Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Tue Dec 23 12:46:25 2008 @@ -1499,6 +1499,22 @@ freeswitchPINVOKE.switch_core_session_unset_write_codec(SWIGTYPE_p_switch_core_session.getCPtr(session)); } + public static void switch_core_session_lock_codec_write(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_lock_codec_write(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_unlock_codec_write(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_unlock_codec_write(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_lock_codec_read(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_lock_codec_read(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_unlock_codec_read(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_unlock_codec_read(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + public static switch_status_t switch_core_session_get_read_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) { switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_get_read_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp)); return ret; @@ -3602,6 +3618,12 @@ return ret; } + public static switch_xml switch_xml_find_child_multi(switch_xml node, string childname) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_find_child_multi(switch_xml.getCPtr(node), childname); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + public static string switch_xml_attr(switch_xml xml, string attr) { string ret = freeswitchPINVOKE.switch_xml_attr(switch_xml.getCPtr(xml), attr); return ret; @@ -3718,8 +3740,13 @@ return ret; } - public static switch_status_t switch_xml_locate_user(string key, string user_name, string domain_name, string ip, SWIGTYPE_p_p_switch_xml root, SWIGTYPE_p_p_switch_xml domain, SWIGTYPE_p_p_switch_xml user, switch_event arg7) { - switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_user(key, user_name, domain_name, ip, SWIGTYPE_p_p_switch_xml.getCPtr(root), SWIGTYPE_p_p_switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(user), switch_event.getCPtr(arg7)); + public static switch_status_t switch_xml_locate_group(string group_name, string domain_name, SWIGTYPE_p_p_switch_xml root, SWIGTYPE_p_p_switch_xml domain, SWIGTYPE_p_p_switch_xml group, switch_event arg5) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_group(group_name, domain_name, SWIGTYPE_p_p_switch_xml.getCPtr(root), SWIGTYPE_p_p_switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(group), switch_event.getCPtr(arg5)); + return ret; + } + + public static switch_status_t switch_xml_locate_user(string key, string user_name, string domain_name, string ip, SWIGTYPE_p_p_switch_xml root, SWIGTYPE_p_p_switch_xml domain, SWIGTYPE_p_p_switch_xml user, SWIGTYPE_p_p_switch_xml ingroup, switch_event arg8) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_user(key, user_name, domain_name, ip, SWIGTYPE_p_p_switch_xml.getCPtr(root), SWIGTYPE_p_p_switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(user), SWIGTYPE_p_p_switch_xml.getCPtr(ingroup), switch_event.getCPtr(arg8)); return ret; } @@ -5782,6 +5809,18 @@ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unset_write_codec")] public static extern void switch_core_session_unset_write_codec(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_lock_codec_write")] + public static extern void switch_core_session_lock_codec_write(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unlock_codec_write")] + public static extern void switch_core_session_unlock_codec_write(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_lock_codec_read")] + public static extern void switch_core_session_lock_codec_read(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unlock_codec_read")] + public static extern void switch_core_session_unlock_codec_read(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_read_impl")] public static extern int switch_core_session_get_read_impl(HandleRef jarg1, HandleRef jarg2); @@ -9583,6 +9622,12 @@ [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_userdata_get")] public static extern string switch_log_node_t_userdata_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_channel_set")] + public static extern void switch_log_node_t_channel_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_channel_get")] + public static extern int switch_log_node_t_channel_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_log_node_t")] public static extern IntPtr new_switch_log_node_t(); @@ -9706,6 +9751,9 @@ [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_find_child")] public static extern IntPtr switch_xml_find_child(HandleRef jarg1, string jarg2, string jarg3, string jarg4); + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_find_child_multi")] + public static extern IntPtr switch_xml_find_child_multi(HandleRef jarg1, string jarg2); + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_attr")] public static extern string switch_xml_attr(HandleRef jarg1, string jarg2); @@ -9769,8 +9817,11 @@ [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_domain")] public static extern int switch_xml_locate_domain(string jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_group")] + public static extern int switch_xml_locate_group(string jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, HandleRef jarg5, HandleRef jarg6); + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_user")] - public static extern int switch_xml_locate_user(string jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5, HandleRef jarg6, HandleRef jarg7, HandleRef jarg8); + public static extern int switch_xml_locate_user(string jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5, HandleRef jarg6, HandleRef jarg7, HandleRef jarg8, HandleRef jarg9); [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_open_cfg")] public static extern IntPtr switch_xml_open_cfg(string jarg1, HandleRef jarg2, HandleRef jarg3); @@ -22265,6 +22316,16 @@ } } + public switch_text_channel_t channel { + set { + freeswitchPINVOKE.switch_log_node_t_channel_set(swigCPtr, (int)value); + } + get { + switch_text_channel_t ret = (switch_text_channel_t)freeswitchPINVOKE.switch_log_node_t_channel_get(swigCPtr); + return ret; + } + } + public switch_log_node_t() : this(freeswitchPINVOKE.new_switch_log_node_t(), true) { } From mikej at freeswitch.org Tue Dec 23 10:14:58 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 13:14:58 -0500 Subject: [Freeswitch-trunk] [commit] r10920 - freeswitch/trunk/src/mod/xml_int/mod_xml_rpc Message-ID: Author: mikej Date: Tue Dec 23 13:14:57 2008 New Revision: 10920 Log: MDXMLINT-45 Allow setting of global realm without a global user Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c ============================================================================== --- freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c (original) +++ freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c Tue Dec 23 13:14:57 2008 @@ -95,10 +95,12 @@ if (!globals.port) { globals.port = 8080; } - if (user && pass && realm) { + if (realm) { set_global_realm(realm); - set_global_user(user); - set_global_pass(pass); + if (user && pass) { + set_global_user(user); + set_global_pass(pass); + } } switch_xml_free(xml); @@ -194,12 +196,14 @@ goto fail; } - switch_snprintf(z, sizeof(z), "%s:%s", globals.user, globals.pass); - Base64Encode(z, t); + if (!switch_strlen_zero(globals.user)) { + switch_snprintf(z, sizeof(z), "%s:%s", globals.user, globals.pass); + Base64Encode(z, t); - if (!strcmp(p, t)) { - r->requestInfo.user = strdup(user); - goto authed; + if (!strcmp(p, t)) { + r->requestInfo.user = strdup(user); + goto authed; + } } switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS); @@ -496,7 +500,7 @@ } } - if (!fs_user || !strcmp(fs_user, globals.user)) { + if (!fs_user || (!switch_strlen_zero(globals.user) && !strcmp(fs_user, globals.user))) { auth = 1; } else { if (!j) { From brian at freeswitch.org Tue Dec 23 10:17:32 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 13:17:32 -0500 Subject: [Freeswitch-trunk] [commit] r10921 - freeswitch/trunk/src Message-ID: Author: brian Date: Tue Dec 23 13:17:32 2008 New Revision: 10921 Log: uninitialized var Modified: freeswitch/trunk/src/switch_xml.c Modified: freeswitch/trunk/src/switch_xml.c ============================================================================== --- freeswitch/trunk/src/switch_xml.c (original) +++ freeswitch/trunk/src/switch_xml.c Tue Dec 23 13:17:32 2008 @@ -307,7 +307,7 @@ const char *vals[256] = {0}; int x, i = 0; va_list ap; - const char *attrname, *value; + const char *attrname, *value = NULL; va_start(ap, childname); From mikej at freeswitch.org Tue Dec 23 10:23:27 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 13:23:27 -0500 Subject: [Freeswitch-trunk] [commit] r10922 - freeswitch/trunk/src/mod/formats/mod_shout Message-ID: Author: mikej Date: Tue Dec 23 13:23:27 2008 New Revision: 10922 Log: FSBUILD-99 CPPFlags breaks liblame build Modified: freeswitch/trunk/src/mod/formats/mod_shout/Makefile Modified: freeswitch/trunk/src/mod/formats/mod_shout/Makefile ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_shout/Makefile (original) +++ freeswitch/trunk/src/mod/formats/mod_shout/Makefile Tue Dec 23 13:23:27 2008 @@ -41,7 +41,7 @@ $(GETLIB) $(LAME).tar.gz $(LAME_DIR)/Makefile: $(LAME_DIR) - cd $(LAME_DIR) && ./configure $(DEFAULT_ARGS) --disable-decoder + cd $(LAME_DIR) && ./configure $(DEFAULT_ARGS) --disable-decoder CPPFLAGS= LDFLAGS= $(TOUCH_TARGET) $(LAMELA): $(LAME_DIR)/Makefile From brian at freeswitch.org Tue Dec 23 11:20:43 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 14:20:43 -0500 Subject: [Freeswitch-trunk] [commit] r10923 - in freeswitch/trunk/conf: autoload_configs dialplan Message-ID: Author: brian Date: Tue Dec 23 14:20:43 2008 New Revision: 10923 Log: tweak configs Modified: freeswitch/trunk/conf/autoload_configs/conference.conf.xml freeswitch/trunk/conf/dialplan/default.xml Modified: freeswitch/trunk/conf/autoload_configs/conference.conf.xml ============================================================================== --- freeswitch/trunk/conf/autoload_configs/conference.conf.xml (original) +++ freeswitch/trunk/conf/autoload_configs/conference.conf.xml Tue Dec 23 14:20:43 2008 @@ -150,7 +150,7 @@ - + Modified: freeswitch/trunk/conf/dialplan/default.xml ============================================================================== --- freeswitch/trunk/conf/dialplan/default.xml (original) +++ freeswitch/trunk/conf/dialplan/default.xml Tue Dec 23 14:20:43 2008 @@ -305,10 +305,17 @@ + + + + + + + - + From brian at freeswitch.org Tue Dec 23 11:23:28 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 14:23:28 -0500 Subject: [Freeswitch-trunk] [commit] r10924 - freeswitch/trunk/conf/dialplan Message-ID: Author: brian Date: Tue Dec 23 14:23:28 2008 New Revision: 10924 Log: example of group_call Modified: freeswitch/trunk/conf/dialplan/default.xml Modified: freeswitch/trunk/conf/dialplan/default.xml ============================================================================== --- freeswitch/trunk/conf/dialplan/default.xml (original) +++ freeswitch/trunk/conf/dialplan/default.xml Tue Dec 23 14:23:28 2008 @@ -242,7 +242,7 @@ - + From anthm at freeswitch.org Tue Dec 23 11:47:51 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 14:47:51 -0500 Subject: [Freeswitch-trunk] [commit] r10925 - in freeswitch/trunk/src: . mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Tue Dec 23 14:47:50 2008 New Revision: 10925 Log: fix init issue Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c freeswitch/trunk/src/switch_xml.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Tue Dec 23 14:47:50 2008 @@ -1394,7 +1394,7 @@ const char *a1_hash = NULL; char *sql; char *mailbox = NULL; - switch_xml_t domain, xml = NULL, user, param, uparams, dparams, group, gparams = NULL; + switch_xml_t domain, xml = NULL, user, param, uparams, dparams, group = NULL, gparams = NULL; char hexdigest[2 * SU_MD5_DIGEST_SIZE + 1] = ""; char *domain_name = NULL; switch_event_t *params = NULL; Modified: freeswitch/trunk/src/switch_xml.c ============================================================================== --- freeswitch/trunk/src/switch_xml.c (original) +++ freeswitch/trunk/src/switch_xml.c Tue Dec 23 14:47:50 2008 @@ -1689,6 +1689,10 @@ *user = NULL; *domain = NULL; + if (ingroup) { + *ingroup = NULL; + } + if (!params) { switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS); switch_assert(my_params); From brian at freeswitch.org Tue Dec 23 11:53:35 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 14:53:35 -0500 Subject: [Freeswitch-trunk] [commit] r10926 - freeswitch/trunk/conf/directory Message-ID: Author: brian Date: Tue Dec 23 14:53:35 2008 New Revision: 10926 Log: more docs Modified: freeswitch/trunk/conf/directory/default.xml Modified: freeswitch/trunk/conf/directory/default.xml ============================================================================== --- freeswitch/trunk/conf/directory/default.xml (original) +++ freeswitch/trunk/conf/directory/default.xml Tue Dec 23 14:53:35 2008 @@ -40,6 +40,11 @@ + From silik0n at freeswitch.org Tue Dec 23 12:25:10 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 15:25:10 -0500 Subject: [Freeswitch-trunk] [commit] r10927 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Tue Dec 23 15:25:10 2008 New Revision: 10927 Log: switch to using getopt so we can specify host, port and password on the command line Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Tue Dec 23 15:25:10 2008 @@ -35,10 +35,10 @@ return; } + static const char* COLORS[] = { ESL_SEQ_DEFAULT_COLOR, ESL_SEQ_FRED, ESL_SEQ_FRED, ESL_SEQ_FRED, ESL_SEQ_FMAGEN, ESL_SEQ_FCYAN, ESL_SEQ_FGREEN, ESL_SEQ_FYELLOW }; - static void *msg_thread_run(esl_thread_t *me, void *obj) { @@ -167,6 +167,7 @@ esl_config_t cfg; cli_profile_t *profile = &profiles[0]; int cur = 0; + int opt; strncpy(profiles[0].host, "localhost", sizeof(profiles[0].host)); strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass)); @@ -215,15 +216,41 @@ esl_config_close_file(&cfg); } - if (argv[1]) { - if (get_profile(argv[1], &profile)) { - esl_log(ESL_LOG_INFO, "Chosen profile %s does not exist using builtin default\n", argv[1]); + while ((opt = getopt (argc, argv, "H:U:P:S:p:h?")) != -1){ + switch (opt) + { + case 'H': + printf("Host: %s\n", optarg); + esl_set_string(profile[0].host, optarg); + break; + case 'P': + printf("Port: %s\n", optarg); + profile[0].port= (esl_port_t)atoi(optarg); + break; + case 'p': + printf("password: %s\n", optarg); + esl_set_string(profile[0].pass, optarg); + break; + printf("profile: %s\n", optarg); + break; + case 'h': + case '?': + printf("%s [-H ] [-P ] [-s ] [-p ]\n", argv[0]); + return 0; + default: + opt = 0; + } + } + + if (optind < argc) { + if (get_profile(argv[optind], &profile)) { + esl_log(ESL_LOG_INFO, "Chosen profile %s does not exist using builtin default\n", argv[optind]); profile = &profiles[0]; } else { esl_log(ESL_LOG_INFO, "Chosen profile %s\n", profile->name); } } - + esl_log(ESL_LOG_INFO, "Using profile %s\n", profile->name); gethostname(hostname, sizeof(hostname)); From silik0n at freeswitch.org Tue Dec 23 13:49:18 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 16:49:18 -0500 Subject: [Freeswitch-trunk] [commit] r10929 - freeswitch/trunk/src/mod/applications/mod_easyroute Message-ID: Author: silik0n Date: Tue Dec 23 16:49:17 2008 New Revision: 10929 Log: its not hard, its easy Added: freeswitch/trunk/src/mod/applications/mod_easyroute/ freeswitch/trunk/src/mod/applications/mod_easyroute/Makefile freeswitch/trunk/src/mod/applications/mod_easyroute/mod_easyroute.c Added: freeswitch/trunk/src/mod/applications/mod_easyroute/Makefile ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_easyroute/Makefile Tue Dec 23 16:49:17 2008 @@ -0,0 +1,3 @@ +BASE=../../../.. +include /usr/src/freeswitch.trunk/build/modmake.rules +LOCAL_CFLAGS += `if test -f $(BASE)/.libs/libfreeswitch_la-switch_odbc.o ; then echo -DSWITCH_HAVE_ODBC; fi ;` Added: freeswitch/trunk/src/mod/applications/mod_easyroute/mod_easyroute.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/mod/applications/mod_easyroute/mod_easyroute.c Tue Dec 23 16:49:17 2008 @@ -0,0 +1,361 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2005/2006, 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 + * + * The Initial Developer of this module is + * Ken Rice + * + * Portions created by the Initial Developer are Copyright (C) + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Ken Rice + * + * mod_easyroute.c -- EasyRoute + * Take Incoming DIDs and Lookup where to send them as well as retrieve + * the number of channels they are allowed you use + * + * Big Thanks to CP, for funding this work. + * + */ + +#include + +#ifdef SWITCH_HAVE_ODBC +#include +#endif + +typedef struct easyroute_results{ + char limit[16]; + char destnum[16]; + char dialstring[256]; + char group[16]; + char acctcode[17]; + char translated[17]; +} easyroute_results_t; + + +typedef struct route_callback { + char gateway[129]; + char group[129]; + char techprofile[129]; + char limit[129]; + char acctcode[129]; + char translated[17]; +} route_callback_t; + +static struct { + char *db_username; + char *db_password; + char *db_dsn; + char *default_techprofile; + char *default_gateway; + switch_mutex_t *mutex; +#ifdef SWITCH_HAVE_ODBC + switch_odbc_handle_t *master_odbc; +#else + void *filler1; +#endif +} globals; + +SWITCH_MODULE_LOAD_FUNCTION(mod_easyroute_load); +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_easyroute_shutdown); +SWITCH_MODULE_DEFINITION(mod_easyroute, mod_easyroute_load, mod_easyroute_shutdown, NULL); + +SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_db_username, globals.db_username); +SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_db_password, globals.db_password); +SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_db_dsn, globals.db_dsn); +SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_default_techprofile, globals.default_techprofile); +SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_default_gateway, globals.default_gateway); + +static int route_callback(void *pArg, int argc, char **argv, char **columnNames) +{ + route_callback_t *cbt = (route_callback_t *) pArg; + + switch_copy_string(cbt->gateway, argv[0], 128); + switch_copy_string(cbt->group, argv[1], 128); + switch_copy_string(cbt->limit, argv[2], 128); + switch_copy_string(cbt->techprofile, argv[3], 128); + switch_copy_string(cbt->acctcode, argv[4], 128); + switch_copy_string(cbt->translated, argv[5], 16); + + return 0; +} + + + +static switch_status_t load_config(void) +{ + char *cf = "easyroute.conf"; + switch_xml_t cfg, xml = NULL, param, settings; + switch_status_t status = SWITCH_STATUS_SUCCESS; + + if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf); + status = SWITCH_STATUS_FALSE; + goto done; + } + + if ((settings = switch_xml_child(cfg, "settings"))) { + for (param = switch_xml_child(settings, "param"); param; param = param->next) { + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); + if (!strcasecmp(var, "db_username")) { + set_global_db_username(val); + } else if (!strcasecmp(var, "db_password")) { + set_global_db_password(val); + } else if (!strcasecmp(var, "db_dsn")) { + set_global_db_dsn(val); + } else if (!strcasecmp(var, "default-techprofile")) { + set_global_default_techprofile(val); + } else if (!strcasecmp(var, "default-gateway")) { + set_global_default_gateway(val); + } + } + } + +done: + if (!globals.db_username) { + set_global_db_username("root"); + } + if (!globals.db_password) { + set_global_db_password("land99rover"); + } + if (!globals.db_dsn) { + set_global_db_dsn("easyroute"); + } + + +#ifdef SWITCH_HAVE_ODBC + if (globals.db_dsn) { + if (!(globals.master_odbc = switch_odbc_handle_new(globals.db_dsn, globals.db_username, globals.db_password))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open ODBC Database!\n"); + status = SWITCH_STATUS_FALSE; + goto reallydone; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Opened ODBC Database!\n"); + } + if (switch_odbc_handle_connect(globals.master_odbc) != SWITCH_ODBC_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open ODBC Database!\n"); + status = SWITCH_STATUS_FALSE; + goto reallydone; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Opened ODBC Database!\n"); + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Connected ODBC DSN: %s\n", globals.db_dsn); + if (switch_odbc_handle_exec(globals.master_odbc, "select count(*) from numbers", NULL) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot find SQL Database! (Where\'s the numbers table\?\?)\n"); + } + if (switch_odbc_handle_exec(globals.master_odbc, "select count(*) from gateways", NULL) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot find SQL Database! (Where\'s the gateways table\?\?)\n"); + } + } else { +#endif + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open ODBC Connection (did you enable it?!)\n"); +#ifdef SWITCH_HAVE_ODBC + } +#endif + +reallydone: + + if (xml) { + switch_xml_free(xml); + } + if (!globals.default_techprofile) { + set_global_default_techprofile("sofia/default"); + } + if (!globals.default_gateway) { + set_global_default_gateway("192.168.1.1"); + } + return status; +} + +static char SQL_LOOKUP[] = "SELECT gateways.gateway_ip, gateways.group, gateways.limit, gateways.techprofile, numbers.acctcode, numbers.translated from gateways, numbers where numbers.number = \"%s\" and numbers.gateway_id = gateways.gateway_id limit 1;"; + +static switch_status_t route_lookup(char *dn, easyroute_results_t *results) +{ + switch_status_t sstatus = SWITCH_STATUS_SUCCESS; + char sql[1024] = ""; + route_callback_t pdata; + + memset(&pdata, 0, sizeof(pdata)); + + snprintf(sql, 1025, SQL_LOOKUP, dn); + + if (globals.mutex){ + switch_mutex_lock(globals.mutex); + } + /* Do the Query */ +#ifdef SWITCH_HAVE_ODBC + if (switch_odbc_handle_callback_exec(globals.master_odbc, sql, route_callback, &pdata) == SWITCH_ODBC_SUCCESS){ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SQL Query\n[%s]\n", sql); + char tmp_profile[129]; + char tmp_gateway[16]; + + if (switch_strlen_zero(pdata.limit)) { + switch_set_string(results->limit, "9999" ); + } else { + switch_set_string(results->limit, pdata.limit ); + } + + if (switch_strlen_zero(pdata.techprofile)){ + switch_set_string(tmp_profile, globals.default_techprofile); + } else { + switch_set_string(tmp_profile, pdata.techprofile); + } + + if (switch_strlen_zero(pdata.gateway)){ + switch_set_string(tmp_gateway, globals.default_gateway); + } else { + switch_set_string(tmp_gateway, pdata.gateway); + } + + if (switch_strlen_zero(pdata.translated)){ + switch_set_string(results->translated, dn); + } else { + switch_set_string(results->translated, pdata.translated); + } + + switch_snprintf(results->dialstring, 256, "%s/%s@%s", tmp_profile , results->translated, tmp_gateway); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "THE ROUTE [%s]", results->dialstring); + + if (switch_strlen_zero(pdata.group)){ + switch_set_string(results->group, ""); + } else { + switch_set_string(results->group, pdata.group); + } + + if (switch_strlen_zero(pdata.acctcode)){ + switch_set_string(results->acctcode, ""); + } else { + switch_set_string(results->acctcode, pdata.acctcode); + } + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "DB Error Setting Default Route!\n"); + switch_set_string(results->limit, "9999"); + switch_snprintf(results->dialstring, 256, "%s/%s@%s", globals.default_techprofile, dn, globals.default_gateway); + switch_set_string(results->group, ""); + switch_set_string(results->acctcode, ""); + } +#endif + if (globals.mutex){ + switch_mutex_unlock(globals.mutex); + } + return sstatus; +} + +SWITCH_STANDARD_APP(easyroute_app_function) +{ + int argc = 0; + char *argv[4] = { 0 }; + char *mydata = NULL; + char *destnum = NULL; + easyroute_results_t results; + switch_channel_t *channel = switch_core_session_get_channel(session); + + if (!channel) { + return; + } + + if (!(mydata = switch_core_session_strdup(session, data))) { + return; + } + + if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) { + destnum = argv[0]; + route_lookup(destnum, &results); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "EASY ROUTE DEST: [%s]\n", results.dialstring); + switch_channel_set_variable(channel, "easy_destnum", results.destnum); + switch_channel_set_variable(channel, "easy_dialstring", results.dialstring); + switch_channel_set_variable(channel, "easy_group", results.group); + switch_channel_set_variable(channel, "easy_limit", results.limit); + switch_channel_set_variable(channel, "easy_acctcode", results.acctcode); + } +} + +SWITCH_STANDARD_API(easyroute_function) +{ + int argc = 0; + char *argv[4] = { 0 }; + char *mydata = NULL; + char *destnum = NULL; + easyroute_results_t results; + + if (session) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "This function cannot be called from the dialplan.\n"); + return SWITCH_STATUS_FALSE; + } + + if (!cmd || !(mydata = strdup(cmd))) { + stream->write_function(stream, "Usage: easyroute \n"); + return SWITCH_STATUS_SUCCESS; + } + + if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) { + destnum = argv[0]; + + if (!route_lookup(destnum, &results) == SWITCH_STATUS_SUCCESS) { + stream->write_function(stream, "No Match!\n"); + return SWITCH_STATUS_SUCCESS; + } + + stream->write_function(stream, "Number \tLimit \tGroup \tAcctCode \tDialstring\n"); + stream->write_function(stream, "%-10s\t%-10s\t%-10s\t%-10s\t%s\n", destnum, results.limit, results.group, results.acctcode, results.dialstring); + } else { + stream->write_function(stream, "Invalid Input!\n"); + } + + return SWITCH_STATUS_SUCCESS; + +} + +SWITCH_MODULE_LOAD_FUNCTION(mod_easyroute_load) +{ + switch_api_interface_t *api_interface; + switch_application_interface_t *app_interface; + + memset(&globals, 0, sizeof(globals)); + load_config(); + + /* connect my internal structure to the blank pointer passed to me */ + *module_interface = switch_loadable_module_create_module_interface(pool, modname); + SWITCH_ADD_API(api_interface, "easyroute", "EasyRoute", easyroute_function, ""); + SWITCH_ADD_APP(app_interface, "easyroute", "Perform an easyroute lookup", "Perform an easyroute lookup", easyroute_app_function, "", SAF_SUPPORT_NOMEDIA); + + /* indicate that the module should continue to be loaded */ + return SWITCH_STATUS_SUCCESS; +} + +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_easyroute_shutdown) +{ + switch_odbc_handle_connect(globals.master_odbc); + return SWITCH_STATUS_UNLOAD; +} + +/* 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 expandtab: + */ From silik0n at freeswitch.org Tue Dec 23 13:50:58 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 16:50:58 -0500 Subject: [Freeswitch-trunk] [commit] r10930 - freeswitch/trunk/src/mod/applications/mod_easyroute Message-ID: Author: silik0n Date: Tue Dec 23 16:50:57 2008 New Revision: 10930 Log: update Modified: freeswitch/trunk/src/mod/applications/mod_easyroute/Makefile Modified: freeswitch/trunk/src/mod/applications/mod_easyroute/Makefile ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_easyroute/Makefile (original) +++ freeswitch/trunk/src/mod/applications/mod_easyroute/Makefile Tue Dec 23 16:50:57 2008 @@ -1,3 +1,3 @@ BASE=../../../.. -include /usr/src/freeswitch.trunk/build/modmake.rules +include $(BASE)/build/modmake.rules LOCAL_CFLAGS += `if test -f $(BASE)/.libs/libfreeswitch_la-switch_odbc.o ; then echo -DSWITCH_HAVE_ODBC; fi ;` From silik0n at freeswitch.org Tue Dec 23 13:52:51 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 16:52:51 -0500 Subject: [Freeswitch-trunk] [commit] r10931 - freeswitch/trunk/build Message-ID: Author: silik0n Date: Tue Dec 23 16:52:50 2008 New Revision: 10931 Log: update Modified: freeswitch/trunk/build/modules.conf.in Modified: freeswitch/trunk/build/modules.conf.in ============================================================================== --- freeswitch/trunk/build/modules.conf.in (original) +++ freeswitch/trunk/build/modules.conf.in Tue Dec 23 16:52:50 2008 @@ -11,6 +11,7 @@ applications/mod_limit applications/mod_expr applications/mod_esf +#applications/mod_easyroute applications/mod_fsv #applications/mod_soundtouch #applications/mod_rss From silik0n at freeswitch.org Tue Dec 23 13:53:49 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 16:53:49 -0500 Subject: [Freeswitch-trunk] [commit] r10932 - freeswitch/trunk/scripts Message-ID: Author: silik0n Date: Tue Dec 23 16:53:49 2008 New Revision: 10932 Log: update Added: freeswitch/trunk/scripts/easyroute_mysql.sql Added: freeswitch/trunk/scripts/easyroute_mysql.sql ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/easyroute_mysql.sql Tue Dec 23 16:53:49 2008 @@ -0,0 +1,78 @@ +-- MySQL dump 10.10 +-- +-- Host: localhost Database: easyroute +-- ------------------------------------------------------ +-- Server version 5.0.26-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `gateways` +-- + +DROP TABLE IF EXISTS `gateways`; +CREATE TABLE `gateways` ( + `gateway_id` int(10) unsigned NOT NULL auto_increment, + `gateway_ip` varchar(16) NOT NULL, + `group` varchar(15) NOT NULL, + `limit` int(10) unsigned NOT NULL, + `techprofile` varchar(128) NOT NULL, + PRIMARY KEY (`gateway_id`), + KEY `gateway_ip` (`gateway_ip`,`group`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='Gateways Table'; + +-- +-- Dumping data for table `gateways` +-- + +LOCK TABLES `gateways` WRITE; +/*!40000 ALTER TABLE `gateways` DISABLE KEYS */; +INSERT INTO `gateways` VALUES (1,'192.168.99.1','mustang',50,'sofia/default'); +/*!40000 ALTER TABLE `gateways` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `numbers` +-- + +DROP TABLE IF EXISTS `numbers`; +CREATE TABLE `numbers` ( + `number_id` int(10) unsigned NOT NULL auto_increment, + `gateway_id` int(10) unsigned NOT NULL, + `number` varchar(16) NOT NULL, + `acctcode` varchar(16) NOT NULL, + `translated` varchar(16) NOT NULL, + PRIMARY KEY (`number_id`), + UNIQUE KEY `number` (`number`), + KEY `gateway_id` (`gateway_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Numbers Table'; + +-- +-- Dumping data for table `numbers` +-- + +LOCK TABLES `numbers` WRITE; +/*!40000 ALTER TABLE `numbers` DISABLE KEYS */; +INSERT INTO `numbers` VALUES (1,1,'19018577141','999999', '9018577141'),(2,1,'19995551212','666666', '9995551212'); +/*!40000 ALTER TABLE `numbers` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2008-02-28 21:41:43 From silik0n at freeswitch.org Tue Dec 23 13:54:47 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 16:54:47 -0500 Subject: [Freeswitch-trunk] [commit] r10933 - freeswitch/trunk/conf/autoload_configs Message-ID: Author: silik0n Date: Tue Dec 23 16:54:47 2008 New Revision: 10933 Log: update Added: freeswitch/trunk/conf/autoload_configs/easyroute.conf.xml Added: freeswitch/trunk/conf/autoload_configs/easyroute.conf.xml ============================================================================== --- (empty file) +++ freeswitch/trunk/conf/autoload_configs/easyroute.conf.xml Tue Dec 23 16:54:47 2008 @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + From silik0n at freeswitch.org Tue Dec 23 14:01:01 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 17:01:01 -0500 Subject: [Freeswitch-trunk] [commit] r10934 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Tue Dec 23 17:01:01 2008 New Revision: 10934 Log: update Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Tue Dec 23 17:01:01 2008 @@ -231,8 +231,6 @@ printf("password: %s\n", optarg); esl_set_string(profile[0].pass, optarg); break; - printf("profile: %s\n", optarg); - break; case 'h': case '?': printf("%s [-H ] [-P ] [-s ] [-p ]\n", argv[0]); From anthm at freeswitch.org Tue Dec 23 14:15:39 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 17:15:39 -0500 Subject: [Freeswitch-trunk] [commit] r10935 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Tue Dec 23 17:15:39 2008 New Revision: 10935 Log: sync Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Tue Dec 23 17:15:39 2008 @@ -155,6 +155,39 @@ return -1; } +#ifndef HAVE_EDITLINE +static char command_buf[2048] = ""; + +static const char *basic_gets(int *cnt) +{ + int x = 0; + + printf("%s", prompt_str); + + memset(&command_buf, 0, sizeof(command_buf)); + for (x = 0; x < (sizeof(command_buf) - 1); x++) { + int c = getchar(); + if (c < 0) { + int y = read(fileno(stdin), command_buf, sizeof(command_buf) - 1); + command_buf[y - 1] = '\0'; + break; + } + + command_buf[x] = (char) c; + + if (command_buf[x] == '\n') { + command_buf[x] = '\0'; + break; + } + } + + *cnt = x; + + return command_buf; + +} +#endif + int main(int argc, char *argv[]) { esl_handle_t handle = {{0}}; @@ -287,6 +320,8 @@ #ifdef HAVE_EDITLINE line = el_gets(el, &count); +#else + line = basic_gets(&count); #endif if (count > 1) { From mikej at freeswitch.org Tue Dec 23 14:52:53 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 17:52:53 -0500 Subject: [Freeswitch-trunk] [commit] r10936 - in freeswitch/trunk/libs/esl: . getopt Message-ID: Author: mikej Date: Tue Dec 23 17:52:52 2008 New Revision: 10936 Log: building (almost working) on windows again Added: freeswitch/trunk/libs/esl/getopt/ freeswitch/trunk/libs/esl/getopt/getopt.h freeswitch/trunk/libs/esl/getopt/getopt_long.c Modified: freeswitch/trunk/libs/esl/fs_cli.2008.vcproj freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.2008.vcproj ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.2008.vcproj (original) +++ freeswitch/trunk/libs/esl/fs_cli.2008.vcproj Tue Dec 23 17:52:52 2008 @@ -21,7 +21,6 @@ OutputDirectory="$(ConfigurationName)" IntermediateDirectory="$(ConfigurationName)" ConfigurationType="1" - InheritedPropertySheets="..\..\w32\winlibs.vsprops" CharacterSet="2" BuildLogFile="$(IntDir)\BuildLog $(ProjectName).htm" > @@ -43,8 +42,8 @@ @@ -124,8 +123,8 @@ />
+ + - - - - - - - - - - - - - - - - - - - - - - Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Tue Dec 23 17:52:52 2008 @@ -6,6 +6,10 @@ #ifdef WIN32 #define strdup(src) _strdup(src) #define usleep(time) Sleep(time/1000) +#define fileno _fileno +#define read _read +#include +#include #else #include #include @@ -194,15 +198,21 @@ int count = 0; const char *line = NULL; char cmd_str[1024] = ""; - char hfile[512] = "/tmp/fs_cli_history"; - char cfile[512] = "/tmp/fs_cli_config"; - char *home = getenv("HOME"); esl_config_t cfg; cli_profile_t *profile = &profiles[0]; int cur = 0; int opt; +#ifndef WIN32 + char hfile[512] = "/tmp/fs_cli_history"; + char cfile[512] = "/tmp/fs_cli_config"; + char *home = getenv("HOME"); +#else + char hfile[512] = "c:\\fs_cli_history"; + char cfile[512] = "c:\\fs_cli_config"; + char *home = getenv("HOME"); +#endif - strncpy(profiles[0].host, "localhost", sizeof(profiles[0].host)); + strncpy(profiles[0].host, "127.0.0.1", sizeof(profiles[0].host)); strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass)); strncpy(profiles[0].name, "default", sizeof(profiles[0].name)); profiles[0].port = 8021; Added: freeswitch/trunk/libs/esl/getopt/getopt.h ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/getopt/getopt.h Tue Dec 23 17:52:52 2008 @@ -0,0 +1,76 @@ +/* $OpenBSD: getopt.h,v 1.2 2008/06/26 05:42:04 ray Exp $ */ +/* $NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $ */ + +/*- + * Copyright (c) 2000 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dieter Baron and Thomas Klausner. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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 _GETOPT_H_ +#define _GETOPT_H_ + + +/* + * GNU-like getopt_long() and 4.4BSD getsubopt()/optreset extensions + */ +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +struct option { + /* name of long option */ + const char *name; + /* + * one of no_argument, required_argument, and optional_argument: + * whether option takes an argument + */ + int has_arg; + /* if not NULL, set *flag to val when option found */ + int *flag; + /* if flag not NULL, value to set *flag to; else return value */ + int val; +}; + +int getopt_long(int, char * const *, const char *, + const struct option *, int *); +int getopt_long_only(int, char * const *, const char *, + const struct option *, int *); +#ifndef _GETOPT_DEFINED_ +#define _GETOPT_DEFINED_ +int getopt(int, char * const *, const char *); +int getsubopt(char **, char * const *, char **); + +extern char *optarg; /* getopt(3) external variables */ +extern int opterr; +extern int optind; +extern int optopt; +extern int optreset; +extern char *suboptarg; /* getsubopt(3) external variable */ +#endif + +#endif /* !_GETOPT_H_ */ + Added: freeswitch/trunk/libs/esl/getopt/getopt_long.c ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/getopt/getopt_long.c Tue Dec 23 17:52:52 2008 @@ -0,0 +1,520 @@ +/* $OpenBSD: getopt_long.c,v 1.23 2007/10/31 12:34:57 chl Exp $ */ +/* $NetBSD: getopt_long.c,v 1.15 2002/01/31 22:43:40 tv Exp $ */ + +/* + * Copyright (c) 2002 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Sponsored in part by the Defense Advanced Research Projects + * Agency (DARPA) and Air Force Research Laboratory, Air Force + * Materiel Command, USAF, under agreement number F39502-99-1-0512. + */ +/*- + * Copyright (c) 2000 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dieter Baron and Thomas Klausner. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include +#include "getopt.h" +#include +#include + +#ifdef WIN32 +#define warnx(a, ...) (void)0 +#endif + +#define REPLACE_GETOPT /* use this getopt as the system getopt(3) */ + +#ifdef REPLACE_GETOPT +int opterr = 1; /* if error message should be printed */ +int optind = 1; /* index into parent argv vector */ +int optopt = '?'; /* character checked for validity */ +int optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ +#endif + +#define PRINT_ERROR ((opterr) && (*options != ':')) + +#define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */ +#define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */ +#define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */ + +/* return values */ +#define BADCH (int)'?' +#define BADARG ((*options == ':') ? (int)':' : (int)'?') +#define INORDER (int)1 + +#define EMSG "" + +static int getopt_internal(int, char * const *, const char *, + const struct option *, int *, int); +static int parse_long_options(char * const *, const char *, + const struct option *, int *, int); +static int gcd(int, int); +static void permute_args(int, int, int, char * const *); + +static char *place = EMSG; /* option letter processing */ + +/* XXX: set optreset to 1 rather than these two */ +static int nonopt_start = -1; /* first non option argument (for permute) */ +static int nonopt_end = -1; /* first option after non options (for permute) */ + +/* Error messages */ +static const char recargchar[] = "option requires an argument -- %c"; +static const char recargstring[] = "option requires an argument -- %s"; +static const char ambig[] = "ambiguous option -- %.*s"; +static const char noarg[] = "option doesn't take an argument -- %.*s"; +static const char illoptchar[] = "unknown option -- %c"; +static const char illoptstring[] = "unknown option -- %s"; + +/* + * Compute the greatest common divisor of a and b. + */ +static int +gcd(int a, int b) +{ + int c; + + c = a % b; + while (c != 0) { + a = b; + b = c; + c = a % b; + } + + return (b); +} + +/* + * Exchange the block from nonopt_start to nonopt_end with the block + * from nonopt_end to opt_end (keeping the same order of arguments + * in each block). + */ +static void +permute_args(int panonopt_start, int panonopt_end, int opt_end, + char * const *nargv) +{ + int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos; + char *swap; + + /* + * compute lengths of blocks and number and size of cycles + */ + nnonopts = panonopt_end - panonopt_start; + nopts = opt_end - panonopt_end; + ncycle = gcd(nnonopts, nopts); + cyclelen = (opt_end - panonopt_start) / ncycle; + + for (i = 0; i < ncycle; i++) { + cstart = panonopt_end+i; + pos = cstart; + for (j = 0; j < cyclelen; j++) { + if (pos >= panonopt_end) + pos -= nnonopts; + else + pos += nopts; + swap = nargv[pos]; + /* LINTED const cast */ + ((char **) nargv)[pos] = nargv[cstart]; + /* LINTED const cast */ + ((char **)nargv)[cstart] = swap; + } + } +} + +/* + * parse_long_options -- + * Parse long options in argc/argv argument vector. + * Returns -1 if short_too is set and the option does not match long_options. + */ +static int +parse_long_options(char * const *nargv, const char *options, + const struct option *long_options, int *idx, int short_too) +{ + char *current_argv, *has_equal; + size_t current_argv_len; + int i, match; + + current_argv = place; + match = -1; + + optind++; + + if ((has_equal = strchr(current_argv, '=')) != NULL) { + /* argument found (--option=arg) */ + current_argv_len = has_equal - current_argv; + has_equal++; + } else + current_argv_len = strlen(current_argv); + + for (i = 0; long_options[i].name; i++) { + /* find matching long option */ + if (strncmp(current_argv, long_options[i].name, + current_argv_len)) + continue; + + if (strlen(long_options[i].name) == current_argv_len) { + /* exact match */ + match = i; + break; + } + /* + * If this is a known short option, don't allow + * a partial match of a single character. + */ + if (short_too && current_argv_len == 1) + continue; + + if (match == -1) /* partial match */ + match = i; + else { + /* ambiguous abbreviation */ + if (PRINT_ERROR) + warnx(ambig, (int)current_argv_len, + current_argv); + optopt = 0; + return (BADCH); + } + } + if (match != -1) { /* option found */ + if (long_options[match].has_arg == no_argument + && has_equal) { + if (PRINT_ERROR) + warnx(noarg, (int)current_argv_len, + current_argv); + /* + * XXX: GNU sets optopt to val regardless of flag + */ + if (long_options[match].flag == NULL) + optopt = long_options[match].val; + else + optopt = 0; + return (BADARG); + } + if (long_options[match].has_arg == required_argument || + long_options[match].has_arg == optional_argument) { + if (has_equal) + optarg = has_equal; + else if (long_options[match].has_arg == + required_argument) { + /* + * optional argument doesn't use next nargv + */ + optarg = nargv[optind++]; + } + } + if ((long_options[match].has_arg == required_argument) + && (optarg == NULL)) { + /* + * Missing argument; leading ':' indicates no error + * should be generated. + */ + if (PRINT_ERROR) + warnx(recargstring, + current_argv); + /* + * XXX: GNU sets optopt to val regardless of flag + */ + if (long_options[match].flag == NULL) + optopt = long_options[match].val; + else + optopt = 0; + --optind; + return (BADARG); + } + } else { /* unknown option */ + if (short_too) { + --optind; + return (-1); + } + if (PRINT_ERROR) + warnx(illoptstring, current_argv); + optopt = 0; + return (BADCH); + } + if (idx) + *idx = match; + if (long_options[match].flag) { + *long_options[match].flag = long_options[match].val; + return (0); + } else + return (long_options[match].val); +} + +/* + * getopt_internal -- + * Parse argc/argv argument vector. Called by user level routines. + */ +static int +getopt_internal(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx, int flags) +{ + char *oli; /* option letter list index */ + int optchar, short_too; + static int posixly_correct = -1; + + if (options == NULL) + return (-1); + + /* + * Disable GNU extensions if POSIXLY_CORRECT is set or options + * string begins with a '+'. + */ + if (posixly_correct == -1) + posixly_correct = (getenv("POSIXLY_CORRECT") != NULL); + if (posixly_correct || *options == '+') + flags &= ~FLAG_PERMUTE; + else if (*options == '-') + flags |= FLAG_ALLARGS; + if (*options == '+' || *options == '-') + options++; + + /* + * XXX Some GNU programs (like cvs) set optind to 0 instead of + * XXX using optreset. Work around this braindamage. + */ + if (optind == 0) + optind = optreset = 1; + + optarg = NULL; + if (optreset) + nonopt_start = nonopt_end = -1; +start: + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc) { /* end of argument vector */ + place = EMSG; + if (nonopt_end != -1) { + /* do permutation, if we have to */ + permute_args(nonopt_start, nonopt_end, + optind, nargv); + optind -= nonopt_end - nonopt_start; + } + else if (nonopt_start != -1) { + /* + * If we skipped non-options, set optind + * to the first of them. + */ + optind = nonopt_start; + } + nonopt_start = nonopt_end = -1; + return (-1); + } + if (*(place = nargv[optind]) != '-' || + (place[1] == '\0' && strchr(options, '-') == NULL)) { + place = EMSG; /* found non-option */ + if (flags & FLAG_ALLARGS) { + /* + * GNU extension: + * return non-option as argument to option 1 + */ + optarg = nargv[optind++]; + return (INORDER); + } + if (!(flags & FLAG_PERMUTE)) { + /* + * If no permutation wanted, stop parsing + * at first non-option. + */ + return (-1); + } + /* do permutation */ + if (nonopt_start == -1) + nonopt_start = optind; + else if (nonopt_end != -1) { + permute_args(nonopt_start, nonopt_end, + optind, nargv); + nonopt_start = optind - + (nonopt_end - nonopt_start); + nonopt_end = -1; + } + optind++; + /* process next argument */ + goto start; + } + if (nonopt_start != -1 && nonopt_end == -1) + nonopt_end = optind; + + /* + * If we have "-" do nothing, if "--" we are done. + */ + if (place[1] != '\0' && *++place == '-' && place[1] == '\0') { + optind++; + place = EMSG; + /* + * We found an option (--), so if we skipped + * non-options, we have to permute. + */ + if (nonopt_end != -1) { + permute_args(nonopt_start, nonopt_end, + optind, nargv); + optind -= nonopt_end - nonopt_start; + } + nonopt_start = nonopt_end = -1; + return (-1); + } + } + + /* + * Check long options if: + * 1) we were passed some + * 2) the arg is not just "-" + * 3) either the arg starts with -- we are getopt_long_only() + */ + if (long_options != NULL && place != nargv[optind] && + (*place == '-' || (flags & FLAG_LONGONLY))) { + short_too = 0; + if (*place == '-') + place++; /* --foo long option */ + else if (*place != ':' && strchr(options, *place) != NULL) + short_too = 1; /* could be short option too */ + + optchar = parse_long_options(nargv, options, long_options, + idx, short_too); + if (optchar != -1) { + place = EMSG; + return (optchar); + } + } + + if ((optchar = (int)*place++) == (int)':' || + (optchar == (int)'-' && *place != '\0') || + (oli = strchr(options, optchar)) == NULL) { + /* + * If the user specified "-" and '-' isn't listed in + * options, return -1 (non-option) as per POSIX. + * Otherwise, it is an unknown option character (or ':'). + */ + if (optchar == (int)'-' && *place == '\0') + return (-1); + if (!*place) + ++optind; + if (PRINT_ERROR) + warnx(illoptchar, optchar); + optopt = optchar; + return (BADCH); + } + if (long_options != NULL && optchar == 'W' && oli[1] == ';') { + /* -W long-option */ + if (*place) /* no space */ + /* NOTHING */; + else if (++optind >= nargc) { /* no arg */ + place = EMSG; + if (PRINT_ERROR) + warnx(recargchar, optchar); + optopt = optchar; + return (BADARG); + } else /* white space */ + place = nargv[optind]; + optchar = parse_long_options(nargv, options, long_options, + idx, 0); + place = EMSG; + return (optchar); + } + if (*++oli != ':') { /* doesn't take argument */ + if (!*place) + ++optind; + } else { /* takes (optional) argument */ + optarg = NULL; + if (*place) /* no white space */ + optarg = place; + else if (oli[1] != ':') { /* arg not optional */ + if (++optind >= nargc) { /* no arg */ + place = EMSG; + if (PRINT_ERROR) + warnx(recargchar, optchar); + optopt = optchar; + return (BADARG); + } else + optarg = nargv[optind]; + } + place = EMSG; + ++optind; + } + /* dump back option letter */ + return (optchar); +} + +#ifdef REPLACE_GETOPT +/* + * getopt -- + * Parse argc/argv argument vector. + * + * [eventually this will replace the BSD getopt] + */ +int +getopt(int nargc, char * const *nargv, const char *options) +{ + + /* + * We don't pass FLAG_PERMUTE to getopt_internal() since + * the BSD getopt(3) (unlike GNU) has never done this. + * + * Furthermore, since many privileged programs call getopt() + * before dropping privileges it makes sense to keep things + * as simple (and bug-free) as possible. + */ + return (getopt_internal(nargc, nargv, options, NULL, NULL, 0)); +} +#endif /* REPLACE_GETOPT */ + +/* + * getopt_long -- + * Parse argc/argv argument vector. + */ +int +getopt_long(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx) +{ + + return (getopt_internal(nargc, nargv, options, long_options, idx, + FLAG_PERMUTE)); +} + +/* + * getopt_long_only -- + * Parse argc/argv argument vector. + */ +int +getopt_long_only(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx) +{ + + return (getopt_internal(nargc, nargv, options, long_options, idx, + FLAG_PERMUTE|FLAG_LONGONLY)); +} From mikej at freeswitch.org Tue Dec 23 15:26:38 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 18:26:38 -0500 Subject: [Freeswitch-trunk] [commit] r10937 - in freeswitch/trunk: . libs/esl libs/esl/src Message-ID: Author: mikej Date: Tue Dec 23 18:26:37 2008 New Revision: 10937 Log: fs_cli works on windows Modified: freeswitch/trunk/Freeswitch.2008.sln freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/esl.c Modified: freeswitch/trunk/Freeswitch.2008.sln ============================================================================== --- freeswitch/trunk/Freeswitch.2008.sln (original) +++ freeswitch/trunk/Freeswitch.2008.sln Tue Dec 23 18:26:37 2008 @@ -1724,6 +1724,7 @@ {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Win32.Build.0 = Debug|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.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|Any CPU {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.ActiveCfg = Debug|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Win32.Build.0 = Debug|Win32 @@ -1768,8 +1769,10 @@ {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.Build.0 = Release|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.ActiveCfg = Release|Win32 {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|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|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Tue Dec 23 18:26:37 2008 @@ -207,9 +207,9 @@ char cfile[512] = "/tmp/fs_cli_config"; char *home = getenv("HOME"); #else - char hfile[512] = "c:\\fs_cli_history"; - char cfile[512] = "c:\\fs_cli_config"; - char *home = getenv("HOME"); + char hfile[512] = ".\\fs_cli_history"; + char cfile[512] = ".\\fs_cli_config"; + char *home = ""; //getenv("HOME"); #endif strncpy(profiles[0].host, "127.0.0.1", sizeof(profiles[0].host)); Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Tue Dec 23 18:26:37 2008 @@ -482,6 +482,16 @@ char sendbuf[256]; int rval = 0; const char *hval; +#ifdef WIN32 + WORD wVersionRequested = MAKEWORD(2, 0); + WSADATA wsaData; + int err = WSAStartup(wVersionRequested, &wsaData); + if (err != 0) { + snprintf(handle->err, sizeof(handle->err), "WSAStartup Error"); + return ESL_FAIL; + } + +#endif if (!handle->mutex) { esl_mutex_create(&handle->mutex); From mikej at freeswitch.org Tue Dec 23 16:00:46 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 23 Dec 2008 19:00:46 -0500 Subject: [Freeswitch-trunk] [commit] r10938 - in freeswitch/trunk/libs/esl: . src src/include Message-ID: Author: mikej Date: Tue Dec 23 19:00:45 2008 New Revision: 10938 Log: fs_cli add colors on windows and build static Modified: freeswitch/trunk/libs/esl/fs_cli.2008.vcproj freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/esl.2008.vcproj freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/libs/esl/fs_cli.2008.vcproj ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.2008.vcproj (original) +++ freeswitch/trunk/libs/esl/fs_cli.2008.vcproj Tue Dec 23 19:00:45 2008 @@ -43,7 +43,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories=""$(ProjectDir)getopt";"$(ProjectDir)src/include"" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ESL_DECLARE_STATIC" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" @@ -124,7 +124,7 @@ last_event->body); + DWORD outbytes = 0; + SetConsoleTextAttribute(hStdout, COLORS[level]); + WriteFile(hStdout, handle->last_event->body, len, &outbytes, NULL); + SetConsoleTextAttribute(hStdout, wOldColorAttrs); +#else printf("%s%s%s", COLORS[level], handle->last_event->body, ESL_SEQ_DEFAULT_COLOR); +#endif } known++; } else if (!strcasecmp(type, "text/disconnect-notice")) { @@ -320,6 +337,12 @@ el_set(el, EL_HIST, history, myhistory); history(myhistory, &ev, H_LOAD, hfile); #endif +#ifdef WIN32 + hStdout = GetStdHandle(STD_OUTPUT_HANDLE); + if (hStdout != INVALID_HANDLE_VALUE && GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) { + wOldColorAttrs = csbiInfo.wAttributes; + } +#endif snprintf(cmd_str, sizeof(cmd_str), "log info\n\n"); esl_send_recv(&handle, cmd_str); Modified: freeswitch/trunk/libs/esl/src/esl.2008.vcproj ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.2008.vcproj (original) +++ freeswitch/trunk/libs/esl/src/esl.2008.vcproj Tue Dec 23 19:00:45 2008 @@ -20,7 +20,7 @@ Name="Debug|Win32" OutputDirectory="$(SolutionDir)Debug" IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" + ConfigurationType="4" CharacterSet="1" > @@ -63,22 +63,12 @@ Name="VCPreLinkEventTool" /> - - @@ -98,7 +85,7 @@ Name="Release|Win32" OutputDirectory="$(SolutionDir)Release" IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" + ConfigurationType="4" CharacterSet="1" WholeProgramOptimization="1" > @@ -120,7 +107,7 @@ - - Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Tue Dec 23 19:00:45 2008 @@ -42,6 +42,15 @@ typedef struct esl_event_header esl_event_header_t; typedef struct esl_event esl_event_t; +#ifdef WIN32 +#define ESL_SEQ_FWHITE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY +#define ESL_SEQ_FRED FOREGROUND_RED | FOREGROUND_INTENSITY +#define ESL_SEQ_FMAGEN FOREGROUND_BLUE | FOREGROUND_RED +#define ESL_SEQ_FCYAN FOREGROUND_GREEN | FOREGROUND_BLUE +#define ESL_SEQ_FGREEN FOREGROUND_GREEN +#define ESL_SEQ_FYELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY +#define ESL_SEQ_DEFAULT_COLOR ESL_SEQ_FWHITE +#else #define ESL_SEQ_ESC "\033[" /* Ansi Control character suffixes */ #define ESL_SEQ_HOME_CHAR 'H' @@ -95,6 +104,7 @@ #define ESL_SEQ_CLEARLINE ESL_SEQ_ESC ESL_SEQ_CLEARLINE_CHAR_STR #define ESL_SEQ_CLEARLINEEND ESL_SEQ_ESC ESL_SEQ_CLEARLINEEND_CHAR #define ESL_SEQ_CLEARSCR ESL_SEQ_ESC ESL_SEQ_CLEARSCR_CHAR ESL_SEQ_HOME +#endif #if !defined(_XOPEN_SOURCE) && !defined(__FreeBSD__) && !defined(__NetBSD__) #define _XOPEN_SOURCE 600 From silik0n at freeswitch.org Wed Dec 24 07:29:40 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Wed, 24 Dec 2008 10:29:40 -0500 Subject: [Freeswitch-trunk] [commit] r10939 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Wed Dec 24 10:29:38 2008 New Revision: 10939 Log: make it use long options Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 24 10:29:38 2008 @@ -9,13 +9,14 @@ #define fileno _fileno #define read _read #include -#include #else #include #include #define HAVE_EDITLINE #endif +#include + static char prompt_str[512] = ""; static char hostname[512] = ""; @@ -218,7 +219,6 @@ esl_config_t cfg; cli_profile_t *profile = &profiles[0]; int cur = 0; - int opt; #ifndef WIN32 char hfile[512] = "/tmp/fs_cli_history"; char cfile[512] = "/tmp/fs_cli_config"; @@ -234,6 +234,17 @@ strncpy(profiles[0].name, "default", sizeof(profiles[0].name)); profiles[0].port = 8021; pcount++; + + /* Vars for optargs */ + int opt; + static struct option options[] = { + {"help", 0, 0, 'h'}, + {"host", 1, 0, 'H'}, + {"port", 1, 0, 'P'}, + {"password", 1, 0, 'p'}, + {0, 0, 0, 0} + }; + if (home) { snprintf(hfile, sizeof(hfile), "%s/.fs_cli_history", home); @@ -276,7 +287,10 @@ esl_config_close_file(&cfg); } - while ((opt = getopt (argc, argv, "H:U:P:S:p:h?")) != -1){ + while (1){ + int option_index = 0; + opt = getopt_long(argc, argv, "H:U:P:S:p:h?", options, &option_index); + if (opt == -1) break; switch (opt) { case 'H': @@ -293,7 +307,12 @@ break; case 'h': case '?': - printf("%s [-H ] [-P ] [-s ] [-p ]\n", argv[0]); + printf("Usage: %s [-H ] [-P ] [-p ] [profile]\n\n", argv[0]); + printf(" -?,-h --help Usage Information\n"); + printf(" -H, --host=hostname Host to connect\n"); + printf(" -P, --port=port Port to connect\n"); + printf(" -p, --password=FILENAME Password\n\n"); + return 0; default: opt = 0; From anthm at freeswitch.org Fri Dec 26 08:43:03 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 11:43:03 -0500 Subject: [Freeswitch-trunk] [commit] r10946 - freeswitch/trunk/libs/esl/src Message-ID: Author: anthm Date: Fri Dec 26 11:43:03 2008 New Revision: 10946 Log: fix bug Modified: freeswitch/trunk/libs/esl/src/esl.c Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Fri Dec 26 11:43:03 2008 @@ -861,11 +861,11 @@ esl_log(ESL_LOG_DEBUG, "SEND\n%s\n", cmd); } - if (send(handle->sock, cmd, strlen(cmd), 0)) { + if (send(handle->sock, cmd, strlen(cmd), 0) != strlen(cmd)) { strerror_r(handle->errnum, handle->err, sizeof(handle->err)); return ESL_FAIL; } - + if (!(*e == '\n' && *(e-1) == '\n')) { if (send(handle->sock, "\n\n", 2, 0)) { strerror_r(handle->errnum, handle->err, sizeof(handle->err)); @@ -884,7 +884,11 @@ esl_status_t status; esl_mutex_lock(handle->mutex); - esl_send(handle, cmd); + + if ((status = esl_send(handle, cmd))) { + return status; + } + status = esl_recv_event(handle, &handle->last_sr_event); if (handle->last_sr_event) { From mikej at freeswitch.org Fri Dec 26 09:00:51 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 12:00:51 -0500 Subject: [Freeswitch-trunk] [commit] r10947 - freeswitch/trunk/libs/esl Message-ID: Author: mikej Date: Fri Dec 26 12:00:51 2008 New Revision: 10947 Log: fix bsd make Modified: freeswitch/trunk/libs/esl/Makefile Modified: freeswitch/trunk/libs/esl/Makefile ============================================================================== --- freeswitch/trunk/libs/esl/Makefile (original) +++ freeswitch/trunk/libs/esl/Makefile Fri Dec 26 12:00:51 2008 @@ -1,5 +1,4 @@ -PWD=$(shell pwd) -INCS=-I$(PWD)/src/include +INCS=-Isrc/include LIBEDIT_DIR=../../libs/libedit DEBUG=-g -ggdb PICKY=-O2 -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes @@ -17,6 +16,10 @@ ar rcs $(MYLIB) $(OBJS) ranlib $(MYLIB) +$(OBJS): $(SRC) + $(CC) $(CC_CFLAGS) $(CFLAGS) -c $< -o $@ + + testserver: $(MYLIB) testserver.c $(CC) $(CC_CFLAGS) $(CFLAGS) testserver.c -o testserver $(LDFLAGS) $(LIBS) From mikej at freeswitch.org Fri Dec 26 09:07:05 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 12:07:05 -0500 Subject: [Freeswitch-trunk] [commit] r10948 - in freeswitch/trunk/libs/esl: . src Message-ID: Author: mikej Date: Fri Dec 26 12:07:05 2008 New Revision: 10948 Log: fix build Modified: freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/esl.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 12:07:05 2008 @@ -41,15 +41,15 @@ } -#ifdef WIN32 -static HANDLE hStdout; -static WORD wOldColorAttrs; -static CONSOLE_SCREEN_BUFFER_INFO csbiInfo; - -static WORD -#else -static const char* -#endif +#ifdef WIN32 +static HANDLE hStdout; +static WORD wOldColorAttrs; +static CONSOLE_SCREEN_BUFFER_INFO csbiInfo; + +static WORD +#else +static const char* +#endif COLORS[] = { ESL_SEQ_DEFAULT_COLOR, ESL_SEQ_FRED, ESL_SEQ_FRED, ESL_SEQ_FRED, ESL_SEQ_FMAGEN, ESL_SEQ_FCYAN, ESL_SEQ_FGREEN, ESL_SEQ_FYELLOW }; @@ -88,11 +88,11 @@ if (tchannel == 0 || (file && !strcmp(file, "switch_console.c"))) { #ifdef WIN32 - DWORD len = (DWORD) strlen(handle->last_event->body); - DWORD outbytes = 0; - SetConsoleTextAttribute(hStdout, COLORS[level]); - WriteFile(hStdout, handle->last_event->body, len, &outbytes, NULL); - SetConsoleTextAttribute(hStdout, wOldColorAttrs); + DWORD len = (DWORD) strlen(handle->last_event->body); + DWORD outbytes = 0; + SetConsoleTextAttribute(hStdout, COLORS[level]); + WriteFile(hStdout, handle->last_event->body, len, &outbytes, NULL); + SetConsoleTextAttribute(hStdout, wOldColorAttrs); #else printf("%s%s%s", COLORS[level], handle->last_event->body, ESL_SEQ_DEFAULT_COLOR); #endif @@ -228,13 +228,6 @@ char cfile[512] = ".\\fs_cli_config"; char *home = ""; //getenv("HOME"); #endif - - strncpy(profiles[0].host, "127.0.0.1", sizeof(profiles[0].host)); - strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass)); - strncpy(profiles[0].name, "default", sizeof(profiles[0].name)); - profiles[0].port = 8021; - pcount++; - /* Vars for optargs */ int opt; static struct option options[] = { @@ -244,7 +237,12 @@ {"password", 1, 0, 'p'}, {0, 0, 0, 0} }; - + + strncpy(profiles[0].host, "127.0.0.1", sizeof(profiles[0].host)); + strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass)); + strncpy(profiles[0].name, "default", sizeof(profiles[0].name)); + profiles[0].port = 8021; + pcount++; if (home) { snprintf(hfile, sizeof(hfile), "%s/.fs_cli_history", home); @@ -287,7 +285,7 @@ esl_config_close_file(&cfg); } - while (1){ + for(;;) { int option_index = 0; opt = getopt_long(argc, argv, "H:U:P:S:p:h?", options, &option_index); if (opt == -1) break; @@ -357,10 +355,10 @@ history(myhistory, &ev, H_LOAD, hfile); #endif #ifdef WIN32 - hStdout = GetStdHandle(STD_OUTPUT_HANDLE); - if (hStdout != INVALID_HANDLE_VALUE && GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) { - wOldColorAttrs = csbiInfo.wAttributes; - } + hStdout = GetStdHandle(STD_OUTPUT_HANDLE); + if (hStdout != INVALID_HANDLE_VALUE && GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) { + wOldColorAttrs = csbiInfo.wAttributes; + } #endif snprintf(cmd_str, sizeof(cmd_str), "log info\n\n"); Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Fri Dec 26 12:07:05 2008 @@ -861,7 +861,7 @@ esl_log(ESL_LOG_DEBUG, "SEND\n%s\n", cmd); } - if (send(handle->sock, cmd, strlen(cmd), 0) != strlen(cmd)) { + if (send(handle->sock, cmd, strlen(cmd), 0) != (int)strlen(cmd)) { strerror_r(handle->errnum, handle->err, sizeof(handle->err)); return ESL_FAIL; } From brian at freeswitch.org Fri Dec 26 09:09:09 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 12:09:09 -0500 Subject: [Freeswitch-trunk] [commit] r10949 - freeswitch/trunk/src Message-ID: Author: brian Date: Fri Dec 26 12:09:09 2008 New Revision: 10949 Log: fix early media issue related to group_confirm_file Modified: freeswitch/trunk/src/switch_ivr_originate.c Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Fri Dec 26 12:09:09 2008 @@ -39,6 +39,12 @@ { switch_channel_t *channel = switch_core_session_get_channel(session); + if (!switch_channel_test_flag(channel, CF_PROXY_MODE)) { + while (switch_channel_get_state(channel) == CS_CONSUME_MEDIA && !switch_channel_test_flag(channel, CF_TAGGED)) { + switch_ivr_sleep(session, 10, SWITCH_FALSE, NULL); + } + } + switch_channel_clear_state_handler(channel, &originate_state_handlers); return SWITCH_STATUS_FALSE; From mikej at freeswitch.org Fri Dec 26 09:54:31 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 12:54:31 -0500 Subject: [Freeswitch-trunk] [commit] r10950 - freeswitch/trunk/libs/esl Message-ID: Author: mikej Date: Fri Dec 26 12:54:30 2008 New Revision: 10950 Log: tweak Modified: freeswitch/trunk/libs/esl/Makefile freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/Makefile ============================================================================== --- freeswitch/trunk/libs/esl/Makefile (original) +++ freeswitch/trunk/libs/esl/Makefile Fri Dec 26 12:54:30 2008 @@ -4,7 +4,7 @@ PICKY=-O2 -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes CFLAGS=$(INCS) -D_GNU_SOURCE $(DEBUG) -I$(LIBEDIT_DIR)/src/ $(PICKY) MYLIB=libesl.a -LIBS=-lesl -lncurses -lpthread +LIBS=-lncurses -lpthread -lesl LDFLAGS=-L. OBJS=src/esl.o src/esl_event.o src/esl_threadmutex.o src/esl_config.o SRC=src/esl.c src/esl_event.c src/esl_threadmutex.c src/esl_config.c @@ -16,10 +16,6 @@ ar rcs $(MYLIB) $(OBJS) ranlib $(MYLIB) -$(OBJS): $(SRC) - $(CC) $(CC_CFLAGS) $(CFLAGS) -c $< -o $@ - - testserver: $(MYLIB) testserver.c $(CC) $(CC_CFLAGS) $(CFLAGS) testserver.c -o testserver $(LDFLAGS) $(LIBS) Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 12:54:30 2008 @@ -402,7 +402,7 @@ } else { snprintf(cmd_str, sizeof(cmd_str), "api %s\n\n", cmd); esl_send_recv(&handle, cmd_str); - if (handle.last_sr_event) { + if (handle.last_sr_event && handle.last_sr_event->body) { printf("%s\n", handle.last_sr_event->body); } } From mikej at freeswitch.org Fri Dec 26 10:07:36 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 13:07:36 -0500 Subject: [Freeswitch-trunk] [commit] r10951 - freeswitch/trunk/libs/esl Message-ID: Author: mikej Date: Fri Dec 26 13:07:36 2008 New Revision: 10951 Log: fix /log Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 13:07:36 2008 @@ -121,6 +121,8 @@ static int process_command(esl_handle_t *handle, const char *cmd) { + char cmd_str[1024]; + if ( !strcasecmp(cmd, "exit") || !strcasecmp(cmd, "quit") || @@ -138,7 +140,9 @@ !strncasecmp(cmd, "filter", 6) ) { - esl_send_recv(handle, cmd); + snprintf(cmd_str, sizeof(cmd_str), "%s\n\n", cmd); + esl_send_recv(handle, cmd_str); + printf("%s\n", handle->last_sr_reply); goto end; From mikej at freeswitch.org Fri Dec 26 10:11:31 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 13:11:31 -0500 Subject: [Freeswitch-trunk] [commit] r10952 - in freeswitch/trunk/libs/esl: . src Message-ID: Author: mikej Date: Fri Dec 26 13:11:31 2008 New Revision: 10952 Log: fix /log Modified: freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/esl.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 13:11:31 2008 @@ -121,8 +121,6 @@ static int process_command(esl_handle_t *handle, const char *cmd) { - char cmd_str[1024]; - if ( !strcasecmp(cmd, "exit") || !strcasecmp(cmd, "quit") || @@ -140,8 +138,7 @@ !strncasecmp(cmd, "filter", 6) ) { - snprintf(cmd_str, sizeof(cmd_str), "%s\n\n", cmd); - esl_send_recv(handle, cmd_str); + esl_send_recv(handle, cmd); printf("%s\n", handle->last_sr_reply); Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Fri Dec 26 13:11:31 2008 @@ -867,7 +867,7 @@ } if (!(*e == '\n' && *(e-1) == '\n')) { - if (send(handle->sock, "\n\n", 2, 0)) { + if (send(handle->sock, "\n\n", 2, 0) != 2) { strerror_r(handle->errnum, handle->err, sizeof(handle->err)); return ESL_FAIL; } From silik0n at freeswitch.org Fri Dec 26 10:14:01 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 13:14:01 -0500 Subject: [Freeswitch-trunk] [commit] r10953 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Fri Dec 26 13:14:00 2008 New Revision: 10953 Log: add a couple of more options Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 13:14:00 2008 @@ -236,9 +236,18 @@ {"host", 1, 0, 'H'}, {"port", 1, 0, 'P'}, {"password", 1, 0, 'p'}, + {"debug", 1, 0, 'd'}, + {"execute", 1, 0, 'x'}, {0, 0, 0, 0} }; + char temp_host[128]; + int argv_host = 0; + char temp_pass[128]; + int argv_pass = 0 ; + esl_port_t temp_port = 0; + int argv_port = 0; + strncpy(profiles[0].host, "127.0.0.1", sizeof(profiles[0].host)); strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass)); strncpy(profiles[0].name, "default", sizeof(profiles[0].name)); @@ -256,6 +265,46 @@ handle.debug = 0; esl_global_set_default_logger(7); + for(;;) { + int option_index = 0; + opt = getopt_long(argc, argv, "H:U:P:S:p:d:x:h?", options, &option_index); + if (opt == -1) break; + switch (opt) + { + case 'H': + esl_set_string(temp_host, optarg); + argv_host = 1; + break; + case 'P': + temp_port= (esl_port_t)atoi(optarg); + argv_port = 1; + break; + case 'p': + esl_set_string(temp_pass, optarg); + argv_pass = 1; + break; + case 'd': + esl_global_set_default_logger(atoi(optarg)); + break; + case 'x': + printf("Executing commands from the CLI is not complete.\n"); + return 0; + + case 'h': + case '?': + printf("Usage: %s [-H ] [-P ] [-p ] [-d ] [-x command] [profile]\n\n", argv[0]); + printf(" -?,-h --help Usage Information\n"); + printf(" -H, --host=hostname Host to connect\n"); + printf(" -P, --port=port Port to connect\n"); + printf(" -p, --password=FILENAME Password\n"); + printf(" -x, --execute=command Execute Command and exit (Work In Progress)\n"); + printf(" -d, --debug=level Debug Level 0 - 7\n\n"); + return 0; + default: + opt = 0; + } + } + if (esl_config_open_file(&cfg, cfile)) { char *var, *val; char cur_cat[128] = ""; @@ -286,36 +335,14 @@ esl_config_close_file(&cfg); } - for(;;) { - int option_index = 0; - opt = getopt_long(argc, argv, "H:U:P:S:p:h?", options, &option_index); - if (opt == -1) break; - switch (opt) - { - case 'H': - printf("Host: %s\n", optarg); - esl_set_string(profile[0].host, optarg); - break; - case 'P': - printf("Port: %s\n", optarg); - profile[0].port= (esl_port_t)atoi(optarg); - break; - case 'p': - printf("password: %s\n", optarg); - esl_set_string(profile[0].pass, optarg); - break; - case 'h': - case '?': - printf("Usage: %s [-H ] [-P ] [-p ] [profile]\n\n", argv[0]); - printf(" -?,-h --help Usage Information\n"); - printf(" -H, --host=hostname Host to connect\n"); - printf(" -P, --port=port Port to connect\n"); - printf(" -p, --password=FILENAME Password\n\n"); - - return 0; - default: - opt = 0; - } + if (argv_host) { + esl_set_string(profiles[cur].host, temp_host); + } + if (argv_port) { + profiles[cur].port = temp_port; + } + if (argv_pass) { + esl_set_string(profiles[cur].pass, temp_pass); } if (optind < argc) { From silik0n at freeswitch.org Fri Dec 26 10:41:59 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 13:41:59 -0500 Subject: [Freeswitch-trunk] [commit] r10954 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Fri Dec 26 13:41:59 2008 New Revision: 10954 Log: add some bounds checking Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 13:41:59 2008 @@ -53,6 +53,17 @@ COLORS[] = { ESL_SEQ_DEFAULT_COLOR, ESL_SEQ_FRED, ESL_SEQ_FRED, ESL_SEQ_FRED, ESL_SEQ_FMAGEN, ESL_SEQ_FCYAN, ESL_SEQ_FGREEN, ESL_SEQ_FYELLOW }; +static int usage(char *name){ + printf("Usage: %s [-H ] [-P ] [-p ] [-d ] [-x command] [profile]\n\n", name); + printf(" -?,-h --help Usage Information\n"); + printf(" -H, --host=hostname Host to connect\n"); + printf(" -P, --port=port Port to connect\n"); + printf(" -p, --password=FILENAME Password\n"); + printf(" -x, --execute=command Execute Command and exit (Work In Progress)\n"); + printf(" -d, --debug=level Debug Level 0 - 7\n\n"); + return 1; +} + static void *msg_thread_run(esl_thread_t *me, void *obj) { @@ -245,8 +256,10 @@ int argv_host = 0; char temp_pass[128]; int argv_pass = 0 ; - esl_port_t temp_port = 0; + int temp_port = 0; int argv_port = 0; + int temp_log = 0; + int argv_error = 0; strncpy(profiles[0].host, "127.0.0.1", sizeof(profiles[0].host)); strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass)); @@ -276,15 +289,26 @@ argv_host = 1; break; case 'P': - temp_port= (esl_port_t)atoi(optarg); - argv_port = 1; + temp_port= atoi(optarg); + if (temp_port > 0 && temp_port < 65536){ + argv_port = 1; + } else { + printf("ERROR: Port must be in range 1 - 65535\n"); + argv_error = 1; + } break; case 'p': esl_set_string(temp_pass, optarg); argv_pass = 1; break; case 'd': - esl_global_set_default_logger(atoi(optarg)); + temp_log=atoi(optarg); + if (temp_log < 0 || temp_log > 7){ + printf("ERROR: Debug level should be 0 - 7.\n"); + argv_error = 1; + } else { + esl_global_set_default_logger(temp_log); + } break; case 'x': printf("Executing commands from the CLI is not complete.\n"); @@ -292,18 +316,18 @@ case 'h': case '?': - printf("Usage: %s [-H ] [-P ] [-p ] [-d ] [-x command] [profile]\n\n", argv[0]); - printf(" -?,-h --help Usage Information\n"); - printf(" -H, --host=hostname Host to connect\n"); - printf(" -P, --port=port Port to connect\n"); - printf(" -p, --password=FILENAME Password\n"); - printf(" -x, --execute=command Execute Command and exit (Work In Progress)\n"); - printf(" -d, --debug=level Debug Level 0 - 7\n\n"); + usage(argv[0]); return 0; default: opt = 0; } } + + if(argv_error){ + printf("\n"); + usage(argv[0]); + return 0; + } if (esl_config_open_file(&cfg, cfile)) { char *var, *val; @@ -339,7 +363,7 @@ esl_set_string(profiles[cur].host, temp_host); } if (argv_port) { - profiles[cur].port = temp_port; + profiles[cur].port = (esl_port_t)temp_port; } if (argv_pass) { esl_set_string(profiles[cur].pass, temp_pass); From silik0n at freeswitch.org Fri Dec 26 10:43:55 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 13:43:55 -0500 Subject: [Freeswitch-trunk] [commit] r10955 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Fri Dec 26 13:43:54 2008 New Revision: 10955 Log: clean up usage help Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 13:43:54 2008 @@ -57,10 +57,10 @@ printf("Usage: %s [-H ] [-P ] [-p ] [-d ] [-x command] [profile]\n\n", name); printf(" -?,-h --help Usage Information\n"); printf(" -H, --host=hostname Host to connect\n"); - printf(" -P, --port=port Port to connect\n"); + printf(" -P, --port=port Port to connect (1 - 65535)\n"); printf(" -p, --password=FILENAME Password\n"); printf(" -x, --execute=command Execute Command and exit (Work In Progress)\n"); - printf(" -d, --debug=level Debug Level 0 - 7\n\n"); + printf(" -d, --debug=level Debug Level (0 - 7)\n\n"); return 1; } From silik0n at freeswitch.org Fri Dec 26 10:45:49 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 13:45:49 -0500 Subject: [Freeswitch-trunk] [commit] r10956 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Fri Dec 26 13:45:49 2008 New Revision: 10956 Log: update Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 13:45:49 2008 @@ -325,8 +325,7 @@ if(argv_error){ printf("\n"); - usage(argv[0]); - return 0; + return usage(argv[0]); } if (esl_config_open_file(&cfg, cfile)) { From mikej at freeswitch.org Fri Dec 26 10:57:58 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 13:57:58 -0500 Subject: [Freeswitch-trunk] [commit] r10957 - freeswitch/trunk Message-ID: Author: mikej Date: Fri Dec 26 13:57:56 2008 New Revision: 10957 Log: add sln file without solution folders for express Added: freeswitch/trunk/Freeswitch.2008.express.sln Added: freeswitch/trunk/Freeswitch.2008.express.sln ============================================================================== --- (empty file) +++ freeswitch/trunk/Freeswitch.2008.express.sln Fri Dec 26 13:57:56 2008 @@ -0,0 +1,10982 @@ +? +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchConsole", "w32\Console\FreeSwitchConsole.2008.vcproj", "{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchCoreLib", "w32\Library\FreeSwitchCore.2008.vcproj", "{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}" + ProjectSection(ProjectDependencies) = postProject + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} + {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9} + {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750} + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g729", "src\mod\codecs\mod_g729\mod_g729.2008.vcproj", "{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sndfile", "src\mod\formats\mod_sndfile\mod_sndfile.2008.vcproj", "{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {3D0370CA-BED2-4657-A475-32375CBCB6E4} = {3D0370CA-BED2-4657-A475-32375CBCB6E4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_iax", "src\mod\endpoints\mod_iax\mod_iax.2008.vcproj", "{3A5B9131-F20C-4A85-9447-6C1610941CEE}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_PortAudio", "src\mod\endpoints\mod_portaudio\mod_PortAudio.2008.vcproj", "{5FD31A25-5D83-4794-8BEE-904DAD84CE71}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {0A18A071-125E-442F-AFF7-A3F68ABECF99} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_speex", "src\mod\codecs\mod_speex\mod_speex.2008.vcproj", "{5580D60E-0F77-4716-9CD4-B8E5986FA375}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "docs", "docs\docs.2008.vcproj", "{1A1FF289-4FD6-4285-A422-D31DD67A4723}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_xml", "src\mod\dialplans\mod_dialplan_xml\mod_dialplan_xml.2008.vcproj", "{07113B25-D3AF-4E04-BA77-4CD1171F022C}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_ldap", "src\mod\directories\mod_ldap\mod_ldap.2008.vcproj", "{EC3E5C7F-EE09-47E2-80FE-546363D14A98}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_directory", "src\mod\dialplans\mod_dialplan_directory\mod_dialplan_directory.2008.vcproj", "{A27CCA23-1541-4337-81A4-F0A6413078A0}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_zeroconf", "src\mod\event_handlers\mod_zeroconf\mod_zeroconf.2008.vcproj", "{C7705DC4-2088-493E-AF8D-65BC6D65C125}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {49C34584-B6DA-448F-83CF-27584DC9FC90} = {49C34584-B6DA-448F-83CF-27584DC9FC90} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_event_multicast", "src\mod\event_handlers\mod_event_multicast\mod_event_multicast.2008.vcproj", "{784113EF-44D9-4949-835D-7065D3C7AD08}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libteletone", "libs\libteletone\libteletone.2008.vcproj", "{89385C74-5860-4174-9CAF-A39E7C48909C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey", "src\mod\languages\mod_spidermonkey\mod_spidermonkey.2008.vcproj", "{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} + {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_cepstral", "src\mod\asr_tts\mod_cepstral\mod_cepstral.2008.vcproj", "{692F6330-4D87-4C82-81DF-40DB5892636E}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_ilbc", "src\mod\codecs\mod_ilbc\mod_ilbc.2008.vcproj", "{D3EC0AFF-76FC-4210-A825-9A17410660A3}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {989BB874-7AF1-44CB-8E5C-CC8113D267E8} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dingaling", "src\mod\endpoints\mod_dingaling\mod_dingaling.2008.vcproj", "{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}" + ProjectSection(ProjectDependencies) = postProject + {1906D736-08BD-4EE1-924F-B536249B9A54} = {1906D736-08BD-4EE1-924F-B536249B9A54} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_commands", "src\mod\applications\mod_commands\mod_commands.2008.vcproj", "{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_console", "src\mod\loggers\mod_console\mod_console.2008.vcproj", "{1C453396-D912-4213-89FD-9B489162B7B5}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_rpc", "src\mod\xml_int\mod_xml_rpc\mod_xml_rpc.2008.vcproj", "{CBEC7225-0C21-4DA8-978E-1F158F8AD950}" + ProjectSection(ProjectDependencies) = postProject + {0D108721-EAE8-4BAF-8102-D8960EC93647} = {0D108721-EAE8-4BAF-8102-D8960EC93647} + {B535402E-38D2-4D54-8360-423ACBD17192} = {B535402E-38D2-4D54-8360-423ACBD17192} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA} = {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA} + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9} = {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_rss", "src\mod\applications\mod_rss\mod_rss.2008.vcproj", "{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_conference", "src\mod\applications\mod_conference\mod_conference.2008.vcproj", "{C24FB505-05D7-4319-8485-7540B44C8603}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dptools", "src\mod\applications\mod_dptools\mod_dptools.2008.vcproj", "{B5881A85-FE70-4F64-8607-2CAAE52669C6}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_event_socket", "src\mod\event_handlers\mod_event_socket\mod_event_socket.2008.vcproj", "{05515420-16DE-4E63-BE73-85BE85BA5142}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "libs\codec\ilbc\libilbc.2008.vcproj", "{989BB874-7AF1-44CB-8E5C-CC8113D267E8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdingaling", "libs\libdingaling\libdingaling.2008.vcproj", "{1906D736-08BD-4EE1-924F-B536249B9A54}" + ProjectSection(ProjectDependencies) = postProject + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsrtp", "libs\srtp\libsrtp.2008.vcproj", "{EEF031CB-FED8-451E-A471-91EC8D4F6750}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsqlite", "libs\win32\sqlite\sqlite.2008.vcproj", "{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre", "libs\win32\pcre\libpcre.2008.vcproj", "{8D04B550-D240-4A44-8A18-35DA3F7038D9}" + ProjectSection(ProjectDependencies) = postProject + {1CED5987-A529-46DC-B30F-870D85FF9C94} = {1CED5987-A529-46DC-B30F-870D85FF9C94} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre Generate pcre_chartables.c", "libs\win32\pcre\pcre_chartables.c.2008.vcproj", "{1CED5987-A529-46DC-B30F-870D85FF9C94}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libresample", "libs\win32\libresample\libresample.2008.vcproj", "{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapr", "libs\win32\apr\libapr.2008.vcproj", "{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "libs\win32\apr-util\libaprutil.2008.vcproj", "{F057DA7F-79E5-4B00-845C-EF446EF055E3}" + ProjectSection(ProjectDependencies) = postProject + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeex", "libs\win32\speex\libspeex.2008.vcproj", "{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iksemel", "libs\win32\iksemel\iksemel.2008.vcproj", "{E727E8F6-935D-46FE-8B0E-37834748A0E3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download HOWL", "libs\win32\Download HOWL.2008.vcproj", "{5927104D-C14C-4AC8-925C-4AB681762E75}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "howl static library", "libs\win32\howl\libhowl.2008.vcproj", "{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}" + ProjectSection(ProjectDependencies) = postProject + {5927104D-C14C-4AC8-925C-4AB681762E75} = {5927104D-C14C-4AC8-925C-4AB681762E75} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mDNSResponder static library", "libs\win32\howl\libmDNSResponder.2008.vcproj", "{49C34584-B6DA-448F-83CF-27584DC9FC90}" + ProjectSection(ProjectDependencies) = postProject + {5927104D-C14C-4AC8-925C-4AB681762E75} = {5927104D-C14C-4AC8-925C-4AB681762E75} + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsndfile", "libs\win32\libsndfile\libsndfile.2008.vcproj", "{3D0370CA-BED2-4657-A475-32375CBCB6E4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curllib", "libs\win32\curl\curllib.2008.vcproj", "{87EE9DA4-DE1E-4448-8324-183C98DCA588}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "libs\win32\apr-util\xml.2008.vcproj", "{155844C3-EC5F-407F-97A4-A2DDADED9B2F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "js", "libs\win32\js\js.2008.vcproj", "{204FA0DE-305D-4414-AE2E-F195A23F390D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sofia", "src\mod\endpoints\mod_sofia\mod_sofia.2008.vcproj", "{0DF3ABD0-DDC0-4265-B778-07C66780979B}" + ProjectSection(ProjectDependencies) = postProject + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0} = {70A49BC2-7500-41D0-B75D-EDCC5BE987A0} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsofia_sip_ua_static", "libs\win32\sofia\libsofia_sip_ua_static.2008.vcproj", "{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}" + ProjectSection(ProjectDependencies) = postProject + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download PTHREAD", "libs\win32\Download PTHREAD.2008.vcproj", "{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pthread", "libs\win32\pthread\pthread.2008.vcproj", "{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}" + ProjectSection(ProjectDependencies) = postProject + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g723_1", "src\mod\codecs\mod_g723_1\mod_g723_1.2008.vcproj", "{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_native_file", "src\mod\formats\mod_native_file\mod_native_file.2008.vcproj", "{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_core_db", "src\mod\languages\mod_spidermonkey_core_db\mod_spidermonkey_core_db.2008.vcproj", "{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}" + ProjectSection(ProjectDependencies) = postProject + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_teletone", "src\mod\languages\mod_spidermonkey_teletone\mod_spidermonkey_teletone.2008.vcproj", "{8F992C49-6C51-412F-B2A3-34EAB708EB65}" + ProjectSection(ProjectDependencies) = postProject + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libudns", "libs\win32\udns\libudns.2008.vcproj", "{4043FC6A-9A30-4577-8AD5-9B233C9575D8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_enum", "src\mod\applications\mod_enum\mod_enum.2008.vcproj", "{71A967D5-0E99-4CEF-A587-98836EE6F2EF}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {4043FC6A-9A30-4577-8AD5-9B233C9575D8} = {4043FC6A-9A30-4577-8AD5-9B233C9575D8} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_odbc", "src\mod\languages\mod_spidermonkey_odbc\mod_spidermonkey_odbc.2008.vcproj", "{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}" + ProjectSection(ProjectDependencies) = postProject + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_curl", "src\mod\xml_int\mod_xml_curl\mod_xml_curl.2008.vcproj", "{AB91A099-7690-4ECF-8994-E458F4EA1ED4}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_en", "src\mod\say\mod_say_en\mod_say_en.2008.vcproj", "{988CACF7-3FCB-4992-BE69-77872AE67DC8}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portaudio", "libs\portaudio\build\msvc\portaudio.2008.vcproj", "{0A18A071-125E-442F-AFF7-A3F68ABECF99}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_cdr", "src\mod\xml_int\mod_xml_cdr\mod_xml_cdr.2008.vcproj", "{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_amr", "src\mod\codecs\mod_amr\mod_amr.2008.vcproj", "{8DEB383C-4091-4F42-A56F-C9E46D552D79}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_h26x", "src\mod\codecs\mod_h26x\mod_h26x.2008.vcproj", "{2C3C2423-234B-4772-8899-D3B137E5CA35}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_esf", "src\mod\applications\mod_esf\mod_esf.2008.vcproj", "{3850D93A-5F24-4922-BC1C-74D08C37C256}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_local_stream", "src\mod\formats\mod_local_stream\mod_local_stream.2008.vcproj", "{2CA40887-1622-46A1-A7F9-17FD7E7E545B}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mediaframe", "libs\openmrcp\mediaframe\mediaframe.2008.vcproj", "{AA91F0AC-6562-435E-814C-5C94689FEFA2}" + ProjectSection(ProjectDependencies) = postProject + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mrcpcore", "libs\openmrcp\mrcpcore\mrcpcore.2008.vcproj", "{829A9309-3B94-43C0-846B-7EC9D6D35F8B}" + ProjectSection(ProjectDependencies) = postProject + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {AA91F0AC-6562-435E-814C-5C94689FEFA2} = {AA91F0AC-6562-435E-814C-5C94689FEFA2} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rtspcore", "libs\openmrcp\rtspcore\rtspcore.2008.vcproj", "{EB751DC4-87BD-4766-B78D-DFB64BA9F988}" + ProjectSection(ProjectDependencies) = postProject + {829A9309-3B94-43C0-846B-7EC9D6D35F8B} = {829A9309-3B94-43C0-846B-7EC9D6D35F8B} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mrcpmediaframe", "libs\openmrcp\module\mrcpmediaframe\mrcpmediaframe.2008.vcproj", "{9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}" + ProjectSection(ProjectDependencies) = postProject + {829A9309-3B94-43C0-846B-7EC9D6D35F8B} = {829A9309-3B94-43C0-846B-7EC9D6D35F8B} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mrcprtsp", "libs\openmrcp\module\mrcprtsp\mrcprtsp.2008.vcproj", "{CF78E84D-8456-44F2-8197-0E0E88D30A3C}" + ProjectSection(ProjectDependencies) = postProject + {EB751DC4-87BD-4766-B78D-DFB64BA9F988} = {EB751DC4-87BD-4766-B78D-DFB64BA9F988} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mrcpsofiasip", "libs\openmrcp\module\mrcpsofiasip\mrcpsofiasip.2008.vcproj", "{819C7242-6184-46FE-BC7B-C7E25C0581EE}" + ProjectSection(ProjectDependencies) = postProject + {829A9309-3B94-43C0-846B-7EC9D6D35F8B} = {829A9309-3B94-43C0-846B-7EC9D6D35F8B} + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0} = {70A49BC2-7500-41D0-B75D-EDCC5BE987A0} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mrcpv2agent", "libs\openmrcp\module\mrcpv2agent\mrcpv2agent.2008.vcproj", "{FB64EA08-3BC0-48AE-BE4B-74F1024B756E}" + ProjectSection(ProjectDependencies) = postProject + {829A9309-3B94-43C0-846B-7EC9D6D35F8B} = {829A9309-3B94-43C0-846B-7EC9D6D35F8B} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libopenmrcpclient", "libs\openmrcp\platform\libopenmrcpclient\libopenmrcpclient.2008.vcproj", "{A407B661-D7DC-4E30-B268-FFF3296C35E6}" + ProjectSection(ProjectDependencies) = postProject + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E} = {FB64EA08-3BC0-48AE-BE4B-74F1024B756E} + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6} = {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6} + {819C7242-6184-46FE-BC7B-C7E25C0581EE} = {819C7242-6184-46FE-BC7B-C7E25C0581EE} + {CF78E84D-8456-44F2-8197-0E0E88D30A3C} = {CF78E84D-8456-44F2-8197-0E0E88D30A3C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_openmrcp", "src\mod\asr_tts\mod_openmrcp\mod_openmrcp.2008.vcproj", "{E7116F50-2B10-472F-92BD-C8667AA9C1AE}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {A407B661-D7DC-4E30-B268-FFF3296C35E6} = {A407B661-D7DC-4E30-B268-FFF3296C35E6} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2} = {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2} + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0} = {70A49BC2-7500-41D0-B75D-EDCC5BE987A0} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_socket", "src\mod\languages\mod_spidermonkey_socket\mod_spidermonkey_socket.2008.vcproj", "{028C7278-05D7-4E18-82FE-BE231B844F41}" + ProjectSection(ProjectDependencies) = postProject + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_voicemail", "src\mod\applications\mod_voicemail\mod_voicemail.2008.vcproj", "{D7F1E3F2-A3F4-474C-8555-15122571AF52}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_de", "src\mod\say\mod_say_de\mod_say_de.2008.vcproj", "{5BC072DB-3826-48EA-AF34-FE32AA01E83B}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_es", "src\mod\say\mod_say_es\mod_say_es.2008.vcproj", "{FA429E98-8B03-45E6-A096-A4BC5E821DE4}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_fr", "src\mod\say\mod_say_fr\mod_say_fr.2008.vcproj", "{06E3A538-AB32-44F2-B477-755FF9CB5D37}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_it", "src\mod\say\mod_say_it\mod_say_it.2008.vcproj", "{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_nl", "src\mod\say\mod_say_nl\mod_say_nl.2008.vcproj", "{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_fifo", "src\mod\applications\mod_fifo\mod_fifo.2008.vcproj", "{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_limit", "src\mod\applications\mod_limit\mod_limit.2008.vcproj", "{F6A33240-8F29-48BD-98F0-826995911799}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_expr", "src\mod\applications\mod_expr\mod_expr.2008.vcproj", "{65A6273D-FCAB-4C55-B09E-65100141A5D4}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_asterisk", "src\mod\dialplans\mod_dialplan_asterisk\mod_dialplan_asterisk.2008.vcproj", "{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_logfile", "src\mod\loggers\mod_logfile\mod_logfile.2008.vcproj", "{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_cdr_csv", "src\mod\event_handlers\mod_cdr_csv\mod_cdr_csv.2008.vcproj", "{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_tone_stream", "src\mod\formats\mod_tone_stream\mod_tone_stream.2008.vcproj", "{6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libvoipcodecs", "libs\voipcodecs\libvoipcodecs.2008.vcproj", "{CF70F278-3364-4395-A2E1-23501C9B8AD2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_voipcodecs", "src\mod\codecs\mod_voipcodecs\mod_voipcodecs.2008.vcproj", "{42B6C2E3-7D5F-4204-A1F6-C0376B86C315}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {CF70F278-3364-4395-A2E1-23501C9B8AD2} = {CF70F278-3364-4395-A2E1-23501C9B8AD2} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aprtoolkit", "libs\openmrcp\aprtoolkit\aprtoolkit.2008.vcproj", "{13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_fsv", "src\mod\applications\mod_fsv\mod_fsv.2008.vcproj", "{E3246D17-E29B-4AB5-962A-C69B0C5837BB}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_curl", "src\mod\languages\mod_spidermonkey_curl\mod_spidermonkey_curl.2008.vcproj", "{36E854E3-CE12-4348-A125-CCF3F9D74813}" + ProjectSection(ProjectDependencies) = postProject + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} + {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_lua", "src\mod\languages\mod_lua\mod_lua.2008.vcproj", "{7B077E7F-1BE7-4291-AB86-55E527B25CAC}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "abyss", "libs\xmlrpc-c\Windows\abyss.2008.vcproj", "{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xmlrpc", "libs\xmlrpc-c\Windows\xmlrpc.2008.vcproj", "{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xmlparse", "libs\xmlrpc-c\Windows\xmlparse.2008.vcproj", "{0D108721-EAE8-4BAF-8102-D8960EC93647}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xmltok", "libs\xmlrpc-c\Windows\xmltok.2008.vcproj", "{B535402E-38D2-4D54-8360-423ACBD17192}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download sphinxbase", "libs\win32\Download sphinxbase.2008.vcproj", "{4F92B672-DADB-4047-8D6A-4BB3796733FD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download sphinxmodel", "libs\win32\Download sphinxmodel.2008.vcproj", "{2DEE4895-1134-439C-B688-52203E57D878}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download pocketsphinx", "libs\win32\Download pocketsphinx.2008.vcproj", "{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sphinxbase", "libs\win32\sphinxbase\sphinxbase.2008.vcproj", "{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}" + ProjectSection(ProjectDependencies) = postProject + {4F92B672-DADB-4047-8D6A-4BB3796733FD} = {4F92B672-DADB-4047-8D6A-4BB3796733FD} + {2DEE4895-1134-439C-B688-52203E57D878} = {2DEE4895-1134-439C-B688-52203E57D878} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pocketsphinx", "libs\win32\pocketsphinx\pocketsphinx.2008.vcproj", "{94001A0E-A837-445C-8004-F918F10D0226}" + ProjectSection(ProjectDependencies) = postProject + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} = {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E} = {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_pocketsphinx", "src\mod\asr_tts\mod_pocketsphinx\mod_pocketsphinx.2008.vcproj", "{2286DA73-9FC5-45BC-A508-85994C3317AB}" + ProjectSection(ProjectDependencies) = postProject + {94001A0E-A837-445C-8004-F918F10D0226} = {94001A0E-A837-445C-8004-F918F10D0226} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {4F92B672-DADB-4047-8D6A-4BB3796733FD} = {4F92B672-DADB-4047-8D6A-4BB3796733FD} + {2DEE4895-1134-439C-B688-52203E57D878} = {2DEE4895-1134-439C-B688-52203E57D878} + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} = {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E} = {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 8khzsound", "libs\win32\Download 8khz Sounds.2008.vcproj", "{3CE1DC99-8246-4DB1-A709-74F19F08EC67}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 16khzsound", "libs\win32\Download 16khz Sounds.2008.vcproj", "{87A1FE3D-F410-4C8E-9591-8C625985BC70}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "8khz", "libs\win32\Sound_Files\8khz.2008.vcproj", "{7A8D8174-B355-4114-AFC1-04777CB9DE0A}" + ProjectSection(ProjectDependencies) = postProject + {3CE1DC99-8246-4DB1-A709-74F19F08EC67} = {3CE1DC99-8246-4DB1-A709-74F19F08EC67} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "16khz", "libs\win32\Sound_Files\16khz.2008.vcproj", "{7EB71250-F002-4ED8-92CA-CA218114537A}" + ProjectSection(ProjectDependencies) = postProject + {87A1FE3D-F410-4C8E-9591-8C625985BC70} = {87A1FE3D-F410-4C8E-9591-8C625985BC70} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 32khzsound", "libs\win32\Dowload 32khz Sounds.2008.vcproj", "{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "32khz", "libs\win32\Sound_Files\32khz.2008.vcproj", "{464AAB78-5489-4916-BE51-BF8D61822311}" + ProjectSection(ProjectDependencies) = postProject + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F} = {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "flite", "libs\win32\flite\flite.2008.vcproj", "{0AD1177E-1FD8-4643-9391-431467A11084}" + ProjectSection(ProjectDependencies) = postProject + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B} = {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_flite", "src\mod\asr_tts\mod_flite\mod_flite.2008.vcproj", "{66444AEE-554C-11DD-A9F0-8C5D56D89593}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B} = {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B} + {0AD1177E-1FD8-4643-9391-431467A11084} = {0AD1177E-1FD8-4643-9391-431467A11084} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download FLITE", "libs\win32\Download FLITE.2008.vcproj", "{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download LAME", "libs\win32\Download LAME.2008.vcproj", "{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download LIBSHOUT", "libs\win32\Download LIBSHOUT.2008.vcproj", "{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download OGG", "libs\win32\Download OGG.2008.vcproj", "{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmp3lame", "libs\win32\libmp3lame\libmp3lame_vc7.vcproj", "{E316772F-5D8F-4F2A-8F71-094C3E859D34}" + ProjectSection(ProjectDependencies) = postProject + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B} = {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshout", "libs\win32\libshout\libshout.vcproj", "{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}" + ProjectSection(ProjectDependencies) = postProject + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B} = {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B} + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4} = {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_shout", "src\mod\formats\mod_shout\mod_shout.vcproj", "{38FE0559-9910-43A8-9E45-3E5004C27692}" + ProjectSection(ProjectDependencies) = postProject + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5} = {D3D8B329-20BE-475E-9E83-653CEA0E0EF5} + {E316772F-5D8F-4F2A-8F71-094C3E859D34} = {E316772F-5D8F-4F2A-8F71-094C3E859D34} + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {419C8F80-D858-4B48-A25C-AF4007608137} = {419C8F80-D858-4B48-A25C-AF4007608137} + {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libogg", "libs\win32\libogg\libogg.2008.vcproj", "{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}" + ProjectSection(ProjectDependencies) = postProject + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B} = {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_snom", "src\mod\applications\mod_snom\mod_snom.2008.vcproj", "{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_zh", "src\mod\say\mod_say_zh\mod_say_zh.2008.vcproj", "{B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_managed", "src\mod\languages\mod_managed\mod_managed.vcproj", "{7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}" + ProjectSection(ProjectDependencies) = postProject + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0} = {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSWITCH.Managed", "src\mod\languages\mod_managed\managed\FreeSWITCH.Managed.csproj", "{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download mpg123", "libs\win32\Download mpg123.2008.vcproj", "{E796E337-DE78-4303-8614-9A590862EE95}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmpg123", "libs\win32\mpg123\libmpg123.2008.vcproj", "{419C8F80-D858-4B48-A25C-AF4007608137}" + ProjectSection(ProjectDependencies) = postProject + {E796E337-DE78-4303-8614-9A590862EE95} = {E796E337-DE78-4303-8614-9A590862EE95} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_loopback", "src\mod\endpoints\mod_loopback\mod_loopback.2008.vcproj", "{B3F424EC-3D8F-417C-B244-3919D5E1A577}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_vmd", "src\mod\applications\mod_vmd\mod_vmd.2008.vcproj", "{14E4A972-9CFB-436D-B0A5-4943F3F80D47}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libg722_1", "libs\win32\libg722_1\libg722_1.vcproj", "{1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_siren", "src\mod\codecs\mod_siren\mod_siren.2008.vcproj", "{0B6C905B-142E-4999-B39D-92FF7951E921}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} = {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "esl", "libs\esl\src\esl.2008.vcproj", "{CF405366-9558-4AE8-90EF-5E21B51CCB4E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fs_cli", "libs\esl\fs_cli.2008.vcproj", "{D2FB8043-D208-4AEE-8F18-3B5857C871B9}" + ProjectSection(ProjectDependencies) = postProject + {CF405366-9558-4AE8-90EF-5E21B51CCB4E} = {CF405366-9558-4AE8-90EF-5E21B51CCB4E} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug DirectSound|Mixed Platforms = Debug DirectSound|Mixed Platforms + Debug DirectSound|Win32 = Debug DirectSound|Win32 + Debug DirectSound|x64 = Debug DirectSound|x64 + Debug DLL|Mixed Platforms = Debug DLL|Mixed Platforms + Debug DLL|Win32 = Debug DLL|Win32 + Debug DLL|x64 = Debug DLL|x64 + Debug MS-LDAP|Mixed Platforms = Debug MS-LDAP|Mixed Platforms + Debug MS-LDAP|Win32 = Debug MS-LDAP|Win32 + Debug MS-LDAP|x64 = Debug MS-LDAP|x64 + Debug Passthrough|Mixed Platforms = Debug Passthrough|Mixed Platforms + Debug Passthrough|Win32 = Debug Passthrough|Win32 + Debug Passthrough|x64 = Debug Passthrough|x64 + Debug Static|Mixed Platforms = Debug Static|Mixed Platforms + Debug Static|Win32 = Debug Static|Win32 + Debug Static|x64 = Debug Static|x64 + Debug_CLR|Mixed Platforms = Debug_CLR|Mixed Platforms + Debug_CLR|Win32 = Debug_CLR|Win32 + Debug_CLR|x64 = Debug_CLR|x64 + Debug_Mono|Mixed Platforms = Debug_Mono|Mixed Platforms + Debug_Mono|Win32 = Debug_Mono|Win32 + Debug_Mono|x64 = Debug_Mono|x64 + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release DirectSound|Mixed Platforms = Release DirectSound|Mixed Platforms + Release DirectSound|Win32 = Release DirectSound|Win32 + Release DirectSound|x64 = Release DirectSound|x64 + Release DLL|Mixed Platforms = Release DLL|Mixed Platforms + Release DLL|Win32 = Release DLL|Win32 + Release DLL|x64 = Release DLL|x64 + Release MS-LDAP|Mixed Platforms = Release MS-LDAP|Mixed Platforms + Release MS-LDAP|Win32 = Release MS-LDAP|Win32 + Release MS-LDAP|x64 = Release MS-LDAP|x64 + Release Passthrough|Mixed Platforms = Release Passthrough|Mixed Platforms + Release Passthrough|Win32 = Release Passthrough|Win32 + Release Passthrough|x64 = Release Passthrough|x64 + Release Static|Mixed Platforms = Release Static|Mixed Platforms + Release Static|Win32 = Release Static|Win32 + Release Static|x64 = Release Static|x64 + Release_CLR|Mixed Platforms = Release_CLR|Mixed Platforms + Release_CLR|Win32 = Release_CLR|Win32 + Release_CLR|x64 = Release_CLR|x64 + Release_Mono|Mixed Platforms = Release_Mono|Mixed Platforms + Release_Mono|Win32 = Release_Mono|Win32 + Release_Mono|x64 = Release_Mono|x64 + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug DLL|Win32.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug Static|Win32.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug Static|x64.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release DirectSound|Win32.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release DLL|Win32.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release DLL|Win32.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release DLL|x64.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release Passthrough|Win32.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release Static|Win32.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release Static|Win32.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release Static|x64.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release_CLR|Win32.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release_CLR|x64.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release_Mono|Win32.Build.0 = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release_Mono|x64.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug DLL|Win32.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug Static|Win32.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug Static|x64.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release DirectSound|Win32.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release DLL|Win32.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release DLL|Win32.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release DLL|x64.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release Passthrough|Win32.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release Static|Win32.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release Static|Win32.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release Static|x64.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release_CLR|Win32.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release_CLR|x64.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release_Mono|Win32.Build.0 = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release_Mono|x64.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug DirectSound|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug DirectSound|Win32.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug DirectSound|Win32.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug DirectSound|x64.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug DLL|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug DLL|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug DLL|Win32.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug DLL|Win32.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug DLL|x64.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug MS-LDAP|Win32.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug MS-LDAP|Win32.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug MS-LDAP|x64.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug Passthrough|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug Passthrough|Win32.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug Passthrough|Win32.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug Passthrough|x64.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug Static|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug Static|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug Static|Win32.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug Static|Win32.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug Static|x64.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug_CLR|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug_CLR|Win32.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug_CLR|Win32.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug_CLR|x64.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug_Mono|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug_Mono|Win32.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug_Mono|Win32.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug_Mono|x64.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release DirectSound|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release DirectSound|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release DirectSound|Win32.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release DirectSound|Win32.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release DirectSound|x64.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release DLL|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release DLL|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release DLL|Win32.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release DLL|Win32.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release DLL|x64.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release MS-LDAP|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release MS-LDAP|Win32.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release MS-LDAP|Win32.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release MS-LDAP|x64.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release Passthrough|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release Passthrough|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release Passthrough|Win32.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release Passthrough|Win32.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release Passthrough|x64.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release Static|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release Static|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release Static|Win32.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release Static|Win32.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release Static|x64.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release_CLR|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release_CLR|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release_CLR|Win32.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release_CLR|Win32.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release_CLR|x64.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release_Mono|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release_Mono|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release_Mono|Win32.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release_Mono|Win32.Build.0 = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release_Mono|x64.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug DLL|Win32.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug Static|Win32.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug Static|x64.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release DirectSound|Win32.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release DLL|Win32.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release DLL|Win32.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release DLL|x64.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release Passthrough|Win32.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release Static|Win32.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release Static|Win32.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release Static|x64.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release_CLR|Win32.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release_CLR|x64.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release_Mono|Win32.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release_Mono|x64.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug DLL|Win32.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug Static|Win32.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug Static|x64.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|x64.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release DirectSound|Win32.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release DLL|Win32.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release DLL|Win32.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release DLL|x64.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release Passthrough|Win32.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release Static|Win32.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release Static|Win32.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release Static|x64.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release_CLR|Win32.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release_CLR|x64.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release_Mono|Win32.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release_Mono|x64.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Mixed Platforms.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|x64.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug DLL|Win32.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug Static|Win32.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug Static|x64.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release DirectSound|Win32.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release DLL|Win32.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release DLL|Win32.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release DLL|x64.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release Passthrough|Win32.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release Static|Win32.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release Static|Win32.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release Static|x64.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release_CLR|Win32.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release_CLR|x64.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release_Mono|Win32.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release_Mono|x64.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug DLL|Win32.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug Static|Win32.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug Static|x64.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release DirectSound|Win32.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release DLL|Win32.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release DLL|Win32.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release DLL|x64.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release Passthrough|Win32.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release Static|Win32.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release Static|Win32.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release Static|x64.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release_CLR|Win32.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release_CLR|x64.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release_Mono|Win32.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release_Mono|x64.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug DLL|Win32.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug Static|Win32.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug Static|x64.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release DirectSound|Win32.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release DLL|Win32.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release DLL|Win32.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release DLL|x64.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release Passthrough|Win32.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release Static|Win32.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release Static|Win32.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release Static|x64.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release_CLR|Win32.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release_CLR|x64.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release_Mono|Win32.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release_Mono|x64.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Mixed Platforms.Build.0 = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Win32.ActiveCfg = Release|Win32 + {1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x64.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug DLL|Win32.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug Static|Win32.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug Static|x64.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release DirectSound|Win32.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release DLL|Win32.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release DLL|Win32.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release DLL|x64.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release Passthrough|Win32.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release Static|Win32.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release Static|Win32.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release Static|x64.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release_CLR|Win32.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release_CLR|x64.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release_Mono|Win32.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release_Mono|x64.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug DirectSound|Mixed Platforms.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug DirectSound|Win32.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug DirectSound|Win32.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug DirectSound|x64.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug DLL|Mixed Platforms.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug DLL|Mixed Platforms.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug DLL|Win32.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug DLL|Win32.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug DLL|x64.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug MS-LDAP|Win32.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug MS-LDAP|Win32.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug MS-LDAP|x64.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug Passthrough|Mixed Platforms.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug Passthrough|Win32.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug Passthrough|Win32.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug Passthrough|x64.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug Static|Mixed Platforms.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug Static|Mixed Platforms.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug Static|Win32.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug Static|Win32.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug Static|x64.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug_CLR|Mixed Platforms.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug_CLR|Win32.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug_CLR|Win32.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug_CLR|x64.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug_Mono|Mixed Platforms.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug_Mono|Win32.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug_Mono|Win32.Build.0 = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug_Mono|x64.ActiveCfg = Debug MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release DirectSound|Mixed Platforms.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release DirectSound|Mixed Platforms.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release DirectSound|Win32.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release DirectSound|Win32.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release DirectSound|x64.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release DLL|Mixed Platforms.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release DLL|Mixed Platforms.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release DLL|Win32.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release DLL|Win32.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release DLL|x64.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release MS-LDAP|Mixed Platforms.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release MS-LDAP|Win32.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release MS-LDAP|Win32.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release MS-LDAP|x64.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release Passthrough|Mixed Platforms.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release Passthrough|Mixed Platforms.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release Passthrough|Win32.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release Passthrough|Win32.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release Passthrough|x64.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release Static|Mixed Platforms.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release Static|Mixed Platforms.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release Static|Win32.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release Static|Win32.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release Static|x64.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release_CLR|Mixed Platforms.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release_CLR|Mixed Platforms.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release_CLR|Win32.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release_CLR|Win32.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release_CLR|x64.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release_Mono|Mixed Platforms.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release_Mono|Mixed Platforms.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release_Mono|Win32.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release_Mono|Win32.Build.0 = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release_Mono|x64.ActiveCfg = Release MS-LDAP|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug DLL|Win32.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug Static|Win32.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug Static|x64.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release DirectSound|Win32.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release DLL|Win32.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release DLL|Win32.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release DLL|x64.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release Passthrough|Win32.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release Static|Win32.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release Static|Win32.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release Static|x64.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release_CLR|Win32.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release_CLR|x64.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release_Mono|Win32.Build.0 = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release_Mono|x64.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug DLL|Win32.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug Static|Win32.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug Static|x64.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.Build.0 = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|x64.ActiveCfg = Debug|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release DirectSound|Win32.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release DLL|Win32.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release DLL|Win32.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release DLL|x64.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release Passthrough|Win32.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release Static|Win32.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release Static|Win32.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release Static|x64.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release_CLR|Win32.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release_CLR|x64.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release_Mono|Win32.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release_Mono|x64.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Mixed Platforms.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.ActiveCfg = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.Build.0 = Release|Win32 + {C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|x64.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug DLL|Win32.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug Static|Win32.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug Static|x64.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release DirectSound|Win32.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release DLL|Win32.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release DLL|Win32.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release DLL|x64.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release Passthrough|Win32.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release Static|Win32.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release Static|Win32.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release Static|x64.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release_CLR|Win32.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release_CLR|x64.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release_Mono|Win32.Build.0 = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release_Mono|x64.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug DLL|Win32.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug Static|Win32.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug Static|x64.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release DirectSound|Win32.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release DLL|Win32.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release DLL|Win32.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release DLL|x64.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release Passthrough|Win32.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release Static|Win32.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release Static|Win32.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release Static|x64.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release_CLR|Win32.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release_CLR|x64.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release_Mono|Win32.Build.0 = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release_Mono|x64.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug DLL|Win32.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug Static|Win32.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug Static|x64.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release DirectSound|Win32.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release DLL|Win32.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release DLL|Win32.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release DLL|x64.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release Passthrough|Win32.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release Static|Win32.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release Static|Win32.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release Static|x64.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release_CLR|Win32.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release_CLR|x64.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release_Mono|Win32.Build.0 = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release_Mono|x64.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug DLL|Win32.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug Static|Win32.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug Static|x64.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Win32.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64.ActiveCfg = Debug|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release DirectSound|Win32.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release DLL|Win32.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release DLL|Win32.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release DLL|x64.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release Passthrough|Win32.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release Static|Win32.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release Static|Win32.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release Static|x64.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release_CLR|Win32.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release_CLR|x64.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release_Mono|Win32.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release_Mono|x64.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Mixed Platforms.Build.0 = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Win32.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug Static|Win32.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug Static|x64.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release DirectSound|Win32.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release DLL|Win32.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release DLL|x64.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release Passthrough|Win32.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release Static|Win32.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release Static|Win32.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release Static|x64.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release_CLR|Win32.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release_CLR|x64.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release_Mono|Win32.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release_Mono|x64.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug DLL|Win32.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug Static|Win32.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug Static|x64.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release DirectSound|Win32.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release DLL|Win32.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release DLL|Win32.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release DLL|x64.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release Passthrough|Win32.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release Static|Win32.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release Static|Win32.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release Static|x64.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release_CLR|Win32.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release_CLR|x64.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release_Mono|Win32.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release_Mono|x64.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug DLL|Win32.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug Static|Win32.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug Static|x64.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release DirectSound|Win32.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release DLL|Win32.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release DLL|Win32.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release DLL|x64.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release Passthrough|Win32.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release Static|Win32.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release Static|Win32.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release Static|x64.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release_CLR|Win32.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release_CLR|x64.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release_Mono|Win32.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release_Mono|x64.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug DLL|Win32.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug Static|Win32.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug Static|x64.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release DirectSound|Win32.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release DLL|Win32.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release DLL|Win32.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release DLL|x64.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release Passthrough|Win32.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release Static|Win32.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release Static|Win32.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release Static|x64.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release_CLR|Win32.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release_CLR|x64.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release_Mono|Win32.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release_Mono|x64.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug DLL|Win32.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug Static|Win32.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug Static|x64.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release DirectSound|Win32.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release DLL|Win32.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release DLL|Win32.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release DLL|x64.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release Passthrough|Win32.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release Static|Win32.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release Static|Win32.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release Static|x64.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release_CLR|Win32.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release_CLR|x64.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release_Mono|Win32.Build.0 = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release_Mono|x64.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug DLL|Win32.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug Static|Win32.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug Static|x64.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release DirectSound|Win32.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release DLL|Win32.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release DLL|Win32.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release DLL|x64.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release Passthrough|Win32.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release Static|Win32.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release Static|Win32.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release Static|x64.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release_CLR|Win32.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release_CLR|x64.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release_Mono|Win32.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release_Mono|x64.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug DLL|Win32.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug Static|Win32.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug Static|x64.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release DirectSound|Win32.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release DLL|Win32.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release DLL|Win32.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release DLL|x64.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release Passthrough|Win32.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release Static|Win32.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release Static|Win32.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release Static|x64.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release_CLR|Win32.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release_CLR|x64.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release_Mono|Win32.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release_Mono|x64.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug DLL|Win32.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug Static|Win32.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug Static|x64.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release DirectSound|Win32.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release DLL|Win32.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release DLL|Win32.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release DLL|x64.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release Passthrough|Win32.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release Static|Win32.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release Static|Win32.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release Static|x64.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release_CLR|Win32.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release_CLR|x64.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release_Mono|Win32.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release_Mono|x64.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug DLL|Win32.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug Static|Win32.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug Static|x64.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release DirectSound|Win32.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release DLL|Win32.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release DLL|Win32.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release DLL|x64.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release Passthrough|Win32.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release Static|Win32.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release Static|Win32.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release Static|x64.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release_CLR|Win32.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release_CLR|x64.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release_Mono|Win32.Build.0 = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release_Mono|x64.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug DLL|Win32.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug Static|Win32.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug Static|x64.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|x64.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release DirectSound|Win32.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release DLL|Win32.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release DLL|Win32.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release DLL|x64.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release Passthrough|Win32.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release Static|Win32.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release Static|Win32.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release Static|x64.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release_CLR|Win32.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release_CLR|x64.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release_Mono|Win32.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release_Mono|x64.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|x64.ActiveCfg = Release|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug DirectSound|Mixed Platforms.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug DirectSound|Win32.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug DirectSound|Win32.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug DirectSound|x64.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug DLL|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug DLL|Mixed Platforms.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug DLL|x64.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug MS-LDAP|Win32.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug MS-LDAP|Win32.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug MS-LDAP|x64.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug Passthrough|Mixed Platforms.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug Passthrough|Win32.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug Passthrough|Win32.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug Passthrough|x64.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug Static|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug Static|Mixed Platforms.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug Static|Win32.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug Static|Win32.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug Static|x64.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug_CLR|Mixed Platforms.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug_CLR|Win32.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug_CLR|Win32.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug_CLR|x64.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug_Mono|Mixed Platforms.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug_Mono|Win32.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug_Mono|Win32.Build.0 = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug_Mono|x64.ActiveCfg = Debug DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release DirectSound|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release DirectSound|Mixed Platforms.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release DirectSound|Win32.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release DirectSound|Win32.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release DirectSound|x64.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release DLL|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release DLL|Mixed Platforms.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release DLL|Win32.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release DLL|x64.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release MS-LDAP|Mixed Platforms.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release MS-LDAP|Win32.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release MS-LDAP|Win32.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release MS-LDAP|x64.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release Passthrough|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release Passthrough|Mixed Platforms.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release Passthrough|Win32.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release Passthrough|Win32.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release Passthrough|x64.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release Static|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release Static|Mixed Platforms.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release Static|Win32.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release Static|Win32.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release Static|x64.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release_CLR|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release_CLR|Mixed Platforms.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release_CLR|Win32.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release_CLR|Win32.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release_CLR|x64.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release_Mono|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release_Mono|Mixed Platforms.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release_Mono|Win32.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release_Mono|Win32.Build.0 = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release_Mono|x64.ActiveCfg = Release DLL|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug DirectSound|Mixed Platforms.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug DirectSound|Win32.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug DirectSound|Win32.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug DirectSound|x64.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug DLL|Mixed Platforms.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug DLL|Mixed Platforms.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug DLL|Win32.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug DLL|Win32.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug DLL|x64.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug MS-LDAP|Win32.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug MS-LDAP|Win32.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug MS-LDAP|x64.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug Passthrough|Mixed Platforms.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug Passthrough|Win32.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug Passthrough|Win32.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug Passthrough|x64.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug Static|Mixed Platforms.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug Static|Mixed Platforms.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug Static|Win32.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug Static|Win32.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug Static|x64.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug_CLR|Mixed Platforms.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug_CLR|Win32.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug_CLR|Win32.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug_CLR|x64.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug_Mono|Mixed Platforms.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug_Mono|Win32.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug_Mono|Win32.Build.0 = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug_Mono|x64.ActiveCfg = Debug Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release DirectSound|Mixed Platforms.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release DirectSound|Mixed Platforms.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release DirectSound|Win32.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release DirectSound|Win32.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release DirectSound|x64.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release DLL|Mixed Platforms.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release DLL|Mixed Platforms.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release DLL|Win32.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release DLL|Win32.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release DLL|x64.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release MS-LDAP|Mixed Platforms.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release MS-LDAP|Win32.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release MS-LDAP|Win32.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release MS-LDAP|x64.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release Passthrough|Mixed Platforms.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release Passthrough|Mixed Platforms.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release Passthrough|Win32.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release Passthrough|Win32.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release Passthrough|x64.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release Static|Mixed Platforms.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release Static|Mixed Platforms.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release Static|Win32.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release Static|Win32.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release Static|x64.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release_CLR|Mixed Platforms.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release_CLR|Mixed Platforms.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release_CLR|Win32.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release_CLR|Win32.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release_CLR|x64.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release_Mono|Mixed Platforms.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release_Mono|Mixed Platforms.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release_Mono|Win32.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release_Mono|Win32.Build.0 = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release_Mono|x64.ActiveCfg = Release Dll|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug DirectSound|Mixed Platforms.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug DirectSound|Win32.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug DirectSound|Win32.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug DirectSound|x64.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug DLL|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug DLL|Mixed Platforms.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug DLL|x64.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug MS-LDAP|Win32.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug MS-LDAP|Win32.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug MS-LDAP|x64.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug Passthrough|Mixed Platforms.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug Passthrough|Win32.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug Passthrough|Win32.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug Passthrough|x64.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug Static|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug Static|Mixed Platforms.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug Static|Win32.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug Static|Win32.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug Static|x64.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug_CLR|Mixed Platforms.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug_CLR|Win32.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug_CLR|Win32.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug_CLR|x64.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug_Mono|Mixed Platforms.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug_Mono|Win32.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug_Mono|Win32.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug_Mono|x64.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release DirectSound|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release DirectSound|Mixed Platforms.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release DirectSound|Win32.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release DirectSound|Win32.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release DirectSound|x64.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release DLL|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release DLL|Mixed Platforms.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release DLL|Win32.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release DLL|x64.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release MS-LDAP|Mixed Platforms.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release MS-LDAP|Win32.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release MS-LDAP|Win32.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release MS-LDAP|x64.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release Passthrough|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release Passthrough|Mixed Platforms.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release Passthrough|Win32.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release Passthrough|Win32.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release Passthrough|x64.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release Static|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release Static|Mixed Platforms.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release Static|Win32.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release Static|Win32.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release Static|x64.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release_CLR|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release_CLR|Mixed Platforms.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release_CLR|Win32.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release_CLR|Win32.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release_CLR|x64.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release_Mono|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release_Mono|Mixed Platforms.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release_Mono|Win32.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release_Mono|Win32.Build.0 = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release_Mono|x64.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug DirectSound|Mixed Platforms.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug DirectSound|Win32.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug DirectSound|Win32.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug DirectSound|x64.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug DLL|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug DLL|Mixed Platforms.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug DLL|x64.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug MS-LDAP|Win32.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug MS-LDAP|Win32.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug MS-LDAP|x64.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug Passthrough|Mixed Platforms.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug Passthrough|Win32.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug Passthrough|Win32.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug Passthrough|x64.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug Static|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug Static|Mixed Platforms.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug Static|Win32.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug Static|Win32.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug Static|x64.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug_CLR|Mixed Platforms.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug_CLR|Win32.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug_CLR|Win32.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug_CLR|x64.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug_Mono|Mixed Platforms.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug_Mono|Win32.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug_Mono|Win32.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug_Mono|x64.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release DirectSound|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release DirectSound|Mixed Platforms.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release DirectSound|Win32.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release DirectSound|Win32.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release DirectSound|x64.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release DLL|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release DLL|Mixed Platforms.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release DLL|Win32.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release DLL|x64.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release MS-LDAP|Mixed Platforms.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release MS-LDAP|Win32.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release MS-LDAP|Win32.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release MS-LDAP|x64.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release Passthrough|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release Passthrough|Mixed Platforms.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release Passthrough|Win32.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release Passthrough|Win32.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release Passthrough|x64.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release Static|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release Static|Mixed Platforms.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release Static|Win32.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release Static|Win32.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release Static|x64.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release_CLR|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release_CLR|Mixed Platforms.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release_CLR|Win32.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release_CLR|Win32.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release_CLR|x64.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release_Mono|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release_Mono|Mixed Platforms.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release_Mono|Win32.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release_Mono|Win32.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release_Mono|x64.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug DLL|Win32.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug Static|Win32.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug Static|x64.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release DirectSound|Win32.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release DLL|Win32.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release DLL|Win32.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release DLL|x64.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release Passthrough|Win32.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release Static|Win32.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release Static|Win32.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release Static|x64.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release_CLR|Win32.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release_CLR|x64.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release_Mono|Win32.Build.0 = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release_Mono|x64.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug DLL|Win32.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug Static|Win32.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug Static|x64.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|x64.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release DirectSound|Win32.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release DLL|Win32.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release DLL|Win32.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release DLL|x64.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release Passthrough|Win32.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release Static|Win32.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release Static|Win32.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release Static|x64.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release_CLR|Win32.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release_CLR|x64.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release_Mono|Win32.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release_Mono|x64.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Mixed Platforms.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|x64.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug DLL|Win32.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug Static|Win32.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug Static|x64.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release DirectSound|Win32.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release DLL|Win32.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release DLL|Win32.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release DLL|x64.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release Passthrough|Win32.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release Static|Win32.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release Static|Win32.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release Static|x64.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release_CLR|Win32.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release_CLR|x64.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release_Mono|Win32.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release_Mono|x64.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug DLL|Win32.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug Static|Win32.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug Static|x64.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release DirectSound|Win32.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release DLL|Win32.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release DLL|Win32.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release DLL|x64.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release Passthrough|Win32.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release Static|Win32.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release Static|Win32.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release Static|x64.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release_CLR|Win32.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release_CLR|x64.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release_Mono|Win32.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release_Mono|x64.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug DLL|Win32.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug Static|Win32.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug Static|x64.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|x64.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release DirectSound|Win32.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release DLL|Win32.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release DLL|Win32.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release DLL|x64.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release Passthrough|Win32.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release Static|Win32.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release Static|Win32.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release Static|x64.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release_CLR|Win32.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release_CLR|x64.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release_Mono|Win32.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release_Mono|x64.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Mixed Platforms.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|x64.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug DLL|Win32.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug Static|Win32.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug Static|x64.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release DirectSound|Win32.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release DLL|Win32.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release DLL|Win32.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release DLL|x64.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release Passthrough|Win32.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release Static|Win32.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release Static|Win32.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release Static|x64.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release_CLR|Win32.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release_CLR|x64.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release_Mono|Win32.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release_Mono|x64.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug DLL|Win32.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug Static|Win32.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug Static|x64.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.Build.0 = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|x64.ActiveCfg = Debug|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release DirectSound|Win32.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release DLL|Win32.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release DLL|Win32.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release DLL|x64.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release Passthrough|Win32.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release Static|Win32.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release Static|Win32.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release Static|x64.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release_CLR|Win32.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release_CLR|x64.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release_Mono|Win32.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release_Mono|x64.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.ActiveCfg = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.Build.0 = Release|Win32 + {5927104D-C14C-4AC8-925C-4AB681762E75}.Release|x64.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug DLL|Win32.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug Static|Win32.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug Static|x64.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.Build.0 = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|x64.ActiveCfg = Debug|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release DirectSound|Win32.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release DLL|Win32.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release DLL|Win32.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release DLL|x64.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release Passthrough|Win32.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release Static|Win32.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release Static|Win32.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release Static|x64.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release_CLR|Win32.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release_CLR|x64.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release_Mono|Win32.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release_Mono|x64.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Mixed Platforms.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.ActiveCfg = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.Build.0 = Release|Win32 + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|x64.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug DLL|Win32.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug Static|Win32.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug Static|x64.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.Build.0 = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|x64.ActiveCfg = Debug|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release DirectSound|Win32.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release DLL|Win32.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release DLL|Win32.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release DLL|x64.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release Passthrough|Win32.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release Static|Win32.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release Static|Win32.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release Static|x64.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release_CLR|Win32.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release_CLR|x64.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release_Mono|Win32.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release_Mono|x64.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Mixed Platforms.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.ActiveCfg = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.Build.0 = Release|Win32 + {49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|x64.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug DLL|Win32.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug Static|Win32.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug Static|x64.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release DirectSound|Win32.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release DLL|Win32.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release DLL|Win32.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release DLL|x64.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release Passthrough|Win32.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release Static|Win32.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release Static|Win32.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release Static|x64.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release_CLR|Win32.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release_CLR|x64.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release_Mono|Win32.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release_Mono|x64.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug DLL|Win32.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug Static|Win32.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug Static|x64.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release DirectSound|Win32.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release DLL|Win32.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release DLL|Win32.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release DLL|x64.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release Passthrough|Win32.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release Static|Win32.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release Static|Win32.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release Static|x64.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release_CLR|Win32.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release_CLR|x64.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release_Mono|Win32.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release_Mono|x64.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug DLL|Win32.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug Static|Win32.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug Static|x64.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release DirectSound|Win32.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release DLL|Win32.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release DLL|Win32.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release DLL|x64.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release Passthrough|Win32.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release Static|Win32.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release Static|Win32.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release Static|x64.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release_CLR|Win32.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release_CLR|x64.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release_Mono|Win32.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release_Mono|x64.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug DLL|Win32.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug Static|Win32.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug Static|x64.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release DirectSound|Win32.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release DLL|Win32.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release DLL|Win32.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release DLL|x64.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release Passthrough|Win32.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release Static|Win32.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release Static|Win32.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release Static|x64.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release_CLR|Win32.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release_CLR|x64.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release_Mono|Win32.Build.0 = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release_Mono|x64.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug DLL|Win32.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug Static|Win32.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug Static|x64.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release DirectSound|Win32.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release DLL|Win32.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release DLL|Win32.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release DLL|x64.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release Passthrough|Win32.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release Static|Win32.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release Static|Win32.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release Static|x64.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release_CLR|Win32.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release_CLR|x64.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release_Mono|Win32.Build.0 = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release_Mono|x64.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug DLL|Win32.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug Static|Win32.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug Static|x64.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release DirectSound|Win32.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release DLL|Win32.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release DLL|Win32.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release DLL|x64.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release Passthrough|Win32.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release Static|Win32.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release Static|Win32.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release Static|x64.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release_CLR|Win32.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release_CLR|x64.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release_Mono|Win32.Build.0 = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release_Mono|x64.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug DLL|Win32.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug Static|Win32.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug Static|x64.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release DirectSound|Win32.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release DLL|Win32.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release DLL|Win32.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release DLL|x64.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release Passthrough|Win32.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release Static|Win32.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release Static|Win32.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release Static|x64.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release_CLR|Win32.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release_CLR|x64.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release_Mono|Win32.Build.0 = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release_Mono|x64.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Mixed Platforms.Build.0 = Release|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 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug DirectSound|Mixed Platforms.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug DirectSound|Win32.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug DirectSound|Win32.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug DirectSound|x64.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug DLL|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug DLL|Mixed Platforms.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug DLL|x64.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug MS-LDAP|Win32.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug MS-LDAP|Win32.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug MS-LDAP|x64.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug Passthrough|Mixed Platforms.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug Passthrough|Win32.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug Passthrough|Win32.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug Passthrough|x64.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug Static|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug Static|Mixed Platforms.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug Static|Win32.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug Static|Win32.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug Static|x64.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug_CLR|Mixed Platforms.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug_CLR|Win32.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug_CLR|Win32.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug_CLR|x64.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug_Mono|Mixed Platforms.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug_Mono|Win32.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug_Mono|Win32.Build.0 = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug_Mono|x64.ActiveCfg = Debug DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release DirectSound|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release DirectSound|Mixed Platforms.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release DirectSound|Win32.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release DirectSound|Win32.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release DirectSound|x64.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release DLL|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release DLL|Mixed Platforms.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release DLL|Win32.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release DLL|x64.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release MS-LDAP|Mixed Platforms.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release MS-LDAP|Win32.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release MS-LDAP|Win32.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release MS-LDAP|x64.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release Passthrough|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release Passthrough|Mixed Platforms.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release Passthrough|Win32.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release Passthrough|Win32.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release Passthrough|x64.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release Static|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release Static|Mixed Platforms.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release Static|Win32.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release Static|Win32.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release Static|x64.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release_CLR|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release_CLR|Mixed Platforms.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release_CLR|Win32.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release_CLR|Win32.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release_CLR|x64.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release_Mono|Mixed Platforms.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release_Mono|Mixed Platforms.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release_Mono|Win32.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release_Mono|Win32.Build.0 = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release_Mono|x64.ActiveCfg = Release DLL|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug DirectSound|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug DirectSound|Win32.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug DirectSound|Win32.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug DirectSound|x64.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug DLL|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug DLL|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug DLL|Win32.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug DLL|Win32.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug DLL|x64.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug MS-LDAP|Win32.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug MS-LDAP|Win32.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug MS-LDAP|x64.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug Passthrough|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug Passthrough|Win32.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug Passthrough|Win32.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug Passthrough|x64.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug Static|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug Static|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug Static|Win32.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug Static|Win32.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug Static|x64.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug_CLR|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug_CLR|Win32.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug_CLR|Win32.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug_CLR|x64.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug_Mono|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug_Mono|Win32.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug_Mono|Win32.Build.0 = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug_Mono|x64.ActiveCfg = Debug Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release DirectSound|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release DirectSound|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release DirectSound|Win32.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release DirectSound|Win32.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release DirectSound|x64.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release DLL|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release DLL|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release DLL|Win32.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release DLL|Win32.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release DLL|x64.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release MS-LDAP|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release MS-LDAP|Win32.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release MS-LDAP|Win32.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release MS-LDAP|x64.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release Passthrough|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release Passthrough|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release Passthrough|Win32.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release Passthrough|Win32.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release Passthrough|x64.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release Static|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release Static|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release Static|Win32.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release Static|Win32.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release Static|x64.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release_CLR|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release_CLR|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release_CLR|Win32.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release_CLR|Win32.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release_CLR|x64.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release_Mono|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release_Mono|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release_Mono|Win32.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release_Mono|Win32.Build.0 = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release_Mono|x64.ActiveCfg = Release Passthrough|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug DLL|Win32.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug Static|Win32.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug Static|x64.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release DirectSound|Win32.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release DLL|Win32.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release DLL|Win32.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release DLL|x64.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release Passthrough|Win32.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release Static|Win32.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release Static|Win32.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release Static|x64.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release_CLR|Win32.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release_CLR|x64.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release_Mono|Win32.Build.0 = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release_Mono|x64.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug DLL|Win32.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug Static|Win32.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug Static|x64.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release DirectSound|Win32.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release DLL|Win32.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release DLL|Win32.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release DLL|x64.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release Passthrough|Win32.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release Static|Win32.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release Static|Win32.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release Static|x64.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release_CLR|Win32.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release_CLR|x64.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release_Mono|Win32.Build.0 = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release_Mono|x64.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug DLL|Win32.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug Static|Win32.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug Static|x64.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release DirectSound|Win32.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release DLL|Win32.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release DLL|Win32.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release DLL|x64.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release Passthrough|Win32.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release Static|Win32.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release Static|Win32.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release Static|x64.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release_CLR|Win32.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release_CLR|x64.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release_Mono|Win32.Build.0 = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release_Mono|x64.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug DLL|Win32.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug Static|Win32.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug Static|x64.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release DirectSound|Win32.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release DLL|Win32.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release DLL|Win32.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release DLL|x64.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release Passthrough|Win32.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release Static|Win32.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release Static|Win32.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release Static|x64.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release_CLR|Win32.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release_CLR|x64.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release_Mono|Win32.Build.0 = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release_Mono|x64.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug DLL|Win32.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug Static|Win32.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug Static|x64.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release DirectSound|Win32.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release DLL|Win32.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release DLL|Win32.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release DLL|x64.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release Passthrough|Win32.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release Static|Win32.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release Static|Win32.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release Static|x64.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release_CLR|Win32.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release_CLR|x64.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release_Mono|Win32.Build.0 = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release_Mono|x64.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug DLL|Win32.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug Static|Win32.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug Static|x64.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release DirectSound|Win32.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release DLL|Win32.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release DLL|Win32.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release DLL|x64.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release Passthrough|Win32.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release Static|Win32.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release Static|Win32.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release Static|x64.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release_CLR|Win32.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release_CLR|x64.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release_Mono|Win32.Build.0 = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release_Mono|x64.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug DLL|Win32.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug Static|Win32.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug Static|x64.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release DirectSound|Win32.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release DLL|Win32.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release DLL|Win32.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release DLL|x64.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release Passthrough|Win32.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release Static|Win32.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release Static|Win32.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release Static|x64.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release_CLR|Win32.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release_CLR|x64.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release_Mono|Win32.Build.0 = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release_Mono|x64.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug DLL|Win32.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug Static|Win32.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug Static|x64.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release DirectSound|Win32.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release DLL|Win32.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release DLL|Win32.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release DLL|x64.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release Passthrough|Win32.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release Static|Win32.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release Static|Win32.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release Static|x64.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release_CLR|Win32.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release_CLR|x64.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release_Mono|Win32.Build.0 = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release_Mono|x64.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DirectSound|Mixed Platforms.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DirectSound|Win32.ActiveCfg = Debug DirectSound|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DirectSound|Win32.Build.0 = Debug DirectSound|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DirectSound|x64.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DirectSound|x64.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DLL|Mixed Platforms.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DLL|Mixed Platforms.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DLL|Win32.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DLL|x64.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug DLL|x64.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug MS-LDAP|Win32.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug MS-LDAP|x64.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug MS-LDAP|x64.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug Passthrough|Mixed Platforms.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug Passthrough|Win32.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug Passthrough|x64.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug Passthrough|x64.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug Static|Mixed Platforms.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug Static|Mixed Platforms.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug Static|Win32.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug Static|x64.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug Static|x64.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug_CLR|Mixed Platforms.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug_CLR|Win32.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug_CLR|x64.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug_CLR|x64.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug_Mono|Mixed Platforms.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug_Mono|Win32.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug_Mono|x64.ActiveCfg = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug_Mono|x64.Build.0 = Debug DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Mixed Platforms.Build.0 = Debug|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|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DirectSound|Mixed Platforms.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DirectSound|Mixed Platforms.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DirectSound|Win32.ActiveCfg = Release DirectSound|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DirectSound|Win32.Build.0 = Release DirectSound|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DirectSound|x64.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DirectSound|x64.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DLL|Mixed Platforms.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DLL|Mixed Platforms.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DLL|Win32.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DLL|x64.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release DLL|x64.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release MS-LDAP|Mixed Platforms.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release MS-LDAP|Win32.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release MS-LDAP|x64.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release MS-LDAP|x64.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release Passthrough|Mixed Platforms.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release Passthrough|Mixed Platforms.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release Passthrough|Win32.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release Passthrough|x64.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release Passthrough|x64.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release Static|Mixed Platforms.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release Static|Mixed Platforms.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release Static|Win32.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release Static|x64.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release Static|x64.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release_CLR|Mixed Platforms.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release_CLR|Mixed Platforms.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release_CLR|Win32.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release_CLR|x64.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release_CLR|x64.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release_Mono|Mixed Platforms.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release_Mono|Mixed Platforms.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release_Mono|Win32.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release_Mono|x64.ActiveCfg = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release_Mono|x64.Build.0 = Release DirectSound|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug DLL|Win32.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug Static|Win32.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug Static|x64.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release DirectSound|Win32.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release DLL|Win32.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release DLL|Win32.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release DLL|x64.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release Passthrough|Win32.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release Static|Win32.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release Static|Win32.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release Static|x64.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release_CLR|Win32.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release_CLR|x64.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release_Mono|Win32.Build.0 = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release_Mono|x64.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug DirectSound|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug DirectSound|Win32.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug DirectSound|Win32.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug DirectSound|x64.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug DLL|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug DLL|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug DLL|Win32.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug DLL|Win32.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug DLL|x64.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug MS-LDAP|Win32.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug MS-LDAP|Win32.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug MS-LDAP|x64.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug Passthrough|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug Passthrough|Win32.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug Passthrough|Win32.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug Passthrough|x64.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug Static|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug Static|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug Static|Win32.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug Static|Win32.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug Static|x64.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug_CLR|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug_CLR|Win32.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug_CLR|Win32.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug_CLR|x64.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug_Mono|Mixed Platforms.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug_Mono|Win32.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug_Mono|Win32.Build.0 = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug_Mono|x64.ActiveCfg = Debug Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release DirectSound|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release DirectSound|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release DirectSound|Win32.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release DirectSound|Win32.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release DirectSound|x64.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release DLL|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release DLL|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release DLL|Win32.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release DLL|Win32.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release DLL|x64.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release MS-LDAP|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release MS-LDAP|Win32.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release MS-LDAP|Win32.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release MS-LDAP|x64.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release Passthrough|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release Passthrough|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release Passthrough|Win32.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release Passthrough|Win32.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release Passthrough|x64.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release Static|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release Static|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release Static|Win32.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release Static|Win32.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release Static|x64.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release_CLR|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release_CLR|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release_CLR|Win32.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release_CLR|Win32.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release_CLR|x64.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release_Mono|Mixed Platforms.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release_Mono|Mixed Platforms.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release_Mono|Win32.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release_Mono|Win32.Build.0 = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release_Mono|x64.ActiveCfg = Release Passthrough|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug DLL|Win32.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug Static|Win32.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug Static|x64.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release DirectSound|Win32.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release DLL|Win32.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release DLL|Win32.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release DLL|x64.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release Passthrough|Win32.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release Static|Win32.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release Static|Win32.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release Static|x64.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release_CLR|Win32.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release_CLR|x64.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release_Mono|Win32.Build.0 = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release_Mono|x64.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug DLL|Win32.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug Static|Win32.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug Static|x64.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release DirectSound|Win32.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release DLL|Win32.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release DLL|Win32.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release DLL|x64.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release Passthrough|Win32.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release Static|Win32.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release Static|Win32.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release Static|x64.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release_CLR|Win32.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release_CLR|x64.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release_Mono|Win32.Build.0 = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release_Mono|x64.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug DLL|Win32.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug Static|Win32.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug Static|x64.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release DirectSound|Win32.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release DLL|Win32.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release DLL|Win32.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release DLL|x64.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release Passthrough|Win32.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release Static|Win32.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release Static|Win32.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release Static|x64.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release_CLR|Win32.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release_CLR|x64.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release_Mono|Win32.Build.0 = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release_Mono|x64.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug DLL|Win32.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug Static|Win32.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug Static|x64.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|Win32.Build.0 = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Debug|x64.ActiveCfg = Debug|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release DirectSound|Win32.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release DLL|Win32.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release DLL|Win32.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release DLL|x64.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release Passthrough|Win32.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release Static|Win32.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release Static|Win32.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release Static|x64.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release_CLR|Win32.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release_CLR|x64.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release_Mono|Win32.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release_Mono|x64.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Mixed Platforms.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Win32.ActiveCfg = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|Win32.Build.0 = Release|Win32 + {AA91F0AC-6562-435E-814C-5C94689FEFA2}.Release|x64.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug DLL|Win32.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug Static|Win32.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug Static|x64.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Win32.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|Win32.Build.0 = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Debug|x64.ActiveCfg = Debug|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release DirectSound|Win32.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release DLL|Win32.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release DLL|Win32.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release DLL|x64.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release Passthrough|Win32.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release Static|Win32.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release Static|Win32.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release Static|x64.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release_CLR|Win32.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release_CLR|x64.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release_Mono|Win32.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release_Mono|x64.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Mixed Platforms.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Win32.ActiveCfg = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|Win32.Build.0 = Release|Win32 + {829A9309-3B94-43C0-846B-7EC9D6D35F8B}.Release|x64.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug DLL|Win32.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug Static|Win32.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug Static|x64.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Win32.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|Win32.Build.0 = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Debug|x64.ActiveCfg = Debug|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release DirectSound|Win32.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release DLL|Win32.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release DLL|Win32.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release DLL|x64.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release Passthrough|Win32.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release Static|Win32.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release Static|Win32.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release Static|x64.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release_CLR|Win32.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release_CLR|x64.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release_Mono|Win32.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release_Mono|x64.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Mixed Platforms.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Win32.ActiveCfg = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|Win32.Build.0 = Release|Win32 + {EB751DC4-87BD-4766-B78D-DFB64BA9F988}.Release|x64.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug DLL|Win32.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug Static|Win32.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug Static|x64.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Win32.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|Win32.Build.0 = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Debug|x64.ActiveCfg = Debug|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release DirectSound|Win32.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release DLL|Win32.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release DLL|Win32.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release DLL|x64.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release Passthrough|Win32.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release Static|Win32.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release Static|Win32.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release Static|x64.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release_CLR|Win32.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release_CLR|x64.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release_Mono|Win32.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release_Mono|x64.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Mixed Platforms.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Win32.ActiveCfg = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|Win32.Build.0 = Release|Win32 + {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}.Release|x64.ActiveCfg = Release|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug DirectSound|Mixed Platforms.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug DirectSound|Win32.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug DirectSound|Win32.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug DirectSound|x64.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug DLL|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug DLL|Mixed Platforms.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug DLL|Win32.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug DLL|Win32.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug DLL|x64.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug MS-LDAP|Win32.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug MS-LDAP|Win32.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug MS-LDAP|x64.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug Passthrough|Mixed Platforms.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug Passthrough|Win32.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug Passthrough|Win32.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug Passthrough|x64.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug Static|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug Static|Mixed Platforms.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug Static|Win32.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug Static|Win32.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug Static|x64.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug_CLR|Mixed Platforms.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug_CLR|Win32.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug_CLR|Win32.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug_CLR|x64.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug_Mono|Mixed Platforms.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug_Mono|Win32.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug_Mono|Win32.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug_Mono|x64.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Win32.ActiveCfg = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|Win32.Build.0 = Debug Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Debug|x64.ActiveCfg = Debug|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release DirectSound|Mixed Platforms.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release DirectSound|Mixed Platforms.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release DirectSound|Win32.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release DirectSound|Win32.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release DirectSound|x64.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release DLL|Mixed Platforms.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release DLL|Mixed Platforms.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release DLL|Win32.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release DLL|Win32.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release DLL|x64.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release MS-LDAP|Mixed Platforms.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release MS-LDAP|Win32.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release MS-LDAP|Win32.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release MS-LDAP|x64.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release Passthrough|Mixed Platforms.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release Passthrough|Mixed Platforms.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release Passthrough|Win32.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release Passthrough|Win32.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release Passthrough|x64.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release Static|Mixed Platforms.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release Static|Mixed Platforms.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release Static|Win32.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release Static|Win32.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release Static|x64.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release_CLR|Mixed Platforms.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release_CLR|Mixed Platforms.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release_CLR|Win32.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release_CLR|Win32.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release_CLR|x64.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release_Mono|Mixed Platforms.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release_Mono|Mixed Platforms.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release_Mono|Win32.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release_Mono|Win32.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release_Mono|x64.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Mixed Platforms.Build.0 = Release|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Win32.ActiveCfg = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|Win32.Build.0 = Release Static|Win32 + {CF78E84D-8456-44F2-8197-0E0E88D30A3C}.Release|x64.ActiveCfg = Release|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug DirectSound|Mixed Platforms.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug DirectSound|Win32.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug DirectSound|Win32.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug DirectSound|x64.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug DLL|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug DLL|Mixed Platforms.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug DLL|Win32.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug DLL|Win32.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug DLL|x64.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug MS-LDAP|Win32.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug MS-LDAP|Win32.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug MS-LDAP|x64.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug Passthrough|Mixed Platforms.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug Passthrough|Win32.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug Passthrough|Win32.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug Passthrough|x64.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug Static|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug Static|Mixed Platforms.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug Static|Win32.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug Static|Win32.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug Static|x64.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug_CLR|Mixed Platforms.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug_CLR|Win32.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug_CLR|Win32.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug_CLR|x64.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug_Mono|Mixed Platforms.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug_Mono|Win32.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug_Mono|Win32.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug_Mono|x64.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Win32.ActiveCfg = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|Win32.Build.0 = Debug Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Debug|x64.ActiveCfg = Debug|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release DirectSound|Mixed Platforms.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release DirectSound|Mixed Platforms.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release DirectSound|Win32.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release DirectSound|Win32.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release DirectSound|x64.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release DLL|Mixed Platforms.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release DLL|Mixed Platforms.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release DLL|Win32.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release DLL|Win32.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release DLL|x64.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release MS-LDAP|Mixed Platforms.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release MS-LDAP|Win32.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release MS-LDAP|Win32.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release MS-LDAP|x64.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release Passthrough|Mixed Platforms.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release Passthrough|Mixed Platforms.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release Passthrough|Win32.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release Passthrough|Win32.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release Passthrough|x64.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release Static|Mixed Platforms.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release Static|Mixed Platforms.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release Static|Win32.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release Static|Win32.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release Static|x64.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release_CLR|Mixed Platforms.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release_CLR|Mixed Platforms.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release_CLR|Win32.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release_CLR|Win32.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release_CLR|x64.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release_Mono|Mixed Platforms.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release_Mono|Mixed Platforms.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release_Mono|Win32.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release_Mono|Win32.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release_Mono|x64.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Mixed Platforms.Build.0 = Release|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Win32.ActiveCfg = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|Win32.Build.0 = Release Static|Win32 + {819C7242-6184-46FE-BC7B-C7E25C0581EE}.Release|x64.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug DLL|Win32.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug Static|Win32.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug Static|x64.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Win32.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|Win32.Build.0 = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Debug|x64.ActiveCfg = Debug|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release DirectSound|Win32.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release DLL|Win32.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release DLL|Win32.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release DLL|x64.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release Passthrough|Win32.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release Static|Win32.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release Static|Win32.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release Static|x64.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release_CLR|Win32.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release_CLR|x64.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release_Mono|Win32.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release_Mono|x64.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Mixed Platforms.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Win32.ActiveCfg = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|Win32.Build.0 = Release|Win32 + {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}.Release|x64.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug DLL|Win32.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug Static|Win32.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug Static|x64.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Win32.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|Win32.Build.0 = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Debug|x64.ActiveCfg = Debug|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release DirectSound|Win32.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release DLL|Win32.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release DLL|Win32.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release DLL|x64.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release Passthrough|Win32.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release Static|Win32.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release Static|Win32.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release Static|x64.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release_CLR|Win32.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release_CLR|x64.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release_Mono|Win32.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release_Mono|x64.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Mixed Platforms.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Win32.ActiveCfg = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|Win32.Build.0 = Release|Win32 + {A407B661-D7DC-4E30-B268-FFF3296C35E6}.Release|x64.ActiveCfg = Release|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug DirectSound|Mixed Platforms.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug DirectSound|Win32.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug DirectSound|Win32.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug DirectSound|x64.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug DLL|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug DLL|Mixed Platforms.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug DLL|Win32.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug DLL|Win32.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug DLL|x64.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug MS-LDAP|Win32.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug MS-LDAP|Win32.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug MS-LDAP|x64.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug Passthrough|Mixed Platforms.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug Passthrough|Win32.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug Passthrough|Win32.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug Passthrough|x64.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug Static|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug Static|Mixed Platforms.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug Static|Win32.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug Static|Win32.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug Static|x64.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug_CLR|Mixed Platforms.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug_CLR|Win32.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug_CLR|Win32.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug_CLR|x64.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug_Mono|Mixed Platforms.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug_Mono|Win32.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug_Mono|Win32.Build.0 = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug_Mono|x64.ActiveCfg = Debug Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|Win32.Build.0 = Debug|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Debug|x64.ActiveCfg = Debug|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release DirectSound|Mixed Platforms.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release DirectSound|Mixed Platforms.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release DirectSound|Win32.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release DirectSound|Win32.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release DirectSound|x64.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release DLL|Mixed Platforms.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release DLL|Mixed Platforms.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release DLL|Win32.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release DLL|Win32.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release DLL|x64.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release MS-LDAP|Mixed Platforms.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release MS-LDAP|Win32.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release MS-LDAP|Win32.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release MS-LDAP|x64.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release Passthrough|Mixed Platforms.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release Passthrough|Mixed Platforms.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release Passthrough|Win32.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release Passthrough|Win32.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release Passthrough|x64.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release Static|Mixed Platforms.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release Static|Mixed Platforms.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release Static|Win32.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release Static|Win32.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release Static|x64.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release_CLR|Mixed Platforms.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release_CLR|Mixed Platforms.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release_CLR|Win32.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release_CLR|Win32.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release_CLR|x64.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release_Mono|Mixed Platforms.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release_Mono|Mixed Platforms.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release_Mono|Win32.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release_Mono|Win32.Build.0 = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release_Mono|x64.ActiveCfg = Release Static|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Mixed Platforms.Build.0 = Release|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Win32.ActiveCfg = Release|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|Win32.Build.0 = Release|Win32 + {E7116F50-2B10-472F-92BD-C8667AA9C1AE}.Release|x64.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug DLL|Win32.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug Static|Win32.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug Static|x64.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release DirectSound|Win32.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release DLL|Win32.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release DLL|Win32.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release DLL|x64.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release Passthrough|Win32.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release Static|Win32.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release Static|Win32.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release Static|x64.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release_CLR|Win32.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release_CLR|x64.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release_Mono|Win32.Build.0 = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release_Mono|x64.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug Static|Win32.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug Static|x64.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release DirectSound|Win32.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release DLL|Win32.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release DLL|x64.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release Passthrough|Win32.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release Static|Win32.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release Static|Win32.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release Static|x64.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release_CLR|Win32.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release_CLR|x64.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release_Mono|Win32.Build.0 = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release_Mono|x64.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug DLL|Win32.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug Static|Win32.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug Static|x64.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release DirectSound|Win32.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release DLL|Win32.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release DLL|Win32.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release DLL|x64.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release Passthrough|Win32.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release Static|Win32.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release Static|Win32.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release Static|x64.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release_CLR|Win32.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release_CLR|x64.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release_Mono|Win32.Build.0 = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release_Mono|x64.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug DLL|Win32.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug Static|Win32.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug Static|x64.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release DirectSound|Win32.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release DLL|Win32.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release DLL|Win32.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release DLL|x64.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release Passthrough|Win32.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release Static|Win32.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release Static|Win32.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release Static|x64.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release_CLR|Win32.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release_CLR|x64.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release_Mono|Win32.Build.0 = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release_Mono|x64.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug DLL|Win32.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug Static|Win32.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug Static|x64.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release DirectSound|Win32.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release DLL|Win32.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release DLL|Win32.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release DLL|x64.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release Passthrough|Win32.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release Static|Win32.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release Static|Win32.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release Static|x64.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release_CLR|Win32.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release_CLR|x64.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release_Mono|Win32.Build.0 = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release_Mono|x64.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug DLL|Win32.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug Static|Win32.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug Static|x64.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release DirectSound|Win32.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release DLL|Win32.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release DLL|Win32.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release DLL|x64.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release Passthrough|Win32.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release Static|Win32.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release Static|Win32.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release Static|x64.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release_CLR|Win32.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release_CLR|x64.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release_Mono|Win32.Build.0 = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release_Mono|x64.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug DLL|Win32.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug Static|Win32.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug Static|x64.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release DirectSound|Win32.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release DLL|Win32.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release DLL|Win32.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release DLL|x64.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release Passthrough|Win32.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release Static|Win32.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release Static|Win32.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release Static|x64.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release_CLR|Win32.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release_CLR|x64.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release_Mono|Win32.Build.0 = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release_Mono|x64.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug DLL|Win32.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug Static|Win32.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug Static|x64.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release DirectSound|Win32.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release DLL|Win32.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release DLL|Win32.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release DLL|x64.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release Passthrough|Win32.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release Static|Win32.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release Static|Win32.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release Static|x64.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release_CLR|Win32.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release_CLR|x64.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release_Mono|Win32.Build.0 = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release_Mono|x64.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug DLL|Win32.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug Static|Win32.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug Static|x64.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release DirectSound|Win32.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release DLL|Win32.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release DLL|Win32.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release DLL|x64.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release Passthrough|Win32.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release Static|Win32.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release Static|Win32.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release Static|x64.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release_CLR|Win32.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release_CLR|x64.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release_Mono|Win32.Build.0 = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release_Mono|x64.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {F6A33240-8F29-48BD-98F0-826995911799}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug DLL|Win32.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug Static|Win32.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug Static|x64.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release DirectSound|Win32.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release DLL|Win32.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release DLL|Win32.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release DLL|x64.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release Passthrough|Win32.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release Static|Win32.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release Static|Win32.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release Static|x64.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release_CLR|Win32.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release_CLR|x64.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release_Mono|Win32.Build.0 = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release_Mono|x64.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug DLL|Win32.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug Static|Win32.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug Static|x64.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release DirectSound|Win32.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release DLL|Win32.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release DLL|Win32.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release DLL|x64.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release Passthrough|Win32.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release Static|Win32.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release Static|Win32.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release Static|x64.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release_CLR|Win32.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release_CLR|x64.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release_Mono|Win32.Build.0 = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release_Mono|x64.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug Static|Win32.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug Static|x64.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release DirectSound|Win32.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release DLL|Win32.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release DLL|x64.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release Passthrough|Win32.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release Static|Win32.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release Static|Win32.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release Static|x64.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release_CLR|Win32.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release_CLR|x64.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release_Mono|Win32.Build.0 = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release_Mono|x64.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug DLL|Win32.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug Static|Win32.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug Static|x64.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release DirectSound|Win32.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release DLL|Win32.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release DLL|Win32.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release DLL|x64.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release Passthrough|Win32.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release Static|Win32.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release Static|Win32.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release Static|x64.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release_CLR|Win32.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release_CLR|x64.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release_Mono|Win32.Build.0 = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release_Mono|x64.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug DLL|Win32.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug Static|Win32.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug Static|x64.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release DirectSound|Win32.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release DLL|Win32.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release DLL|Win32.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release DLL|x64.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release Passthrough|Win32.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release Static|Win32.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release Static|Win32.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release Static|x64.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release_CLR|Win32.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release_CLR|x64.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release_Mono|Win32.Build.0 = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release_Mono|x64.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug DLL|Win32.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug Static|Win32.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug Static|x64.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Mixed Platforms.Build.0 = Debug|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|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release DirectSound|Win32.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release DLL|Win32.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release DLL|Win32.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release DLL|x64.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release Passthrough|Win32.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release Static|Win32.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release Static|Win32.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release Static|x64.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release_CLR|Win32.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release_CLR|x64.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release_Mono|Win32.Build.0 = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release_Mono|x64.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug DLL|Win32.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug Static|Win32.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug Static|x64.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Win32.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|Win32.Build.0 = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Debug|x64.ActiveCfg = Debug|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release DirectSound|Win32.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release DLL|Win32.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release DLL|Win32.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release DLL|x64.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release Passthrough|Win32.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release Static|Win32.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release Static|Win32.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release Static|x64.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release_CLR|Win32.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release_CLR|x64.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release_Mono|Win32.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release_Mono|x64.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Mixed Platforms.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Win32.ActiveCfg = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|Win32.Build.0 = Release|Win32 + {42B6C2E3-7D5F-4204-A1F6-C0376B86C315}.Release|x64.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug DLL|Win32.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug Static|Win32.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug Static|x64.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Debug|Mixed Platforms.Build.0 = Debug|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|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release DirectSound|Win32.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release DLL|Win32.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release DLL|Win32.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release DLL|x64.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release Passthrough|Win32.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release Static|Win32.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release Static|Win32.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release Static|x64.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release_CLR|Win32.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release_CLR|x64.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release_Mono|Win32.Build.0 = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release_Mono|x64.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {13DEECA0-BDD4-4744-A1A2-8EB0A44DF3D2}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug DLL|Win32.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug Static|Win32.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug Static|x64.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release DirectSound|Win32.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release DLL|Win32.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release DLL|Win32.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release DLL|x64.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release Passthrough|Win32.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release Static|Win32.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release Static|Win32.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release Static|x64.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release_CLR|Win32.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release_CLR|x64.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release_Mono|Win32.Build.0 = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release_Mono|x64.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E3246D17-E29B-4AB5-962A-C69B0C5837BB}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug DLL|Win32.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug Static|Win32.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug Static|x64.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release DirectSound|Win32.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release DLL|Win32.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release DLL|Win32.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release DLL|x64.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release Passthrough|Win32.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release Static|Win32.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release Static|Win32.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release Static|x64.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release_CLR|Win32.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release_CLR|x64.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release_Mono|Win32.Build.0 = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release_Mono|x64.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug DLL|Win32.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug Static|Win32.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug Static|x64.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release DirectSound|Win32.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release DLL|Win32.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release DLL|Win32.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release DLL|x64.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release Passthrough|Win32.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release Static|Win32.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release Static|Win32.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release Static|x64.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release_CLR|Win32.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release_CLR|x64.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release_Mono|Win32.Build.0 = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release_Mono|x64.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug Static|Win32.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug Static|x64.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release DirectSound|Win32.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release DLL|Win32.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release DLL|x64.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release Passthrough|Win32.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release Static|Win32.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release Static|Win32.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release Static|x64.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release_CLR|Win32.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release_CLR|x64.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release_Mono|Win32.Build.0 = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release_Mono|x64.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug DLL|Win32.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug Static|Win32.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug Static|x64.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release DirectSound|Win32.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release DLL|Win32.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release DLL|Win32.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release DLL|x64.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release Passthrough|Win32.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release Static|Win32.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release Static|Win32.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release Static|x64.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release_CLR|Win32.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release_CLR|x64.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release_Mono|Win32.Build.0 = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release_Mono|x64.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug DLL|Win32.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug Static|Win32.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug Static|x64.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release DirectSound|Win32.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release DLL|Win32.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release DLL|Win32.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release DLL|x64.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release Passthrough|Win32.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release Static|Win32.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release Static|Win32.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release Static|x64.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release_CLR|Win32.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release_CLR|x64.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release_Mono|Win32.Build.0 = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release_Mono|x64.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug DLL|Win32.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug Static|Win32.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug Static|x64.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release DirectSound|Win32.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release DLL|Win32.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release DLL|Win32.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release DLL|x64.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release Passthrough|Win32.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release Static|Win32.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release Static|Win32.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release Static|x64.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release_CLR|Win32.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release_CLR|x64.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release_Mono|Win32.Build.0 = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release_Mono|x64.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug DLL|Win32.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug Static|Win32.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug Static|x64.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release DirectSound|Win32.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release DLL|Win32.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release DLL|Win32.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release DLL|x64.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release Passthrough|Win32.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release Static|Win32.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release Static|Win32.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release Static|x64.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release_CLR|Win32.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release_CLR|x64.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release_Mono|Win32.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release_Mono|x64.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Mixed Platforms.Build.0 = Release|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 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug DLL|Win32.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug Static|Win32.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug Static|x64.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release DirectSound|Win32.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release DLL|Win32.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release DLL|Win32.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release DLL|x64.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release Passthrough|Win32.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release Static|Win32.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release Static|Win32.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release Static|x64.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release_CLR|Win32.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release_CLR|x64.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release_Mono|Win32.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release_Mono|x64.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release|Mixed Platforms.Build.0 = Release|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 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug DLL|Win32.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug Static|Win32.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug Static|x64.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release DirectSound|Win32.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release DLL|Win32.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release DLL|Win32.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release DLL|x64.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release Passthrough|Win32.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release Static|Win32.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release Static|Win32.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release Static|x64.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release_CLR|Win32.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release_CLR|x64.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release_Mono|Win32.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release_Mono|x64.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Mixed Platforms.Build.0 = Release|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 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug DLL|Win32.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug Static|Win32.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug Static|x64.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release DirectSound|Win32.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release DLL|Win32.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release DLL|Win32.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release DLL|x64.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release Passthrough|Win32.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release Static|Win32.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release Static|Win32.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release Static|x64.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release_CLR|Win32.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release_CLR|x64.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release_Mono|Win32.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release_Mono|x64.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug DLL|Win32.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug Static|Win32.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug Static|x64.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release DirectSound|Win32.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release DLL|Win32.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release DLL|Win32.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release DLL|x64.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release Passthrough|Win32.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release Static|Win32.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release Static|Win32.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release Static|x64.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release_CLR|Win32.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release_CLR|x64.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release_Mono|Win32.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release_Mono|x64.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug DLL|Win32.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug Static|Win32.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug Static|x64.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release DirectSound|Win32.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release DLL|Win32.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release DLL|Win32.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release DLL|x64.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release Passthrough|Win32.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release Static|Win32.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release Static|Win32.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release Static|x64.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release_CLR|Win32.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release_CLR|x64.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release_Mono|Win32.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release_Mono|x64.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug DLL|Win32.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug Static|Win32.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug Static|x64.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release DirectSound|Win32.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release DLL|Win32.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release DLL|Win32.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release DLL|x64.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release Passthrough|Win32.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release Static|Win32.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release Static|Win32.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release Static|x64.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release_CLR|Win32.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release_CLR|x64.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release_Mono|Win32.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release_Mono|x64.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Mixed Platforms.Build.0 = Release|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 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug DLL|Win32.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug Static|Win32.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug Static|x64.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release DirectSound|Win32.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release DLL|Win32.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release DLL|Win32.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release DLL|x64.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release Passthrough|Win32.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release Static|Win32.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release Static|Win32.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release Static|x64.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release_CLR|Win32.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release_CLR|x64.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release_Mono|Win32.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release_Mono|x64.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Mixed Platforms.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Win32.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x64.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug DLL|Win32.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug Static|Win32.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug Static|x64.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release DirectSound|Win32.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release DLL|Win32.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release DLL|Win32.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release DLL|x64.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release Passthrough|Win32.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release Static|Win32.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release Static|Win32.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release Static|x64.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release_CLR|Win32.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release_CLR|x64.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release_Mono|Win32.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release_Mono|x64.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug DLL|Win32.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug Static|Win32.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug Static|x64.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release DirectSound|Win32.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release DLL|Win32.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release DLL|Win32.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release DLL|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release Passthrough|Win32.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release Static|Win32.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release Static|Win32.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release Static|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release_CLR|Win32.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release_CLR|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release_Mono|Win32.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release_Mono|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Mixed Platforms.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug DLL|Win32.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug Static|Win32.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug Static|x64.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release DirectSound|Win32.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release DLL|Win32.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release DLL|Win32.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release DLL|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release Passthrough|Win32.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release Static|Win32.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release Static|Win32.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release Static|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release_CLR|Win32.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release_CLR|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release_Mono|Win32.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release_Mono|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Mixed Platforms.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Win32.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug DLL|Win32.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug Static|Win32.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug Static|x64.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release DirectSound|Win32.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release DLL|Win32.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release DLL|Win32.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release DLL|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release Passthrough|Win32.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release Static|Win32.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release Static|Win32.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release Static|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release_CLR|Win32.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release_CLR|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release_Mono|Win32.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release_Mono|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Mixed Platforms.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug DLL|Win32.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug Static|Win32.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug Static|x64.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release DirectSound|Win32.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release DLL|Win32.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release DLL|Win32.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release DLL|x64.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release Passthrough|Win32.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release Static|Win32.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release Static|Win32.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release Static|x64.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release_CLR|Win32.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release_CLR|x64.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release_Mono|Win32.Build.0 = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release_Mono|x64.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug DirectSound|Mixed Platforms.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug DirectSound|Win32.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug DirectSound|Win32.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug DirectSound|x64.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug DLL|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug DLL|Mixed Platforms.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug DLL|Win32.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug DLL|Win32.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug DLL|x64.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug MS-LDAP|Win32.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug MS-LDAP|Win32.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug MS-LDAP|x64.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug Passthrough|Mixed Platforms.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug Passthrough|Win32.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug Passthrough|Win32.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug Passthrough|x64.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug Static|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug Static|Mixed Platforms.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug Static|Win32.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug Static|Win32.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug Static|x64.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug_CLR|Mixed Platforms.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug_CLR|Win32.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug_CLR|Win32.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug_CLR|x64.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug_Mono|Mixed Platforms.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug_Mono|Win32.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug_Mono|Win32.Build.0 = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug_Mono|x64.ActiveCfg = Debug Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.ActiveCfg = Debug|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.Build.0 = Debug|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64.ActiveCfg = Debug|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release DirectSound|Mixed Platforms.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release DirectSound|Mixed Platforms.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release DirectSound|Win32.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release DirectSound|Win32.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release DirectSound|x64.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release DLL|Mixed Platforms.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release DLL|Mixed Platforms.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release DLL|Win32.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release DLL|Win32.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release DLL|x64.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release MS-LDAP|Mixed Platforms.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release MS-LDAP|Win32.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release MS-LDAP|Win32.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release MS-LDAP|x64.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release Passthrough|Mixed Platforms.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release Passthrough|Mixed Platforms.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release Passthrough|Win32.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release Passthrough|Win32.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release Passthrough|x64.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release Static|Mixed Platforms.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release Static|Mixed Platforms.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release Static|Win32.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release Static|Win32.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release Static|x64.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release_CLR|Mixed Platforms.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release_CLR|Mixed Platforms.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release_CLR|Win32.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release_CLR|Win32.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release_CLR|x64.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release_Mono|Mixed Platforms.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release_Mono|Mixed Platforms.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release_Mono|Win32.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release_Mono|Win32.Build.0 = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release_Mono|x64.ActiveCfg = Release Static|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Mixed Platforms.Build.0 = Release|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.ActiveCfg = Release|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.Build.0 = Release|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug Static|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug Static|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release DirectSound|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release DLL|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release DLL|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release Passthrough|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release Static|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release Static|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release Static|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release_CLR|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release_CLR|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release_Mono|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release_Mono|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Mixed Platforms.Build.0 = Release|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-82AB2086DB1B}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug Static|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug Static|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release DirectSound|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release DLL|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release DLL|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release Passthrough|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release Static|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release Static|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release Static|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release_CLR|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release_CLR|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release_Mono|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release_Mono|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Mixed Platforms.Build.0 = Release|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-82AB3086DB1B}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug Static|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug Static|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release DirectSound|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release DLL|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release DLL|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release Passthrough|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release Static|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release Static|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release Static|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release_CLR|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release_CLR|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release_Mono|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release_Mono|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Mixed Platforms.Build.0 = Release|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-82AB1086DB1B}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug Static|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug Static|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release DirectSound|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release DLL|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release DLL|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release Passthrough|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release Static|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release Static|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release Static|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release_CLR|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release_CLR|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release_Mono|Win32.Build.0 = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release_Mono|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Mixed Platforms.Build.0 = Release|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 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug DLL|Win32.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug Static|Win32.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug Static|x64.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release DirectSound|Win32.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release DLL|Win32.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release DLL|Win32.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release DLL|x64.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release Passthrough|Win32.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release Static|Win32.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release Static|Win32.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release Static|x64.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release_CLR|Win32.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release_CLR|x64.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release_Mono|Win32.Build.0 = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release_Mono|x64.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug Static|Win32.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug Static|x64.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release DirectSound|Win32.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release DLL|Win32.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release DLL|x64.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release Passthrough|Win32.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release Static|Win32.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release Static|Win32.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release Static|x64.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release_CLR|Win32.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release_CLR|x64.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release_Mono|Win32.Build.0 = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release_Mono|x64.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug DLL|Win32.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug Static|Win32.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug Static|x64.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release DirectSound|Win32.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release DLL|Win32.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release DLL|Win32.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release DLL|x64.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release Passthrough|Win32.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release Static|Win32.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release Static|Win32.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release Static|x64.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release_CLR|Win32.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release_CLR|x64.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release_Mono|Win32.Build.0 = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release_Mono|x64.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug DLL|Win32.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug Static|Win32.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug Static|x64.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release DirectSound|Win32.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release DLL|Win32.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release DLL|Win32.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release DLL|x64.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release Passthrough|Win32.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release Static|Win32.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release Static|Win32.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release Static|x64.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release_CLR|Win32.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release_CLR|x64.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release_Mono|Win32.Build.0 = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release_Mono|x64.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug DLL|Win32.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug Static|Win32.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug Static|x64.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release DirectSound|Win32.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release DLL|Win32.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release DLL|Win32.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release DLL|x64.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release Passthrough|Win32.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release Static|Win32.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release Static|Win32.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release Static|x64.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release_CLR|Win32.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release_CLR|x64.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release_Mono|Win32.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release_Mono|x64.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug DLL|Win32.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug Static|Win32.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug Static|x64.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release DirectSound|Win32.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release DLL|Win32.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release DLL|Win32.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release DLL|x64.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release Passthrough|Win32.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release Static|Win32.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release Static|Win32.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release Static|x64.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release_CLR|Win32.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release_CLR|x64.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release_Mono|Win32.Build.0 = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release_Mono|x64.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B6A9FB7A-1CC4-442B-812D-EC33E4E4A36E}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug DirectSound|Mixed Platforms.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug DirectSound|Win32.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug DirectSound|Win32.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug DirectSound|x64.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug DLL|Mixed Platforms.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug DLL|Mixed Platforms.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug DLL|Win32.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug DLL|Win32.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug DLL|x64.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug MS-LDAP|Win32.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug MS-LDAP|Win32.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug MS-LDAP|x64.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug Passthrough|Mixed Platforms.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug Passthrough|Win32.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug Passthrough|Win32.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug Passthrough|x64.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug Static|Mixed Platforms.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug Static|Mixed Platforms.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug Static|Win32.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug Static|Win32.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug Static|x64.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug_CLR|Mixed Platforms.Build.0 = Debug_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug_CLR|Win32.ActiveCfg = Debug_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug_CLR|Win32.Build.0 = Debug_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug_CLR|x64.ActiveCfg = Debug_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug_Mono|Mixed Platforms.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug_Mono|Win32.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug_Mono|Win32.Build.0 = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug_Mono|x64.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Mixed Platforms.ActiveCfg = Debug_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Debug|Mixed Platforms.Build.0 = Debug_Mono|Win32 + {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_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release DirectSound|Mixed Platforms.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release DirectSound|Mixed Platforms.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release DirectSound|Win32.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release DirectSound|Win32.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release DirectSound|x64.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release DLL|Mixed Platforms.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release DLL|Mixed Platforms.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release DLL|Win32.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release DLL|Win32.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release DLL|x64.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release MS-LDAP|Mixed Platforms.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release MS-LDAP|Win32.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release MS-LDAP|Win32.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release MS-LDAP|x64.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release Passthrough|Mixed Platforms.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release Passthrough|Mixed Platforms.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release Passthrough|Win32.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release Passthrough|Win32.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release Passthrough|x64.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release Static|Mixed Platforms.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release Static|Mixed Platforms.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release Static|Win32.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release Static|Win32.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release Static|x64.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release_CLR|Mixed Platforms.ActiveCfg = Release_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release_CLR|Mixed Platforms.Build.0 = Release_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release_CLR|Win32.ActiveCfg = Release_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release_CLR|Win32.Build.0 = Release_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release_CLR|x64.ActiveCfg = Release_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release_Mono|Mixed Platforms.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release_Mono|Mixed Platforms.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release_Mono|Win32.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release_Mono|Win32.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release_Mono|x64.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Mixed Platforms.ActiveCfg = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Mixed Platforms.Build.0 = Release_Mono|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|Win32.ActiveCfg = Release_CLR|Win32 + {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}.Release|x64.ActiveCfg = Release_Mono|Win32 + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug DirectSound|Win32.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug DirectSound|x64.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug DLL|Mixed Platforms.Build.0 = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug DLL|Win32.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug DLL|x64.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug MS-LDAP|x64.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug Passthrough|Win32.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug Passthrough|x64.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug Static|Mixed Platforms.Build.0 = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug Static|Win32.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug Static|x64.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug_CLR|Win32.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug_CLR|x64.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug_Mono|Win32.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug_Mono|x64.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Mixed Platforms.Build.0 = Debug|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|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release DirectSound|Mixed Platforms.Build.0 = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release DirectSound|Win32.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release DirectSound|x64.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release DLL|Mixed Platforms.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release DLL|Mixed Platforms.Build.0 = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release DLL|Win32.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release DLL|x64.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release MS-LDAP|Win32.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release MS-LDAP|x64.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release Passthrough|Mixed Platforms.Build.0 = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release Passthrough|Win32.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release Passthrough|x64.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release Static|Mixed Platforms.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release Static|Mixed Platforms.Build.0 = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release Static|Win32.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release Static|x64.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release_CLR|Mixed Platforms.Build.0 = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release_CLR|Win32.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release_CLR|x64.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release_Mono|Mixed Platforms.Build.0 = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release_Mono|Win32.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release_Mono|x64.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Mixed Platforms.Build.0 = Release|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|Any CPU + {E796E337-DE78-4303-8614-9A590862EE95}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug DLL|Win32.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug Static|Win32.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug Static|x64.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Debug|Mixed Platforms.Build.0 = Debug|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}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release DirectSound|Win32.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release DLL|Win32.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release DLL|Win32.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release DLL|x64.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release Passthrough|Win32.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release Static|Win32.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release Static|Win32.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release Static|x64.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release_CLR|Win32.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release_CLR|x64.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release_Mono|Win32.Build.0 = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release_Mono|x64.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E796E337-DE78-4303-8614-9A590862EE95}.Release|Mixed Platforms.Build.0 = Release|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 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug DLL|Win32.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug Static|Win32.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug Static|x64.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release DirectSound|Win32.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release DLL|Win32.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release DLL|Win32.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release DLL|x64.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release Passthrough|Win32.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release Static|Win32.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release Static|Win32.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release Static|x64.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release_CLR|Win32.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release_CLR|x64.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release_Mono|Win32.Build.0 = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release_Mono|x64.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {419C8F80-D858-4B48-A25C-AF4007608137}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug DLL|Win32.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug Static|Win32.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug Static|x64.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release DirectSound|Win32.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release DLL|Win32.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release DLL|Win32.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release DLL|x64.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release Passthrough|Win32.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release Static|Win32.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release Static|Win32.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release Static|x64.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release_CLR|Win32.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release_CLR|x64.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release_Mono|Win32.Build.0 = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release_Mono|x64.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B3F424EC-3D8F-417C-B244-3919D5E1A577}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug DLL|Win32.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug Static|Win32.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug Static|x64.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release DirectSound|Win32.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release DLL|Win32.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release DLL|Win32.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release DLL|x64.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release Passthrough|Win32.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release Static|Win32.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release Static|Win32.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release Static|x64.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release_CLR|Win32.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release_CLR|x64.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release_Mono|Win32.Build.0 = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release_Mono|x64.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {14E4A972-9CFB-436D-B0A5-4943F3F80D47}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug DLL|Win32.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug Static|Win32.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug Static|x64.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release DirectSound|Win32.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release DLL|Win32.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release DLL|Win32.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release DLL|x64.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release Passthrough|Win32.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release Static|Win32.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release Static|Win32.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release Static|x64.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release_CLR|Win32.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release_CLR|x64.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release_Mono|Win32.Build.0 = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release_Mono|x64.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug DLL|Win32.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug Static|Win32.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug Static|x64.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release DirectSound|Win32.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release DLL|Win32.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release DLL|Win32.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release DLL|x64.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release Passthrough|Win32.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release Static|Win32.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release Static|Win32.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release Static|x64.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release_CLR|Win32.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release_CLR|x64.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release_Mono|Win32.Build.0 = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release_Mono|x64.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0B6C905B-142E-4999-B39D-92FF7951E921}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug DLL|Win32.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug Static|Win32.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug Static|x64.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release DirectSound|Win32.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release DLL|Win32.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release DLL|Win32.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release DLL|x64.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release Passthrough|Win32.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release Static|Win32.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release Static|Win32.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release Static|x64.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release_CLR|Win32.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release_CLR|x64.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release_Mono|Win32.Build.0 = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release_Mono|x64.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug DirectSound|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug DirectSound|Mixed Platforms.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug DirectSound|Win32.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug DirectSound|Win32.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug DirectSound|x64.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug DLL|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug DLL|Mixed Platforms.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug DLL|x64.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug MS-LDAP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug MS-LDAP|Mixed Platforms.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug MS-LDAP|Win32.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug MS-LDAP|Win32.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug MS-LDAP|x64.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug Passthrough|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug Passthrough|Mixed Platforms.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug Passthrough|Win32.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug Passthrough|Win32.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug Passthrough|x64.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug Static|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug Static|Mixed Platforms.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug Static|Win32.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug Static|Win32.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug Static|x64.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug_CLR|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug_CLR|Mixed Platforms.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug_CLR|Win32.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug_CLR|Win32.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug_CLR|x64.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug_Mono|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug_Mono|Mixed Platforms.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug_Mono|Win32.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug_Mono|Win32.Build.0 = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug_Mono|x64.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {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|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release DirectSound|Mixed Platforms.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release DirectSound|Mixed Platforms.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release DirectSound|Win32.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release DirectSound|Win32.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release DirectSound|x64.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release DLL|Mixed Platforms.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release DLL|Mixed Platforms.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release DLL|Win32.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release DLL|x64.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release MS-LDAP|Mixed Platforms.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release MS-LDAP|Mixed Platforms.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release MS-LDAP|Win32.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release MS-LDAP|Win32.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release MS-LDAP|x64.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release Passthrough|Mixed Platforms.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release Passthrough|Mixed Platforms.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release Passthrough|Win32.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release Passthrough|Win32.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release Passthrough|x64.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release Static|Mixed Platforms.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release Static|Mixed Platforms.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release Static|Win32.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release Static|Win32.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release Static|x64.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release_CLR|Mixed Platforms.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release_CLR|Mixed Platforms.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release_CLR|Win32.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release_CLR|Win32.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release_CLR|x64.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release_Mono|Mixed Platforms.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release_Mono|Mixed Platforms.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release_Mono|Win32.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release_Mono|Win32.Build.0 = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release_Mono|x64.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Mixed Platforms.Build.0 = Release|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|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal From mikej at freeswitch.org Fri Dec 26 11:02:36 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 14:02:36 -0500 Subject: [Freeswitch-trunk] [commit] r10958 - freeswitch/trunk/src/mod/formats/mod_shout Message-ID: Author: mikej Date: Fri Dec 26 14:02:36 2008 New Revision: 10958 Log: FSBUILD-99 building mod_shout fails if CPPFLAGS defined in the environment Modified: freeswitch/trunk/src/mod/formats/mod_shout/Makefile Modified: freeswitch/trunk/src/mod/formats/mod_shout/Makefile ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_shout/Makefile (original) +++ freeswitch/trunk/src/mod/formats/mod_shout/Makefile Fri Dec 26 14:02:36 2008 @@ -30,7 +30,7 @@ $(GETLIB) $(MPG123).tar.gz $(MPG123_DIR)/Makefile: $(MPG123_DIR) - cd $(MPG123_DIR) && CFLAGS=$(AM_CFLAGS) ./configure --disable-shared --with-pic + cd $(MPG123_DIR) && CFLAGS=$(AM_CFLAGS) ./configure --disable-shared --with-pic CPPFLAGS= LDFLAGS= $(TOUCH_TARGET) $(MPG123LA): $(MPG123_DIR)/Makefile @@ -52,7 +52,7 @@ $(GETLIB) $(SHOUT).tar.gz $(SHOUT_DIR)/Makefile: $(SHOUT_DIR) - cd $(SHOUT_DIR) && ./configure $(DEFAULT_ARGS) --without-speex --without-vorbis --without-ogg + cd $(SHOUT_DIR) && ./configure $(DEFAULT_ARGS) --without-speex --without-vorbis --without-ogg CPPFLAGS= LDFLAGS= $(TOUCH_TARGET) $(SHOUTLA): $(SHOUT_DIR)/Makefile From silik0n at freeswitch.org Fri Dec 26 11:24:45 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 14:24:45 -0500 Subject: [Freeswitch-trunk] [commit] r10959 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Fri Dec 26 14:24:45 2008 New Revision: 10959 Log: update Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 14:24:45 2008 @@ -260,6 +260,9 @@ int argv_port = 0; int temp_log = 0; int argv_error = 0; + int argv_exec = 0; + char argv_command[256] = ""; + strncpy(profiles[0].host, "127.0.0.1", sizeof(profiles[0].host)); strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass)); @@ -276,7 +279,7 @@ gethostname(hostname, sizeof(hostname)); handle.debug = 0; - esl_global_set_default_logger(7); + esl_global_set_default_logger(0); /* default debug level to 0 */ for(;;) { int option_index = 0; @@ -311,8 +314,9 @@ } break; case 'x': - printf("Executing commands from the CLI is not complete.\n"); - return 0; + argv_exec = 1; + esl_set_string(argv_command, optarg); + break; case 'h': case '?': @@ -387,7 +391,18 @@ esl_log(ESL_LOG_ERROR, "Error Connecting [%s]\n", handle.err); return -1; } - + + + if (argv_exec){ + snprintf(cmd_str, sizeof(cmd_str), "api %s\n\n", argv_command); + esl_send_recv(&handle, cmd_str); + if (handle.last_sr_event && handle.last_sr_event->body) { + printf("%s\n", handle.last_sr_event->body); + } + esl_disconnect(&handle); + return 0; + } + esl_thread_create_detached(msg_thread_run, &handle); #ifdef HAVE_EDITLINE From silik0n at freeswitch.org Fri Dec 26 11:25:36 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 14:25:36 -0500 Subject: [Freeswitch-trunk] [commit] r10960 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Fri Dec 26 14:25:36 2008 New Revision: 10960 Log: update Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 14:25:36 2008 @@ -59,7 +59,7 @@ printf(" -H, --host=hostname Host to connect\n"); printf(" -P, --port=port Port to connect (1 - 65535)\n"); printf(" -p, --password=FILENAME Password\n"); - printf(" -x, --execute=command Execute Command and exit (Work In Progress)\n"); + printf(" -x, --execute=command Execute Command and Exit\n"); printf(" -d, --debug=level Debug Level (0 - 7)\n\n"); return 1; } From mikej at freeswitch.org Fri Dec 26 12:39:04 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 15:39:04 -0500 Subject: [Freeswitch-trunk] [commit] r10961 - in freeswitch/trunk/libs/esl: . src src/include Message-ID: Author: mikej Date: Fri Dec 26 15:39:03 2008 New Revision: 10961 Log: cleanup Modified: freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/esl_event.c freeswitch/trunk/libs/esl/src/include/esl.h Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 15:39:03 2008 @@ -18,7 +18,6 @@ #include static char prompt_str[512] = ""; -static char hostname[512] = ""; #ifdef HAVE_EDITLINE static char *prompt(EditLine * e) @@ -236,9 +235,9 @@ char cfile[512] = "/tmp/fs_cli_config"; char *home = getenv("HOME"); #else - char hfile[512] = ".\\fs_cli_history"; - char cfile[512] = ".\\fs_cli_config"; - char *home = ""; //getenv("HOME"); + char hfile[512] = "fs_cli_history"; + char cfile[512] = "fs_cli_config"; + char *home = getenv("HOME"); #endif /* Vars for optargs */ int opt; @@ -276,7 +275,6 @@ } signal(SIGINT, handle_SIGINT); - gethostname(hostname, sizeof(hostname)); handle.debug = 0; esl_global_set_default_logger(0); /* default debug level to 0 */ @@ -381,12 +379,14 @@ } } - esl_log(ESL_LOG_INFO, "Using profile %s\n", profile->name); - - gethostname(hostname, sizeof(hostname)); - snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", profile->name); - + esl_log(ESL_LOG_INFO, "Using profile %s [%s]\n", profile->name, profile->host); + if (argv_host) { + snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", profile->host); + } else { + snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", profile->name); + } + if (esl_connect(&handle, profile->host, profile->port, profile->pass)) { esl_log(ESL_LOG_ERROR, "Error Connecting [%s]\n", handle.err); return -1; Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Fri Dec 26 15:39:03 2008 @@ -634,7 +634,7 @@ done: - esl_mutex_unlock(handle->mutex); + if (handle->mutex) esl_mutex_unlock(handle->mutex); return status; Modified: freeswitch/trunk/libs/esl/src/esl_event.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl_event.c (original) +++ freeswitch/trunk/libs/esl/src/esl_event.c Fri Dec 26 15:39:03 2008 @@ -313,41 +313,41 @@ int vasprintf(char **ret, const char *format, va_list ap); -static int esl_vasprintf(char **ret, const char *fmt, va_list ap) -{ -#ifndef WIN32 - return vasprintf(ret, fmt, ap); -#else - char *buf; - int len; - size_t buflen; - va_list ap2; - char *tmp = NULL; - -#ifdef _MSC_VER -#if _MSC_VER >= 1500 - /* hack for incorrect assumption in msvc header files for code analysis */ - __analysis_assume(tmp); -#endif - ap2 = ap; -#else - va_copy(ap2, ap); -#endif - - len = vsnprintf(tmp, 0, fmt, ap2); - - if (len > 0 && (buf = malloc((buflen = (size_t) (len + 1)))) != NULL) { - len = vsnprintf(buf, buflen, fmt, ap); - *ret = buf; - } else { - *ret = NULL; - len = -1; - } - - va_end(ap2); - return len; -#endif -} +static int esl_vasprintf(char **ret, const char *fmt, va_list ap) +{ +#ifndef WIN32 + return vasprintf(ret, fmt, ap); +#else + char *buf; + int len; + size_t buflen; + va_list ap2; + char *tmp = NULL; + +#ifdef _MSC_VER +#if _MSC_VER >= 1500 + /* hack for incorrect assumption in msvc header files for code analysis */ + __analysis_assume(tmp); +#endif + ap2 = ap; +#else + va_copy(ap2, ap); +#endif + + len = vsnprintf(tmp, 0, fmt, ap2); + + if (len > 0 && (buf = malloc((buflen = (size_t) (len + 1)))) != NULL) { + len = vsnprintf(buf, buflen, fmt, ap); + *ret = buf; + } else { + *ret = NULL; + len = -1; + } + + va_end(ap2); + return len; +#endif +} ESL_DECLARE(esl_status_t) esl_event_add_header(esl_event_t *event, esl_stack_t stack, const char *header_name, const char *fmt, ...) Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Fri Dec 26 15:39:03 2008 @@ -1,48 +1,48 @@ -/* - * 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 - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER - * 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 _ESL_H_ -#define _ESL_H_ - -#include - -#define esl_copy_string(_x, _y, _z) strncpy(_x, _y, _z - 1) -#define esl_set_string(_x, _y) esl_copy_string(_x, _y, sizeof(_x)) - -typedef struct esl_event_header esl_event_header_t; -typedef struct esl_event esl_event_t; - -#ifdef WIN32 +/* + * 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 + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * 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 _ESL_H_ +#define _ESL_H_ + +#include + +#define esl_copy_string(_x, _y, _z) strncpy(_x, _y, _z - 1) +#define esl_set_string(_x, _y) esl_copy_string(_x, _y, sizeof(_x)) + +typedef struct esl_event_header esl_event_header_t; +typedef struct esl_event esl_event_t; + +#ifdef WIN32 #define ESL_SEQ_FWHITE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY #define ESL_SEQ_FRED FOREGROUND_RED | FOREGROUND_INTENSITY #define ESL_SEQ_FMAGEN FOREGROUND_BLUE | FOREGROUND_RED @@ -50,281 +50,281 @@ #define ESL_SEQ_FGREEN FOREGROUND_GREEN #define ESL_SEQ_FYELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY #define ESL_SEQ_DEFAULT_COLOR ESL_SEQ_FWHITE -#else -#define ESL_SEQ_ESC "\033[" -/* Ansi Control character suffixes */ -#define ESL_SEQ_HOME_CHAR 'H' -#define ESL_SEQ_HOME_CHAR_STR "H" -#define ESL_SEQ_CLEARLINE_CHAR '1' -#define ESL_SEQ_CLEARLINE_CHAR_STR "1" -#define ESL_SEQ_CLEARLINEEND_CHAR "K" -#define ESL_SEQ_CLEARSCR_CHAR0 '2' -#define ESL_SEQ_CLEARSCR_CHAR1 'J' -#define ESL_SEQ_CLEARSCR_CHAR "2J" -#define ESL_SEQ_DEFAULT_COLOR ESL_SEQ_ESC ESL_SEQ_END_COLOR /* Reset to Default fg/bg color */ -#define ESL_SEQ_AND_COLOR ";" /* To add multiple color definitions */ -#define ESL_SEQ_END_COLOR "m" /* To end color definitions */ -/* Foreground colors values */ -#define ESL_SEQ_F_BLACK "30" -#define ESL_SEQ_F_RED "31" -#define ESL_SEQ_F_GREEN "32" -#define ESL_SEQ_F_YELLOW "33" -#define ESL_SEQ_F_BLUE "34" -#define ESL_SEQ_F_MAGEN "35" -#define ESL_SEQ_F_CYAN "36" -#define ESL_SEQ_F_WHITE "37" -/* Background colors values */ -#define ESL_SEQ_B_BLACK "40" -#define ESL_SEQ_B_RED "41" -#define ESL_SEQ_B_GREEN "42" -#define ESL_SEQ_B_YELLOW "43" -#define ESL_SEQ_B_BLUE "44" -#define ESL_SEQ_B_MAGEN "45" -#define ESL_SEQ_B_CYAN "46" -#define ESL_SEQ_B_WHITE "47" -/* Preset escape sequences - Change foreground colors only */ -#define ESL_SEQ_FBLACK ESL_SEQ_ESC ESL_SEQ_F_BLACK ESL_SEQ_END_COLOR -#define ESL_SEQ_FRED ESL_SEQ_ESC ESL_SEQ_F_RED ESL_SEQ_END_COLOR -#define ESL_SEQ_FGREEN ESL_SEQ_ESC ESL_SEQ_F_GREEN ESL_SEQ_END_COLOR -#define ESL_SEQ_FYELLOW ESL_SEQ_ESC ESL_SEQ_F_YELLOW ESL_SEQ_END_COLOR -#define ESL_SEQ_FBLUE ESL_SEQ_ESC ESL_SEQ_F_BLUE ESL_SEQ_END_COLOR -#define ESL_SEQ_FMAGEN ESL_SEQ_ESC ESL_SEQ_F_MAGEN ESL_SEQ_END_COLOR -#define ESL_SEQ_FCYAN ESL_SEQ_ESC ESL_SEQ_F_CYAN ESL_SEQ_END_COLOR -#define ESL_SEQ_FWHITE ESL_SEQ_ESC ESL_SEQ_F_WHITE ESL_SEQ_END_COLOR -#define ESL_SEQ_BBLACK ESL_SEQ_ESC ESL_SEQ_B_BLACK ESL_SEQ_END_COLOR -#define ESL_SEQ_BRED ESL_SEQ_ESC ESL_SEQ_B_RED ESL_SEQ_END_COLOR -#define ESL_SEQ_BGREEN ESL_SEQ_ESC ESL_SEQ_B_GREEN ESL_SEQ_END_COLOR -#define ESL_SEQ_BYELLOW ESL_SEQ_ESC ESL_SEQ_B_YELLOW ESL_SEQ_END_COLOR -#define ESL_SEQ_BBLUE ESL_SEQ_ESC ESL_SEQ_B_BLUE ESL_SEQ_END_COLOR -#define ESL_SEQ_BMAGEN ESL_SEQ_ESC ESL_SEQ_B_MAGEN ESL_SEQ_END_COLOR -#define ESL_SEQ_BCYAN ESL_SEQ_ESC ESL_SEQ_B_CYAN ESL_SEQ_END_COLOR -#define ESL_SEQ_BWHITE ESL_SEQ_ESC ESL_SEQ_B_WHITE ESL_SEQ_END_COLOR -/* Preset escape sequences */ -#define ESL_SEQ_HOME ESL_SEQ_ESC ESL_SEQ_HOME_CHAR_STR -#define ESL_SEQ_CLEARLINE ESL_SEQ_ESC ESL_SEQ_CLEARLINE_CHAR_STR -#define ESL_SEQ_CLEARLINEEND ESL_SEQ_ESC ESL_SEQ_CLEARLINEEND_CHAR -#define ESL_SEQ_CLEARSCR ESL_SEQ_ESC ESL_SEQ_CLEARSCR_CHAR ESL_SEQ_HOME -#endif - -#if !defined(_XOPEN_SOURCE) && !defined(__FreeBSD__) && !defined(__NetBSD__) -#define _XOPEN_SOURCE 600 -#endif - -#ifndef HAVE_STRINGS_H -#define HAVE_STRINGS_H 1 -#endif -#ifndef HAVE_SYS_SOCKET_H -#define HAVE_SYS_SOCKET_H 1 -#endif - -#ifndef __WINDOWS__ -#if defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32) -#define __WINDOWS__ -#endif -#endif - -#ifdef _MSC_VER -#ifndef __inline__ -#define __inline__ __inline -#endif -#if (_MSC_VER >= 1400) /* VC8+ */ -#ifndef _CRT_SECURE_NO_DEPRECATE -#define _CRT_SECURE_NO_DEPRECATE -#endif -#ifndef _CRT_NONSTDC_NO_DEPRECATE -#define _CRT_NONSTDC_NO_DEPRECATE -#endif -#endif -#ifndef strcasecmp -#define strcasecmp(s1, s2) _stricmp(s1, s2) -#endif -#ifndef strncasecmp -#define strncasecmp(s1, s2, n) _strnicmp(s1, s2, n) -#endif -#ifndef snprintf -#define snprintf _snprintf -#endif -#ifndef S_IRUSR -#define S_IRUSR _S_IREAD -#endif -#ifndef S_IWUSR -#define S_IWUSR _S_IWRITE -#endif -#undef HAVE_STRINGS_H -#undef HAVE_SYS_SOCKET_H -#endif - -#include -#ifndef WIN32 -#include -#endif - -#include -#include -#include -#include -#ifndef WIN32 -#include -#include -#include -#endif - -#ifdef HAVE_STRINGS_H -#include -#endif -#include - -#if (_MSC_VER >= 1400) // VC8+ -#define esl_assert(expr) assert(expr);__analysis_assume( expr ) -#endif - -#ifndef esl_assert -#define esl_assert(_x) assert(_x) -#endif - -#define esl_safe_free(_x) if (_x) free(_x); _x = NULL -#define esl_strlen_zero(s) (!s || *(s) == '\0') -#define esl_strlen_zero_buf(s) (*(s) == '\0') - -#ifdef WIN32 -#include -#include -typedef SOCKET esl_socket_t; -typedef unsigned __int64 uint64_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int16 uint16_t; -typedef unsigned __int8 uint8_t; -typedef __int64 int64_t; -typedef __int32 int32_t; -typedef __int16 int16_t; -typedef __int8 int8_t; -typedef intptr_t esl_ssize_t; -typedef int esl_filehandle_t; -#define ESL_SOCK_INVALID INVALID_SOCKET -#define strerror_r(num, buf, size) strerror_s(buf, size, num) -#if defined(ESL_DECLARE_STATIC) -#define ESL_DECLARE(type) type __stdcall -#define ESL_DECLARE_NONSTD(type) type __cdecl -#define ESL_DECLARE_DATA -#elif defined(ESL_EXPORTS) -#define ESL_DECLARE(type) __declspec(dllexport) type __stdcall -#define ESL_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl -#define ESL_DECLARE_DATA __declspec(dllexport) -#else -#define ESL_DECLARE(type) __declspec(dllimport) type __stdcall -#define ESL_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl -#define ESL_DECLARE_DATA __declspec(dllimport) -#endif -#else -#define ESL_DECLARE(type) type -#define ESL_DECLARE_NONSTD(type) type -#define ESL_DECLARE_DATA -#include -#include -#include -#include -#include -#include -#include -#define ESL_SOCK_INVALID -1 -typedef int esl_socket_t; -typedef ssize_t esl_ssize_t; -typedef int esl_filehandle_t; -#endif - -typedef int16_t esl_port_t; - -typedef enum { - ESL_SUCCESS, - ESL_FAIL, - ESL_BREAK -} esl_status_t; - -#include - -typedef struct { - struct sockaddr_in sockaddr; - struct hostent hostent; - char hostbuf[256]; - esl_socket_t sock; - char err[256]; - int errnum; - char header_buf[4196]; - char last_reply[1024]; - char last_sr_reply[1024]; - esl_event_t *last_event; - esl_event_t *last_sr_event; - esl_event_t *last_ievent; - esl_event_t *info_event; - int debug; - int connected; - struct sockaddr_in addr; - esl_mutex_t *mutex; -} esl_handle_t; - -typedef enum { - ESL_TRUE = 1, - ESL_FALSE = 0 -} esl_bool_t; - -#ifndef __FUNCTION__ -#define __FUNCTION__ (const char *)__func__ -#endif - -#define ESL_PRE __FILE__, __FUNCTION__, __LINE__ -#define ESL_LOG_LEVEL_DEBUG 7 -#define ESL_LOG_LEVEL_INFO 6 -#define ESL_LOG_LEVEL_NOTICE 5 -#define ESL_LOG_LEVEL_WARNING 4 -#define ESL_LOG_LEVEL_ERROR 3 -#define ESL_LOG_LEVEL_CRIT 2 -#define ESL_LOG_LEVEL_ALERT 1 -#define ESL_LOG_LEVEL_EMERG 0 - -#define ESL_LOG_DEBUG ESL_PRE, ESL_LOG_LEVEL_DEBUG -#define ESL_LOG_INFO ESL_PRE, ESL_LOG_LEVEL_INFO -#define ESL_LOG_NOTICE ESL_PRE, ESL_LOG_LEVEL_NOTICE -#define ESL_LOG_WARNING ESL_PRE, ESL_LOG_LEVEL_WARNING -#define ESL_LOG_ERROR ESL_PRE, ESL_LOG_LEVEL_ERROR -#define ESL_LOG_CRIT ESL_PRE, ESL_LOG_LEVEL_CRIT -#define ESL_LOG_ALERT ESL_PRE, ESL_LOG_LEVEL_ALERT -#define ESL_LOG_EMERG ESL_PRE, ESL_LOG_LEVEL_EMERG -typedef void (*esl_logger_t)(const char *file, const char *func, int line, int level, const char *fmt, ...); - -ESL_DECLARE_DATA extern esl_logger_t esl_log; - -ESL_DECLARE(void) esl_global_set_logger(esl_logger_t logger); -ESL_DECLARE(void) esl_global_set_default_logger(int level); - -#include "esl_event.h" -#include "esl_threadmutex.h" -#include "esl_config.h" - -ESL_DECLARE(size_t) esl_url_encode(const char *url, char *buf, size_t len); -ESL_DECLARE(char *)esl_url_decode(char *s); -ESL_DECLARE(const char *)esl_stristr(const char *instr, const char *str); -ESL_DECLARE(int) esl_toupper(int c); -ESL_DECLARE(int) esl_tolower(int c); -ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...); - - -typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr); - -ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in addr); -ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback); -ESL_DECLARE(esl_status_t) esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid); -ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event); - -ESL_DECLARE(esl_status_t) esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password); -ESL_DECLARE(esl_status_t) esl_disconnect(esl_handle_t *handle); -ESL_DECLARE(esl_status_t) esl_send(esl_handle_t *handle, const char *cmd); -ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, esl_event_t **save_event); -ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event); -ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd); -#define esl_recv(_h) esl_recv_event(_h, NULL) -#define esl_recv_timed(_h, _ms) esl_recv_event_timed(_h, _ms, NULL) - -#endif - - - +#else +#define ESL_SEQ_ESC "\033[" +/* Ansi Control character suffixes */ +#define ESL_SEQ_HOME_CHAR 'H' +#define ESL_SEQ_HOME_CHAR_STR "H" +#define ESL_SEQ_CLEARLINE_CHAR '1' +#define ESL_SEQ_CLEARLINE_CHAR_STR "1" +#define ESL_SEQ_CLEARLINEEND_CHAR "K" +#define ESL_SEQ_CLEARSCR_CHAR0 '2' +#define ESL_SEQ_CLEARSCR_CHAR1 'J' +#define ESL_SEQ_CLEARSCR_CHAR "2J" +#define ESL_SEQ_DEFAULT_COLOR ESL_SEQ_ESC ESL_SEQ_END_COLOR /* Reset to Default fg/bg color */ +#define ESL_SEQ_AND_COLOR ";" /* To add multiple color definitions */ +#define ESL_SEQ_END_COLOR "m" /* To end color definitions */ +/* Foreground colors values */ +#define ESL_SEQ_F_BLACK "30" +#define ESL_SEQ_F_RED "31" +#define ESL_SEQ_F_GREEN "32" +#define ESL_SEQ_F_YELLOW "33" +#define ESL_SEQ_F_BLUE "34" +#define ESL_SEQ_F_MAGEN "35" +#define ESL_SEQ_F_CYAN "36" +#define ESL_SEQ_F_WHITE "37" +/* Background colors values */ +#define ESL_SEQ_B_BLACK "40" +#define ESL_SEQ_B_RED "41" +#define ESL_SEQ_B_GREEN "42" +#define ESL_SEQ_B_YELLOW "43" +#define ESL_SEQ_B_BLUE "44" +#define ESL_SEQ_B_MAGEN "45" +#define ESL_SEQ_B_CYAN "46" +#define ESL_SEQ_B_WHITE "47" +/* Preset escape sequences - Change foreground colors only */ +#define ESL_SEQ_FBLACK ESL_SEQ_ESC ESL_SEQ_F_BLACK ESL_SEQ_END_COLOR +#define ESL_SEQ_FRED ESL_SEQ_ESC ESL_SEQ_F_RED ESL_SEQ_END_COLOR +#define ESL_SEQ_FGREEN ESL_SEQ_ESC ESL_SEQ_F_GREEN ESL_SEQ_END_COLOR +#define ESL_SEQ_FYELLOW ESL_SEQ_ESC ESL_SEQ_F_YELLOW ESL_SEQ_END_COLOR +#define ESL_SEQ_FBLUE ESL_SEQ_ESC ESL_SEQ_F_BLUE ESL_SEQ_END_COLOR +#define ESL_SEQ_FMAGEN ESL_SEQ_ESC ESL_SEQ_F_MAGEN ESL_SEQ_END_COLOR +#define ESL_SEQ_FCYAN ESL_SEQ_ESC ESL_SEQ_F_CYAN ESL_SEQ_END_COLOR +#define ESL_SEQ_FWHITE ESL_SEQ_ESC ESL_SEQ_F_WHITE ESL_SEQ_END_COLOR +#define ESL_SEQ_BBLACK ESL_SEQ_ESC ESL_SEQ_B_BLACK ESL_SEQ_END_COLOR +#define ESL_SEQ_BRED ESL_SEQ_ESC ESL_SEQ_B_RED ESL_SEQ_END_COLOR +#define ESL_SEQ_BGREEN ESL_SEQ_ESC ESL_SEQ_B_GREEN ESL_SEQ_END_COLOR +#define ESL_SEQ_BYELLOW ESL_SEQ_ESC ESL_SEQ_B_YELLOW ESL_SEQ_END_COLOR +#define ESL_SEQ_BBLUE ESL_SEQ_ESC ESL_SEQ_B_BLUE ESL_SEQ_END_COLOR +#define ESL_SEQ_BMAGEN ESL_SEQ_ESC ESL_SEQ_B_MAGEN ESL_SEQ_END_COLOR +#define ESL_SEQ_BCYAN ESL_SEQ_ESC ESL_SEQ_B_CYAN ESL_SEQ_END_COLOR +#define ESL_SEQ_BWHITE ESL_SEQ_ESC ESL_SEQ_B_WHITE ESL_SEQ_END_COLOR +/* Preset escape sequences */ +#define ESL_SEQ_HOME ESL_SEQ_ESC ESL_SEQ_HOME_CHAR_STR +#define ESL_SEQ_CLEARLINE ESL_SEQ_ESC ESL_SEQ_CLEARLINE_CHAR_STR +#define ESL_SEQ_CLEARLINEEND ESL_SEQ_ESC ESL_SEQ_CLEARLINEEND_CHAR +#define ESL_SEQ_CLEARSCR ESL_SEQ_ESC ESL_SEQ_CLEARSCR_CHAR ESL_SEQ_HOME +#endif + +#if !defined(_XOPEN_SOURCE) && !defined(__FreeBSD__) && !defined(__NetBSD__) +#define _XOPEN_SOURCE 600 +#endif + +#ifndef HAVE_STRINGS_H +#define HAVE_STRINGS_H 1 +#endif +#ifndef HAVE_SYS_SOCKET_H +#define HAVE_SYS_SOCKET_H 1 +#endif + +#ifndef __WINDOWS__ +#if defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32) +#define __WINDOWS__ +#endif +#endif + +#ifdef _MSC_VER +#ifndef __inline__ +#define __inline__ __inline +#endif +#if (_MSC_VER >= 1400) /* VC8+ */ +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE +#endif +#ifndef _CRT_NONSTDC_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE +#endif +#endif +#ifndef strcasecmp +#define strcasecmp(s1, s2) _stricmp(s1, s2) +#endif +#ifndef strncasecmp +#define strncasecmp(s1, s2, n) _strnicmp(s1, s2, n) +#endif +#ifndef snprintf +#define snprintf _snprintf +#endif +#ifndef S_IRUSR +#define S_IRUSR _S_IREAD +#endif +#ifndef S_IWUSR +#define S_IWUSR _S_IWRITE +#endif +#undef HAVE_STRINGS_H +#undef HAVE_SYS_SOCKET_H +#endif + +#include +#ifndef WIN32 +#include +#endif + +#include +#include +#include +#include +#ifndef WIN32 +#include +#include +#include +#endif + +#ifdef HAVE_STRINGS_H +#include +#endif +#include + +#if (_MSC_VER >= 1400) // VC8+ +#define esl_assert(expr) assert(expr);__analysis_assume( expr ) +#endif + +#ifndef esl_assert +#define esl_assert(_x) assert(_x) +#endif + +#define esl_safe_free(_x) if (_x) free(_x); _x = NULL +#define esl_strlen_zero(s) (!s || *(s) == '\0') +#define esl_strlen_zero_buf(s) (*(s) == '\0') + +#ifdef WIN32 +#include +#include +typedef SOCKET esl_socket_t; +typedef unsigned __int64 uint64_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int8 uint8_t; +typedef __int64 int64_t; +typedef __int32 int32_t; +typedef __int16 int16_t; +typedef __int8 int8_t; +typedef intptr_t esl_ssize_t; +typedef int esl_filehandle_t; +#define ESL_SOCK_INVALID INVALID_SOCKET +#define strerror_r(num, buf, size) strerror_s(buf, size, num) +#if defined(ESL_DECLARE_STATIC) +#define ESL_DECLARE(type) type __stdcall +#define ESL_DECLARE_NONSTD(type) type __cdecl +#define ESL_DECLARE_DATA +#elif defined(ESL_EXPORTS) +#define ESL_DECLARE(type) __declspec(dllexport) type __stdcall +#define ESL_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl +#define ESL_DECLARE_DATA __declspec(dllexport) +#else +#define ESL_DECLARE(type) __declspec(dllimport) type __stdcall +#define ESL_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl +#define ESL_DECLARE_DATA __declspec(dllimport) +#endif +#else +#define ESL_DECLARE(type) type +#define ESL_DECLARE_NONSTD(type) type +#define ESL_DECLARE_DATA +#include +#include +#include +#include +#include +#include +#include +#define ESL_SOCK_INVALID -1 +typedef int esl_socket_t; +typedef ssize_t esl_ssize_t; +typedef int esl_filehandle_t; +#endif + +typedef int16_t esl_port_t; + +typedef enum { + ESL_SUCCESS, + ESL_FAIL, + ESL_BREAK +} esl_status_t; + +#include + +typedef struct { + struct sockaddr_in sockaddr; + struct hostent hostent; + char hostbuf[256]; + esl_socket_t sock; + char err[256]; + int errnum; + char header_buf[4196]; + char last_reply[1024]; + char last_sr_reply[1024]; + esl_event_t *last_event; + esl_event_t *last_sr_event; + esl_event_t *last_ievent; + esl_event_t *info_event; + int debug; + int connected; + struct sockaddr_in addr; + esl_mutex_t *mutex; +} esl_handle_t; + +typedef enum { + ESL_TRUE = 1, + ESL_FALSE = 0 +} esl_bool_t; + +#ifndef __FUNCTION__ +#define __FUNCTION__ (const char *)__func__ +#endif + +#define ESL_PRE __FILE__, __FUNCTION__, __LINE__ +#define ESL_LOG_LEVEL_DEBUG 7 +#define ESL_LOG_LEVEL_INFO 6 +#define ESL_LOG_LEVEL_NOTICE 5 +#define ESL_LOG_LEVEL_WARNING 4 +#define ESL_LOG_LEVEL_ERROR 3 +#define ESL_LOG_LEVEL_CRIT 2 +#define ESL_LOG_LEVEL_ALERT 1 +#define ESL_LOG_LEVEL_EMERG 0 + +#define ESL_LOG_DEBUG ESL_PRE, ESL_LOG_LEVEL_DEBUG +#define ESL_LOG_INFO ESL_PRE, ESL_LOG_LEVEL_INFO +#define ESL_LOG_NOTICE ESL_PRE, ESL_LOG_LEVEL_NOTICE +#define ESL_LOG_WARNING ESL_PRE, ESL_LOG_LEVEL_WARNING +#define ESL_LOG_ERROR ESL_PRE, ESL_LOG_LEVEL_ERROR +#define ESL_LOG_CRIT ESL_PRE, ESL_LOG_LEVEL_CRIT +#define ESL_LOG_ALERT ESL_PRE, ESL_LOG_LEVEL_ALERT +#define ESL_LOG_EMERG ESL_PRE, ESL_LOG_LEVEL_EMERG +typedef void (*esl_logger_t)(const char *file, const char *func, int line, int level, const char *fmt, ...); + +ESL_DECLARE_DATA extern esl_logger_t esl_log; + +ESL_DECLARE(void) esl_global_set_logger(esl_logger_t logger); +ESL_DECLARE(void) esl_global_set_default_logger(int level); + +#include "esl_event.h" +#include "esl_threadmutex.h" +#include "esl_config.h" + +ESL_DECLARE(size_t) esl_url_encode(const char *url, char *buf, size_t len); +ESL_DECLARE(char *)esl_url_decode(char *s); +ESL_DECLARE(const char *)esl_stristr(const char *instr, const char *str); +ESL_DECLARE(int) esl_toupper(int c); +ESL_DECLARE(int) esl_tolower(int c); +ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...); + + +typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr); + +ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t socket, struct sockaddr_in addr); +ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback); +ESL_DECLARE(esl_status_t) esl_execute(esl_handle_t *handle, const char *app, const char *arg, const char *uuid); +ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event); + +ESL_DECLARE(esl_status_t) esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *password); +ESL_DECLARE(esl_status_t) esl_disconnect(esl_handle_t *handle); +ESL_DECLARE(esl_status_t) esl_send(esl_handle_t *handle, const char *cmd); +ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, esl_event_t **save_event); +ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms, esl_event_t **save_event); +ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd); +#define esl_recv(_h) esl_recv_event(_h, NULL) +#define esl_recv_timed(_h, _ms) esl_recv_event_timed(_h, _ms, NULL) + +#endif + + + From silik0n at freeswitch.org Fri Dec 26 12:47:54 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 15:47:54 -0500 Subject: [Freeswitch-trunk] [commit] r10962 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Fri Dec 26 15:47:53 2008 New Revision: 10962 Log: add debug to profile config Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 15:47:53 2008 @@ -168,6 +168,7 @@ char host[128]; esl_port_t port; char pass[128]; + int debug; } cli_profile_t; static cli_profile_t profiles[128] = {{{0}}}; @@ -257,7 +258,7 @@ int argv_pass = 0 ; int temp_port = 0; int argv_port = 0; - int temp_log = 0; + int temp_log = -1; int argv_error = 0; int argv_exec = 0; char argv_command[256] = ""; @@ -355,7 +356,12 @@ if (pt > 0) { profiles[cur].port = (esl_port_t)pt; } - } + } else if (!strcasecmp(var, "debug")) { + int dt = atoi(val); + if (dt > -1 && dt < 8){ + profiles[cur].debug = dt; + } + } } esl_config_close_file(&cfg); } @@ -376,6 +382,9 @@ profile = &profiles[0]; } else { esl_log(ESL_LOG_INFO, "Chosen profile %s\n", profile->name); + if (temp_log < 0 ) { + esl_global_set_default_logger(profile->debug); + } } } From mikej at freeswitch.org Fri Dec 26 13:10:40 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 16:10:40 -0500 Subject: [Freeswitch-trunk] [commit] r10963 - freeswitch/trunk/libs/esl Message-ID: Author: mikej Date: Fri Dec 26 16:10:40 2008 New Revision: 10963 Log: fix command line args when config file present Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 16:10:40 2008 @@ -365,16 +365,6 @@ } esl_config_close_file(&cfg); } - - if (argv_host) { - esl_set_string(profiles[cur].host, temp_host); - } - if (argv_port) { - profiles[cur].port = (esl_port_t)temp_port; - } - if (argv_pass) { - esl_set_string(profiles[cur].pass, temp_pass); - } if (optind < argc) { if (get_profile(argv[optind], &profile)) { @@ -388,10 +378,20 @@ } } + if (argv_host) { + esl_set_string(profile->host, temp_host); + } + if (argv_port) { + profile->port = (esl_port_t)temp_port; + } + if (argv_pass) { + esl_set_string(profile->pass, temp_pass); + } + esl_log(ESL_LOG_INFO, "Using profile %s [%s]\n", profile->name, profile->host); if (argv_host) { - snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", profile->host); + snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s@%s> ", profile->host, profile->name); } else { snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", profile->name); } From mikej at freeswitch.org Fri Dec 26 13:20:59 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 16:20:59 -0500 Subject: [Freeswitch-trunk] [commit] r10964 - freeswitch/trunk/libs/esl Message-ID: Author: mikej Date: Fri Dec 26 16:20:58 2008 New Revision: 10964 Log: better output Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 16:20:58 2008 @@ -391,7 +391,11 @@ esl_log(ESL_LOG_INFO, "Using profile %s [%s]\n", profile->name, profile->host); if (argv_host) { - snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s@%s> ", profile->host, profile->name); + if (argv_port && profile->port != 8021) { + snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s:%u@%s> ", profile->host, profile->port, profile->name); + } else { + snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s@%s> ", profile->host, profile->name); + } } else { snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", profile->name); } From mikej at freeswitch.org Fri Dec 26 13:24:34 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Fri, 26 Dec 2008 16:24:34 -0500 Subject: [Freeswitch-trunk] [commit] r10965 - freeswitch/trunk/libs/esl Message-ID: Author: mikej Date: Fri Dec 26 16:24:34 2008 New Revision: 10965 Log: formatting Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Fri Dec 26 16:24:34 2008 @@ -326,7 +326,7 @@ } } - if(argv_error){ + if (argv_error){ printf("\n"); return usage(argv[0]); } From brian at freeswitch.org Sat Dec 27 08:56:58 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Sat, 27 Dec 2008 11:56:58 -0500 Subject: [Freeswitch-trunk] [commit] r10970 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: brian Date: Sat Dec 27 11:56:58 2008 New Revision: 10970 Log: register gateways from users after group changes. Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Sat Dec 27 11:56:58 2008 @@ -1184,12 +1184,18 @@ dname, profile->name); } } - + if (switch_true(parse)) { - switch_xml_t ut, gateways_tag; - for (ut = switch_xml_child(x_domain_tag, "user"); ut; ut = ut->next) { - if (((gateways_tag = switch_xml_child(ut, "gateways")))) { - parse_gateways(profile, gateways_tag); + switch_xml_t gts, gt, uts, ut, gateways_tag; + for (gts = switch_xml_child(x_domain_tag, "groups"); gts; gts = gts->next) { + for (gt = switch_xml_child(gts, "group"); gt; gt = gt->next) { + for (uts = switch_xml_child(gt, "users"); uts; uts = uts->next) { + for (ut = switch_xml_child(uts, "user"); ut; ut = ut->next) { + if (((gateways_tag = switch_xml_child(ut, "gateways")))) { + parse_gateways(profile, gateways_tag); + } + } + } } } } From brian at freeswitch.org Sat Dec 27 09:38:21 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Sat, 27 Dec 2008 12:38:21 -0500 Subject: [Freeswitch-trunk] [commit] r10971 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: brian Date: Sat Dec 27 12:38:21 2008 New Revision: 10971 Log: can't break backwards compatibility Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Sat Dec 27 12:38:21 2008 @@ -1184,7 +1184,18 @@ dname, profile->name); } } - + + /* Backwards Compatibility */ + if (switch_true(parse)) { + switch_xml_t ut, gateways_tag; + for (ut = switch_xml_child(x_domain_tag, "user"); ut; ut = ut->next) { + if (((gateways_tag = switch_xml_child(ut, "gateways")))) { + parse_gateways(profile, gateways_tag); + } + } + } + + /* New Method with tags and users are now inside a tag */ if (switch_true(parse)) { switch_xml_t gts, gt, uts, ut, gateways_tag; for (gts = switch_xml_child(x_domain_tag, "groups"); gts; gts = gts->next) { From brian at freeswitch.org Sat Dec 27 09:42:42 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Sat, 27 Dec 2008 12:42:42 -0500 Subject: [Freeswitch-trunk] [commit] r10972 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: brian Date: Sat Dec 27 12:42:42 2008 New Revision: 10972 Log: on second thought this is much better Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Sat Dec 27 12:42:42 2008 @@ -1185,19 +1185,15 @@ } } - /* Backwards Compatibility */ if (switch_true(parse)) { - switch_xml_t ut, gateways_tag; + switch_xml_t gts, gt, uts, ut, gateways_tag; + /* Backwards Compatibility */ for (ut = switch_xml_child(x_domain_tag, "user"); ut; ut = ut->next) { if (((gateways_tag = switch_xml_child(ut, "gateways")))) { parse_gateways(profile, gateways_tag); } } - } - - /* New Method with tags and users are now inside a tag */ - if (switch_true(parse)) { - switch_xml_t gts, gt, uts, ut, gateways_tag; + /* New Method with tags and users are now inside a tag */ for (gts = switch_xml_child(x_domain_tag, "groups"); gts; gts = gts->next) { for (gt = switch_xml_child(gts, "group"); gt; gt = gt->next) { for (uts = switch_xml_child(gt, "users"); uts; uts = uts->next) { From brian at freeswitch.org Sat Dec 27 11:29:28 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Sat, 27 Dec 2008 14:29:28 -0500 Subject: [Freeswitch-trunk] [commit] r10973 - freeswitch/trunk/scripts Message-ID: Author: brian Date: Sat Dec 27 14:29:28 2008 New Revision: 10973 Log: I don't wanna loose this. ;) Added: freeswitch/trunk/scripts/m4a-to-wav.sh Added: freeswitch/trunk/scripts/m4a-to-wav.sh ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/m4a-to-wav.sh Sat Dec 27 14:29:28 2008 @@ -0,0 +1,8 @@ +for file in *.m4a; do name=`echo $file | sed "s/\ /\_/g" | sed "s/.m4a//"`; \ + echo "Convert m4a $file to $name.wav"; faad -o $name.wav "$file" > /dev/null 2>&1; \ + for rate in 8000 16000 32000 48000; do mkdir -p $rate; \ + echo "Creating $rate kHz -> $rate/$name.wav"; \ + sox $name.wav -c 1 -r $rate $rate/$name.wav vol 0.06; \ + done; \ + rm -f *.wav; \ +done; From brian at freeswitch.org Sat Dec 27 15:56:23 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Sat, 27 Dec 2008 18:56:23 -0500 Subject: [Freeswitch-trunk] [commit] r10976 - freeswitch/trunk/conf Message-ID: Author: brian Date: Sat Dec 27 18:56:22 2008 New Revision: 10976 Log: notes Modified: freeswitch/trunk/conf/vars.xml Modified: freeswitch/trunk/conf/vars.xml ============================================================================== --- freeswitch/trunk/conf/vars.xml (original) +++ freeswitch/trunk/conf/vars.xml Sat Dec 27 18:56:22 2008 @@ -80,6 +80,12 @@ --> + + - + From anthm at freeswitch.org Mon Dec 29 10:40:41 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 29 Dec 2008 13:40:41 -0500 Subject: [Freeswitch-trunk] [commit] r10990 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Mon Dec 29 13:40:40 2008 New Revision: 10990 Log: don't display console_clean logs Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Mon Dec 29 13:40:40 2008 @@ -86,17 +86,17 @@ int level = 0, tchannel = 0; const char *lname = esl_event_get_header(handle->last_event, "log-level"); const char *channel = esl_event_get_header(handle->last_event, "text-channel"); - const char *file = esl_event_get_header(handle->last_event, "log-file"); + //const char *file = esl_event_get_header(handle->last_event, "log-file"); if (channel) { tchannel = atoi(channel); } - + if (lname) { level = atoi(lname); } - - if (tchannel == 0 || (file && !strcmp(file, "switch_console.c"))) { + + if (tchannel == 0) { #ifdef WIN32 DWORD len = (DWORD) strlen(handle->last_event->body); DWORD outbytes = 0; From anthm at freeswitch.org Mon Dec 29 13:23:18 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 29 Dec 2008 16:23:18 -0500 Subject: [Freeswitch-trunk] [commit] r10991 - in freeswitch/trunk/src: . include mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Mon Dec 29 16:23:17 2008 New Revision: 10991 Log: add rtp_bug flags so we can keep track of all the bugs we have to emulate Modified: freeswitch/trunk/src/include/switch_rtp.h freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c freeswitch/trunk/src/switch_rtp.c Modified: freeswitch/trunk/src/include/switch_rtp.h ============================================================================== --- freeswitch/trunk/src/include/switch_rtp.h (original) +++ freeswitch/trunk/src/include/switch_rtp.h Mon Dec 29 16:23:17 2008 @@ -431,6 +431,8 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_activate_stun_ping(switch_rtp_t *rtp_session, const char *stun_ip, switch_port_t stun_port, uint32_t packet_count, switch_bool_t funny); +SWITCH_DECLARE(void) switch_rtp_intentional_bugs(switch_rtp_t *rtp_session, switch_rtp_bug_flag_t bugs); + /*! \} */ Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Mon Dec 29 16:23:17 2008 @@ -460,6 +460,38 @@ } switch_rtp_flag_enum_t; typedef uint32_t switch_rtp_flag_t; +typedef enum { + RTP_BUG_NONE = 0, /* won't be using this one much ;) */ + + RTP_BUG_CISCO_SKIP_MARK_BIT_2833 = (1 << 0), + /* Some Cisco devices get mad when you send the mark bit on new 2833 because it makes + them flush their jitterbuffer and the dtmf along with it. + + This flag will disable the sending of the mark bit on the first DTMF packet. + */ + + + RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833 = (1 << 1) + /* + Sonus wrongly expects that, when sending a multi-packet 2833 DTMF event, The sender + should increment the RTP timestamp in each packet when, in reality, the sender should + send the same exact timestamp and increment the duration field in the 2833 payload. + This allows a reconstruction of the duration if any of the packets are lost. + + final_duration - initial_timestamp = total_samples + + However, if the duration value exceeds the space allocated (16 bits), The sender should increment + the timestamp one unit and reset the duration to 0. + + Always sending a duration of 0 with a new timestamp should be tolerated but is rarely intentional + and is mistakenly done by many devices. + The issue is that the Sonus expects everyone to do it this way instead of tolerating eiher way. + Sonus will actually ignore every packet with the same timestamp before concluding if it's DTMF. + + This flag will cause each packet to have a new timestamp. + */ + +} switch_rtp_bug_flag_t; #ifdef _MSC_VER #pragma pack(push, r1, 1) Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h Mon Dec 29 16:23:17 2008 @@ -208,7 +208,7 @@ TFLAG_NOHUP = (1 << 18), TFLAG_NOSDP_REINVITE = (1 << 19), TFLAG_NAT = (1 << 20), - TFLAG_BUGGY_2833 = (1 << 21), + TFLAG_USEME = (1 << 21), TFLAG_SIP_HOLD = (1 << 22), TFLAG_INB_NOMEDIA = (1 << 23), TFLAG_LATE_NEGOTIATION = (1 << 24), @@ -552,6 +552,7 @@ uint32_t mismatch_count; uint32_t last_codec_ms; nua_event_t want_event; + switch_rtp_bug_flag_t rtp_bugs; }; struct callback_t { Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Mon Dec 29 16:23:17 2008 @@ -1775,10 +1775,6 @@ flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_DATAWAIT); } - if (switch_test_flag(tech_pvt, TFLAG_BUGGY_2833)) { - flags |= SWITCH_RTP_FLAG_BUGGY_2833; - } - if ((val = switch_channel_get_variable(tech_pvt->channel, "dtmf_type"))) { if (!strcasecmp(val, "rfc2833")) { tech_pvt->dtmf_type = DTMF_2833; @@ -1923,7 +1919,9 @@ tech_pvt->ssrc = switch_rtp_get_ssrc(tech_pvt->rtp_session); switch_set_flag(tech_pvt, TFLAG_RTP); switch_set_flag(tech_pvt, TFLAG_IO); - + + switch_rtp_intentional_bugs(tech_pvt->rtp_session, tech_pvt->rtp_bugs); + if ((vad_in && inb) || (vad_out && !inb)) { switch_rtp_enable_vad(tech_pvt->rtp_session, tech_pvt->session, &tech_pvt->read_codec, SWITCH_VAD_FLAG_TALKING); switch_set_flag(tech_pvt, TFLAG_VAD); @@ -2205,12 +2203,12 @@ if ((tech_pvt->origin = switch_core_session_strdup(session, (char *) sdp->sdp_origin->o_username))) { if (strstr(tech_pvt->origin, "CiscoSystemsSIP-GW-UserAgent")) { - switch_set_flag_locked(tech_pvt, TFLAG_BUGGY_2833); + tech_pvt->rtp_bugs |= RTP_BUG_CISCO_SKIP_MARK_BIT_2833; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Activate Buggy RFC2833 Mode!\n"); } if (strstr(tech_pvt->origin, "Sonus_UAC")) { - switch_set_flag_locked(tech_pvt, TFLAG_BUGGY_2833); + tech_pvt->rtp_bugs |= RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Hello,\nI see you have a Sonus!\n" "FYI, Sonus cannot follow the RFC on the proper way to send DTMF.\n" Modified: freeswitch/trunk/src/switch_rtp.c ============================================================================== --- freeswitch/trunk/src/switch_rtp.c (original) +++ freeswitch/trunk/src/switch_rtp.c Mon Dec 29 16:23:17 2008 @@ -199,6 +199,7 @@ switch_port_t stun_port; int from_auto; uint32_t cng_count; + switch_rtp_bug_flag_t rtp_bugs; }; static int global_init = 0; @@ -486,6 +487,11 @@ return port; } +SWITCH_DECLARE(void) switch_rtp_intentional_bugs(switch_rtp_t *rtp_session, switch_rtp_bug_flag_t bugs) +{ + rtp_session->rtp_bugs = bugs; +} + SWITCH_DECLARE(switch_status_t) switch_rtp_set_local_address(switch_rtp_t *rtp_session, const char *host, switch_port_t port, const char **err) { switch_socket_t *new_sock = NULL, *old_sock = NULL; @@ -1204,7 +1210,7 @@ rtp_session->dtmf_data.timestamp_dtmf, rtp_session->dtmf_data.out_digit_sofar, rtp_session->dtmf_data.out_digit_sub_sofar, rtp_session->dtmf_data.out_digit_dur, rtp_session->seq); - if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BUGGY_2833)) { + if (rtp_session->rtp_bugs & RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833) { rtp_session->dtmf_data.timestamp_dtmf = rtp_session->last_write_ts + samples; } } @@ -1257,7 +1263,7 @@ switch_rtp_write_manual(rtp_session, rtp_session->dtmf_data.out_digit_packet, 4, - switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BUGGY_2833) ? 0 : 1, + rtp_session->rtp_bugs & RTP_BUG_CISCO_SKIP_MARK_BIT_2833 ? 0 : 1, rtp_session->te, rtp_session->dtmf_data.timestamp_dtmf, &flags); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Send start packet for [%c] ts=%u dur=%d/%d/%d seq=%d\n", From mikej at freeswitch.org Mon Dec 29 14:19:09 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 29 Dec 2008 17:19:09 -0500 Subject: [Freeswitch-trunk] [commit] r10992 - freeswitch/trunk/docs Message-ID: Author: mikej Date: Mon Dec 29 17:19:09 2008 New Revision: 10992 Log: Change-log Modified: freeswitch/trunk/docs/ChangeLog Modified: freeswitch/trunk/docs/ChangeLog ============================================================================== --- freeswitch/trunk/docs/ChangeLog (original) +++ freeswitch/trunk/docs/ChangeLog Mon Dec 29 17:19:09 2008 @@ -1,3 +1,294 @@ +freeswitch (1.0.2) + + 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) + freeswitch (1.0.1) FIX: prevent intercept race condition that can also be solved with continue_on_fail=originator_cancel From anthm at freeswitch.org Mon Dec 29 14:26:13 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 29 Dec 2008 17:26:13 -0500 Subject: [Freeswitch-trunk] [commit] r10993 - in freeswitch/trunk/src: . include mod/applications/mod_voicemail Message-ID: Author: anthm Date: Mon Dec 29 17:26:10 2008 New Revision: 10993 Log: fix voicemail to be in line with groups Modified: freeswitch/trunk/src/include/switch_xml.h freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c freeswitch/trunk/src/switch_xml.c Modified: freeswitch/trunk/src/include/switch_xml.h ============================================================================== --- freeswitch/trunk/src/include/switch_xml.h (original) +++ freeswitch/trunk/src/include/switch_xml.h Mon Dec 29 17:26:10 2008 @@ -350,6 +350,8 @@ switch_xml_t *root, switch_xml_t *domain, switch_xml_t *user, switch_xml_t *ingroup, switch_event_t *params); +SWITCH_DECLARE(switch_status_t) switch_xml_locate_user_in_domain(const char *user_name, switch_xml_t domain, switch_xml_t *user, switch_xml_t *ingroup); + ///\brief open a config in the core registry ///\param file_path the name of the config section e.g. modules.conf ///\param node a pointer to point to the node if it is found Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original) +++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Mon Dec 29 17:26:10 2008 @@ -2261,7 +2261,9 @@ } /*switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Send mail is %d, var is %s\n", send_mail, var);*/ } - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Send mail is %d and that's my final answer\n", send_mail); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Deliver VM to %s@%s\n", myid, domain_name); + if (!switch_strlen_zero(vm_storage_dir)) { dir_path = switch_mprintf("%s%s%s", vm_storage_dir, SWITCH_PATH_SEPARATOR, myid); } else if (!switch_strlen_zero(profile->storage_dir)) { @@ -2507,7 +2509,7 @@ vm_profile_t *profile; char *dup = NULL, *user = NULL, *domain = NULL; switch_status_t status = SWITCH_STATUS_SUCCESS; - int istag = 0, isall = 0; + int isgroup = 0, isall = 0; int argc = 0; char *argv[4]; char *box, *path, *cid_num, *cid_name; @@ -2540,9 +2542,9 @@ domain = user; } - if (switch_stristr("tag=", user)) { - user += 4; - istag++; + if (switch_stristr("group=", user)) { + user += 6; + isgroup++; } else if (user == domain) { isall++; } @@ -2567,6 +2569,17 @@ switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS); switch_assert(my_params); + + if (isgroup) { + switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "group", user); + } else { + if (isall) { + switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "user", "_all_"); + } else { + switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "user", user); + } + } + switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "domain", domain); switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "purpose", "publish-vm"); @@ -2581,24 +2594,66 @@ switch_core_new_memory_pool(&pool); - if (!isall && !istag) { - if ((ut = switch_xml_find_child(x_domain, "user", "id", user))) { + + if (isgroup) { + switch_xml_t group = NULL, groups = NULL, users = NULL; + if ((groups = switch_xml_child(x_domain, "groups"))) { + if ((group = switch_xml_find_child_multi(groups, "group", "name", user, NULL))) { + if ((users = switch_xml_child(group, "users"))) { + for (ut = switch_xml_child(users, "user"); ut; ut = ut->next) { + const char *type = switch_xml_attr_soft(ut, "type"); + + if (!strcasecmp(type, "pointer")) { + const char *uname = switch_xml_attr_soft(ut, "id"); + switch_xml_t ux; + + if (switch_xml_locate_user_in_domain(uname, x_domain, &ux, NULL) == SWITCH_STATUS_SUCCESS) { + switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS); + status = deliver_vm(profile, ux, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE); + switch_event_destroy(&my_params); + } + continue; + } + + switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS); + status = deliver_vm(profile, ut, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE); + switch_event_destroy(&my_params); + } + } + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot locate group %s\n", user); + } + } + } else if (isall) { + switch_xml_t group = NULL, groups = NULL, users = NULL; + if ((groups = switch_xml_child(x_domain, "groups"))) { + for (group = switch_xml_child(groups, "group"); group; group = group->next) { + if ((users = switch_xml_child(group, "users"))) { + for (ut = switch_xml_child(users, "user"); ut; ut = ut->next) { + const char *type = switch_xml_attr_soft(ut, "type"); + + if (!strcasecmp(type, "pointer")) { + continue; + } + + switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS); + status = deliver_vm(profile, ut, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE); + switch_event_destroy(&my_params); + } + } + } + } + + } else { + switch_xml_t x_group = NULL; + + if ((status = switch_xml_locate_user_in_domain(user, x_domain, &ut, &x_group)) == SWITCH_STATUS_SUCCESS) { switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS); status = deliver_vm(profile, ut, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE); switch_event_destroy(&my_params); } else { status = SWITCH_STATUS_FALSE; } - } else { - for (ut = switch_xml_child(x_domain, "user"); ut; ut = ut->next) { - const char *tag; - - if (isall || (istag && (tag=switch_xml_attr(ut, "vm-tag")) && !strcasecmp(tag, user))) { - switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS); - status = deliver_vm(profile, ut, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE); - switch_event_destroy(&my_params); - } - } } switch_core_destroy_memory_pool(&pool); @@ -3562,7 +3617,7 @@ } } -#define VM_INJECT_USAGE "[tag=] [] []" +#define VM_INJECT_USAGE "[group=] [] []" SWITCH_STANDARD_API(voicemail_inject_api_function) { if (voicemail_inject(cmd) == SWITCH_STATUS_SUCCESS) { Modified: freeswitch/trunk/src/switch_xml.c ============================================================================== --- freeswitch/trunk/src/switch_xml.c (original) +++ freeswitch/trunk/src/switch_xml.c Mon Dec 29 17:26:10 2008 @@ -1634,7 +1634,6 @@ return status; } - static switch_status_t find_user_in_tag(switch_xml_t tag, const char *ip, const char *user_name, const char *key, switch_event_t *params, switch_xml_t *user) { const char *type = "!pointer"; @@ -1670,6 +1669,26 @@ } +SWITCH_DECLARE(switch_status_t) switch_xml_locate_user_in_domain(const char *user_name, switch_xml_t domain, switch_xml_t *user, switch_xml_t *ingroup) +{ + switch_xml_t group = NULL, groups = NULL, users = NULL; + switch_status_t status = SWITCH_STATUS_FALSE; + + if ((groups = switch_xml_child(domain, "groups"))) { + for (group = switch_xml_child(groups, "group"); group; group = group->next) { + if ((users = switch_xml_child(group, "users"))) { + if ((status = find_user_in_tag(users, NULL, user_name, "id", NULL, user)) == SWITCH_STATUS_SUCCESS) { + if (ingroup) { + *ingroup = group; + } + break; + } + } + } + } + + return status; +} SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *key, const char *user_name, From anthm at freeswitch.org Mon Dec 29 14:41:04 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 29 Dec 2008 17:41:04 -0500 Subject: [Freeswitch-trunk] [commit] r10994 - freeswitch/trunk/src Message-ID: Author: anthm Date: Mon Dec 29 17:41:03 2008 New Revision: 10994 Log: fix FSCORE-261 Modified: freeswitch/trunk/src/switch_core.c Modified: freeswitch/trunk/src/switch_core.c ============================================================================== --- freeswitch/trunk/src/switch_core.c (original) +++ freeswitch/trunk/src/switch_core.c Mon Dec 29 17:41:03 2008 @@ -168,7 +168,7 @@ SWITCH_DECLARE(void) switch_core_remove_state_handler(const switch_state_handler_table_t *state_handler) { - int index, total = 0; + int index, tmp_index = 0; const switch_state_handler_table_t *tmp[SWITCH_MAX_STATE_HANDLERS+1] = { 0 }; switch_mutex_lock(runtime.global_mutex); @@ -179,13 +179,12 @@ if (cur == state_handler) { continue; } - tmp[index] = runtime.state_handlers[index]; - total++; + tmp[tmp_index++] = cur; } runtime.state_handler_index = 0; - for (index = 0; index < total; index++) { + for (index = 0; index < tmp_index; index++) { runtime.state_handlers[runtime.state_handler_index++] = tmp[index]; } switch_mutex_unlock(runtime.global_mutex); From mcollins at freeswitch.org Mon Dec 29 15:32:48 2008 From: mcollins at freeswitch.org (FreeSWITCH SVN) Date: Mon, 29 Dec 2008 18:32:48 -0500 Subject: [Freeswitch-trunk] [commit] r10995 - freeswitch/trunk/debian Message-ID: Author: mcollins Date: Mon Dec 29 18:32:48 2008 New Revision: 10995 Log: Update debian/changelog with 1.0.2 changes Modified: freeswitch/trunk/debian/changelog Modified: freeswitch/trunk/debian/changelog ============================================================================== --- freeswitch/trunk/debian/changelog (original) +++ freeswitch/trunk/debian/changelog Mon Dec 29 18:32:48 2008 @@ -1,3 +1,296 @@ +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 @@ -295,7 +588,7 @@ 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 From anthm at freeswitch.org Mon Dec 29 15:38:59 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 29 Dec 2008 18:38:59 -0500 Subject: [Freeswitch-trunk] [commit] r10996 - freeswitch/trunk/src Message-ID: Author: anthm Date: Mon Dec 29 18:38:59 2008 New Revision: 10996 Log: dont transmit console replies over the logger engine Modified: freeswitch/trunk/src/switch_console.c Modified: freeswitch/trunk/src/switch_console.c ============================================================================== --- freeswitch/trunk/src/switch_console.c (original) +++ freeswitch/trunk/src/switch_console.c Mon Dec 29 18:38:59 2008 @@ -249,10 +249,18 @@ SWITCH_STANDARD_STREAM(stream); if (stream.data) { + FILE *handle = switch_core_get_console(); + if (switch_api_execute(cmd, arg, NULL, &stream) == SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_CONSOLE, "API CALL [%s(%s)] output:\n%s\n", cmd, arg ? arg : "", (char *) stream.data); + if (handle) { + fprintf(handle, "API CALL [%s(%s)] output:\n%s\n", cmd, arg ? arg : "", (char *) stream.data); + fflush(handle); + } } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Unknown Command: %s\n", cmd); + if (handle) { + fprintf(handle, "Unknown Command: %s\n", cmd); + fflush(handle); + } } free(stream.data); } else { From anthm at freeswitch.org Mon Dec 29 16:31:15 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Mon, 29 Dec 2008 19:31:15 -0500 Subject: [Freeswitch-trunk] [commit] r10997 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Mon Dec 29 19:31:15 2008 New Revision: 10997 Log: update Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Mon Dec 29 19:31:15 2008 @@ -83,30 +83,26 @@ if (!esl_strlen_zero(type)) { if (!strcasecmp(type, "log/data")) { - int level = 0, tchannel = 0; + int level = 0; const char *lname = esl_event_get_header(handle->last_event, "log-level"); - const char *channel = esl_event_get_header(handle->last_event, "text-channel"); - //const char *file = esl_event_get_header(handle->last_event, "log-file"); - - if (channel) { - tchannel = atoi(channel); - } - +#ifdef WIN32 + DWORD len = (DWORD) strlen(handle->last_event->body); + DWORD outbytes = 0; +#endif if (lname) { level = atoi(lname); } - if (tchannel == 0) { + #ifdef WIN32 - DWORD len = (DWORD) strlen(handle->last_event->body); - DWORD outbytes = 0; - SetConsoleTextAttribute(hStdout, COLORS[level]); - WriteFile(hStdout, handle->last_event->body, len, &outbytes, NULL); - SetConsoleTextAttribute(hStdout, wOldColorAttrs); + + SetConsoleTextAttribute(hStdout, COLORS[level]); + WriteFile(hStdout, handle->last_event->body, len, &outbytes, NULL); + SetConsoleTextAttribute(hStdout, wOldColorAttrs); #else - printf("%s%s%s", COLORS[level], handle->last_event->body, ESL_SEQ_DEFAULT_COLOR); + printf("%s%s%s", COLORS[level], handle->last_event->body, ESL_SEQ_DEFAULT_COLOR); #endif - } + known++; } else if (!strcasecmp(type, "text/disconnect-notice")) { running = thread_running = 0; From silik0n at freeswitch.org Mon Dec 29 17:24:32 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Mon, 29 Dec 2008 20:24:32 -0500 Subject: [Freeswitch-trunk] [commit] r10998 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Mon Dec 29 20:24:32 2008 New Revision: 10998 Log: tweak Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Mon Dec 29 20:24:32 2008 @@ -274,7 +274,7 @@ signal(SIGINT, handle_SIGINT); handle.debug = 0; - esl_global_set_default_logger(0); /* default debug level to 0 */ + esl_global_set_default_logger(2); /* default debug level to 2 */ for(;;) { int option_index = 0; From mikej at freeswitch.org Mon Dec 29 17:55:59 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Mon, 29 Dec 2008 20:55:59 -0500 Subject: [Freeswitch-trunk] [commit] r10999 - freeswitch/trunk/libs/esl Message-ID: Author: mikej Date: Mon Dec 29 20:55:59 2008 New Revision: 10999 Log: set default level Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Mon Dec 29 20:55:59 2008 @@ -274,7 +274,7 @@ signal(SIGINT, handle_SIGINT); handle.debug = 0; - esl_global_set_default_logger(2); /* default debug level to 2 */ + esl_global_set_default_logger(3); /* default debug level to 3 (error) */ for(;;) { int option_index = 0; From brian at freeswitch.org Tue Dec 30 07:10:21 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 10:10:21 -0500 Subject: [Freeswitch-trunk] [commit] r11001 - freeswitch/trunk/build Message-ID: Author: brian Date: Tue Dec 30 10:10:20 2008 New Revision: 11001 Log: bump sounds version Modified: freeswitch/trunk/build/sounds_version.txt Modified: freeswitch/trunk/build/sounds_version.txt ============================================================================== --- freeswitch/trunk/build/sounds_version.txt (original) +++ freeswitch/trunk/build/sounds_version.txt Tue Dec 30 10:10:20 2008 @@ -1 +1 @@ -1.0.6 +1.0.7 From mikej at freeswitch.org Tue Dec 30 07:45:17 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 10:45:17 -0500 Subject: [Freeswitch-trunk] [commit] r11002 - freeswitch/trunk/src Message-ID: Author: mikej Date: Tue Dec 30 10:45:17 2008 New Revision: 11002 Log: remove media bugs on hangup before api_hangup_hook is run Modified: freeswitch/trunk/src/switch_core_state_machine.c Modified: freeswitch/trunk/src/switch_core_state_machine.c ============================================================================== --- freeswitch/trunk/src/switch_core_state_machine.c (original) +++ freeswitch/trunk/src/switch_core_state_machine.c Tue Dec 30 10:45:17 2008 @@ -399,6 +399,8 @@ STATE_MACRO(hangup, "HANGUP"); + switch_core_media_bug_remove_all(session); + hook_var = switch_channel_get_variable(session->channel, SWITCH_API_HANGUP_HOOK_VARIABLE); if (switch_true(switch_channel_get_variable(session->channel, SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE))) { use_session = session; From mrene at freeswitch.org Tue Dec 30 09:08:00 2008 From: mrene at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 12:08:00 -0500 Subject: [Freeswitch-trunk] [commit] r11003 - freeswitch/trunk/src/mod/applications/mod_limit Message-ID: Author: mrene Date: Tue Dec 30 12:08:00 2008 New Revision: 11003 Log: MODAPP-188 Cleanup the limit_realm channel variable so we re-register the state handler if limit is called again Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Modified: freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c (original) +++ freeswitch/trunk/src/mod/applications/mod_limit/mod_limit.c Tue Dec 30 12:08:00 2008 @@ -285,6 +285,8 @@ limit_execute_sql(sql, globals.mutex); switch_safe_free(sql); switch_core_event_hook_remove_state_change(session, db_state_handler); + /* Remove limit_realm variable so we register another hook if limit is called again */ + switch_channel_set_variable(channel, "limit_realm", ""); } return SWITCH_STATUS_SUCCESS; } From anthm at freeswitch.org Tue Dec 30 10:23:42 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 13:23:42 -0500 Subject: [Freeswitch-trunk] [commit] r11005 - freeswitch/trunk/src/mod/endpoints/mod_iax Message-ID: Author: anthm Date: Tue Dec 30 13:23:42 2008 New Revision: 11005 Log: update Modified: freeswitch/trunk/src/mod/endpoints/mod_iax/mod_iax.c Modified: freeswitch/trunk/src/mod/endpoints/mod_iax/mod_iax.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_iax/mod_iax.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_iax/mod_iax.c Tue Dec 30 13:23:42 2008 @@ -496,6 +496,7 @@ switch_clear_flag_locked(tech_pvt, TFLAG_IO); switch_clear_flag_locked(tech_pvt, TFLAG_VOICE); + switch_clear_flag_locked(tech_pvt, TFLAG_CODEC); if (tech_pvt->read_codec.implementation) { switch_core_codec_destroy(&tech_pvt->read_codec); @@ -1079,17 +1080,16 @@ case IAX_EVENT_VOICE: if (tech_pvt && (tech_pvt->read_frame.datalen = iaxevent->datalen) != 0) { if (channel && switch_channel_get_state(channel) <= CS_HANGUP) { - int bytes, frames; + int bytes = 0, frames = 1; - if (!switch_test_flag(tech_pvt, TFLAG_CODEC)) { + if (!switch_test_flag(tech_pvt, TFLAG_CODEC) || !tech_pvt->read_codec.implementation) { + switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); break; } - + if (tech_pvt->read_codec.implementation->encoded_bytes_per_packet) { bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_packet; frames = (int) (tech_pvt->read_frame.datalen / bytes); - } else { - frames = 1; } tech_pvt->read_frame.samples = frames * tech_pvt->read_codec.implementation->samples_per_packet; From brian at freeswitch.org Tue Dec 30 11:50:34 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 14:50:34 -0500 Subject: [Freeswitch-trunk] [commit] r11006 - in freeswitch/trunk/src: . include mod/endpoints/mod_sofia Message-ID: Author: brian Date: Tue Dec 30 14:50:33 2008 New Revision: 11006 Log: add t38 skeleton Modified: freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c freeswitch/trunk/src/switch_core_session.c Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Tue Dec 30 14:50:33 2008 @@ -606,9 +606,23 @@ SWITCH_MESSAGE_INDICATE_DISPLAY, SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY, SWITCH_MESSAGE_INDICATE_AUDIO_SYNC, + SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA, SWITCH_MESSAGE_INVALID } switch_core_session_message_types_t; +typedef struct { + uint32_t T38MaxBitRate; + switch_bool_t T38FaxFillBitRemoval; + switch_bool_t T38FaxTranscodingMMR; + switch_bool_t T38FaxTranscodingJBIG; + const char *T38FaxRateManagement; + uint32_t T38FaxMaxBuffer; + uint32_t T38FaxMaxDatagram; + const char *T38FaxUdpEC; + const char *T38VendorInfo; + const char *ip; + uint32_t port; +} switch_t38_options_t; /*! \enum switch_stack_t Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Tue Dec 30 14:50:33 2008 @@ -1054,13 +1054,30 @@ case SWITCH_MESSAGE_INDICATE_MEDIA_REDIRECT: { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending media re-direct:\n%s\n", msg->string_arg); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Sending media re-direct:\n%s\n", + switch_channel_get_name(channel), msg->string_arg); tech_pvt->local_sdp_str = switch_core_session_strdup(session, msg->string_arg); switch_set_flag_locked(tech_pvt, TFLAG_SENT_UPDATE); sofia_glue_do_invite(session); } break; + + case SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA: + { + switch_t38_options_t *t38_options = (switch_t38_options_t *) msg->pointer_arg; + + sofia_glue_set_image_sdp(tech_pvt, t38_options); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Sending request for image media. %s\n", + switch_channel_get_name(channel), tech_pvt->local_sdp_str); + + + switch_set_flag_locked(tech_pvt, TFLAG_SENT_UPDATE); + sofia_glue_do_invite(session); + } + break; + case SWITCH_MESSAGE_INDICATE_MEDIA: { uint32_t send_invite = 1; Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h Tue Dec 30 14:50:33 2008 @@ -761,3 +761,4 @@ const char * sofia_state_string(int state); switch_status_t sofia_glue_tech_set_codec(private_object_t *tech_pvt, int force); void sofia_wait_for_reply(struct private_object *tech_pvt, nua_event_t event, uint32_t timeout); +void sofia_glue_set_image_sdp(private_object_t *tech_pvt, switch_t38_options_t *t38_options); Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Tue Dec 30 14:50:33 2008 @@ -35,6 +35,75 @@ #include "mod_sofia.h" #include +void sofia_glue_set_image_sdp(private_object_t *tech_pvt, switch_t38_options_t *t38_options) +{ + char buf[2048]; + const char *ip = t38_options->ip; + uint32_t port = t38_options->port; + const char *family = "IP4"; + + if (!ip) { + if (!(ip = tech_pvt->adv_sdp_audio_ip)) { + ip = tech_pvt->proxy_sdp_audio_ip; + } + } + + if (!port) { + if (!(port = tech_pvt->adv_sdp_audio_port)) { + port = tech_pvt->proxy_sdp_audio_port; + } + } + + if (!tech_pvt->owner_id) { + tech_pvt->owner_id = (uint32_t) switch_timestamp(NULL) - port; + } + + if (!tech_pvt->session_id) { + tech_pvt->session_id = tech_pvt->owner_id; + } + + tech_pvt->session_id++; + + family = strchr(ip, ':') ? "IP6" : "IP4"; + switch_snprintf(buf, sizeof(buf), + "v=0\n" + "o=FreeSWITCH %010u %010u IN %s %s\n" + "s=FreeSWITCH\n" + "c=IN %s %s\n" + "t=0 0\n" + "m=image %d udptl t38\n", + "a=T38MaxBitRate:%d\n" + "%s" + "%s" + "%s" + "a=T38FaxRateManagement:%s\n" + "a=T38FaxMaxBuffer:%d\n" + "a=T38FaxMaxDatagram:%d\n" + "a=T38FaxUdpEC:%s\n" + "a=T38VendorInfo:%s\n", + + tech_pvt->owner_id, + tech_pvt->session_id, + family, + ip, + family, + ip, + port, + + t38_options->T38MaxBitRate, + t38_options->T38FaxFillBitRemoval ? "a=T38FaxFillBitRemoval\n" : "", + t38_options->T38FaxTranscodingMMR ? "a=T38FaxTranscodingMMR\n" : "", + t38_options->T38FaxTranscodingJBIG ? "a=T38FaxTranscodingJBIG\n" : "", + t38_options->T38FaxRateManagement, + t38_options->T38FaxMaxBuffer, + t38_options->T38FaxMaxDatagram, + t38_options->T38FaxUdpEC, + t38_options->T38VendorInfo + ); + + + tech_pvt->local_sdp_str = switch_core_session_strdup(tech_pvt->session, buf); +} void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, uint32_t port, const char *sr, int force) { @@ -2189,7 +2258,7 @@ switch_channel_t *channel = switch_core_session_get_channel(session); const char *val; const char *crypto = NULL; - int got_crypto = 0, got_audio = 0, got_avp = 0, got_savp = 0; + int got_crypto = 0, got_audio = 0, got_avp = 0, got_savp = 0, got_udptl = 0; switch_assert(tech_pvt != NULL); @@ -2250,9 +2319,42 @@ got_savp++; } else if (m->m_proto == sdp_proto_rtp) { got_avp++; + } else if (m->m_proto == sdp_proto_udptl) { + got_udptl++; } - if (m->m_type == sdp_media_audio && m->m_port && !got_audio) { + if (got_udptl && m->m_type == sdp_media_image && m->m_port) { + switch_t38_options_t *t38_options = switch_core_session_alloc(tech_pvt->session, sizeof(switch_t38_options_t)); + + for (attr = m->m_attributes; attr; attr = attr->a_next) { + if (!strcasecmp(attr->a_name, "T38MaxBitRate") && attr->a_value) { + t38_options->T38MaxBitRate = (uint32_t) atoi(attr->a_value); + } else if (!strcasecmp(attr->a_name, "T38FaxFillBitRemoval")) { + t38_options->T38FaxFillBitRemoval = SWITCH_TRUE; + } else if (!strcasecmp(attr->a_name, "T38FaxTranscodingMMR")) { + t38_options->T38FaxTranscodingMMR = SWITCH_TRUE; + } else if (!strcasecmp(attr->a_name, "T38FaxTranscodingJBIG")) { + t38_options->T38FaxTranscodingJBIG = SWITCH_TRUE; + } else if (!strcasecmp(attr->a_name, "T38FaxRateManagement") && attr->a_value) { + t38_options->T38FaxRateManagement = switch_core_session_strdup(tech_pvt->session, attr->a_value); + } else if (!strcasecmp(attr->a_name, "T38FaxMaxBuffer") && attr->a_value) { + t38_options->T38FaxMaxBuffer = (uint32_t) atoi(attr->a_value); + } else if (!strcasecmp(attr->a_name, "T38FaxMaxDatagram") && attr->a_value) { + t38_options->T38FaxMaxDatagram = (uint32_t) atoi(attr->a_value); + } else if (!strcasecmp(attr->a_name, "T38FaxUdpEC") && attr->a_value) { + t38_options->T38FaxUdpEC = switch_core_session_strdup(tech_pvt->session, attr->a_value); + } else if (!strcasecmp(attr->a_name, "T38VendorInfo") && attr->a_value) { + t38_options->T38VendorInfo = switch_core_session_strdup(tech_pvt->session, attr->a_value); + } + } + + switch_channel_set_variable(tech_pvt->channel, "has_t38", "true"); + switch_channel_set_private(tech_pvt->channel, "t38_options", t38_options); + + switch_channel_set_flag(tech_pvt->channel, CF_PROXY_MEDIA); + switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA); + + } else if (m->m_type == sdp_media_audio && m->m_port && !got_audio) { sdp_rtpmap_t *map; for (attr = m->m_attributes; attr; attr = attr->a_next) { Modified: freeswitch/trunk/src/switch_core_session.c ============================================================================== --- freeswitch/trunk/src/switch_core_session.c (original) +++ freeswitch/trunk/src/switch_core_session.c Tue Dec 30 14:50:33 2008 @@ -421,28 +421,29 @@ } static const char *message_names[] = { - "SWITCH_MESSAGE_REDIRECT_AUDIO", - "SWITCH_MESSAGE_TRANSMIT_TEXT", - "SWITCH_MESSAGE_INDICATE_ANSWER", - "SWITCH_MESSAGE_INDICATE_PROGRESS", - "SWITCH_MESSAGE_INDICATE_BRIDGE", - "SWITCH_MESSAGE_INDICATE_UNBRIDGE", - "SWITCH_MESSAGE_INDICATE_TRANSFER", - "SWITCH_MESSAGE_INDICATE_RINGING", - "SWITCH_MESSAGE_INDICATE_MEDIA", - "SWITCH_MESSAGE_INDICATE_NOMEDIA", - "SWITCH_MESSAGE_INDICATE_HOLD", - "SWITCH_MESSAGE_INDICATE_UNHOLD", - "SWITCH_MESSAGE_INDICATE_REDIRECT", - "SWITCH_MESSAGE_INDICATE_RESPOND", - "SWITCH_MESSAGE_INDICATE_BROADCAST", - "SWITCH_MESSAGE_INDICATE_MEDIA_REDIRECT", - "SWITCH_MESSAGE_INDICATE_DEFLECT", - "SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ", - "SWITCH_MESSAGE_INDICATE_DISPLAY", - "SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY", - "SWITCH_MESSAGE_INDICATE_AUDIO_SYNC", - "SWITCH_MESSAGE_INVALID" + "REDIRECT_AUDIO", + "TRANSMIT_TEXT", + "ANSWER", + "PROGRESS", + "BRIDGE", + "UNBRIDGE", + "TRANSFER", + "RINGING", + "MEDIA", + "NOMEDIA", + "HOLD", + "UNHOLD", + "REDIRECT", + "RESPOND", + "BROADCAST", + "MEDIA_REDIRECT", + "DEFLECT", + "VIDEO_REFRESH_REQ", + "DISPLAY", + "TRANSCODING_NECESSARY", + "AUDIO_SYNC", + "REQUEST_IMAGE_MEDIA", + "INVALID" }; SWITCH_DECLARE(switch_status_t) switch_core_session_perform_receive_message(switch_core_session_t *session, From anthm at freeswitch.org Tue Dec 30 12:19:07 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 15:19:07 -0500 Subject: [Freeswitch-trunk] [commit] r11007 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Tue Dec 30 15:19:06 2008 New Revision: 11007 Log: update Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Tue Dec 30 15:19:06 2008 @@ -734,7 +734,8 @@ const char *val; int rtp_timeout_sec = 0; int rtp_hold_timeout_sec = 0; - + + tech_pvt->read_frame.datalen = 0; tech_pvt->codec_ms = codec_ms; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Changing codec ptime to %d. I bet you have a linksys/sipura =D\n", tech_pvt->codec_ms); @@ -809,6 +810,10 @@ frames = (tech_pvt->read_frame.datalen / bytes); } tech_pvt->read_frame.samples = (int) (frames * tech_pvt->read_codec.implementation->samples_per_packet); + + if (tech_pvt->read_frame.datalen == 0) { + continue; + } } break; } From anthm at freeswitch.org Tue Dec 30 13:28:29 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 16:28:29 -0500 Subject: [Freeswitch-trunk] [commit] r11008 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Tue Dec 30 16:28:29 2008 New Revision: 11008 Log: update Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Tue Dec 30 16:28:29 2008 @@ -127,11 +127,28 @@ static int process_command(esl_handle_t *handle, const char *cmd) { + + if (!strcasecmp(cmd, "help")) { + printf( + "Command \tDescription\n" + "-----------------------------------------------\n" + "/help \tHelp\n" + "/exit, /quit, /bye, ... \tExit the program.\n" + "/event, /noevent, /nixevent\tEvent commands.\n" + "/log, /nolog \tLog commands.\n" + "/filter \tFilter commands.\n" + "\n" + ); + + goto end; + } + if ( !strcasecmp(cmd, "exit") || !strcasecmp(cmd, "quit") || !strcasecmp(cmd, "bye") ) { + esl_log(ESL_LOG_INFO, "Goodbye!\nSee you at ClueCon http://www.cluecon.com\n"); return -1; } @@ -218,6 +235,29 @@ } #endif + +static void print_banner(FILE *stream) +{ + fprintf(stream, + + + " _____ ____ ____ _ ___ \n" + " | ___/ ___| / ___| | |_ _| \n" + " | |_ \\___ \\ | | | | | | \n" + " | _| ___) | | |___| |___ | | \n" + " |_| |____/ \\____|_____|___| \n" + "\n" + "****************************************************\n" + "* Anthony Minessale II, Ken Rice, Michael Jerris *\n" + "* FreeSWITCH (http://www.freeswitch.org) *\n" + "* Brought to you by ClueCon http://www.cluecon.com *\n" + "****************************************************\n" + "\n\n" + ); +} + + + int main(int argc, char *argv[]) { esl_handle_t handle = {{0}}; @@ -274,7 +314,7 @@ signal(SIGINT, handle_SIGINT); handle.debug = 0; - esl_global_set_default_logger(3); /* default debug level to 3 (error) */ + esl_global_set_default_logger(6); /* default debug level to 6 (info) */ for(;;) { int option_index = 0; @@ -339,7 +379,7 @@ esl_set_string(profiles[cur].host, "localhost"); esl_set_string(profiles[cur].pass, "ClueCon"); profiles[cur].port = 8021; - esl_log(ESL_LOG_INFO, "Found Profile [%s]\n", profiles[cur].name); + esl_log(ESL_LOG_DEBUG, "Found Profile [%s]\n", profiles[cur].name); pcount++; } @@ -364,10 +404,10 @@ if (optind < argc) { if (get_profile(argv[optind], &profile)) { - esl_log(ESL_LOG_INFO, "Chosen profile %s does not exist using builtin default\n", argv[optind]); + esl_log(ESL_LOG_DEBUG, "Chosen profile %s does not exist using builtin default\n", argv[optind]); profile = &profiles[0]; } else { - esl_log(ESL_LOG_INFO, "Chosen profile %s\n", profile->name); + esl_log(ESL_LOG_DEBUG, "Chosen profile %s\n", profile->name); if (temp_log < 0 ) { esl_global_set_default_logger(profile->debug); } @@ -384,7 +424,7 @@ esl_set_string(profile->pass, temp_pass); } - esl_log(ESL_LOG_INFO, "Using profile %s [%s]\n", profile->name, profile->host); + esl_log(ESL_LOG_DEBUG, "Using profile %s [%s]\n", profile->name, profile->host); if (argv_host) { if (argv_port && profile->port != 8021) { @@ -439,6 +479,8 @@ snprintf(cmd_str, sizeof(cmd_str), "log info\n\n"); esl_send_recv(&handle, cmd_str); + print_banner(stdout); + esl_log(ESL_LOG_INFO, "FS CLI Ready.\n"); while (running) { @@ -469,8 +511,10 @@ #endif if (!strncasecmp(cmd, "...", 3)) { - goto done; - } else if (*cmd == '/') { + if (process_command(&handle, "exit")) { + running = 0; + } + } else if (*cmd == '/' || !strncasecmp(cmd, "...", 3)) { if (process_command(&handle, cmd + 1)) { running = 0; } From anthm at freeswitch.org Tue Dec 30 13:34:59 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 16:34:59 -0500 Subject: [Freeswitch-trunk] [commit] r11009 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Tue Dec 30 16:34:59 2008 New Revision: 11009 Log: update Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Tue Dec 30 16:34:59 2008 @@ -481,7 +481,7 @@ print_banner(stdout); - esl_log(ESL_LOG_INFO, "FS CLI Ready.\n"); + esl_log(ESL_LOG_INFO, "FS CLI Ready.\nenter /help for a list of commands.\n"); while (running) { From anthm at freeswitch.org Tue Dec 30 15:31:50 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 18:31:50 -0500 Subject: [Freeswitch-trunk] [commit] r11010 - freeswitch/trunk/src Message-ID: Author: anthm Date: Tue Dec 30 18:31:50 2008 New Revision: 11010 Log: ptime tweak Modified: freeswitch/trunk/src/switch_core_io.c Modified: freeswitch/trunk/src/switch_core_io.c ============================================================================== --- freeswitch/trunk/src/switch_core_io.c (original) +++ freeswitch/trunk/src/switch_core_io.c Tue Dec 30 18:31:50 2008 @@ -645,6 +645,7 @@ if (!need_codec) { do_write = TRUE; + write_frame = frame; goto done; } @@ -987,9 +988,14 @@ switch_mutex_unlock(session->resample_mutex); } + if (flag & SFF_CNG) { switch_set_flag(write_frame, SFF_CNG); } + + if (ptime_mismatch) { + write_frame->timestamp = 0; + } if ((status = perform_write(session, write_frame, flags, stream_id)) != SWITCH_STATUS_SUCCESS) { break; @@ -1003,8 +1009,12 @@ done: + if (ptime_mismatch) { + write_frame->timestamp = 0; + } + if (do_write) { - status = perform_write(session, frame, flags, stream_id); + status = perform_write(session, write_frame, flags, stream_id); } error: From anthm at freeswitch.org Tue Dec 30 17:08:52 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 20:08:52 -0500 Subject: [Freeswitch-trunk] [commit] r11011 - in freeswitch/trunk/src: . include mod/applications/mod_conference mod/applications/mod_dptools mod/endpoints/mod_sofia Message-ID: Author: anthm Date: Tue Dec 30 20:08:51 2008 New Revision: 11011 Log: a few changes Modified: freeswitch/trunk/src/include/switch_ivr.h freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/trunk/src/switch_core_io.c freeswitch/trunk/src/switch_ivr_async.c freeswitch/trunk/src/switch_ivr_bridge.c Modified: freeswitch/trunk/src/include/switch_ivr.h ============================================================================== --- freeswitch/trunk/src/include/switch_ivr.h (original) +++ freeswitch/trunk/src/include/switch_ivr.h Tue Dec 30 20:08:51 2008 @@ -780,7 +780,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_bind_dtmf_meta_session(switch_core_session_t *session, uint32_t key, switch_bind_flag_t bind_flags, const char *app); - SWITCH_DECLARE(switch_status_t) switch_ivr_unbind_dtmf_meta_session(switch_core_session_t *session); + SWITCH_DECLARE(switch_status_t) switch_ivr_unbind_dtmf_meta_session(switch_core_session_t *session, uint32_t key); SWITCH_DECLARE(switch_status_t) switch_ivr_soft_hold(switch_core_session_t *session, const char *unhold_key, const char *moh_a, const char *moh_b); SWITCH_DECLARE(switch_status_t) switch_ivr_say(switch_core_session_t *session, const char *tosay, const char *module_name, const char *say_type, const char *say_method, switch_input_args_t *args); Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Tue Dec 30 20:08:51 2008 @@ -179,7 +179,8 @@ SBF_DIAL_BLEG = (1 << 2), SBF_EXEC_BLEG = (1 << 3), SBF_EXEC_OPPOSITE = (1 << 4), - SBF_EXEC_SAME = (1 << 5) + SBF_EXEC_SAME = (1 << 5), + SBF_ONCE = (1 << 6) } switch_bind_flag_enum_t; typedef uint32_t switch_bind_flag_t; Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c (original) +++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Tue Dec 30 20:08:51 2008 @@ -1790,8 +1790,9 @@ const char *toval = switch_channel_get_variable(channel, "conference_auto_outcall_timeout"); const char *flags = switch_channel_get_variable(channel, "conference_auto_outcall_flags"); const char *ann = switch_channel_get_variable(channel, "conference_auto_outcall_announce"); + const char *prefix = switch_channel_get_variable(channel, "conference_auto_outcall_prefix"); int to = 60; - + if (ann) { member->conference->special_announce = switch_core_strdup(member->conference->pool, ann); } @@ -1806,7 +1807,20 @@ } for (cp = call_list; cp; cp = cp->next) { - conference_outcall_bg(member->conference, NULL, NULL, cp->string, to, switch_str_nil(flags), cid_name, cid_num); + int argc; + char *argv[512] = { 0 }; + char *cpstr = strdup(cp->string); + int x = 0; + + switch_assert(cpstr); + argc = switch_separate_string(cpstr, ',', argv, (sizeof(argv) / sizeof(argv[0]))); + for (x = 0; x < argc; x++) { + char *dial_str = switch_mprintf("%s%s", switch_str_nil(prefix), argv[x]); + switch_assert(dial_str); + conference_outcall_bg(member->conference, NULL, NULL, dial_str, to, switch_str_nil(flags), cid_name, cid_num); + switch_safe_free(dial_str); + } + switch_safe_free(cpstr); } } /* Fair WARNING, If you expect the caller to hear anything or for digit handling to be processed, */ @@ -3881,7 +3895,7 @@ goto done; } /* add them to the conference */ - if (flags && !strcasecmp(flags, "none")) { + if (flags && strcasecmp(flags, "none")) { switch_snprintf(appdata, sizeof(appdata), "%s+flags{%s}", conference_name, flags); switch_caller_extension_add_application(peer_session, extension, (char *) global_app_name, appdata); } else { @@ -4059,15 +4073,20 @@ if (flags) { if (strstr(flags, "mute")) { *f &= ~MFLAG_CAN_SPEAK; - } else if (strstr(flags, "deaf")) { + } + + if (strstr(flags, "deaf")) { *f &= ~MFLAG_CAN_HEAR; - } else if (strstr(flags, "waste")) { + } + + if (strstr(flags, "waste")) { *f |= MFLAG_WASTE_BANDWIDTH; - } else if (strstr(flags, "endconf")) { + } + + if (strstr(flags, "endconf")) { *f |= MFLAG_ENDCONF; } } - } static void clear_eflags(char *events, uint32_t *f) Modified: freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c (original) +++ freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c Tue Dec 30 20:08:51 2008 @@ -148,7 +148,21 @@ } } -#define BIND_SYNTAX " [a|b|ab] [a|b|o|s] " +#define UNBIND_SYNTAX "[]" +SWITCH_STANDARD_APP(dtmf_unbind_function) +{ + char *key = (char *) data; + int kval = 0; + + if (key) { + kval = atoi(key); + } + + switch_ivr_unbind_dtmf_meta_session(session, kval); + +} + +#define BIND_SYNTAX " [a|b|ab] [a|b|o|s|1] " SWITCH_STANDARD_APP(dtmf_bind_function) { char *argv[4] = { 0 }; @@ -208,6 +222,10 @@ } } + if (strchr(argv[2], '1')) { + bind_flags |= SBF_ONCE; + } + if (switch_ivr_bind_dtmf_meta_session(session, kval, bind_flags, argv[3]) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Bind Error!\n"); } @@ -2514,6 +2532,8 @@ SAF_NONE); SWITCH_ADD_APP(app_interface, "bind_meta_app", "Bind a key to an application", "Bind a key to an application", dtmf_bind_function, BIND_SYNTAX, SAF_SUPPORT_NOMEDIA); + SWITCH_ADD_APP(app_interface, "unbind_meta_app", "Unbind a key from an application", "Unbind a key from an application", dtmf_unbind_function, + UNBIND_SYNTAX, SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "intercept", "intercept", "intercept", intercept_function, INTERCEPT_SYNTAX, SAF_NONE); SWITCH_ADD_APP(app_interface, "eavesdrop", "eavesdrop on a uuid", "eavesdrop on a uuid", eavesdrop_function, eavesdrop_SYNTAX, SAF_NONE); SWITCH_ADD_APP(app_interface, "three_way", "three way call with a uuid", "three way call with a uuid", three_way_function, threeway_SYNTAX, SAF_NONE); Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Tue Dec 30 20:08:51 2008 @@ -2316,6 +2316,7 @@ private_object_t *tech_pvt = NULL; switch_channel_t *nchannel; char *host = NULL, *dest_to = NULL; + const char *hval = NULL; *new_session = NULL; @@ -2520,6 +2521,11 @@ *new_session = nsession; cause = SWITCH_CAUSE_SUCCESS; + if ((hval = switch_event_get_header(var_event, "sip_auto_answer")) && switch_true(hval)) { + switch_channel_set_variable_printf(nchannel, "sip_h_Call-Info", ";answer-after=0", profile->sipip); + switch_channel_set_variable(nchannel, "sip_invite_params", "intercom=true"); + } + if (session) { switch_channel_t *o_channel = switch_core_session_get_channel(session); Modified: freeswitch/trunk/src/switch_core_io.c ============================================================================== --- freeswitch/trunk/src/switch_core_io.c (original) +++ freeswitch/trunk/src/switch_core_io.c Tue Dec 30 20:08:51 2008 @@ -571,7 +571,7 @@ switch_status_t status = SWITCH_STATUS_FALSE; switch_frame_t *enc_frame = NULL, *write_frame = frame; - unsigned int flag = 0, need_codec = 0, perfect = 0, do_bugs = 0, do_write = 0, do_resample = 0, ptime_mismatch = 0, pass_cng = 0; + unsigned int flag = 0, need_codec = 0, perfect = 0, do_bugs = 0, do_write = 0, do_resample = 0, ptime_mismatch = 0, pass_cng = 0, resample = 0; switch_assert(session != NULL); switch_assert(frame != NULL); @@ -675,6 +675,7 @@ switch (status) { case SWITCH_STATUS_RESAMPLE: + resample++; write_frame = &session->raw_write_frame; if (!session->write_resampler) { switch_mutex_lock(session->resample_mutex); @@ -843,6 +844,7 @@ switch (status) { case SWITCH_STATUS_RESAMPLE: + resample++; /* switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Fixme 2\n"); */ case SWITCH_STATUS_SUCCESS: session->enc_write_frame.codec = session->write_codec; @@ -917,6 +919,7 @@ &session->enc_write_frame.datalen, &session->enc_write_frame.rate, &flag); switch (status) { case SWITCH_STATUS_RESAMPLE: + resample++; session->enc_write_frame.codec = session->write_codec; session->enc_write_frame.samples = enc_frame->datalen / sizeof(int16_t); session->enc_write_frame.m = frame->m; @@ -993,7 +996,7 @@ switch_set_flag(write_frame, SFF_CNG); } - if (ptime_mismatch) { + if (ptime_mismatch || resample) { write_frame->timestamp = 0; } @@ -1009,7 +1012,7 @@ done: - if (ptime_mismatch) { + if (ptime_mismatch || resample) { write_frame->timestamp = 0; } Modified: freeswitch/trunk/src/switch_ivr_async.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_async.c (original) +++ freeswitch/trunk/src/switch_ivr_async.c Tue Dec 30 20:08:51 2008 @@ -1521,6 +1521,13 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Processing meta digit '%c' [%s]\n", switch_channel_get_name(channel), dtmf->digit, md->sr[direction].map[dval].app); switch_ivr_broadcast(switch_core_session_get_uuid(session), md->sr[direction].map[dval].app, flags); + + if ((md->sr[direction].map[dval].bind_flags & SBF_ONCE)) { + memset(&md->sr[direction].map[dval], 0, sizeof(md->sr[direction].map[dval])); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Unbinding meta digit '%c'\n", + switch_channel_get_name(channel), dtmf->digit); + } + } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s Ignoring meta digit '%c' not mapped\n", switch_channel_get_name(channel), dtmf->digit); @@ -1534,10 +1541,26 @@ return SWITCH_STATUS_SUCCESS; } -SWITCH_DECLARE(switch_status_t) switch_ivr_unbind_dtmf_meta_session(switch_core_session_t *session) +SWITCH_DECLARE(switch_status_t) switch_ivr_unbind_dtmf_meta_session(switch_core_session_t *session, uint32_t key) { switch_channel_t *channel = switch_core_session_get_channel(session); - switch_channel_set_private(channel, SWITCH_META_VAR_KEY, NULL); + + if (key) { + dtmf_meta_data_t *md = switch_channel_get_private(channel, SWITCH_META_VAR_KEY); + + if (!md || key > 9) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid key %u\n", key); + return SWITCH_STATUS_FALSE; + } + + memset(&md->sr[SWITCH_DTMF_RECV].map[key], 0, sizeof(md->sr[SWITCH_DTMF_RECV].map[key])); + memset(&md->sr[SWITCH_DTMF_SEND].map[key], 0, sizeof(md->sr[SWITCH_DTMF_SEND].map[key])); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "UnBound A-Leg: %d\n", key); + + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "UnBound A-Leg: ALL\n"); + switch_channel_set_private(channel, SWITCH_META_VAR_KEY, NULL); + } return SWITCH_STATUS_SUCCESS; } Modified: freeswitch/trunk/src/switch_ivr_bridge.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_bridge.c (original) +++ freeswitch/trunk/src/switch_ivr_bridge.c Tue Dec 30 20:08:51 2008 @@ -1187,7 +1187,7 @@ switch_channel_answer(rchannel); } - switch_channel_set_state_flag(rchannel, CF_TRANSFER); + switch_channel_set_state_flag(rchannel, CF_TRANSFER); switch_channel_set_state(rchannel, CS_PARK); if (bchannel) { From brian at freeswitch.org Tue Dec 30 18:31:42 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 21:31:42 -0500 Subject: [Freeswitch-trunk] [commit] r11012 - freeswitch/trunk/conf/dialplan Message-ID: Author: brian Date: Tue Dec 30 21:31:42 2008 New Revision: 11012 Log: more goodies Modified: freeswitch/trunk/conf/dialplan/default.xml Modified: freeswitch/trunk/conf/dialplan/default.xml ============================================================================== --- freeswitch/trunk/conf/dialplan/default.xml (original) +++ freeswitch/trunk/conf/dialplan/default.xml Tue Dec 30 21:31:42 2008 @@ -188,13 +188,8 @@ - - - - ;answer-after=0]]> - @@ -320,21 +315,36 @@ + + + + + + + + + + + + + + - - - From brian at freeswitch.org Tue Dec 30 18:32:28 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 21:32:28 -0500 Subject: [Freeswitch-trunk] [commit] r11013 - freeswitch/trunk/conf/dialplan Message-ID: Author: brian Date: Tue Dec 30 21:32:28 2008 New Revision: 11013 Log: even more Modified: freeswitch/trunk/conf/dialplan/default.xml Modified: freeswitch/trunk/conf/dialplan/default.xml ============================================================================== --- freeswitch/trunk/conf/dialplan/default.xml (original) +++ freeswitch/trunk/conf/dialplan/default.xml Tue Dec 30 21:32:28 2008 @@ -322,20 +322,39 @@ --> - + - + + + + + + + + + + + + + + + + - + @@ -345,7 +364,7 @@ - + From brian at freeswitch.org Tue Dec 30 18:39:08 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 21:39:08 -0500 Subject: [Freeswitch-trunk] [commit] r11014 - freeswitch/trunk/conf/dialplan Message-ID: Author: brian Date: Tue Dec 30 21:39:08 2008 New Revision: 11014 Log: doh Modified: freeswitch/trunk/conf/dialplan/default.xml Modified: freeswitch/trunk/conf/dialplan/default.xml ============================================================================== --- freeswitch/trunk/conf/dialplan/default.xml (original) +++ freeswitch/trunk/conf/dialplan/default.xml Tue Dec 30 21:39:08 2008 @@ -339,7 +339,7 @@ All other callers are then hung up on. --> - + From brian at freeswitch.org Tue Dec 30 18:41:30 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 21:41:30 -0500 Subject: [Freeswitch-trunk] [commit] r11015 - freeswitch/trunk/conf/sip_profiles Message-ID: Author: brian Date: Tue Dec 30 21:41:29 2008 New Revision: 11015 Log: how the hell did this happen... thanks dasbus Modified: freeswitch/trunk/conf/sip_profiles/internal-ipv6.xml Modified: freeswitch/trunk/conf/sip_profiles/internal-ipv6.xml ============================================================================== --- freeswitch/trunk/conf/sip_profiles/internal-ipv6.xml (original) +++ freeswitch/trunk/conf/sip_profiles/internal-ipv6.xml Tue Dec 30 21:41:29 2008 @@ -115,17 +115,6 @@ - - - - - - - - - - - From brian at freeswitch.org Tue Dec 30 20:33:07 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 23:33:07 -0500 Subject: [Freeswitch-trunk] [commit] r11016 - freeswitch/trunk/conf/dialplan Message-ID: Author: brian Date: Tue Dec 30 23:33:07 2008 New Revision: 11016 Log: go forth and anoy less Modified: freeswitch/trunk/conf/dialplan/default.xml Modified: freeswitch/trunk/conf/dialplan/default.xml ============================================================================== --- freeswitch/trunk/conf/dialplan/default.xml (original) +++ freeswitch/trunk/conf/dialplan/default.xml Tue Dec 30 23:33:07 2008 @@ -346,8 +346,7 @@ - - + @@ -362,8 +361,7 @@ - - + From brian at freeswitch.org Tue Dec 30 20:33:30 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 23:33:30 -0500 Subject: [Freeswitch-trunk] [commit] r11017 - freeswitch/trunk/conf/dialplan Message-ID: Author: brian Date: Tue Dec 30 23:33:30 2008 New Revision: 11017 Log: now that anoys me :) Modified: freeswitch/trunk/conf/dialplan/default.xml Modified: freeswitch/trunk/conf/dialplan/default.xml ============================================================================== --- freeswitch/trunk/conf/dialplan/default.xml (original) +++ freeswitch/trunk/conf/dialplan/default.xml Tue Dec 30 23:33:30 2008 @@ -346,7 +346,7 @@ - From andrew at freeswitch.org Tue Dec 30 20:40:20 2008 From: andrew at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 23:40:20 -0500 Subject: [Freeswitch-trunk] [commit] r11018 - freeswitch/trunk/src/mod/event_handlers/mod_erlang_event Message-ID: Author: andrew Date: Tue Dec 30 23:40:20 2008 New Revision: 11018 Log: Merge in some recent event_socket changes, mainly the new log data structure Modified: freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c Tue Dec 30 23:40:20 2008 @@ -142,25 +142,28 @@ switch_mutex_lock(globals.listener_mutex); for (l = listen_list.listeners; l; l = l->next) { if (switch_test_flag(l, LFLAG_LOG) && l->level >= node->level) { - char *data = strdup(node->data); - if (data) { - if (switch_queue_trypush(l->log_queue, data) == SWITCH_STATUS_SUCCESS) { - if (l->lost_logs) { - int ll = l->lost_logs; - switch_event_t *event; - l->lost_logs = 0; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Lost %d log lines!\n", ll); - if (switch_event_create(&event, SWITCH_EVENT_TRAP) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "info", "lost %d log lines", ll); - switch_event_fire(&event); - } + + switch_log_node_t *dnode = malloc(sizeof(*node)); + switch_assert(dnode); + *dnode = *node; + dnode->data = strdup(node->data); + switch_assert(dnode->data); + + if (switch_queue_trypush(l->log_queue, dnode) == SWITCH_STATUS_SUCCESS) { + if (l->lost_logs) { + int ll = l->lost_logs; + switch_event_t *event; + l->lost_logs = 0; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Lost %d log lines!\n", ll); + if (switch_event_create(&event, SWITCH_EVENT_TRAP) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "info", "lost %d log lines", ll); + switch_event_fire(&event); } - } else { - switch_safe_free(data); - l->lost_logs++; } } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error!\n"); + switch_safe_free(dnode->data); + switch_safe_free(dnode); + l->lost_logs++; } } } @@ -936,7 +939,7 @@ } switch_core_session_t *session; - if ((session = switch_core_session_locate(uuid))) { + if (!switch_strlen_zero(uuid) && (session = switch_core_session_locate(uuid))) { } else { ei_x_encode_tuple_header(rbuf, 2); ei_x_encode_atom(rbuf, "error"); @@ -980,6 +983,7 @@ ei_x_encode_atom(rbuf, "error"); ei_x_encode_atom(rbuf, "badmem"); } + /* switch_core_session_rwunlock(session); */ /* XXX is this needed? */ break; sendmsg_fail: @@ -1262,20 +1266,48 @@ /* send out any pending crap in the log queue */ if (switch_test_flag(listener, LFLAG_LOG)) { if (switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) { - char *data = (char *) pop; + switch_log_node_t *dnode = (switch_log_node_t *) pop; - if (data) { + if (dnode->data) { ei_x_buff lbuf; ei_x_new_with_version(&lbuf); ei_x_encode_tuple_header(&lbuf, 2); ei_x_encode_atom(&lbuf, "log"); - ei_x_encode_string(&lbuf, data); + ei_x_encode_list_header(&lbuf, 6); + + ei_x_encode_tuple_header(&lbuf, 2); + ei_x_encode_atom(&lbuf, "level"); + ei_x_encode_char(&lbuf, (unsigned char)dnode->level); + + ei_x_encode_tuple_header(&lbuf, 2); + ei_x_encode_atom(&lbuf, "text_channel"); + ei_x_encode_char(&lbuf, (unsigned char)dnode->level); + + ei_x_encode_tuple_header(&lbuf, 2); + ei_x_encode_atom(&lbuf, "file"); + ei_x_encode_string(&lbuf, dnode->file); + + ei_x_encode_tuple_header(&lbuf, 2); + ei_x_encode_atom(&lbuf, "func"); + ei_x_encode_string(&lbuf, dnode->func); + + ei_x_encode_tuple_header(&lbuf, 2); + ei_x_encode_atom(&lbuf, "line"); + ei_x_encode_ulong(&lbuf, (unsigned long)dnode->line); + + ei_x_encode_tuple_header(&lbuf, 2); + ei_x_encode_atom(&lbuf, "data"); + ei_x_encode_string(&lbuf, dnode->data); + + ei_x_encode_empty_list(&lbuf); switch_mutex_lock(listener->sock_mutex); ei_send(listener->sockfd, &listener->log_pid, lbuf.buff, lbuf.index); switch_mutex_unlock(listener->sock_mutex); ei_x_free(&lbuf); + free(dnode->data); + free(dnode); } } } From andrew at freeswitch.org Tue Dec 30 20:47:58 2008 From: andrew at freeswitch.org (FreeSWITCH SVN) Date: Tue, 30 Dec 2008 23:47:58 -0500 Subject: [Freeswitch-trunk] [commit] r11019 - freeswitch/trunk/src/mod/event_handlers/mod_erlang_event Message-ID: Author: andrew Date: Tue Dec 30 23:47:58 2008 New Revision: 11019 Log: send the call's uniqueid, if any, as the first element of the event's parameter list. unlock the session returned by core_session_locate like I should've been doing. Modified: freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c Tue Dec 30 23:47:58 2008 @@ -271,6 +271,8 @@ static void ei_encode_switch_event_headers(ei_x_buff *ebuf, switch_event_t *event) { int i; + char *uuid = switch_event_get_header(event, "unique-id"); + switch_event_header_t *hp; for (i = 0, hp = event->headers; hp; hp = hp->next, i++); @@ -278,7 +280,13 @@ if (event->body) i++; - ei_x_encode_list_header(ebuf, i); + ei_x_encode_list_header(ebuf, i+1); + + if (uuid) { + ei_x_encode_string(ebuf, switch_event_get_header(event, "unique-id")); + } else { + ei_x_encode_atom(ebuf, "undefined"); + } for (hp = event->headers; hp; hp = hp->next) { ei_x_encode_tuple_header(ebuf, 2); @@ -983,7 +991,9 @@ ei_x_encode_atom(rbuf, "error"); ei_x_encode_atom(rbuf, "badmem"); } - /* switch_core_session_rwunlock(session); */ /* XXX is this needed? */ + + /* release the lock returned by switch_core_locate_session */ + switch_core_session_rwunlock(session); break; sendmsg_fail: From mikej at freeswitch.org Wed Dec 31 07:34:29 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 10:34:29 -0500 Subject: [Freeswitch-trunk] [commit] r11020 - in freeswitch/trunk/src/mod/languages/mod_managed: . managed Message-ID: Author: mikej Date: Wed Dec 31 10:34:27 2008 New Revision: 11020 Log: swigall Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx Wed Dec 31 10:34:27 2008 @@ -2600,6 +2600,302 @@ } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38MaxBitRate_set(void * jarg1, unsigned long jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->T38MaxBitRate = arg2; + +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_T38MaxBitRate_get(void * jarg1) { + unsigned long jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (uint32_t) ((arg1)->T38MaxBitRate); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxFillBitRemoval_set(void * jarg1, int jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + if (arg1) (arg1)->T38FaxFillBitRemoval = arg2; + +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxFillBitRemoval_get(void * jarg1) { + int jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (switch_bool_t) ((arg1)->T38FaxFillBitRemoval); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingMMR_set(void * jarg1, int jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + if (arg1) (arg1)->T38FaxTranscodingMMR = arg2; + +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingMMR_get(void * jarg1) { + int jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (switch_bool_t) ((arg1)->T38FaxTranscodingMMR); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_set(void * jarg1, int jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + if (arg1) (arg1)->T38FaxTranscodingJBIG = arg2; + +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_get(void * jarg1) { + int jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (switch_bool_t) ((arg1)->T38FaxTranscodingJBIG); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxRateManagement_set(void * jarg1, char * jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->T38FaxRateManagement = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->T38FaxRateManagement, (const char *)arg2); + } else { + arg1->T38FaxRateManagement = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxRateManagement_get(void * jarg1) { + char * jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + result = (char *) ((arg1)->T38FaxRateManagement); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxBuffer_set(void * jarg1, unsigned long jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->T38FaxMaxBuffer = arg2; + +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxBuffer_get(void * jarg1) { + unsigned long jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (uint32_t) ((arg1)->T38FaxMaxBuffer); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxDatagram_set(void * jarg1, unsigned long jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->T38FaxMaxDatagram = arg2; + +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxDatagram_get(void * jarg1) { + unsigned long jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (uint32_t) ((arg1)->T38FaxMaxDatagram); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxUdpEC_set(void * jarg1, char * jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->T38FaxUdpEC = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->T38FaxUdpEC, (const char *)arg2); + } else { + arg1->T38FaxUdpEC = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxUdpEC_get(void * jarg1) { + char * jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + result = (char *) ((arg1)->T38FaxUdpEC); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38VendorInfo_set(void * jarg1, char * jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->T38VendorInfo = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->T38VendorInfo, (const char *)arg2); + } else { + arg1->T38VendorInfo = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_T38VendorInfo_get(void * jarg1) { + char * jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + result = (char *) ((arg1)->T38VendorInfo); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_ip_set(void * jarg1, char * jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->ip = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->ip, (const char *)arg2); + } else { + arg1->ip = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_ip_get(void * jarg1) { + char * jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + result = (char *) ((arg1)->ip); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_port_set(void * jarg1, unsigned long jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->port = arg2; + +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_port_get(void * jarg1) { + unsigned long jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (uint32_t) ((arg1)->port); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_t38_options_t() { + void * jresult ; + switch_t38_options_t *result = 0 ; + + result = (switch_t38_options_t *)new switch_t38_options_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_t38_options_t(void * jarg1) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + delete arg1; + +} + + SWIGEXPORT void SWIGSTDCALL CSharp_switch_input_args_t_input_callback_set(void * jarg1, void * jarg2) { switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; switch_input_callback_function_t arg2 = (switch_input_callback_function_t) 0 ; @@ -21449,13 +21745,15 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_unbind_dtmf_meta_session(void * jarg1) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_unbind_dtmf_meta_session(void * jarg1, unsigned long jarg2) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; switch_status_t result; arg1 = (switch_core_session_t *)jarg1; - result = (switch_status_t)switch_ivr_unbind_dtmf_meta_session(arg1); + arg2 = (uint32_t)jarg2; + result = (switch_status_t)switch_ivr_unbind_dtmf_meta_session(arg1,arg2); jresult = result; return jresult; } @@ -22410,6 +22708,16 @@ } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_intentional_bugs(void * jarg1, int jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_rtp_bug_flag_t arg2 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_rtp_bug_flag_t)jarg2; + switch_rtp_intentional_bugs(arg1,arg2); +} + + SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_data_set(void * jarg1, char * jarg2) { switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; char *arg2 = (char *) 0 ; @@ -23548,6 +23856,24 @@ } +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_user_in_domain(char * jarg1, void * jarg2, void * jarg3, void * jarg4) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_xml_t arg2 = (switch_xml_t) 0 ; + switch_xml_t *arg3 = (switch_xml_t *) 0 ; + switch_xml_t *arg4 = (switch_xml_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_xml_t)jarg2; + arg3 = (switch_xml_t *)jarg3; + arg4 = (switch_xml_t *)jarg4; + result = (switch_status_t)switch_xml_locate_user_in_domain((char const *)arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_open_cfg(char * jarg1, void * jarg2, void * jarg3) { void * jresult ; char *arg1 = (char *) 0 ; Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (original) +++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs Wed Dec 31 10:34:27 2008 @@ -3278,8 +3278,8 @@ return ret; } - public static switch_status_t switch_ivr_unbind_dtmf_meta_session(SWIGTYPE_p_switch_core_session session) { - switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_unbind_dtmf_meta_session(SWIGTYPE_p_switch_core_session.getCPtr(session)); + public static switch_status_t switch_ivr_unbind_dtmf_meta_session(SWIGTYPE_p_switch_core_session session, uint key) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_unbind_dtmf_meta_session(SWIGTYPE_p_switch_core_session.getCPtr(session), key); return ret; } @@ -3540,6 +3540,10 @@ return ret; } + public static void switch_rtp_intentional_bugs(SWIGTYPE_p_switch_rtp rtp_session, switch_rtp_bug_flag_t bugs) { + freeswitchPINVOKE.switch_rtp_intentional_bugs(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), (int)bugs); + } + public static switch_status_t switch_log_init(SWIGTYPE_p_apr_pool_t pool, switch_bool_t colorize) { switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_log_init(SWIGTYPE_p_apr_pool_t.getCPtr(pool), (int)colorize); return ret; @@ -3750,6 +3754,11 @@ return ret; } + public static switch_status_t switch_xml_locate_user_in_domain(string user_name, switch_xml domain, SWIGTYPE_p_p_switch_xml user, SWIGTYPE_p_p_switch_xml ingroup) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_user_in_domain(user_name, switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(user), SWIGTYPE_p_p_switch_xml.getCPtr(ingroup)); + return ret; + } + public static switch_xml switch_xml_open_cfg(string file_path, SWIGTYPE_p_p_switch_xml node, switch_event arg2) { IntPtr cPtr = freeswitchPINVOKE.switch_xml_open_cfg(file_path, SWIGTYPE_p_p_switch_xml.getCPtr(node), switch_event.getCPtr(arg2)); switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); @@ -4954,6 +4963,78 @@ [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_rtp_hdr_t")] public static extern void delete_switch_rtp_hdr_t(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38MaxBitRate_set")] + public static extern void switch_t38_options_t_T38MaxBitRate_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38MaxBitRate_get")] + public static extern uint switch_t38_options_t_T38MaxBitRate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxFillBitRemoval_set")] + public static extern void switch_t38_options_t_T38FaxFillBitRemoval_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxFillBitRemoval_get")] + public static extern int switch_t38_options_t_T38FaxFillBitRemoval_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingMMR_set")] + public static extern void switch_t38_options_t_T38FaxTranscodingMMR_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingMMR_get")] + public static extern int switch_t38_options_t_T38FaxTranscodingMMR_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_set")] + public static extern void switch_t38_options_t_T38FaxTranscodingJBIG_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_get")] + public static extern int switch_t38_options_t_T38FaxTranscodingJBIG_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxRateManagement_set")] + public static extern void switch_t38_options_t_T38FaxRateManagement_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxRateManagement_get")] + public static extern string switch_t38_options_t_T38FaxRateManagement_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxBuffer_set")] + public static extern void switch_t38_options_t_T38FaxMaxBuffer_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxBuffer_get")] + public static extern uint switch_t38_options_t_T38FaxMaxBuffer_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxDatagram_set")] + public static extern void switch_t38_options_t_T38FaxMaxDatagram_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxDatagram_get")] + public static extern uint switch_t38_options_t_T38FaxMaxDatagram_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxUdpEC_set")] + public static extern void switch_t38_options_t_T38FaxUdpEC_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxUdpEC_get")] + public static extern string switch_t38_options_t_T38FaxUdpEC_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38VendorInfo_set")] + public static extern void switch_t38_options_t_T38VendorInfo_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38VendorInfo_get")] + public static extern string switch_t38_options_t_T38VendorInfo_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_ip_set")] + public static extern void switch_t38_options_t_ip_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_ip_get")] + public static extern string switch_t38_options_t_ip_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_port_set")] + public static extern void switch_t38_options_t_port_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_port_get")] + public static extern uint switch_t38_options_t_port_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_t38_options_t")] + public static extern IntPtr new_switch_t38_options_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_t38_options_t")] + public static extern void delete_switch_t38_options_t(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_input_callback_set")] public static extern void switch_input_args_t_input_callback_set(HandleRef jarg1, HandleRef jarg2); @@ -9359,7 +9440,7 @@ public static extern int switch_ivr_bind_dtmf_meta_session(HandleRef jarg1, uint jarg2, uint jarg3, string jarg4); [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_unbind_dtmf_meta_session")] - public static extern int switch_ivr_unbind_dtmf_meta_session(HandleRef jarg1); + public static extern int switch_ivr_unbind_dtmf_meta_session(HandleRef jarg1, uint jarg2); [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_soft_hold")] public static extern int switch_ivr_soft_hold(HandleRef jarg1, string jarg2, string jarg3, string jarg4); @@ -9574,6 +9655,9 @@ [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_activate_stun_ping")] public static extern int switch_rtp_activate_stun_ping(HandleRef jarg1, string jarg2, ushort jarg3, uint jarg4, int jarg5); + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_intentional_bugs")] + public static extern void switch_rtp_intentional_bugs(HandleRef jarg1, int jarg2); + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_data_set")] public static extern void switch_log_node_t_data_set(HandleRef jarg1, string jarg2); @@ -9823,6 +9907,9 @@ [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_user")] public static extern int switch_xml_locate_user(string jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5, HandleRef jarg6, HandleRef jarg7, HandleRef jarg8, HandleRef jarg9); + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_user_in_domain")] + public static extern int switch_xml_locate_user_in_domain(string jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_open_cfg")] public static extern IntPtr switch_xml_open_cfg(string jarg1, HandleRef jarg2, HandleRef jarg3); @@ -16113,7 +16200,8 @@ SBF_DIAL_BLEG = (1 << 2), SBF_EXEC_BLEG = (1 << 3), SBF_EXEC_OPPOSITE = (1 << 4), - SBF_EXEC_SAME = (1 << 5) + SBF_EXEC_SAME = (1 << 5), + SBF_ONCE = (1 << 6) } } @@ -18513,6 +18601,7 @@ SWITCH_MESSAGE_INDICATE_DISPLAY, SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY, SWITCH_MESSAGE_INDICATE_AUDIO_SYNC, + SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA, SWITCH_MESSAGE_INVALID } @@ -22622,6 +22711,23 @@ namespace FreeSWITCH.Native { +public enum switch_rtp_bug_flag_t { + RTP_BUG_NONE = 0, + RTP_BUG_CISCO_SKIP_MARK_BIT_2833 = (1 << 0), + RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833 = (1 << 1) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.35 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + public enum switch_rtp_crypto_direction_t { SWITCH_RTP_CRYPTO_SEND, SWITCH_RTP_CRYPTO_RECV, @@ -24047,6 +24153,163 @@ namespace FreeSWITCH.Native { +using System; +using System.Runtime.InteropServices; + +public class switch_t38_options_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_t38_options_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_t38_options_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_t38_options_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if(swigCPtr.Handle != IntPtr.Zero && swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_t38_options_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + GC.SuppressFinalize(this); + } + } + + public uint T38MaxBitRate { + set { + freeswitchPINVOKE.switch_t38_options_t_T38MaxBitRate_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_t38_options_t_T38MaxBitRate_get(swigCPtr); + return ret; + } + } + + public switch_bool_t T38FaxFillBitRemoval { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxFillBitRemoval_set(swigCPtr, (int)value); + } + get { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_t38_options_t_T38FaxFillBitRemoval_get(swigCPtr); + return ret; + } + } + + public switch_bool_t T38FaxTranscodingMMR { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingMMR_set(swigCPtr, (int)value); + } + get { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingMMR_get(swigCPtr); + return ret; + } + } + + public switch_bool_t T38FaxTranscodingJBIG { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingJBIG_set(swigCPtr, (int)value); + } + get { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingJBIG_get(swigCPtr); + return ret; + } + } + + public string T38FaxRateManagement { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxRateManagement_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxRateManagement_get(swigCPtr); + return ret; + } + } + + public uint T38FaxMaxBuffer { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxBuffer_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxBuffer_get(swigCPtr); + return ret; + } + } + + public uint T38FaxMaxDatagram { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxDatagram_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxDatagram_get(swigCPtr); + return ret; + } + } + + public string T38FaxUdpEC { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxUdpEC_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxUdpEC_get(swigCPtr); + return ret; + } + } + + public string T38VendorInfo { + set { + freeswitchPINVOKE.switch_t38_options_t_T38VendorInfo_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_t38_options_t_T38VendorInfo_get(swigCPtr); + return ret; + } + } + + public string ip { + set { + freeswitchPINVOKE.switch_t38_options_t_ip_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_t38_options_t_ip_get(swigCPtr); + return ret; + } + } + + public uint port { + set { + freeswitchPINVOKE.switch_t38_options_t_port_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_t38_options_t_port_get(swigCPtr); + return ret; + } + } + + public switch_t38_options_t() : this(freeswitchPINVOKE.new_switch_t38_options_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.35 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + public enum switch_text_channel_t { SWITCH_CHANNEL_ID_LOG, SWITCH_CHANNEL_ID_LOG_CLEAN, From anthm at freeswitch.org Wed Dec 31 08:06:50 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 11:06:50 -0500 Subject: [Freeswitch-trunk] [commit] r11021 - freeswitch/trunk/src Message-ID: Author: anthm Date: Wed Dec 31 11:06:49 2008 New Revision: 11021 Log: add mutex to crash prot Modified: freeswitch/trunk/src/switch_core_state_machine.c Modified: freeswitch/trunk/src/switch_core_state_machine.c ============================================================================== --- freeswitch/trunk/src/switch_core_state_machine.c (original) +++ freeswitch/trunk/src/switch_core_state_machine.c Wed Dec 31 11:06:49 2008 @@ -206,6 +206,7 @@ //static switch_hash_t *stack_table = NULL; static Hash stack_table; +static switch_mutex_t *stack_mutex = NULL; #if defined (__GNUC__) && defined (LINUX) && defined (HAVE_EXECINFO_H) #include @@ -244,9 +245,14 @@ switch_thread_id_t thread_id; jmp_buf *env; - if (sig && (thread_id = switch_thread_self()) - && (env = (jmp_buf *) sqlite3HashFind(&stack_table, &thread_id, sizeof(thread_id)))) { - //&& (env = (jmp_buf *) switch_core_hash_find(stack_table, (char *)&thread_id, sizeof(thread_id)))) { + if (!sig) return; + + thread_id = switch_thread_self(); + switch_mutex_lock(stack_mutex); + env = (jmp_buf *) sqlite3HashFind(&stack_table, &thread_id, sizeof(thread_id)); + switch_mutex_unlock(stack_mutex); + + if (thread_id && env) { print_trace(); longjmp(*env, sig); } else { @@ -259,7 +265,10 @@ { if (switch_test_flag((&runtime), SCF_CRASH_PROT)) { + switch_mutex_init(&stack_mutex, SWITCH_MUTEX_NESTED, pool); + switch_mutex_lock(stack_mutex); sqlite3HashInit(&stack_table, SQLITE_HASH_BINARY, 0); + switch_mutex_unlock(stack_mutex); } } @@ -328,8 +337,9 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Thread has crashed for channel %s\n", switch_channel_get_name(session->channel)); switch_channel_hangup(session->channel, SWITCH_CAUSE_CRASH); } else { + switch_mutex_lock(stack_mutex); sqlite3HashInsert(&stack_table, &thread_id, sizeof(thread_id), (void *) &env); - //apr_hash_set(stack_table, &thread_id, sizeof(thread_id), &env); + switch_mutex_unlock(stack_mutex); } } From brian at freeswitch.org Wed Dec 31 08:23:25 2008 From: brian at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 11:23:25 -0500 Subject: [Freeswitch-trunk] [commit] r11022 - freeswitch/trunk/src/mod/endpoints/mod_sofia Message-ID: Author: brian Date: Wed Dec 31 11:23:24 2008 New Revision: 11022 Log: add date header to 200OK on register Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Wed Dec 31 11:23:24 2008 @@ -1064,6 +1064,8 @@ if (regtype == REG_REGISTER) { char exp_param[128] = ""; + char date[80] = ""; + s_event = NULL; if (exptime) { @@ -1086,7 +1088,12 @@ } } - nua_respond(nh, SIP_200_OK, SIPTAG_CONTACT(sip->sip_contact), TAG_IF(path_val, SIPTAG_PATH_STR(path_val)), NUTAG_WITH_THIS(nua), TAG_END()); + switch_rfc822_date(date, switch_timestamp_now()); + nua_respond(nh, SIP_200_OK, SIPTAG_CONTACT(sip->sip_contact), + TAG_IF(path_val, SIPTAG_PATH_STR(path_val)), + NUTAG_WITH_THIS(nua), + SIPTAG_DATE_STR(date), + TAG_END()); if (s_event) { switch_event_fire(&s_event); From anthm at freeswitch.org Wed Dec 31 08:52:11 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 11:52:11 -0500 Subject: [Freeswitch-trunk] [commit] r11023 - in freeswitch/trunk/libs/esl: . src src/include Message-ID: Author: anthm Date: Wed Dec 31 11:52:11 2008 New Revision: 11023 Log: cleanup debug handling Modified: freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/esl.c freeswitch/trunk/libs/esl/src/include/esl.h freeswitch/trunk/libs/esl/testclient.c freeswitch/trunk/libs/esl/testserver.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 31 11:52:11 2008 @@ -107,6 +107,13 @@ } else if (!strcasecmp(type, "text/disconnect-notice")) { running = thread_running = 0; known++; + } else if (!strcasecmp(type, "text/event-plain")) { + char *foo; + esl_event_serialize(handle->last_ievent, &foo, ESL_FALSE); + printf("RECV EVENT\n%s\n", foo); + free(foo); + + known++; } } @@ -313,7 +320,6 @@ signal(SIGINT, handle_SIGINT); - handle.debug = 0; esl_global_set_default_logger(6); /* default debug level to 6 (info) */ for(;;) { Modified: freeswitch/trunk/libs/esl/src/esl.c ============================================================================== --- freeswitch/trunk/libs/esl/src/esl.c (original) +++ freeswitch/trunk/libs/esl/src/esl.c Wed Dec 31 11:52:11 2008 @@ -370,10 +370,8 @@ esl_event_serialize(handle->last_ievent, &txt, ESL_TRUE); - if (handle->debug) { - esl_log(ESL_LOG_DEBUG, "SEND EVENT\n%s\n", txt); - } - + esl_log(ESL_LOG_DEBUG, "SEND EVENT\n%s\n", txt); + send(handle->sock, "sendevent\n", 10, 0); send(handle->sock, txt, strlen(txt), 0); send(handle->sock, "\n\n", 2, 0); @@ -699,9 +697,7 @@ if (hname && hval) { esl_url_decode(hval); - if (handle->debug > 1) { - esl_log(ESL_LOG_DEBUG, "RECV HEADER [%s] = [%s]\n", hname, hval); - } + esl_log(ESL_LOG_DEBUG, "RECV HEADER [%s] = [%s]\n", hname, hval); esl_event_add_header_string(revent, ESL_STACK_BOTTOM, hname, hval); } @@ -793,10 +789,7 @@ if (hname && hval) { esl_url_decode(hval); - - if (handle->debug > 1) { - esl_log(ESL_LOG_DEBUG, "RECV INNER HEADER [%s] = [%s]\n", hname, hval); - } + esl_log(ESL_LOG_DEBUG, "RECV INNER HEADER [%s] = [%s]\n", hname, hval); esl_event_add_header_string(handle->last_ievent, ESL_STACK_BOTTOM, hname, hval); } @@ -825,8 +818,8 @@ handle->last_ievent->body = body; } - - if (handle->debug) { + + if (esl_log_level >= 7) { char *foo; esl_event_serialize(handle->last_ievent, &foo, ESL_FALSE); esl_log(ESL_LOG_DEBUG, "RECV EVENT\n%s\n", foo); @@ -834,7 +827,7 @@ } } - if (handle->debug) { + if (esl_log_level >= 7) { char *foo; esl_event_serialize(revent, &foo, ESL_FALSE); esl_log(ESL_LOG_DEBUG, "RECV MESSAGE\n%s\n", foo); @@ -857,9 +850,7 @@ { const char *e = cmd + strlen(cmd) -1; - if (handle->debug) { - esl_log(ESL_LOG_DEBUG, "SEND\n%s\n", cmd); - } + esl_log(ESL_LOG_DEBUG, "SEND\n%s\n", cmd); if (send(handle->sock, cmd, strlen(cmd), 0) != (int)strlen(cmd)) { strerror_r(handle->errnum, handle->err, sizeof(handle->err)); Modified: freeswitch/trunk/libs/esl/src/include/esl.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl.h Wed Dec 31 11:52:11 2008 @@ -256,7 +256,6 @@ esl_event_t *last_sr_event; esl_event_t *last_ievent; esl_event_t *info_event; - int debug; int connected; struct sockaddr_in addr; esl_mutex_t *mutex; Modified: freeswitch/trunk/libs/esl/testclient.c ============================================================================== --- freeswitch/trunk/libs/esl/testclient.c (original) +++ freeswitch/trunk/libs/esl/testclient.c Wed Dec 31 11:52:11 2008 @@ -7,8 +7,6 @@ { esl_handle_t handle = {{0}}; - handle.debug = 1; - esl_connect(&handle, "localhost", 8021, "ClueCon"); esl_send_recv(&handle, "api status\n\n"); Modified: freeswitch/trunk/libs/esl/testserver.c ============================================================================== --- freeswitch/trunk/libs/esl/testserver.c (original) +++ freeswitch/trunk/libs/esl/testserver.c Wed Dec 31 11:52:11 2008 @@ -13,7 +13,6 @@ esl_attach_handle(&handle, client_sock, addr); - handle.debug = 2; printf("Connected! %d\n", handle.sock); From silik0n at freeswitch.org Wed Dec 31 09:00:12 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 12:00:12 -0500 Subject: [Freeswitch-trunk] [commit] r11024 - freeswitch/trunk/src/mod/applications/mod_easyroute Message-ID: Author: silik0n Date: Wed Dec 31 12:00:12 2008 New Revision: 11024 Log: lets use a more common default password Modified: freeswitch/trunk/src/mod/applications/mod_easyroute/mod_easyroute.c Modified: freeswitch/trunk/src/mod/applications/mod_easyroute/mod_easyroute.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_easyroute/mod_easyroute.c (original) +++ freeswitch/trunk/src/mod/applications/mod_easyroute/mod_easyroute.c Wed Dec 31 12:00:12 2008 @@ -136,7 +136,7 @@ set_global_db_username("root"); } if (!globals.db_password) { - set_global_db_password("land99rover"); + set_global_db_password("password"); } if (!globals.db_dsn) { set_global_db_dsn("easyroute"); From anthm at freeswitch.org Wed Dec 31 10:30:04 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 13:30:04 -0500 Subject: [Freeswitch-trunk] [commit] r11026 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Wed Dec 31 13:30:03 2008 New Revision: 11026 Log: add fkeys Added: freeswitch/trunk/libs/esl/fs_cli.conf Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 31 13:30:03 2008 @@ -19,6 +19,28 @@ static char prompt_str[512] = ""; +typedef struct { + char name[128]; + char host[128]; + esl_port_t port; + char pass[128]; + int debug; + char *console_fnkeys[12]; +} cli_profile_t; + +static cli_profile_t profiles[128] = {{{0}}}; +static cli_profile_t internal_profile = {{ 0 }}; +static int pcount = 0; + +static esl_handle_t *global_handle; +static cli_profile_t *global_profile; + +static int process_command(esl_handle_t *handle, const char *cmd); + +static int running = 1; +static int thread_running = 0; + + #ifdef HAVE_EDITLINE static char *prompt(EditLine * e) { @@ -28,10 +50,85 @@ static EditLine *el; static History *myhistory; static HistEvent ev; -#endif -static int running = 1; -static int thread_running = 0; + + +/* + * If a fnkey is configured then process the command + */ +static unsigned char console_fnkey_pressed(int i) +{ + char *c; + + assert((i > 0) && (i <= 12)); + + c = global_profile->console_fnkeys[i - 1]; + + /* This new line is necessary to avoid output to begin after the ">" of the CLI's prompt */ + printf("\n"); + + if (c == NULL) { + esl_log(ESL_LOG_ERROR, "FUNCTION KEY F%d IS NOT BOUND, please edit your config.\n", i); + return CC_REDISPLAY; + } + + if (process_command(global_handle, c)) { + running = thread_running = 0; + } + + return CC_REDISPLAY; +} + +static unsigned char console_f1key(EditLine * el, int ch) +{ + return console_fnkey_pressed(1); +} +static unsigned char console_f2key(EditLine * el, int ch) +{ + return console_fnkey_pressed(2); +} +static unsigned char console_f3key(EditLine * el, int ch) +{ + return console_fnkey_pressed(3); +} +static unsigned char console_f4key(EditLine * el, int ch) +{ + return console_fnkey_pressed(4); +} +static unsigned char console_f5key(EditLine * el, int ch) +{ + return console_fnkey_pressed(5); +} +static unsigned char console_f6key(EditLine * el, int ch) +{ + return console_fnkey_pressed(6); +} +static unsigned char console_f7key(EditLine * el, int ch) +{ + return console_fnkey_pressed(7); +} +static unsigned char console_f8key(EditLine * el, int ch) +{ + return console_fnkey_pressed(8); +} +static unsigned char console_f9key(EditLine * el, int ch) +{ + return console_fnkey_pressed(9); +} +static unsigned char console_f10key(EditLine * el, int ch) +{ + return console_fnkey_pressed(10); +} +static unsigned char console_f11key(EditLine * el, int ch) +{ + return console_fnkey_pressed(11); +} +static unsigned char console_f12key(EditLine * el, int ch) +{ + return console_fnkey_pressed(12); +} + +#endif static void handle_SIGINT(int sig) { @@ -150,51 +247,51 @@ goto end; } - if ( - !strcasecmp(cmd, "exit") || - !strcasecmp(cmd, "quit") || - !strcasecmp(cmd, "bye") - ) { - esl_log(ESL_LOG_INFO, "Goodbye!\nSee you at ClueCon http://www.cluecon.com\n"); - return -1; - } + if ((*cmd == '/' && cmd++) || !strncasecmp(cmd, "...", 3)) { + + if ( + !strcasecmp(cmd, "exit") || + !strcasecmp(cmd, "quit") || + !strcasecmp(cmd, "...") || + !strcasecmp(cmd, "bye") + ) { + esl_log(ESL_LOG_INFO, "Goodbye!\nSee you at ClueCon http://www.cluecon.com\n"); + return -1; + } - if ( - !strncasecmp(cmd, "event", 5) || - !strncasecmp(cmd, "noevent", 7) || - !strncasecmp(cmd, "nixevent", 8) || - !strncasecmp(cmd, "log", 3) || - !strncasecmp(cmd, "nolog", 5) || - !strncasecmp(cmd, "filter", 6) - ) { + if ( + !strncasecmp(cmd, "event", 5) || + !strncasecmp(cmd, "noevent", 7) || + !strncasecmp(cmd, "nixevent", 8) || + !strncasecmp(cmd, "log", 3) || + !strncasecmp(cmd, "nolog", 5) || + !strncasecmp(cmd, "filter", 6) + ) { - esl_send_recv(handle, cmd); + esl_send_recv(handle, cmd); - printf("%s\n", handle->last_sr_reply); + printf("%s\n", handle->last_sr_reply); - goto end; - } + goto end; + } - printf("Unknown command [%s]\n", cmd); + printf("Unknown command [%s]\n", cmd); + } else { + char cmd_str[1024] = ""; + snprintf(cmd_str, sizeof(cmd_str), "api %s\n\n", cmd); + esl_send_recv(handle, cmd_str); + if (handle->last_sr_event && handle->last_sr_event->body) { + printf("%s\n", handle->last_sr_event->body); + } + } + end: return 0; } -typedef struct { - char name[128]; - char host[128]; - esl_port_t port; - char pass[128]; - int debug; -} cli_profile_t; - -static cli_profile_t profiles[128] = {{{0}}}; -static int pcount; - - static int get_profile(const char *name, cli_profile_t **profile) { int x; @@ -272,17 +369,19 @@ const char *line = NULL; char cmd_str[1024] = ""; esl_config_t cfg; - cli_profile_t *profile = &profiles[0]; - int cur = 0; + cli_profile_t *profile = NULL; + int rv = 0; + #ifndef WIN32 - char hfile[512] = "/tmp/fs_cli_history"; - char cfile[512] = "/tmp/fs_cli_config"; - char *home = getenv("HOME"); + char hfile[512] = "/etc/fs_cli_history"; + char cfile[512] = "/etc/fs_cli.conf"; + char dft_cfile[512] = "/etc/fs_cli.conf"; #else char hfile[512] = "fs_cli_history"; - char cfile[512] = "fs_cli_config"; - char *home = getenv("HOME"); + char cfile[512] = "fs_cli.conf"; + char dft_cfile[512] = "fs_cli.conf"; #endif + char *home = getenv("HOME"); /* Vars for optargs */ int opt; static struct option options[] = { @@ -307,15 +406,13 @@ char argv_command[256] = ""; - strncpy(profiles[0].host, "127.0.0.1", sizeof(profiles[0].host)); - strncpy(profiles[0].pass, "ClueCon", sizeof(profiles[0].pass)); - strncpy(profiles[0].name, "default", sizeof(profiles[0].name)); - profiles[0].port = 8021; - pcount++; + strncpy(internal_profile.host, "127.0.0.1", sizeof(internal_profile.host)); + strncpy(internal_profile.pass, "ClueCon", sizeof(internal_profile.pass)); + strncpy(internal_profile.name, "internal", sizeof(internal_profile.name)); + internal_profile.port = 8021; if (home) { snprintf(hfile, sizeof(hfile), "%s/.fs_cli_history", home); - snprintf(cfile, sizeof(cfile), "%s/.fs_cli_config", home); } signal(SIGINT, handle_SIGINT); @@ -373,53 +470,69 @@ return usage(argv[0]); } - if (esl_config_open_file(&cfg, cfile)) { + if (!(rv = esl_config_open_file(&cfg, cfile))) { + rv = esl_config_open_file(&cfg, dft_cfile); + } + + if (rv) { char *var, *val; char cur_cat[128] = ""; while (esl_config_next_pair(&cfg, &var, &val)) { if (strcmp(cur_cat, cfg.category)) { - cur++; esl_set_string(cur_cat, cfg.category); - esl_set_string(profiles[cur].name, cur_cat); - esl_set_string(profiles[cur].host, "localhost"); - esl_set_string(profiles[cur].pass, "ClueCon"); - profiles[cur].port = 8021; - esl_log(ESL_LOG_DEBUG, "Found Profile [%s]\n", profiles[cur].name); + esl_set_string(profiles[pcount].name, cur_cat); + esl_set_string(profiles[pcount].host, "localhost"); + esl_set_string(profiles[pcount].pass, "ClueCon"); + profiles[pcount].port = 8021; + esl_log(ESL_LOG_DEBUG, "Found Profile [%s]\n", profiles[pcount].name); pcount++; } if (!strcasecmp(var, "host")) { - esl_set_string(profiles[cur].host, val); + esl_set_string(profiles[pcount-1].host, val); } else if (!strcasecmp(var, "password")) { - esl_set_string(profiles[cur].pass, val); + esl_set_string(profiles[pcount-1].pass, val); } else if (!strcasecmp(var, "port")) { int pt = atoi(val); if (pt > 0) { - profiles[cur].port = (esl_port_t)pt; + profiles[pcount-1].port = (esl_port_t)pt; } } else if (!strcasecmp(var, "debug")) { int dt = atoi(val); if (dt > -1 && dt < 8){ - profiles[cur].debug = dt; + profiles[pcount-1].debug = dt; } + } else if (!strncasecmp(var, "key_F", 5)) { + char *key = var + 5; + + if (key) { + int i = atoi(key); + + if (i > 0 && i < 13) { + profiles[pcount-1].console_fnkeys[i - 1] = strdup(val); + } + } } } esl_config_close_file(&cfg); } if (optind < argc) { - if (get_profile(argv[optind], &profile)) { - esl_log(ESL_LOG_DEBUG, "Chosen profile %s does not exist using builtin default\n", argv[optind]); - profile = &profiles[0]; - } else { - esl_log(ESL_LOG_DEBUG, "Chosen profile %s\n", profile->name); - if (temp_log < 0 ) { - esl_global_set_default_logger(profile->debug); - } - } + get_profile(argv[optind], &profile); } + if (!profile) { + if (get_profile("default", &profile)) { + esl_log(ESL_LOG_DEBUG, "profile default does not exist using builtin profile\n"); + profile = &internal_profile; + } + } + + if (temp_log < 0 ) { + esl_global_set_default_logger(profile->debug); + } + if (argv_host) { esl_set_string(profile->host, temp_host); } @@ -458,6 +571,9 @@ return 0; } + global_handle = &handle; + global_profile = profile; + esl_thread_create_detached(msg_thread_run, &handle); #ifdef HAVE_EDITLINE @@ -466,6 +582,39 @@ el_set(el, EL_EDITOR, "emacs"); myhistory = history_init(); + el_set(el, EL_ADDFN, "f1-key", "F1 KEY PRESS", console_f1key); + el_set(el, EL_ADDFN, "f2-key", "F2 KEY PRESS", console_f2key); + el_set(el, EL_ADDFN, "f3-key", "F3 KEY PRESS", console_f3key); + el_set(el, EL_ADDFN, "f4-key", "F4 KEY PRESS", console_f4key); + el_set(el, EL_ADDFN, "f5-key", "F5 KEY PRESS", console_f5key); + el_set(el, EL_ADDFN, "f6-key", "F6 KEY PRESS", console_f6key); + el_set(el, EL_ADDFN, "f7-key", "F7 KEY PRESS", console_f7key); + el_set(el, EL_ADDFN, "f8-key", "F8 KEY PRESS", console_f8key); + el_set(el, EL_ADDFN, "f9-key", "F9 KEY PRESS", console_f9key); + el_set(el, EL_ADDFN, "f10-key", "F10 KEY PRESS", console_f10key); + el_set(el, EL_ADDFN, "f11-key", "F11 KEY PRESS", console_f11key); + el_set(el, EL_ADDFN, "f12-key", "F12 KEY PRESS", console_f12key); + + el_set(el, EL_BIND, "\033OP", "f1-key", NULL); + el_set(el, EL_BIND, "\033OQ", "f2-key", NULL); + el_set(el, EL_BIND, "\033OR", "f3-key", NULL); + el_set(el, EL_BIND, "\033OS", "f4-key", NULL); + + + el_set(el, EL_BIND, "\033[11~", "f1-key", NULL); + el_set(el, EL_BIND, "\033[12~", "f2-key", NULL); + el_set(el, EL_BIND, "\033[13~", "f3-key", NULL); + el_set(el, EL_BIND, "\033[14~", "f4-key", NULL); + el_set(el, EL_BIND, "\033[15~", "f5-key", NULL); + el_set(el, EL_BIND, "\033[17~", "f6-key", NULL); + el_set(el, EL_BIND, "\033[18~", "f7-key", NULL); + el_set(el, EL_BIND, "\033[19~", "f8-key", NULL); + el_set(el, EL_BIND, "\033[20~", "f9-key", NULL); + el_set(el, EL_BIND, "\033[21~", "f10-key", NULL); + el_set(el, EL_BIND, "\033[23~", "f11-key", NULL); + el_set(el, EL_BIND, "\033[24~", "f12-key", NULL); + + if (myhistory == 0) { esl_log(ESL_LOG_ERROR, "history could not be initialized\n"); goto done; @@ -474,6 +623,8 @@ history(myhistory, &ev, H_SETSIZE, 800); el_set(el, EL_HIST, history, myhistory); history(myhistory, &ev, H_LOAD, hfile); + + #endif #ifdef WIN32 hStdout = GetStdHandle(STD_OUTPUT_HANDLE); @@ -516,20 +667,8 @@ history(myhistory, &ev, H_ENTER, line); #endif - if (!strncasecmp(cmd, "...", 3)) { - if (process_command(&handle, "exit")) { - running = 0; - } - } else if (*cmd == '/' || !strncasecmp(cmd, "...", 3)) { - if (process_command(&handle, cmd + 1)) { - running = 0; - } - } else { - snprintf(cmd_str, sizeof(cmd_str), "api %s\n\n", cmd); - esl_send_recv(&handle, cmd_str); - if (handle.last_sr_event && handle.last_sr_event->body) { - printf("%s\n", handle.last_sr_event->body); - } + if (process_command(&handle, cmd)) { + running = 0; } #ifdef HAVE_EDITLINE Added: freeswitch/trunk/libs/esl/fs_cli.conf ============================================================================== --- (empty file) +++ freeswitch/trunk/libs/esl/fs_cli.conf Wed Dec 31 13:30:03 2008 @@ -0,0 +1,12 @@ +[default] + +; Put me in /etc/fs_cli.conf or ~/.fs_cli_conf + +host => 127.0.0.1 +password => ClueCon +port => 8021 +debug => 2 + +key_f1 => show channels +key_f2 => sofia status + From anthm at freeswitch.org Wed Dec 31 10:45:42 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 13:45:42 -0500 Subject: [Freeswitch-trunk] [commit] r11027 - in freeswitch/trunk/libs/esl: . src/include Message-ID: Author: anthm Date: Wed Dec 31 13:45:41 2008 New Revision: 11027 Log: merge patch FSSCRIPTS-12 Modified: freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/src/include/esl_config.h Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 31 13:45:41 2008 @@ -26,6 +26,8 @@ char pass[128]; int debug; char *console_fnkeys[12]; + char loglevel[128]; + int quiet; } cli_profile_t; static cli_profile_t profiles[128] = {{{0}}}; @@ -156,6 +158,8 @@ printf(" -P, --port=port Port to connect (1 - 65535)\n"); printf(" -p, --password=FILENAME Password\n"); printf(" -x, --execute=command Execute Command and Exit\n"); + printf(" -l, --loglevel=command Log Level\n"); + printf(" -q, --quiet Disable logging\n"); printf(" -d, --debug=level Debug Level (0 - 7)\n\n"); return 1; } @@ -391,6 +395,8 @@ {"password", 1, 0, 'p'}, {"debug", 1, 0, 'd'}, {"execute", 1, 0, 'x'}, + {"loglevel", 1, 0, 'l'}, + {"quiet", 0, 0, 'q'}, {0, 0, 0, 0} }; @@ -404,6 +410,8 @@ int argv_error = 0; int argv_exec = 0; char argv_command[256] = ""; + char argv_loglevel[128] = ""; + int argv_quiet = 0; strncpy(internal_profile.host, "127.0.0.1", sizeof(internal_profile.host)); @@ -413,6 +421,7 @@ if (home) { snprintf(hfile, sizeof(hfile), "%s/.fs_cli_history", home); + snprintf(cfile, sizeof(cfile), "%s/.fs_cli_conf", home); } signal(SIGINT, handle_SIGINT); @@ -421,7 +430,7 @@ for(;;) { int option_index = 0; - opt = getopt_long(argc, argv, "H:U:P:S:p:d:x:h?", options, &option_index); + opt = getopt_long(argc, argv, "H:U:P:S:p:d:x:l:qh?", options, &option_index); if (opt == -1) break; switch (opt) { @@ -455,7 +464,13 @@ argv_exec = 1; esl_set_string(argv_command, optarg); break; - + case 'l': + esl_set_string(argv_loglevel, optarg); + break; + case 'q': + argv_quiet = 1; + break; + case 'h': case '?': usage(argv[0]); @@ -503,6 +518,10 @@ if (dt > -1 && dt < 8){ profiles[pcount-1].debug = dt; } + } else if(!strcasecmp(var, "loglevel")) { + esl_set_string(profiles[pcount-1].loglevel, val); + } else if(!strcasecmp(var, "quiet")) { + profiles[pcount-1].quiet = esl_true(val); } else if (!strncasecmp(var, "key_F", 5)) { char *key = var + 5; @@ -542,6 +561,11 @@ if (argv_pass) { esl_set_string(profile->pass, temp_pass); } + + if (*argv_loglevel) { + esl_set_string(profile->loglevel, argv_loglevel); + profile->quiet = 0; + } esl_log(ESL_LOG_DEBUG, "Using profile %s [%s]\n", profile->name, profile->host); @@ -633,8 +657,10 @@ } #endif - snprintf(cmd_str, sizeof(cmd_str), "log info\n\n"); - esl_send_recv(&handle, cmd_str); + if (!argv_quiet && !profile->quiet) { + snprintf(cmd_str, sizeof(cmd_str), "log %s\n\n", profile->loglevel); + esl_send_recv(&handle, cmd_str); + } print_banner(stdout); Modified: freeswitch/trunk/libs/esl/src/include/esl_config.h ============================================================================== --- freeswitch/trunk/libs/esl/src/include/esl_config.h (original) +++ freeswitch/trunk/libs/esl/src/include/esl_config.h Wed Dec 31 13:45:41 2008 @@ -70,6 +70,34 @@ #define esl_is_file_path(file) ((*file == '/') || strstr(file, SWITCH_URL_SEPARATOR)) #endif +/*! + \brief Evaluate the truthfullness of a string expression + \param expr a string expression + \return true or false +*/ +#define esl_true(expr)\ +(expr && ( !strcasecmp(expr, "yes") ||\ +!strcasecmp(expr, "on") ||\ +!strcasecmp(expr, "true") ||\ +!strcasecmp(expr, "enabled") ||\ +!strcasecmp(expr, "active") ||\ +!strcasecmp(expr, "allow") ||\ +atoi(expr))) ? 1 : 0 + +/*! + \brief Evaluate the falsefullness of a string expression + \param expr a string expression + \return true or false +*/ +#define esl_false(expr)\ +(expr && ( !strcasecmp(expr, "no") ||\ +!strcasecmp(expr, "off") ||\ +!strcasecmp(expr, "false") ||\ +!strcasecmp(expr, "disabled") ||\ +!strcasecmp(expr, "inactive") ||\ +!strcasecmp(expr, "disallow") ||\ +!atoi(expr))) ? 1 : 0 + typedef struct esl_config esl_config_t; /*! \brief A simple file handle representing an open configuration file **/ From anthm at freeswitch.org Wed Dec 31 10:49:28 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 13:49:28 -0500 Subject: [Freeswitch-trunk] [commit] r11028 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Wed Dec 31 13:49:28 2008 New Revision: 11028 Log: tweak Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 31 13:49:28 2008 @@ -473,6 +473,7 @@ case 'h': case '?': + print_banner(stdout); usage(argv[0]); return 0; default: From anthm at freeswitch.org Wed Dec 31 10:51:26 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 13:51:26 -0500 Subject: [Freeswitch-trunk] [commit] r11029 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Wed Dec 31 13:51:26 2008 New Revision: 11029 Log: tweak Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 31 13:51:26 2008 @@ -259,7 +259,7 @@ !strcasecmp(cmd, "...") || !strcasecmp(cmd, "bye") ) { - esl_log(ESL_LOG_INFO, "Goodbye!\nSee you at ClueCon http://www.cluecon.com\n"); + esl_log(ESL_LOG_INFO, "Goodbye!\nSee you at ClueCon http://www.cluecon.com/\n"); return -1; } @@ -355,11 +355,11 @@ " | _| ___) | | |___| |___ | | \n" " |_| |____/ \\____|_____|___| \n" "\n" - "****************************************************\n" - "* Anthony Minessale II, Ken Rice, Michael Jerris *\n" - "* FreeSWITCH (http://www.freeswitch.org) *\n" - "* Brought to you by ClueCon http://www.cluecon.com *\n" - "****************************************************\n" + "*****************************************************\n" + "* Anthony Minessale II, Ken Rice, Michael Jerris *\n" + "* FreeSWITCH (http://www.freeswitch.org) *\n" + "* Brought to you by ClueCon http://www.cluecon.com/ *\n" + "*****************************************************\n" "\n\n" ); } From anthm at freeswitch.org Wed Dec 31 10:52:17 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 13:52:17 -0500 Subject: [Freeswitch-trunk] [commit] r11030 - freeswitch/trunk/src/mod/event_handlers/mod_event_socket Message-ID: Author: anthm Date: Wed Dec 31 13:52:17 2008 New Revision: 11030 Log: tweak Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Wed Dec 31 13:52:17 2008 @@ -1824,7 +1824,7 @@ switch_mutex_unlock(listener->filter_mutex); if (listener->sock) { char disco_buf[512] = ""; - const char message[] = "Disconnected, goodbye!\nSee you at ClueCon http://www.cluecon.com!\n"; + const char message[] = "Disconnected, goodbye!\nSee you at ClueCon http://www.cluecon.com/ !!!\n"; int mlen = strlen(message); switch_snprintf(disco_buf, sizeof(disco_buf), "Content-Type: text/disconnect-notice\nContent-Length: %d\n\n", mlen); From anthm at freeswitch.org Wed Dec 31 10:55:09 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 13:55:09 -0500 Subject: [Freeswitch-trunk] [commit] r11031 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Wed Dec 31 13:55:08 2008 New Revision: 11031 Log: tweak Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 31 13:55:08 2008 @@ -67,6 +67,7 @@ c = global_profile->console_fnkeys[i - 1]; /* This new line is necessary to avoid output to begin after the ">" of the CLI's prompt */ + printf("%s\n", c); printf("\n"); if (c == NULL) { @@ -74,6 +75,7 @@ return CC_REDISPLAY; } + if (process_command(global_handle, c)) { running = thread_running = 0; } @@ -693,7 +695,7 @@ #ifdef HAVE_EDITLINE history(myhistory, &ev, H_ENTER, line); #endif - + if (process_command(&handle, cmd)) { running = 0; } From silik0n at freeswitch.org Wed Dec 31 10:55:50 2008 From: silik0n at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 13:55:50 -0500 Subject: [Freeswitch-trunk] [commit] r11032 - freeswitch/trunk/libs/esl Message-ID: Author: silik0n Date: Wed Dec 31 13:55:49 2008 New Revision: 11032 Log: try to match the main console Modified: freeswitch/trunk/libs/esl/fs_cli.conf Modified: freeswitch/trunk/libs/esl/fs_cli.conf ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.conf (original) +++ freeswitch/trunk/libs/esl/fs_cli.conf Wed Dec 31 13:55:49 2008 @@ -7,6 +7,16 @@ port => 8021 debug => 2 -key_f1 => show channels -key_f2 => sofia status +key_f1 => help +key_f2 => status +key_f3 => show channels +key_f4 => show calls +key_f5 => sofia status +key_f6 => reloadxml +key_f7 => /nolog +key_f8 => /log debug +key_f9 => sofia status profile internal +key_f10 => fsctl pause +key_f11 => fsctl resume +key_f12 => version From anthm at freeswitch.org Wed Dec 31 11:07:20 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 14:07:20 -0500 Subject: [Freeswitch-trunk] [commit] r11033 - in freeswitch/trunk/src: . mod/event_handlers/mod_event_socket Message-ID: Author: anthm Date: Wed Dec 31 14:07:20 2008 New Revision: 11033 Log: tweak Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c freeswitch/trunk/src/switch_log.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Wed Dec 31 14:07:20 2008 @@ -473,6 +473,7 @@ } switch_mutex_unlock(globals.listener_mutex); + switch_yield(1000000); return SWITCH_STATUS_SUCCESS; @@ -821,6 +822,9 @@ switch_mutex_init(&globals.listener_mutex, SWITCH_MUTEX_NESTED, pool); + memset(&listen_list, 0, sizeof(listen_list)); + switch_mutex_init(&listen_list.sock_mutex, SWITCH_MUTEX_NESTED, pool); + if (switch_event_bind_removable(modname, SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; @@ -1482,7 +1486,7 @@ ltype = switch_log_str2level(level_s); } - if (ltype && ltype != SWITCH_LOG_INVALID) { + if (ltype != SWITCH_LOG_INVALID) { listener->level = ltype; switch_set_flag(listener, LFLAG_LOG); switch_snprintf(reply, reply_len, "+OK log level %s [%d]", level_s, listener->level); @@ -1927,17 +1931,12 @@ listener_t *listener; uint32_t x = 0; - memset(&listen_list, 0, sizeof(listen_list)); - config(); - if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "OH OH no pool\n"); return SWITCH_STATUS_TERM; } - - switch_mutex_init(&listen_list.sock_mutex, SWITCH_MUTEX_NESTED, pool); - + config(); for (;;) { rv = switch_sockaddr_info_get(&sa, prefs.ip, SWITCH_INET, prefs.port, 0, pool); Modified: freeswitch/trunk/src/switch_log.c ============================================================================== --- freeswitch/trunk/src/switch_log.c (original) +++ freeswitch/trunk/src/switch_log.c Wed Dec 31 14:07:20 2008 @@ -122,6 +122,7 @@ if (!LEVELS[x]) { break; } + if (!strcasecmp(LEVELS[x], str)) { level = (switch_log_level_t) x; break; From anthm at freeswitch.org Wed Dec 31 11:14:52 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 14:14:52 -0500 Subject: [Freeswitch-trunk] [commit] r11034 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Wed Dec 31 14:14:52 2008 New Revision: 11034 Log: tweak Modified: freeswitch/trunk/libs/esl/fs_cli.c freeswitch/trunk/libs/esl/fs_cli.conf Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 31 14:14:52 2008 @@ -25,7 +25,7 @@ esl_port_t port; char pass[128]; int debug; - char *console_fnkeys[12]; + const char *console_fnkeys[12]; char loglevel[128]; int quiet; } cli_profile_t; @@ -60,7 +60,7 @@ */ static unsigned char console_fnkey_pressed(int i) { - char *c; + const char *c; assert((i > 0) && (i <= 12)); @@ -75,7 +75,6 @@ return CC_REDISPLAY; } - if (process_command(global_handle, c)) { running = thread_running = 0; } @@ -367,6 +366,22 @@ } +static void set_fn_keys(cli_profile_t *profile) +{ + profile->console_fnkeys[0] = "help"; + profile->console_fnkeys[1] = "status"; + profile->console_fnkeys[2] = "show channels"; + profile->console_fnkeys[3] = "show calls"; + profile->console_fnkeys[4] = "sofia status"; + profile->console_fnkeys[5] = "reloadxml"; + profile->console_fnkeys[6] = "/log console"; + profile->console_fnkeys[7] = "/log debug"; + profile->console_fnkeys[8] = "sofia status profile internal"; + profile->console_fnkeys[9] = "fsctl pause"; + profile->console_fnkeys[10] = "fsctl resume"; + profile->console_fnkeys[11] = "version"; +} + int main(int argc, char *argv[]) { @@ -420,7 +435,9 @@ strncpy(internal_profile.pass, "ClueCon", sizeof(internal_profile.pass)); strncpy(internal_profile.name, "internal", sizeof(internal_profile.name)); internal_profile.port = 8021; - + set_fn_keys(&internal_profile); + + if (home) { snprintf(hfile, sizeof(hfile), "%s/.fs_cli_history", home); snprintf(cfile, sizeof(cfile), "%s/.fs_cli_conf", home); @@ -503,6 +520,7 @@ esl_set_string(profiles[pcount].host, "localhost"); esl_set_string(profiles[pcount].pass, "ClueCon"); profiles[pcount].port = 8021; + set_fn_keys(&profiles[pcount]); esl_log(ESL_LOG_DEBUG, "Found Profile [%s]\n", profiles[pcount].name); pcount++; } Modified: freeswitch/trunk/libs/esl/fs_cli.conf ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.conf (original) +++ freeswitch/trunk/libs/esl/fs_cli.conf Wed Dec 31 14:14:52 2008 @@ -13,7 +13,7 @@ key_f4 => show calls key_f5 => sofia status key_f6 => reloadxml -key_f7 => /nolog +key_f7 => /log console key_f8 => /log debug key_f9 => sofia status profile internal key_f10 => fsctl pause From anthm at freeswitch.org Wed Dec 31 11:38:01 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 14:38:01 -0500 Subject: [Freeswitch-trunk] [commit] r11035 - in freeswitch/trunk: . debian libs/esl Message-ID: Author: anthm Date: Wed Dec 31 14:38:00 2008 New Revision: 11035 Log: integrate fs_cli into core build Modified: freeswitch/trunk/Makefile.am freeswitch/trunk/debian/freeswitch.install freeswitch/trunk/libs/esl/Makefile freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/Makefile.am ============================================================================== --- freeswitch/trunk/Makefile.am (original) +++ freeswitch/trunk/Makefile.am Wed Dec 31 14:38:00 2008 @@ -158,13 +158,18 @@ CLEANFILES = src/include/switch_version.h src/include/switch_swigable_cpp.h BUILT_SOURCES = src/include/switch_version.h src/include/switch_swigable_cpp.h -bin_PROGRAMS = freeswitch +bin_PROGRAMS = freeswitch fs_cli +fs_cli_SOURCES = libs/esl/src/esl.c libs/esl/src/esl_config.c libs/esl/src/esl_event.c libs/esl/src/esl_threadmutex.c libs/esl/fs_cli.c freeswitch_SOURCES = src/switch.c -nodist_freeswitch_SOURCES = src/include/switch_version.h +nodist_freeswitch_SOURCES = src/include/switch_version.h +fs_cli_CFLAGS = $(AM_CFLAGS) -Ilibs/esl/src/include +fs_cli_LDFLAGS = $(AM_LDFLAGS) -lpthread freeswitch_CFLAGS = $(AM_CFLAGS) $(CORE_CFLAGS) freeswitch_LDFLAGS = $(AM_LDFLAGS) -rpath $(libdir) freeswitch_LDADD = libfreeswitch.la libs/apr/libapr-1.la if ADD_LIBEDIT +fs_cli_CFLAGS += -DHAVE_EDITLINE -Ilibs/libedit/src +fs_cli_LDADD = libs/libedit/src/.libs/libedit.a freeswitch_CFLAGS += -Ilibs/libedit/src -DSWITCH_HAVE_LIBEDIT freeswitch_LDADD += libs/libedit/src/.libs/libedit.a endif Modified: freeswitch/trunk/debian/freeswitch.install ============================================================================== --- freeswitch/trunk/debian/freeswitch.install (original) +++ freeswitch/trunk/debian/freeswitch.install Wed Dec 31 14:38:00 2008 @@ -1,5 +1,6 @@ opt/freeswitch/htdocs/* opt/freeswitch/bin/freeswitch +opt/freeswitch/bin/fs_cli opt/freeswitch/bin/scripts/* opt/freeswitch/lib/libfreeswitch*.so* opt/freeswitch/lib/libopenzap*.so* Modified: freeswitch/trunk/libs/esl/Makefile ============================================================================== --- freeswitch/trunk/libs/esl/Makefile (original) +++ freeswitch/trunk/libs/esl/Makefile Wed Dec 31 14:38:00 2008 @@ -2,7 +2,7 @@ LIBEDIT_DIR=../../libs/libedit DEBUG=-g -ggdb PICKY=-O2 -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -CFLAGS=$(INCS) -D_GNU_SOURCE $(DEBUG) -I$(LIBEDIT_DIR)/src/ $(PICKY) +CFLAGS=$(INCS) $(DEBUG) -I$(LIBEDIT_DIR)/src/ $(PICKY) MYLIB=libesl.a LIBS=-lncurses -lpthread -lesl LDFLAGS=-L. Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 31 14:38:00 2008 @@ -1,3 +1,7 @@ +#ifndef _XOPEN_SOURCE +#define _XOPEN_SOURCE 500 +#endif + #include #include #include @@ -11,9 +15,12 @@ #include #else #include +#include #include +#ifndef HAVE_EDITLINE #define HAVE_EDITLINE #endif +#endif #include From anthm at freeswitch.org Wed Dec 31 11:44:16 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 14:44:16 -0500 Subject: [Freeswitch-trunk] [commit] r11036 - freeswitch/trunk/libs/esl Message-ID: Author: anthm Date: Wed Dec 31 14:44:16 2008 New Revision: 11036 Log: allow unix build without libedit Modified: freeswitch/trunk/libs/esl/Makefile freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/Makefile ============================================================================== --- freeswitch/trunk/libs/esl/Makefile (original) +++ freeswitch/trunk/libs/esl/Makefile Wed Dec 31 14:44:16 2008 @@ -2,7 +2,7 @@ LIBEDIT_DIR=../../libs/libedit DEBUG=-g -ggdb PICKY=-O2 -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -CFLAGS=$(INCS) $(DEBUG) -I$(LIBEDIT_DIR)/src/ $(PICKY) +CFLAGS=$(INCS) -DHAVE_EDITLINE $(DEBUG) -I$(LIBEDIT_DIR)/src/ $(PICKY) MYLIB=libesl.a LIBS=-lncurses -lpthread -lesl LDFLAGS=-L. Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 31 14:44:16 2008 @@ -16,14 +16,14 @@ #else #include #include -#include -#ifndef HAVE_EDITLINE -#define HAVE_EDITLINE -#endif #endif #include +#ifdef HAVE_EDITLINE +#include +#endif + static char prompt_str[512] = ""; typedef struct { From mikej at freeswitch.org Wed Dec 31 11:58:52 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 14:58:52 -0500 Subject: [Freeswitch-trunk] [commit] r11037 - freeswitch/trunk/libs/esl Message-ID: Author: mikej Date: Wed Dec 31 14:58:52 2008 New Revision: 11037 Log: fix bsd fs_cli build Modified: freeswitch/trunk/libs/esl/fs_cli.c Modified: freeswitch/trunk/libs/esl/fs_cli.c ============================================================================== --- freeswitch/trunk/libs/esl/fs_cli.c (original) +++ freeswitch/trunk/libs/esl/fs_cli.c Wed Dec 31 14:58:52 2008 @@ -1,5 +1,5 @@ #ifndef _XOPEN_SOURCE -#define _XOPEN_SOURCE 500 +#define _XOPEN_SOURCE 600 #endif #include From anthm at freeswitch.org Wed Dec 31 13:02:24 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 16:02:24 -0500 Subject: [Freeswitch-trunk] [commit] r11038 - freeswitch/trunk/src/include Message-ID: Author: anthm Date: Wed Dec 31 16:02:22 2008 New Revision: 11038 Log: fix typo in comment Modified: freeswitch/trunk/src/include/switch_types.h Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Wed Dec 31 16:02:22 2008 @@ -486,7 +486,7 @@ Always sending a duration of 0 with a new timestamp should be tolerated but is rarely intentional and is mistakenly done by many devices. - The issue is that the Sonus expects everyone to do it this way instead of tolerating eiher way. + The issue is that the Sonus expects everyone to do it this way instead of tolerating either way. Sonus will actually ignore every packet with the same timestamp before concluding if it's DTMF. This flag will cause each packet to have a new timestamp. From mikej at freeswitch.org Wed Dec 31 14:26:31 2008 From: mikej at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 17:26:31 -0500 Subject: [Freeswitch-trunk] [commit] r11039 - freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su Message-ID: Author: mikej Date: Wed Dec 31 17:26:30 2008 New Revision: 11039 Log: fix silly compiler warning caused by freebsd not making int same size as void* on some 64 bit amd (SFSIP-113) Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_kqueue_port.c Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_kqueue_port.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_kqueue_port.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_kqueue_port.c Wed Dec 31 17:26:30 2008 @@ -242,21 +242,21 @@ i = ser->ser_id; flags = (wait->events & SU_WAIT_IN) ? EV_ADD : EV_ADD | EV_DISABLE; - EV_SET(ev, wait->fd, EVFILT_READ, flags, 0, 0, (void *)i); + EV_SET(ev, wait->fd, EVFILT_READ, flags, 0, 0, (void *)(intptr_t)i); if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) { SU_DEBUG_0(("kevent((%u, %s, %u, %p)) failed: %s\n", - wait->fd, "EVFILT_READ", flags, (void *)i, strerror(errno))); + wait->fd, "EVFILT_READ", flags, (void *)(intptr_t)i, strerror(errno))); return -1; } flags = (wait->events & SU_WAIT_OUT) ? EV_ADD : EV_ADD | EV_DISABLE; - EV_SET(ev, wait->fd, EVFILT_WRITE, flags, 0, 0, (void *)i); + EV_SET(ev, wait->fd, EVFILT_WRITE, flags, 0, 0, (void *)(intptr_t)i); if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) { int error = errno; SU_DEBUG_0(("kevent((%u, %s, %u, %p)) failed: %s\n", - wait->fd, "EVFILT_WRITE", flags, (void *)i, strerror(error))); + wait->fd, "EVFILT_WRITE", flags, (void *)(intptr_t)i, strerror(error))); - EV_SET(ev, wait->fd, EVFILT_READ, EV_DELETE, 0, 0, (void *)i); + EV_SET(ev, wait->fd, EVFILT_READ, EV_DELETE, 0, 0, (void *)(intptr_t)i); kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL); errno = error; @@ -294,17 +294,17 @@ wait = ser->ser_wait; - EV_SET(ev, wait->fd, EVFILT_READ, EV_DELETE, 0, 0, (void *)i); + EV_SET(ev, wait->fd, EVFILT_READ, EV_DELETE, 0, 0, (void *)(intptr_t)i); if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) { SU_DEBUG_0(("remove kevent((%u, %s, %s, %p)) failed: %s\n", - wait->fd, "EVFILT_READ", "EV_DELETE", (void *)i, + wait->fd, "EVFILT_READ", "EV_DELETE", (void *)(intptr_t)i, strerror(errno))); } - EV_SET(ev, wait->fd, EVFILT_WRITE, EV_DELETE, 0, 0, (void *)i); + EV_SET(ev, wait->fd, EVFILT_WRITE, EV_DELETE, 0, 0, (void *)(intptr_t)i); if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) { SU_DEBUG_0(("remove kevent((%u, %s, %s, %p)) failed: %s\n", - wait->fd, "EVFILT_WRITE", "EV_DELETE", (void *)i, + wait->fd, "EVFILT_WRITE", "EV_DELETE", (void *)(intptr_t)i, strerror(errno))); } @@ -461,21 +461,21 @@ wait->events = events; flags = (wait->events & SU_WAIT_IN) ? EV_ADD | EV_ENABLE : EV_ADD | EV_DISABLE; - EV_SET(ev, wait->fd, EVFILT_READ, flags, 0, 0, (void *)index); + EV_SET(ev, wait->fd, EVFILT_READ, flags, 0, 0, (void *)(intptr_t)index); if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) { SU_DEBUG_0(("modify kevent((%u, %s, %s, %p)) failed: %s\n", wait->fd, "EVFILT_READ", (events & SU_WAIT_IN) ? "EV_ENABLE" : "EV_DISABLE", - (void *)index, strerror(errno))); + (void *)(intptr_t)index, strerror(errno))); } flags = (wait->events & SU_WAIT_OUT) ? EV_ADD | EV_ENABLE : EV_ADD | EV_DISABLE; - EV_SET(ev, wait->fd, EVFILT_WRITE, flags, 0, 0, (void *)index); + EV_SET(ev, wait->fd, EVFILT_WRITE, flags, 0, 0, (void *)(intptr_t)index); if (kevent(self->sup_kqueue, ev, 1, NULL, 0, NULL) == -1) { SU_DEBUG_0(("modify kevent((%u, %s, %s, %p)) failed: %s\n", wait->fd, "EVFILT_WRITE", (events & SU_WAIT_OUT) ? "EV_ENABLE" : "EV_DISABLE", - (void *)index, strerror(errno))); + (void *)(intptr_t)index, strerror(errno))); } return 0; @@ -539,7 +539,7 @@ struct su_register *ser; su_root_magic_t *magic; - index = (int)ev[j].udata; + index = (int)(intptr_t)ev[j].udata; if (index <= 0 || self->sup_max_index < index) continue; ser = self->sup_indices[index]; From anthm at freeswitch.org Wed Dec 31 14:44:23 2008 From: anthm at freeswitch.org (FreeSWITCH SVN) Date: Wed, 31 Dec 2008 17:44:23 -0500 Subject: [Freeswitch-trunk] [commit] r11040 - in freeswitch/trunk/src: . mod/event_handlers/mod_event_socket Message-ID: Author: anthm Date: Wed Dec 31 17:44:23 2008 New Revision: 11040 Log: wash behind your ears Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c freeswitch/trunk/src/switch_event.c Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Wed Dec 31 17:44:23 2008 @@ -628,15 +628,67 @@ switch_mutex_unlock(listener->filter_mutex); + } else if (!strcasecmp(wcmd, "stop-logging")) { + char *id = switch_event_get_header(stream->param_event, "listen-id"); + uint32_t idl = 0; + + if (id) { + idl = (uint32_t) atol(id); + } + + if (!(listener = find_listener(idl))) { + stream->write_function(stream, "Invalid Listen-ID\n"); + goto end; + } + + if (switch_test_flag(listener, LFLAG_LOG)) { + switch_clear_flag_locked(listener, LFLAG_LOG); + stream->write_function(stream, "Not Logging\n"); + } else { + stream->write_function(stream, "Not Logging\n"); + } + + goto end; + + } else if (!strcasecmp(wcmd, "set-loglevel")) { + char *loglevel = switch_event_get_header(stream->param_event, "loglevel"); + char *id = switch_event_get_header(stream->param_event, "listen-id"); + uint32_t idl = 0; + + if (id) { + idl = (uint32_t) atol(id); + } + + if (!(listener = find_listener(idl))) { + stream->write_function(stream, "Invalid Listen-ID\n"); + goto end; + } + + if (loglevel) { + switch_log_level_t ltype = switch_log_str2level(loglevel); + if (ltype != SWITCH_LOG_INVALID) { + listener->level = ltype; + switch_set_flag(listener, LFLAG_LOG); + stream->write_function(stream, "Log Level %s\n", loglevel); + } else { + stream->write_function(stream, "Invalid Level\n"); + } + } else { + stream->write_function(stream, "Invalid Syntax\n"); + } + + goto end; + } else if (!strcasecmp(wcmd, "create-listener")) { char *events = switch_event_get_header(stream->param_event, "events"); + char *loglevel = switch_event_get_header(stream->param_event, "loglevel"); switch_memory_pool_t *pool; char *next, *cur; uint32_t count = 0, key_count = 0; uint8_t custom = 0; char *edup; - if (switch_strlen_zero(events)) { + if (switch_strlen_zero(events) && switch_strlen_zero(loglevel)) { stream->write_function(stream, "Missing parameter!\n"); goto end; } @@ -652,58 +704,69 @@ switch_set_flag(listener, LFLAG_AUTHED); switch_set_flag(listener, LFLAG_STATEFUL); switch_queue_create(&listener->event_queue, SWITCH_CORE_QUEUE_LEN, listener->pool); + switch_queue_create(&listener->log_queue, SWITCH_CORE_QUEUE_LEN, listener->pool); + + if (loglevel) { + switch_log_level_t ltype = switch_log_str2level(loglevel); + if (ltype != SWITCH_LOG_INVALID) { + listener->level = ltype; + switch_set_flag(listener, LFLAG_LOG); + } + } switch_thread_rwlock_create(&listener->rwlock, listener->pool); listener->id = next_id(); listener->timeout = 60; listener->last_flush = switch_timestamp(NULL); - if (switch_stristr("xml", format)) { - listener->format = EVENT_FORMAT_XML; - } else { - listener->format = EVENT_FORMAT_PLAIN; - } + if (events) { - edup = strdup(events); - - for (cur = edup; cur; count++) { - switch_event_types_t type; - - if ((next = strchr(cur, ' '))) { - *next++ = '\0'; + if (switch_stristr("xml", format)) { + listener->format = EVENT_FORMAT_XML; + } else { + listener->format = EVENT_FORMAT_PLAIN; } + + edup = strdup(events); + + for (cur = edup; cur; count++) { + switch_event_types_t type; + + if ((next = strchr(cur, ' '))) { + *next++ = '\0'; + } - if (custom) { - switch_core_hash_insert(listener->event_hash, cur, MARKER); - } else if (switch_name_event(cur, &type) == SWITCH_STATUS_SUCCESS) { - key_count++; - if (type == SWITCH_EVENT_ALL) { - uint32_t x = 0; - for (x = 0; x < SWITCH_EVENT_ALL; x++) { - listener->event_list[x] = 1; + if (custom) { + switch_core_hash_insert(listener->event_hash, cur, MARKER); + } else if (switch_name_event(cur, &type) == SWITCH_STATUS_SUCCESS) { + key_count++; + if (type == SWITCH_EVENT_ALL) { + uint32_t x = 0; + for (x = 0; x < SWITCH_EVENT_ALL; x++) { + listener->event_list[x] = 1; + } + } + if (type <= SWITCH_EVENT_ALL) { + listener->event_list[type] = 1; + } + if (type == SWITCH_EVENT_CUSTOM) { + custom++; } } - if (type <= SWITCH_EVENT_ALL) { - listener->event_list[type] = 1; - } - if (type == SWITCH_EVENT_CUSTOM) { - custom++; - } + + cur = next; } - - cur = next; - } - switch_safe_free(edup); + switch_safe_free(edup); - if (!key_count) { - switch_core_hash_destroy(&listener->event_hash); - switch_core_destroy_memory_pool(&listener->pool); - stream->write_function(stream, "No keywords supplied\n"); - goto end; + if (!key_count) { + switch_core_hash_destroy(&listener->event_hash); + switch_core_destroy_memory_pool(&listener->pool); + stream->write_function(stream, "No keywords supplied\n"); + goto end; + } } - switch_set_flag_locked(listener, LFLAG_EVENTS); add_listener(listener); stream->write_function(stream, "\n"); @@ -750,7 +813,38 @@ listener->last_flush = switch_timestamp(NULL); stream->write_function(stream, "\n Current Events Follow\n"); xmlize_listener(listener, stream); - stream->write_function(stream, "\n"); + + if (switch_test_flag(listener, LFLAG_LOG)) { + stream->write_function(stream, "\n"); + + while (switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) { + switch_log_node_t *dnode = (switch_log_node_t *) pop; + int encode_len = (strlen(dnode->data) * 3) + 1; + char *encode_buf = malloc(encode_len); + + switch_assert(encode_buf); + + memset(encode_buf, 0, encode_len); + switch_url_encode((char *) dnode->data, encode_buf, encode_len); + + + stream->write_function(stream, "%s\n", + dnode->level, + dnode->channel, + dnode->file, + dnode->func, + dnode->line, + encode_buf + ); + free(encode_buf); + free(dnode->data); + free(dnode); + } + + stream->write_function(stream, "\n"); + } + + stream->write_function(stream, "\n"); while (switch_queue_trypop(listener->event_queue, &pop) == SWITCH_STATUS_SUCCESS) { char *etype; Modified: freeswitch/trunk/src/switch_event.c ============================================================================== --- freeswitch/trunk/src/switch_event.c (original) +++ freeswitch/trunk/src/switch_event.c Wed Dec 31 17:44:23 2008 @@ -930,13 +930,20 @@ static switch_xml_t add_xml_header(switch_xml_t xml, char *name, char *value, int offset) { - switch_xml_t header = switch_xml_add_child_d(xml, "header", offset); - + switch_xml_t header = switch_xml_add_child_d(xml, name, offset); + if (header) { - switch_xml_set_attr_d(header, "name", name); - switch_xml_set_attr_d(header, "value", value); + int encode_len = (strlen(value) * 3) + 1; + char *encode_buf = malloc(encode_len); + + switch_assert(encode_buf); + + memset(encode_buf, 0, encode_len); + switch_url_encode((char *) value, encode_buf, encode_len); + switch_xml_set_txt_d(header, encode_buf); + free(encode_buf); } - + return header; } @@ -948,6 +955,7 @@ switch_xml_t xml = NULL; uint32_t off = 0; va_list ap; + switch_xml_t xheaders = NULL; if (!(xml = switch_xml_new("event"))) { return xml; @@ -972,8 +980,11 @@ } } - for (hp = event->headers; hp; hp = hp->next) { - add_xml_header(xml, hp->name, hp->value, off++); + if ((xheaders = switch_xml_add_child_d(xml, "headers", off++))) { + int hoff = 0; + for (hp = event->headers; hp; hp = hp->next) { + add_xml_header(xheaders, hp->name, hp->value, hoff++); + } } if (!switch_strlen_zero(data)) { @@ -1032,7 +1043,7 @@ switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Date-Local", date); switch_rfc822_date(date, ts); switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Date-GMT", date); - switch_event_add_header(*event, SWITCH_STACK_BOTTOM, "Event-Date-timestamp", "%" SWITCH_UINT64_T_FMT, (uint64_t) ts); + switch_event_add_header(*event, SWITCH_STACK_BOTTOM, "Event-Date-Timestamp", "%" SWITCH_UINT64_T_FMT, (uint64_t) ts); switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Calling-File", switch_cut_path(file)); switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Calling-Function", func); switch_event_add_header(*event, SWITCH_STACK_BOTTOM, "Event-Calling-Line-Number", "%d", line);
0do not prune
1prune parameters with identical names