Freeswitch-svn
Threads by month
- ----- 2026 -----
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
January 2008
- 8 participants
- 390 discussions
Author: mikej
Date: Wed Jan 23 16:27:04 2008
New Revision: 7336
Modified:
freeswitch/trunk/src/switch_ivr_async.c
Log:
tweak buffer size
Modified: freeswitch/trunk/src/switch_ivr_async.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_async.c (original)
+++ freeswitch/trunk/src/switch_ivr_async.c Wed Jan 23 16:27:04 2008
@@ -503,7 +503,7 @@
switch_channel_t *tchannel = switch_core_session_get_channel(tsession);
switch_frame_t *read_frame, write_frame = { 0 };
switch_codec_t codec = {0};
- int16_t buf[8192];
+ int16_t buf[SWITCH_RECOMMENDED_BUFFER_SIZE];
switch_codec_t *tread_codec = switch_core_session_get_read_codec(tsession);
uint32_t tlen = tread_codec->implementation->bytes_per_frame;
1
0
Author: mikej
Date: Wed Jan 23 16:21:18 2008
New Revision: 7335
Modified:
freeswitch/trunk/src/switch_ivr_async.c
Log:
type tweak
Modified: freeswitch/trunk/src/switch_ivr_async.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_async.c (original)
+++ freeswitch/trunk/src/switch_ivr_async.c Wed Jan 23 16:21:18 2008
@@ -505,7 +505,7 @@
switch_codec_t codec = {0};
int16_t buf[8192];
switch_codec_t *tread_codec = switch_core_session_get_read_codec(tsession);
- int tlen = tread_codec->implementation->bytes_per_frame;
+ uint32_t tlen = tread_codec->implementation->bytes_per_frame;
ep = switch_core_session_alloc(session, sizeof(*ep));
1
0
23 Jan '08
Author: anthm
Date: Wed Jan 23 16:14:38 2008
New Revision: 7334
Modified:
freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c
freeswitch/trunk/src/switch_event.c
Log:
change xml_lookups to take an event as params instead of url string this will break your xml_curl scripts please update
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 Jan 23 16:14:38 2008
@@ -138,9 +138,8 @@
switch_str_nil(key_value));
data = switch_event_build_param_string(params, basic_data);
-
switch_assert(data);
- printf("XXXXXXXXXXXXXXXXXXXX\n%s\n", data);
+
switch_uuid_get(&uuid);
switch_uuid_format(uuid_str, &uuid);
Modified: freeswitch/trunk/src/switch_event.c
==============================================================================
--- freeswitch/trunk/src/switch_event.c (original)
+++ freeswitch/trunk/src/switch_event.c Wed Jan 23 16:14:38 2008
@@ -1310,28 +1310,29 @@
stream.write_function(&stream, "%s=%s&", prof_names[x], encode_buf);
}
- if ((hi = event->headers)) {
- for (; hi; hi = hi->next) {
- char *var = hi->name;
- char *val = hi->value;
+ if (event) {
+ if ((hi = event->headers)) {
+ for (; hi; hi = hi->next) {
+ char *var = hi->name;
+ char *val = hi->value;
- new_len = (strlen((char *) var) * 3) + 1;
- if (encode_len < new_len) {
- char *tmp;
+ new_len = (strlen((char *) var) * 3) + 1;
+ if (encode_len < new_len) {
+ char *tmp;
- encode_len = new_len;
+ encode_len = new_len;
- tmp = realloc(encode_buf, encode_len);
- switch_assert(tmp);
- encode_buf = tmp;
- }
+ tmp = realloc(encode_buf, encode_len);
+ switch_assert(tmp);
+ encode_buf = tmp;
+ }
- switch_url_encode((char *) val, encode_buf, encode_len - 1);
- stream.write_function(&stream, "%s=%s&", (char *) var, encode_buf);
+ switch_url_encode((char *) val, encode_buf, encode_len - 1);
+ stream.write_function(&stream, "%s=%s&", (char *) var, encode_buf);
+ }
}
}
-
e = (char *) stream.data + (strlen((char *) stream.data) - 1);
if (e && *e == '&') {
1
0
23 Jan '08
Author: anthm
Date: Wed Jan 23 15:59:25 2008
New Revision: 7333
Modified:
freeswitch/trunk/src/include/switch_event.h
freeswitch/trunk/src/include/switch_types.h
freeswitch/trunk/src/include/switch_xml.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_voicemail/mod_voicemail.c
freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c
freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c
freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c
freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c
freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c
freeswitch/trunk/src/switch_event.c
freeswitch/trunk/src/switch_ivr_play_say.c
freeswitch/trunk/src/switch_xml.cpp
Log:
change xml_lookups to take an event as params instead of url string this will break your xml_curl scripts please update
Modified: freeswitch/trunk/src/include/switch_event.h
==============================================================================
--- freeswitch/trunk/src/include/switch_event.h (original)
+++ freeswitch/trunk/src/include/switch_event.h Wed Jan 23 15:59:25 2008
@@ -336,6 +336,9 @@
\note the body supplied by this function will supersede an existing body the event may have
*/
#define switch_event_fire_data(event, data) switch_event_fire_detailed(__FILE__, (char * )__SWITCH_FUNC__, __LINE__, event, data)
+
+SWITCH_DECLARE(char *) switch_event_build_param_string(switch_event_t *event, const char *prefix);
+
///\}
SWITCH_END_EXTERN_C
Modified: freeswitch/trunk/src/include/switch_types.h
==============================================================================
--- freeswitch/trunk/src/include/switch_types.h (original)
+++ freeswitch/trunk/src/include/switch_types.h Wed Jan 23 15:59:25 2008
@@ -1162,7 +1162,7 @@
typedef struct switch_xml *switch_xml_t;
typedef struct switch_core_time_duration switch_core_time_duration_t;
typedef switch_xml_t(*switch_xml_search_function_t) (const char *section,
- const char *tag_name, const char *key_name, const char *key_value, const char *params,
+ const char *tag_name, const char *key_name, const char *key_value, switch_event_t *params,
void *user_data);
typedef struct switch_hash switch_hash_t;
Modified: freeswitch/trunk/src/include/switch_xml.h
==============================================================================
--- freeswitch/trunk/src/include/switch_xml.h (original)
+++ freeswitch/trunk/src/include/switch_xml.h Wed Jan 23 15:59:25 2008
@@ -316,9 +316,9 @@
SWITCH_DECLARE(switch_status_t) switch_xml_locate(const char *section,
const char *tag_name,
const char *key_name, const char *key_value, switch_xml_t * root, switch_xml_t * node,
- const char *params);
+ switch_event_t *params);
-SWITCH_DECLARE(switch_status_t) switch_xml_locate_domain(const char *domain_name, char *params, switch_xml_t *root, switch_xml_t *domain);
+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_user(const char *key,
const char *user_name,
const char *domain_name,
@@ -326,14 +326,14 @@
switch_xml_t *root,
switch_xml_t *domain,
switch_xml_t *user,
- const char *xtra_params);
+ 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
///\param node a pointer to point to the node if it is found
///\param params optional URL formatted params to pass to external gateways
///\return the root xml node associated with the current request or NULL
-SWITCH_DECLARE(switch_xml_t) switch_xml_open_cfg(const char *file_path, switch_xml_t * node, const char *params);
+SWITCH_DECLARE(switch_xml_t) switch_xml_open_cfg(const char *file_path, switch_xml_t * node, switch_event_t *params);
///\brief bind a search function to an external gateway
///\param function the search function to bind
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 Wed Jan 23 15:59:25 2008
@@ -50,7 +50,7 @@
char delim = ' ';
const char *err = NULL;
const char *container = "params", *elem = "param";
- char *params = NULL;
+ switch_event_t *params = NULL;
if (!cmd) {
err = "bad args";
@@ -77,7 +77,13 @@
domain = "cluecon.com";
}
- params = switch_mprintf("user=%s&domain=%s&type=%s&key=%s", user, domain, type, key);
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "user", user);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "type", type);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "key", key);
+
if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, params) != SWITCH_STATUS_SUCCESS) {
err = "can't find user";
@@ -87,6 +93,9 @@
end:
+ switch_event_destroy(¶ms);
+
+
if (xml) {
if (err) {
//stream->write_function(stream, "-Error %s\n", err);
@@ -217,7 +226,8 @@
switch_xml_t xml = NULL, obj = NULL;
int argc;
char *mydata = NULL, *argv[4];
- char *section, *tag, *tag_attr_name, *tag_attr_val, *params = NULL;
+ char *section, *tag, *tag_attr_name, *tag_attr_val;
+ switch_event_t *params = NULL;
char *xmlstr;
char *path_info, delim = ' ';
char *host = NULL;
@@ -259,8 +269,13 @@
tag_attr_name = argv[2];
tag_attr_val = argv[3];
- params = switch_mprintf("section=%s&tag=%s&tag_attr_name=%s&tag_attr_val=%s", section, tag, tag_attr_name, tag_attr_val);
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
switch_assert(params);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "section", section);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "tag", tag);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "tag_attr_name", tag_attr_name);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "tag_attr_val", tag_attr_val);
+
if (switch_xml_locate(section, tag, tag_attr_name, tag_attr_val, &xml, &obj, params) != SWITCH_STATUS_SUCCESS) {
stream->write_function(stream, "can't find anything\n");
goto end;
@@ -269,6 +284,8 @@
end:
+ switch_event_destroy(¶ms);
+
if (err) {
if (host) {
stream->write_function(stream, "<error>%s</error>\n", err);
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 Jan 23 15:59:25 2008
@@ -3187,7 +3187,7 @@
static switch_status_t conf_api_sub_transfer(conference_obj_t * conference, switch_stream_handle_t *stream, int argc, char **argv)
{
switch_status_t ret_status = SWITCH_STATUS_SUCCESS;
- char *params = NULL, *chanvars = NULL;
+ switch_event_t *params = NULL;
switch_assert(conference != NULL);
switch_assert(stream != NULL);
@@ -3229,10 +3229,15 @@
} else {
profile_name = "default";
}
- params = switch_mprintf("conf_name=%s&profile_name=%s", conf_name, profile_name);
- chanvars = switch_channel_build_param_string(channel, NULL, params);
+
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "conf_name", conf_name);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile_name", profile_name);
+ switch_channel_event_set_data(channel, params);
+
/* Open the config from the xml registry */
- if (!(cxml = switch_xml_open_cfg(global_cf_name, &cfg, chanvars))) {
+ if (!(cxml = switch_xml_open_cfg(global_cf_name, &cfg, params))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", global_cf_name);
goto done;
}
@@ -3303,9 +3308,9 @@
}
done:
- switch_safe_free(params);
- switch_safe_free(chanvars);
-
+ if (params) {
+ switch_event_destroy(¶ms);
+ }
return ret_status;
}
@@ -3980,7 +3985,7 @@
uint8_t rl = 0, isbr = 0;
char *dpin = NULL;
conf_xml_cfg_t xml_cfg = { 0 };
- char *params = NULL;
+ switch_event_t *params = NULL;
switch_assert(channel != NULL);
@@ -4032,7 +4037,11 @@
profile_name = "default";
}
- params = switch_mprintf("conf_name=%s&profile_name=%s", conf_name, profile_name);
+
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "conf_name", conf_name);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile_name", profile_name);
/* Open the config from the xml registry */
if (!(cxml = switch_xml_open_cfg(global_cf_name, &cfg, params))) {
@@ -4337,7 +4346,7 @@
codec_done2:
switch_core_codec_destroy(&member.write_codec);
done:
- switch_safe_free(params);
+ switch_event_destroy(¶ms);
switch_buffer_destroy(&member.resample_buffer);
switch_buffer_destroy(&member.audio_buffer);
switch_buffer_destroy(&member.mux_buffer);
@@ -4957,9 +4966,15 @@
static void send_presence(switch_event_types_t id)
{
switch_xml_t cxml, cfg, advertise, room;
+ switch_event_t *params = NULL;
+
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "presence", "true");
+
/* Open the config from the xml registry */
- if (!(cxml = switch_xml_open_cfg(global_cf_name, &cfg, "presence"))) {
+ if (!(cxml = switch_xml_open_cfg(global_cf_name, &cfg, params))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", global_cf_name);
goto done;
}
@@ -4983,6 +4998,8 @@
}
done:
+ switch_event_destroy(¶ms);
+
/* Release the config registry handle */
if (cxml) {
switch_xml_free(cxml);
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 Wed Jan 23 15:59:25 2008
@@ -864,16 +864,19 @@
SWITCH_STANDARD_APP(ivr_application_function)
{
switch_channel_t *channel = switch_core_session_get_channel(session);
- char *params,*chanvars;
-
- if (channel && !switch_strlen_zero(data) && (params = switch_core_session_strdup(session, data))) {
+ switch_event_t *params;
+
+ if (channel) {
switch_xml_t cxml = NULL, cfg = NULL, xml_menus = NULL, xml_menu = NULL;
// Open the config from the xml registry
- chanvars = switch_channel_build_param_string(channel, NULL, NULL);
- if ((cxml = switch_xml_open_cfg(ivr_cf_name, &cfg, chanvars)) != NULL) {
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_channel_event_set_data(channel, params);
+
+ if ((cxml = switch_xml_open_cfg(ivr_cf_name, &cfg, params)) != NULL) {
if ((xml_menus = switch_xml_child(cfg, "menus"))) {
- xml_menu = switch_xml_find_child(xml_menus, "menu", "name", params);
+ xml_menu = switch_xml_find_child(xml_menus, "menu", "name", (char *)data);
// if the menu was found
if (xml_menu != NULL) {
@@ -889,20 +892,20 @@
switch_xml_free(cxml);
cxml = NULL;
switch_channel_pre_answer(channel);
- switch_ivr_menu_execute(session, menu_stack, params, NULL);
+ switch_ivr_menu_execute(session, menu_stack, (char *)data, NULL);
switch_ivr_menu_stack_free(menu_stack);
} else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to create menu '%s'\n", params);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to create menu\n");
}
} else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to find menu '%s'\n", params);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to find menu\n");
}
}
switch_xml_free(cxml);
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", ivr_cf_name);
}
- switch_safe_free(chanvars);
+ switch_event_destroy(¶ms);
}
}
@@ -1414,7 +1417,7 @@
static switch_call_cause_t cause = SWITCH_CAUSE_UNALLOCATED;
unsigned int timelimit = 60;
switch_channel_t *new_channel = NULL;
-
+ switch_event_t *params;
if (switch_strlen_zero(outbound_profile->destination_number)) {
goto done;
}
@@ -1427,7 +1430,12 @@
*domain++ = '\0';
- if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, "as_channel=true") != SWITCH_STATUS_SUCCESS) {
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_event_add_header(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) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", user, domain);
goto done;
}
@@ -1458,6 +1466,8 @@
done:
+ switch_event_destroy(¶ms);
+
if (dest) {
const char *var;
char *d_dest = NULL;
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 Jan 23 15:59:25 2008
@@ -1562,20 +1562,24 @@
}
if (!x_user) {
- char *xtra;
+ switch_event_t *params;
int ok = 1;
caller_profile = switch_channel_get_caller_profile(channel);
- xtra = switch_mprintf("mailbox=%s&destination_number=%s&caller_id_number=%s",
- myid,caller_profile->destination_number,caller_profile->caller_id_number);
- switch_assert(xtra);
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_event_add_header(params, SWITCH_STACK_BOTTOM, "mailbox", myid);
+ switch_event_add_header(params, SWITCH_STACK_BOTTOM, "destination_number", caller_profile->destination_number);
+ switch_event_add_header(params, SWITCH_STACK_BOTTOM, "caller_id_number", caller_profile->caller_id_number);
+
+
if (switch_xml_locate_user("id", myid, domain_name, switch_channel_get_variable(channel, "network_addr"),
- &x_domain_root, &x_domain, &x_user, xtra) != SWITCH_STATUS_SUCCESS) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", myid, domain_name);
- ok = 0;
+ &x_domain_root, &x_domain, &x_user, 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;
}
-
- switch_safe_free(xtra);
+
+ switch_event_destroy(¶ms);
if (!ok) {
goto end;
@@ -1742,16 +1746,19 @@
if (id) {
int ok = 1;
- char *xtra = switch_mprintf("mailbox=%s", id);
+ switch_event_t *params = NULL;
switch_xml_t x_domain, x_domain_root, x_user, x_params, x_param;
const char *email_addr = NULL;
-
- switch_assert(xtra);
+
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_event_add_header(params, SWITCH_STACK_BOTTOM, "mailbox", id);
+
x_user = x_domain = x_domain_root = NULL;
if (switch_xml_locate_user("id", id, domain_name, switch_channel_get_variable(channel, "network_addr"),
- &x_domain_root, &x_domain, &x_user, xtra) == 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) {
+ &x_domain_root, &x_domain, &x_user, params) == SWITCH_STATUS_SUCCESS) {
+ if ((x_params = switch_xml_child(x_user, "params"))) {
+ for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) {
const char *var = switch_xml_attr_soft(x_param, "name");
const char *val = switch_xml_attr_soft(x_param, "value");
@@ -1778,7 +1785,7 @@
ok = 0;
}
- switch_safe_free(xtra);
+ switch_event_destroy(¶ms);
switch_xml_free(x_domain_root);
if (!ok) {
goto end;
Modified: freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c
==============================================================================
--- freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c (original)
+++ freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c Wed Jan 23 15:59:25 2008
@@ -181,15 +181,18 @@
static switch_status_t dialplan_xml_locate(switch_core_session_t *session, switch_caller_profile_t *caller_profile, switch_xml_t * root,
switch_xml_t * node)
{
- char *data;
switch_channel_t *channel;
switch_status_t status = SWITCH_STATUS_GENERR;
+ switch_event_t *params = NULL;
channel = switch_core_session_get_channel(session);
- data = switch_channel_build_param_string(channel, caller_profile, NULL);
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
- status = switch_xml_locate("dialplan", NULL, NULL, NULL, root, node, data);
- switch_safe_free(data);
+ switch_channel_event_set_data(channel, params);
+
+ status = switch_xml_locate("dialplan", NULL, NULL, NULL, root, node, params);
+ switch_event_destroy(¶ms);
return status;
}
Modified: freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c (original)
+++ freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c Wed Jan 23 15:59:25 2008
@@ -2278,7 +2278,8 @@
static void do_vcard(ldl_handle_t *handle, char *to, char *from, char *id)
{
- char *params = NULL, *real_to, *to_user, *xmlstr = NULL, *to_host = NULL;
+ switch_event_t *params = NULL;
+ char *real_to, *to_user, *xmlstr = NULL, *to_host = NULL;
switch_xml_t domain, xml = NULL, user, vcard;
int sent = 0;
@@ -2303,11 +2304,11 @@
goto end;
}
- if (!(params = switch_mprintf("to=%s@%s&from=%s&object=vcard", to_user, to_host, from))) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n");
- goto end;
- }
-
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_event_add_header(params, SWITCH_STACK_BOTTOM, "to", "%s@%s", to_user, to_host);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "from", from);
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "object", "vcard");
if (switch_xml_locate("directory", "domain", "name", to_host, &xml, &domain, params) != SWITCH_STATUS_SUCCESS) {
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "can't find domain for [%s@%s]\n", to_user, to_host);
@@ -2335,6 +2336,8 @@
end:
+ switch_event_destroy(¶ms);
+
if (!sent) {
ldl_handle_send_vcard(handle, to, from, id, NULL);
}
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 Jan 23 15:59:25 2008
@@ -828,7 +828,8 @@
sofia_profile_t *profile = NULL;
char url[512] = "";
int profile_found = 0;
-
+ switch_event_t *params = NULL;;
+
if (!reload) {
su_init();
if (sip_update_default_mclass(sip_extend_mclass(NULL)) < 0) {
@@ -847,9 +848,11 @@
return status;
}
- switch_snprintf(url, sizeof(url), "profile=%s", switch_str_nil(profile_name));
-
- if (!(xml = switch_xml_open_cfg(cf, &cfg, url))) {
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_event_add_header(params, SWITCH_STACK_BOTTOM, "profile", profile_name);
+
+ if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
status = SWITCH_STATUS_FALSE;
goto done;
@@ -1279,6 +1282,9 @@
}
}
done:
+
+ switch_event_destroy(¶ms);
+
if (xml) {
switch_xml_free(xml);
}
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 Jan 23 15:59:25 2008
@@ -775,8 +775,8 @@
char *mailbox = NULL;
switch_xml_t domain, xml = NULL, user, param, uparams, dparams;
char hexdigest[2 * SU_MD5_DIGEST_SIZE + 1] = "";
- char *pbuf = NULL;
char *domain_name = NULL;
+ switch_event_t *params = NULL;
username = realm = nonce = uri = qop = cnonce = nc = response = NULL;
@@ -854,9 +854,12 @@
free(sql);
}
- pbuf = switch_mprintf("action=sip_auth&profile=%s&user_agent=%s",
- profile->name,
- (sip && sip->sip_user_agent) ? sip->sip_user_agent->g_string : "unknown");
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ switch_assert(params);
+ switch_event_add_header(params, SWITCH_STACK_BOTTOM, "action", "sip_auth");
+ switch_event_add_header(params, SWITCH_STACK_BOTTOM, "profile", profile->name);
+ switch_event_add_header(params, SWITCH_STACK_BOTTOM, "user_agent", (sip && sip->sip_user_agent) ? sip->sip_user_agent->g_string : "unknown");
+
if (!switch_strlen_zero(profile->reg_domain)) {
domain_name = profile->reg_domain;
@@ -864,7 +867,7 @@
domain_name = realm;
}
- if (switch_xml_locate_user("id", username, domain_name, ip, &xml, &domain, &user, pbuf) != SWITCH_STATUS_SUCCESS) {
+ if (switch_xml_locate_user("id", username, domain_name, ip, &xml, &domain, &user, params) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", username, domain_name);
ret = AUTH_FORBIDDEN;
goto end;
@@ -1053,10 +1056,13 @@
}
}
end:
+
+ switch_event_destroy(¶ms);
+
if (xml) {
switch_xml_free(xml);
}
- switch_safe_free(pbuf);
+
switch_safe_free(input);
switch_safe_free(input2);
switch_safe_free(username);
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 Jan 23 15:59:25 2008
@@ -95,7 +95,7 @@
}
-static switch_xml_t xml_url_fetch(const char *section, const char *tag_name, const char *key_name, const char *key_value, const char *params,
+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)
{
char filename[512] = "";
@@ -111,7 +111,8 @@
long httpRes = 0;
struct curl_slist *headers = NULL;
char hostname[256] = "";
-
+ char basic_data[512];
+
gethostname(hostname, sizeof(hostname));
if (!binding) {
@@ -128,15 +129,18 @@
return xml;
}
- data = switch_mprintf("hostname=%s§ion=%s&tag_name=%s&key_name=%s&key_value=%s%s%s",
- hostname,
- section,
- switch_str_nil(tag_name),
- switch_str_nil(key_name),
- switch_str_nil(key_value),
- params ? strchr(params, '=') ? "&" : "¶ms=" : "", params ? params : "");
- switch_assert(data);
+
+ 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);
+
+ switch_assert(data);
+ printf("XXXXXXXXXXXXXXXXXXXX\n%s\n", data);
switch_uuid_get(&uuid);
switch_uuid_format(uuid_str, &uuid);
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 Wed Jan 23 15:59:25 2008
@@ -158,6 +158,7 @@
switch_xml_t x_domain, x_domain_root = NULL, x_user, x_params, x_param;
const char *box;
int at = 0;
+ switch_event_t *params = NULL;
p = RequestHeaderValue(r, "authorization");
@@ -197,11 +198,17 @@
r->user=strdup(user);
goto authed;
}
+
+ switch_event_create(¶ms, SWITCH_EVENT_MESSAGE);
+ 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, "mailbox=check") != SWITCH_STATUS_SUCCESS) {
+ if (switch_xml_locate_user("id", user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, params) != SWITCH_STATUS_SUCCESS) {
+ switch_event_destroy(¶ms);
goto fail;
}
-
+
+ switch_event_destroy(¶ms);
box = switch_xml_attr_soft(x_user, "mailbox");
for (x_param = switch_xml_child(x_domain, "param"); x_param; x_param = x_param->next) {
Modified: freeswitch/trunk/src/switch_event.c
==============================================================================
--- freeswitch/trunk/src/switch_event.c (original)
+++ freeswitch/trunk/src/switch_event.c Wed Jan 23 15:59:25 2008
@@ -1268,6 +1268,81 @@
return data;
}
+
+SWITCH_DECLARE(char *) switch_event_build_param_string(switch_event_t *event, const char *prefix)
+{
+ switch_stream_handle_t stream = { 0 };
+ switch_size_t encode_len = 1024, new_len = 0;
+ char *encode_buf = NULL;
+ const char *prof[12] = { 0 }, *prof_names[12] = {0};
+ char *e = NULL;
+ switch_event_header_t *hi;
+ uint32_t x = 0;
+
+ SWITCH_STANDARD_STREAM(stream);
+
+ if (prefix) {
+ stream.write_function(&stream, "%s&", prefix);
+ }
+
+ encode_buf = malloc(encode_len);
+ switch_assert(encode_buf);
+
+
+
+ for (x = 0; prof[x]; x++) {
+ if (switch_strlen_zero(prof[x])) {
+ continue;
+ }
+ new_len = (strlen(prof[x]) * 3) + 1;
+ if (encode_len < new_len) {
+ char *tmp;
+
+ encode_len = new_len;
+
+ if (!(tmp = realloc(encode_buf, encode_len))) {
+ abort();
+ }
+
+ encode_buf = tmp;
+ }
+ switch_url_encode(prof[x], encode_buf, encode_len - 1);
+ stream.write_function(&stream, "%s=%s&", prof_names[x], encode_buf);
+ }
+
+ if ((hi = event->headers)) {
+ for (; hi; hi = hi->next) {
+ char *var = hi->name;
+ char *val = hi->value;
+
+ new_len = (strlen((char *) var) * 3) + 1;
+ if (encode_len < new_len) {
+ char *tmp;
+
+ encode_len = new_len;
+
+ tmp = realloc(encode_buf, encode_len);
+ switch_assert(tmp);
+ encode_buf = tmp;
+ }
+
+ switch_url_encode((char *) val, encode_buf, encode_len - 1);
+ stream.write_function(&stream, "%s=%s&", (char *) var, encode_buf);
+
+ }
+ }
+
+ e = (char *) stream.data + (strlen((char *) stream.data) - 1);
+
+ if (e && *e == '&') {
+ *e = '\0';
+ }
+
+ switch_safe_free(encode_buf);
+
+ return stream.data;
+}
+
/* For Emacs:
* Local Variables:
* mode:c
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 Wed Jan 23 15:59:25 2008
@@ -93,8 +93,9 @@
SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *session, const char *macro_name, const char *data, const char *lang,
switch_input_args_t *args)
{
+ switch_event_t *hint_data;
switch_xml_t cfg, xml = NULL, language, macros, macro, input, action;
- char *lname = NULL, *mname = NULL, hint_data[1024] = "", enc_hint[1024] = "";
+ char *lname = NULL, *mname = NULL;
switch_status_t status = SWITCH_STATUS_GENERR;
const char *old_sound_prefix = NULL, *sound_path = NULL, *tts_engine = NULL, *tts_voice = NULL;
const char *module_name = NULL, *chan_lang = NULL;
@@ -122,12 +123,15 @@
module_name = chan_lang;
- if (!data) {
- data = "";
+ switch_event_create(&hint_data, SWITCH_EVENT_MESSAGE);
+ switch_assert(hint_data);
+
+ switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "macro_name", macro_name);
+ switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "lang", chan_lang);
+ if (data) {
+ switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "data", data);
}
-
- switch_url_encode(data, enc_hint, sizeof(enc_hint));
- switch_snprintf(hint_data, sizeof(hint_data), "macro_name=%s&lang=%s&data=%s&destination_number=%s", macro_name, chan_lang, enc_hint, switch_channel_get_variable(channel,"destination_number"));
+ switch_channel_event_set_data(channel, hint_data);
if (switch_xml_locate("phrases", NULL, NULL, NULL, &xml, &cfg, hint_data) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of phrases failed.\n");
@@ -320,6 +324,11 @@
}
done:
+
+ if (hint_data) {
+ switch_event_destroy(&hint_data);
+ }
+
if (!matches) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "macro [%s] did not match any patterns\n", macro_name);
}
Modified: freeswitch/trunk/src/switch_xml.cpp
==============================================================================
--- freeswitch/trunk/src/switch_xml.cpp (original)
+++ freeswitch/trunk/src/switch_xml.cpp Wed Jan 23 15:59:25 2008
@@ -1281,7 +1281,7 @@
SWITCH_DECLARE(switch_status_t) switch_xml_locate(const char *section,
const char *tag_name,
const char *key_name, const char *key_value, switch_xml_t * root, switch_xml_t * node,
- const char *params)
+ switch_event_t *params)
{
switch_xml_t conf = NULL;
switch_xml_t tag = NULL;
@@ -1353,17 +1353,24 @@
return SWITCH_STATUS_FALSE;
}
-SWITCH_DECLARE(switch_status_t) switch_xml_locate_domain(const char *domain_name, char *params, switch_xml_t *root, switch_xml_t *domain)
+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)
{
- char my_params[512];
+ switch_event_t *my_params = NULL;
+ switch_status_t status;
*domain = NULL;
if (!params) {
- switch_snprintf(my_params, sizeof(my_params), "domain=%s", domain_name);
+ switch_event_create(&my_params, SWITCH_EVENT_MESSAGE);
+ switch_assert(my_params);
+ switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "domain", domain_name);
params = my_params;
}
- return switch_xml_locate("directory", "domain", "name", domain_name, root, domain, params);
+ status = switch_xml_locate("directory", "domain", "name", domain_name, root, domain, params);
+ if (my_params) {
+ switch_event_destroy(&my_params);
+ }
+ return status;
}
@@ -1374,22 +1381,31 @@
switch_xml_t *root,
switch_xml_t *domain,
switch_xml_t *user,
- const char *xtra_params)
+ switch_event_t *params)
{
- char params[1024] = "";
+
switch_status_t status;
*root = NULL;
*user = NULL;
*domain = NULL;
-
- if (!switch_strlen_zero(xtra_params)) {
- switch_snprintf(params, sizeof(params), "key=%s&user=%s&domain=%s&ip=%s&%s", key,
- switch_str_nil(user_name), switch_str_nil(domain_name), switch_str_nil(ip), xtra_params);
- } else {
- switch_snprintf(params, sizeof(params), "key=%s&user=%s&domain=%s&ip=%s", key,
- switch_str_nil(user_name), switch_str_nil(domain_name), switch_str_nil(ip));
- xtra_params = "";
+
+ if (params) {
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "key", key);
+
+ if (user_name) {
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "user", user_name);
+ }
+
+ if (domain_name) {
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain_name);
+ }
+
+ if (ip) {
+ switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "ip", ip);
+ }
}
+
+
if ((status = switch_xml_locate_domain(domain_name, params, root, domain)) != SWITCH_STATUS_SUCCESS) {
return status;
}
@@ -1402,7 +1418,7 @@
if (user_name) {
- if (!switch_strlen_zero(xtra_params) && strstr(xtra_params, "mailbox")) {
+ if (params && switch_event_get_header(params, "mailbox")) {
if ((*user = switch_xml_find_child(*domain, "user", "mailbox", user_name))) {
return SWITCH_STATUS_SUCCESS;
}
@@ -1507,7 +1523,7 @@
return SWITCH_STATUS_FALSE;
}
-SWITCH_DECLARE(switch_xml_t) switch_xml_open_cfg(const char *file_path, switch_xml_t * node, const char *params)
+SWITCH_DECLARE(switch_xml_t) switch_xml_open_cfg(const char *file_path, switch_xml_t *node, switch_event_t *params)
{
switch_xml_t xml = NULL, cfg = NULL;
1
0
[commit] r7332 - freeswitch/branches/anthonyl/spidermonkey-stuff/src/mod/languages/mod_spidermonkey
by Freeswitch SVN 23 Jan '08
by Freeswitch SVN 23 Jan '08
23 Jan '08
Author: anthonyl
Date: Wed Jan 23 15:35:41 2008
New Revision: 7332
Modified:
freeswitch/branches/anthonyl/spidermonkey-stuff/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
Log:
add the ability to set global variables as well as get them, also. setGlobalVar and getGlobalVar are both documented in the wiki, but it looks like the names of these hae changed to setGlobalVariable(new) and getGlobalVariable.
Modified: freeswitch/branches/anthonyl/spidermonkey-stuff/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
==============================================================================
--- freeswitch/branches/anthonyl/spidermonkey-stuff/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c (original)
+++ freeswitch/branches/anthonyl/spidermonkey-stuff/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Wed Jan 23 15:35:41 2008
@@ -3161,9 +3161,21 @@
return JS_FALSE;
}
+static JSBool js_global_set(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ char *var_name = NULL, *val = NULL;
+ if (argc > 1) {
+ var_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+ val = JS_GetStringBytes(JS_ValueToString(cx, argv[1]));
+ switch_core_set_variable(var_name, val);
+ return JS_TRUE;
+ }
+ /* this is so the wrong error message to throw for this one */
+ eval_some_js("~throw new Error(\"var name not supplied!\");", cx, obj, rval);
+ return JS_FALSE;
+}
-
-static JSBool js_global(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+static JSBool js_global_get(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
{
char *var_name = NULL, *val = NULL;
@@ -3358,7 +3370,8 @@
static JSFunctionSpec fs_functions[] = {
{"console_log", js_log, 2},
{"consoleLog", js_log, 2},
- {"getGlobalVariable", js_global, 2},
+ {"getGlobalVariable", js_global_get, 2},
+ {"setGlobalVariable", js_global_set, 2},
{"exit", js_exit, 0},
{"include", js_include, 1},
{"bridge", js_bridge, 2},
1
0
Author: brian
Date: Wed Jan 23 14:25:27 2008
New Revision: 7331
Modified:
freeswitch/trunk/conf/dialplan/public.xml
Log:
lets just deflect and send the looped call back to its original context
Modified: freeswitch/trunk/conf/dialplan/public.xml
==============================================================================
--- freeswitch/trunk/conf/dialplan/public.xml (original)
+++ freeswitch/trunk/conf/dialplan/public.xml Wed Jan 23 14:25:27 2008
@@ -2,9 +2,10 @@
<include>
<context name="public">
- <extension name="loop">
+ <extension name="unloop">
+ <condition field="${unroll_loops}" expression="^true$"/>
<condition field="${sip_looped_call}" expression="^true$">
- <action application="transfer" data="${destination_number} XML default"/>
+ <action application="deflect" data="${destination_number}"/>
</condition>
</extension>
1
0
Author: brian
Date: Wed Jan 23 14:17:03 2008
New Revision: 7330
Modified:
freeswitch/trunk/conf/dialplan/public.xml
Log:
tweak public.xml to transfer looped calls back to default
Modified: freeswitch/trunk/conf/dialplan/public.xml
==============================================================================
--- freeswitch/trunk/conf/dialplan/public.xml (original)
+++ freeswitch/trunk/conf/dialplan/public.xml Wed Jan 23 14:17:03 2008
@@ -2,6 +2,12 @@
<include>
<context name="public">
+ <extension name="loop">
+ <condition field="${sip_looped_call}" expression="^true$">
+ <action application="transfer" data="${destination_number} XML default"/>
+ </condition>
+ </extension>
+
<extension name="public_extensions">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="transfer" data="$1 XML default"/>
1
0
23 Jan '08
Author: mikej
Date: Wed Jan 23 13:42:49 2008
New Revision: 7329
Modified:
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_global_log.c
Log:
merge conflict fix
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_global_log.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_global_log.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_global_log.c Wed Jan 23 13:42:49 2008
@@ -48,7 +48,6 @@
*
* @sa <sofia-sip/su_debug.h>, su_log_global
*/
-#ifdef DOXYGEN
extern char const SU_DEBUG[];
#endif
1
0
Author: mikej
Date: Wed Jan 23 13:37:33 2008
New Revision: 7328
Modified:
freeswitch/trunk/libs/sofia-sip/.update
freeswitch/trunk/libs/sofia-sip/AUTHORS
freeswitch/trunk/libs/sofia-sip/Makefile.am
freeswitch/trunk/libs/sofia-sip/RELEASE
freeswitch/trunk/libs/sofia-sip/autogen.sh
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.aliases
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/iptsec/test_auth_digest.c
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
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/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_notifier.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_session.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/test_100rel.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_refer.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_extra.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_parser.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sip/torture_sip.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa.c
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_session.h
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/test_soa.c
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_cache.h
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres_cache.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/htable2.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_wait.h
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_global_log.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/test_htable2.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/test_tport.c
freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_internal.h
freeswitch/trunk/libs/sofia-sip/tests/Makefile.am
freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua-static/libsofia_sip_ua_static.vcproj
freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua/libsofia_sip_ua.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/test_htable/test_htable.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/test_memmem/test_memmem.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/test_nta/test_nta.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/test_nua/test_nua.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/test_su/test_su.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/test_tport/test_tport.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/torture_rbtree/torture_rbtree.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su/torture_su.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_alloc/torture_su_alloc.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_bm/torture_su_bm.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_port/torture_su_port.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_root/torture_su_root.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_tag/torture_su_tag.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_time/torture_su_time.vcproj
freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_timer/torture_su_timer.vcproj
freeswitch/trunk/libs/sofia-sip/win32/utils/localinfo/localinfo.vcproj
freeswitch/trunk/libs/sofia-sip/win32/utils/sip_dig/sip_dig.vcproj
freeswitch/trunk/libs/sofia-sip/win32/utils/sip_options/sip_options.vcproj
freeswitch/trunk/libs/sofia-sip/win32/utils/sip_options_static/sip_options_static.vcproj
freeswitch/trunk/libs/sofia-sip/win32/utils/stunc/stunc.vcproj
Log:
merge to sofia sip darcs tree. Includes multiple fixes and several merges of changes from the freeswitch tree back to darcs as follows:
Mon Nov 19 22:05:07 EST 2007 Pekka Pessi <first.lastname(a)nokia.com>
* test_htable2.c: define struct before using it in prototypes
Fri Jan 11 09:12:01 EST 2008 Bernhard Suttner <suttner at comdasys.com>
* Using # in SOATAG_HOLD to set media as inactive instead of sendonly
Fri Jan 11 09:15:18 EST 2008 Pekka.Pessi(a)nokia.com
* soa_tag.c: documented SOATAG_HOLD() inactive mode
Fri Jan 11 09:28:46 EST 2008 Pekka.Pessi(a)nokia.com
* su_addrinfo.c: if su_getaddrinfo() service is NULL, try both with "0" and NULL
Fri Jan 11 09:30:23 EST 2008 Pekka.Pessi(a)nokia.com
* Makefile.am: added tests to DIST_SUBDIRS
Fri Jan 11 12:11:12 EST 2008 Pekka.Pessi(a)nokia.com
* nta.c: NetModule hack re-prioritizing SRV records
Original hack by Stefan Leuenberger <Stefan.Leuenberger(a)netmodule.com>.
The hack reprioritizes the SRV records used with transaction in case a
server refuses connection or it does not answer.
Fri Jan 11 12:12:23 EST 2008 Pekka.Pessi(a)nokia.com
* sres.c, sres_cache.c: NetModule hack for re-prioritizing SRV records
Original hack by Stefan Leuenberger <Stefan.Leuenberger(a)netmodule.com>.
The hack reprioritizes the SRV records used with transaction in case a
server refuses connection or it does not answer.
New functions sres_cache_set_srv_priority() and
sres_set_cached_srv_priority().
Fri Jan 11 12:15:19 EST 2008 Pekka.Pessi(a)nokia.com
* Makefile.am: fixed dist target
Fri Jan 11 12:19:33 EST 2008 Pekka.Pessi(a)nokia.com
* tport_internal.h: grammar in doc
Mon Jan 14 06:59:17 EST 2008 Pekka.Pessi(a)nokia.com
* su.h: IPv6 fix for Vista SDK
Patch by Michael Jerris
Wed Jan 16 13:20:47 EST 2008 Pekka.Pessi(a)nokia.com
* nua: fix sf.net bug #1867753 (avoid duplicating initial route set)
Thu Jan 17 07:48:10 EST 2008 Pekka.Pessi(a)nokia.com
* sres.c, sres_cache.c: documented sres_set_cached_srv_priority(), sres_cache_set_srv_priority()
Thu Jan 17 07:51:32 EST 2008 Pekka.Pessi(a)nokia.com
* sofia-sip/su_wait.h, su_port.h, su_root.c: documented new functions and types for 1.12.8
Thu Jan 17 07:52:03 EST 2008 Pekka.Pessi(a)nokia.com
* sofia-sip/htable2.h: marked new features for release 1.12.8
Thu Jan 17 07:52:33 EST 2008 Pekka.Pessi(a)nokia.com
* su_alloc.c: marked new features for release 1.12.8.
Thu Jan 17 07:53:01 EST 2008 Pekka.Pessi(a)nokia.com
* AUTHORS: updated
Thu Jan 17 07:53:21 EST 2008 Pekka.Pessi(a)nokia.com
* RELEASE: added new features and bug fixes since 1.12.7
Thu Jan 17 07:55:18 EST 2008 Pekka.Pessi(a)nokia.com
* libsofia-sip-ua/docs/Doxyfile.aliases: added @NEW_1_12_8 and @VERSION_1_12_8
Thu Jan 17 09:48:48 EST 2008 Pekka Pessi <Pekka.Pessi(a)nokia.com>
* autogen.sh: use automake 1.9 unless otherwise specified
Thu Jan 17 11:40:46 EST 2008 Pekka Pessi <Pekka.Pessi(a)nokia.com>
* soa_static.c: cleaned inactive hold, added tests
Thu Jan 17 11:41:54 EST 2008 Pekka Pessi <Pekka.Pessi(a)nokia.com>
* Makefile.am: added hide_emails.sh to dist
Thu Jan 17 11:42:35 EST 2008 Pekka Pessi <Pekka.Pessi(a)nokia.com>
* nua_stack.c: removed noisy debug message from nua_client_request_sendmsg()
Fri Jan 18 11:06:10 EST 2008 Pekka.Pessi(a)nokia.com
* nua: Added NUA_ERROR_AT() macro
Made internally generated 900 (and 904) response phrases unique as suggested
by Jerry Richards.
Mon Jan 21 10:39:50 EST 2008 Stefan Knoblich
* TLS debug cleanup
Mon Jan 21 12:05:38 EST 2008 Pekka.Pessi(a)nokia.com
* tport: build fixes from Freeswitch
Mon Jan 21 12:14:25 EST 2008 Pekka.Pessi(a)nokia.com
* su_global_log.c: disable warning on SU_DEBUG[] (Doxygen-only variable)
Patch from Michael Jerris.
Mon Jan 21 12:15:19 EST 2008 Pekka.Pessi(a)nokia.com
* sres.c: default log level to the same as SU_DEBUG define
Patch by Michael Jerris
Mon Jan 21 12:16:39 EST 2008 Pekka.Pessi(a)nokia.com
* stun.c: default log level to the same as SU_DEBUG define
Patch by Michael Jerris
Mon Jan 21 12:45:04 EST 2008 Stefan Knoblich
* TLS debug cleanup, 2/2.
Silence openssl messages, part 2 of 2. Changed to TPORT_DEBUG=1 (thanks
MikeJ). This one converts all ERR_print_errors() calls
Mon Jan 21 13:00:49 EST 2008 Pekka.Pessi(a)nokia.com
* nua: removed asserts() on hairy dialog/request handling cases
Mon Jan 21 14:06:35 EST 2008 Pekka.Pessi(a)nokia.com
* soa.c: using session state in soa_set_activity()
The media mode bits are set using (local) session description instead of
remote offer/answer when O/A has been completed.
Mon Jan 21 14:08:08 EST 2008 Pekka.Pessi(a)nokia.com
* soa_static.c: soa_sdp_mode_set() now includes wanted media state in offer
The wanted media state is based on original user SDP and SOATAG_HOLD()
content. Removed soa_sdp_mode_set_is_needed(), using dry-run parameter
instead.
Mon Jan 21 14:09:11 EST 2008 Pekka.Pessi(a)nokia.com
* nua_subnotref.c: fixed REFER re-try case
REFER trashed its dialog when it got retried if there was no other dialog
usages.
Mon Jan 21 14:20:31 EST 2008 Pekka.Pessi(a)nokia.com
* nua_stack.c: return specific error phrases from nua_client_init_request()
As suggested by Jerry Richards.
Tue Jan 22 11:15:04 EST 2008 Pekka.Pessi(a)nokia.com
* sip_util.c: updated sip_response_terminates_dialog() as per RFC 5057.
Changes handling of 423 in case of SUBSCRIBE.
Tue Jan 22 11:34:01 EST 2008 Pekka.Pessi(a)nokia.com
* conformance.docs: added RFC 5057 (sipping-dialogusage)
Tue Jan 22 11:34:16 EST 2008 Pekka.Pessi(a)nokia.com
* test_auth_digest.c: testing empty realm
Tue Jan 22 11:35:44 EST 2008 Pekka.Pessi(a)nokia.com
* test_soa.c: testing hold with inactive, offered mode and setting remote activity flags while in hold
Tue Jan 22 12:27:41 EST 2008 Pekka.Pessi(a)nokia.com
* nta.c: fixed memory corruption in case sending ACK failed
Thanks for Fabio Margarido for reporting this problem.
Tue Jan 22 12:49:02 EST 2008 Pekka.Pessi(a)nokia.com
* nua/test_refer.c: run test_challenge_refer() only if we use proxy
Test case is now more deterministic, too.
Tue Jan 22 12:51:59 EST 2008 Pekka.Pessi(a)nokia.com
* docs/Makefile.am, docs/conformance.docs: fixed links to RFC 5057.
Tue Jan 22 13:57:38 EST 2008 Pekka.Pessi(a)nokia.com
* sres: added ttl parameter to sres_set_cached_srv_priority() and sres_cache_set_srv_priority().
Tue Jan 22 13:59:44 EST 2008 Pekka.Pessi(a)nokia.com
* nta.c: added NTATAG_GRAYLIST().
Use NTATAG_GRAYLIST() as ttl value for sres_set_cached_srv_priority().
Tue Jan 22 14:04:29 EST 2008 Pekka.Pessi(a)nokia.com
* RELEASE: updated.
Tue Jan 22 14:04:29 EST 2008 Pekka.Pessi(a)nokia.com
* RELEASE: updated.
Wed Jan 23 06:56:11 EST 2008 Pekka.Pessi(a)nokia.com
* sip_extra.c, sip_parser.c: updated documentation
Wed Jan 23 09:47:50 EST 2008 Pekka.Pessi(a)nokia.com
* test_nta.c: fixed receiving with sink socket
Wed Jan 23 10:07:30 EST 2008 Pekka Pessi <Pekka.Pessi(a)nokia.com>
* soa_static.c: fixed signedness error
Wed Jan 23 10:11:14 EST 2008 Pekka Pessi <Pekka.Pessi(a)nokia.com>
* win32 project files: fixed slash direction
Wed Jan 23 10:13:00 EST 2008 Pekka Pessi <Pekka.Pessi(a)nokia.com>
* torture_su.c: set blocking on
Wed Jan 23 10:13:36 EST 2008 Pekka Pessi <Pekka.Pessi(a)nokia.com>
* test_tport.c: using blocking sockets in test_incomplete()
Wed Jan 23 11:01:11 EST 2008 Pekka.Pessi(a)nokia.com
* nta.c: now using RFC3261-compliant dialog-matching
Wed Jan 23 11:05:23 EST 2008 Pekka.Pessi(a)nokia.com
* nta.c: ignore tags in nta_leg_by_dialog() if they are empty strings
Wed Jan 23 11:05:58 EST 2008 Pekka.Pessi(a)nokia.com
* nta.c: asserting in proper place when handling queue tail
Wed Jan 23 12:11:09 EST 2008 Pekka.Pessi(a)nokia.com
* torture_sip.c: added tests for accessing other extra headers beside P-Asserted-Identity/P-Preferred-Identity
Wed Jan 23 13:08:55 EST 2008 Pekka.Pessi(a)nokia.com
* nua: terminate dialog when redirected and re-establish it with new request
Wed Jan 23 13:18:16 EST 2008 Pekka.Pessi(a)nokia.com
* test_100rel.c: added test for redirect after 100rel response.
Modified: freeswitch/trunk/libs/sofia-sip/.update
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/.update (original)
+++ freeswitch/trunk/libs/sofia-sip/.update Wed Jan 23 13:37:33 2008
@@ -1 +1 @@
-Sat Jan 19 01:47:55 GMT 2008
+Wed Jan 23 13:36:34 EST 2008
Modified: freeswitch/trunk/libs/sofia-sip/AUTHORS
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/AUTHORS (original)
+++ freeswitch/trunk/libs/sofia-sip/AUTHORS Wed Jan 23 13:37:33 2008
@@ -16,13 +16,16 @@
Jacobs, Remeres <first.surname(a)nokia.com>
Jalava, Teemu <first.surname(a)nokia.com>
Jerris, Michael <mike -at jerris -dot com>
-Legostayev Denis <legostayev -at neic -dot nsk -dot su>
+Legostayev, Denis <legostayev -at neic -dot nsk -dot su>
+Leuenberger, Stefan <first.surname -at netmodule -dot com>
Prado, Dimitri E. <dprado -at e3c -dot com -dot br>
Puolakka, Petteri <first.surname(a)nokia.com>
Puustinen, Ismo <first.surname(a)nokia.com>
Rinne-Rahkola, Pasi <first.surname(a)nokia.com>
+Rondina, Daniele <geaary -at gmail -dot com>
Saari, Mika <first.surname(a)nokia.com>
Selin, Jari <first.surname(a)nokia.com>
+Suttner, Bernhard <suttner -at comdasys -dot com>
Underwood, Steve <steveu -at coppice -dot org>
Urpalainen, Jari <first.surname(a)nokia.com>
Whittaker, Colin <colinw -at occamnetworks -dot com>
Modified: freeswitch/trunk/libs/sofia-sip/Makefile.am
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/Makefile.am (original)
+++ freeswitch/trunk/libs/sofia-sip/Makefile.am Wed Jan 23 13:37:33 2008
@@ -9,7 +9,7 @@
SUBDIRS = libsofia-sip-ua $(GLIB_SUBDIRS) utils packages tests
DIST_SUBDIRS = libsofia-sip-ua libsofia-sip-ua-glib utils packages \
- win32 open_c
+ tests win32 open_c
# note: when glib devel files are not available, make should not
# enter the libsofia-sip-ua-glib subdir at all
@@ -32,7 +32,8 @@
docs/devel_platform_notes.txt \
docs/release_management.txt
-EXTRA_DIST += scripts/lcov-report scripts/uncovered
+EXTRA_DIST += scripts/lcov-report scripts/uncovered \
+ scripts/hide_emails.sh
dist_man_MANS = man/man1/sip-date.1 man/man1/sip-options.1 \
man/man1/localinfo.1 man/man1/addrinfo.1 \
Modified: freeswitch/trunk/libs/sofia-sip/RELEASE
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/RELEASE (original)
+++ freeswitch/trunk/libs/sofia-sip/RELEASE Wed Jan 23 13:37:33 2008
@@ -5,26 +5,31 @@
Changes since last release
--------------------------
-<changes since last written in freshmeat.net "Changes:" style;
- and in less than 10 lines, written in 3rd person English, with
- complete sentences />
+Beside bugfixes, a server graylisting was added to nta and a few
+improvements in event handling were made in nua interface.
-Bugs in blaa and foo have been fixed. The stack now supports
-use of foobar...
+A check-based test program was added, too.
API/ABI changes and versioning
------------------------------
-<see previous release notes at
- http://sofia-sip.sourceforge.net/relnotes/ for examples ;
- - should include all changes to public headers, and
- other important information to developers;
- - and should be updated _continuously_! />
-
-**template**: New features in API are marked with Doxytag macro @VERSION_1_XX_X.
+New features in API are marked with Doxytag macro @NEW_1_12_8 or
+@VERSION_1_12_8.
libsofia-sip-ua:
-- **template**: Added foobar() function (sofia-sip/foobar.h).
+- Added nta_sip_is_internal(), nta_msg_is_internal() function in
+ <sofia-sip/nta.h>. Deprecating nta_is_internal_msg().
+- Added su_msg_new(), su_msg_send_to() and su_msg_deinitializer() for more
+ robust and light-weight message passing in <sofia-sip/su_wait.h>
+- Added su_home_lock(), su_home_trylock(), and su_home_unlock() in
+ <sofia-sip/su_alloc.h>
+- Added type-neutral template macros for hash tables HTABLE2_DECLARE2(), HTABLE2_PROTOS2(),
+ and HTABLE2_BODIES2().
+- Added sres_cache_set_srv_priority() in <sofia-resolv/sres_cache.h> and
+ sres_set_cached_srv_priority() <sofia-resolv/sres.h> for graylisting
+ SRV records for inresponsive servers.
+- nua_create()/nta_agent_create()/tport_bind() now joins to multicast group
+ if "maddr" parameter is specified
- 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,32 +43,74 @@
Contributors to this release
----------------------------
-<list of people who contributed to _this_ release
- - update as people's patches are added, or when you commit stuff
- - current development team members (see AUTHORS) may be omitted,
- or listed at the end of the contribur list (depending on the scope
- of the work done since the last release)
- - name of the contributor should be enough (email addresses in AUTHORS),
- plus a _brief_ description of what was contributed
- - roughly sorted by number of patches accepted
-/>
-
-- **template**: First Surname (patch to nua/soa/msg)
-
+- Bernhard Suttner contributed patch to soa for using a=inactive attribute
+ with call hold
+- Stefan Leuenberger from Netmodule contributed the hack for changing
+ priority of SRV records if a SIP server was inresponsive
+- Daniele Rondina contributed patches fixing crash in STUN discovery cleanup
+ and for transport handling with nta_outgoing_*create()
+- Youness Alaoui sent a iPhone build fix
+- Michael Jerris and Stefan Knoblich from Freeswitch project reported
+ numerous bugs and contributed fixes
+
See the AUTHORS file in the distribution package.
Notes on new features
---------------------
-<information about major new features
- - new/changed/removed functionality
- - links to further documentation
- - section may be omitted for minor releases
-/>
+SIP Server Graylisting
+----------------------
+
+The hack contributed by Stefan Leuenberger from Netmodule changes the
+priority of SRV records which are used when SIP URI is resolved.
+
+If your domain has multiple servers, you can define separate SRV records for
+them. If any of them becomes unresponsive, a SIP request sent to it times
+out or gets rejected because of network error and Sofia SIP automatically
+retries with another server. However, as Sofia SIP does not keep track of
+failed servers with the next request it may again try first the failed
+server. The graylisting repriotizes the SRV records so that the priority of
+the failed server gets reduced and it won't be tried again until all other
+servers have failed, too. Note that the SIP URI resolver may get confused
+when using this kind of repriotizing if a single SRV record corresponds to
+multiple servers or servers with multiple addresses.
+
+You can disable the reprioritizing hack by including tag NTATAG_GREYLIST(0)
+with nua_create(), nua_set_params(), nta_agent_create() or
+nta_agent_set_params().
Bugs fixed in this release
--------------------------
+* Fixed su_home_init not initializing suh_lock.
+* Fixed memory leak when increasing hash table size
+* Fixed problems with multiple authentication challenges.
+* Fixed sf.net bug #1816647: Outbound contact does not make it to dialogs.
+* Fixed problem with tagargs, amd64 and Sun CC.
+* Fixed nta_outgoing_*create() not using NTATAG_TPORT() if
+ NTATAG_DEFAULT_PROXY() was set.
+* Fixed memory leak from nua operations.
+* Fixed crash when INVITE destroyed session before UPDATE or PRACK completed
+* Fixed crash in stun when destroying stun context during discovery callback
+* Fixed nta timer interval calculation ignoring some transactions
+* Fixed request merging when client is RFC 2543 proxy
+* Fixed request matching and merging if To/From URI does not match
+* Fixed problem with soa and overlapping INVITEs
+* Fixed handling of RFC 2848 subscriptions (without Event header)
+* Fixed problems with expiration time calculations if NOTIFY is sent before
+ SUBSCRIBE has been responded
+* Fixed su_getaddrinfo() with ephemeral (NULL or "0") service
+* Fixed IPv6 build with Vista SDK
+* Fixed sf.net bug #1867753 (avoid duplicating initial route set
+* Fixed SCTP receive
+* Using tport_log and su_llog() when logging TLS warnings and errors
+* Removed asserts on hairy dialog shutdown cases.
+* Using remote activity mode derived from O/A result rather than mode based on remote
+ offer
+* Fixed mode in SDP offer while on hold
+* Fixed handling of REFER in nua when it gets redirected or challenged
+* Fixed memory corruption when sending of ACK request failed.
+
< notable bugs fixed in this release
- check the sf.net bug tracker; see closed bugs,
sorted by closing date
Modified: freeswitch/trunk/libs/sofia-sip/autogen.sh
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/autogen.sh (original)
+++ freeswitch/trunk/libs/sofia-sip/autogen.sh Wed Jan 23 13:37:33 2008
@@ -1,6 +1,8 @@
#!/bin/sh
set -x
+AUTOMAKE=${AUTOMAKE:-automake-1.9} ACLOCAL=${ACLOCAL:-aclocal-1.9}
+export AUTOMAKE ACLOCAL
${AUTORECONF:-autoreconf} -i
find . \( -name 'run*' -o -name '*.sh' \) -a -type f | xargs chmod +x
chmod +x scripts/*
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.aliases
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.aliases (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/docs/Doxyfile.aliases Wed Jan 23 13:37:33 2008
@@ -52,4 +52,7 @@
"VERSION_1_12_7=<a href=\"http://sofia-sip.sf.net/relnotes/relnotes-sofia-sip-1.12.7.txt\">1.12.7</a>" \
"NEW_1_12_7=@since New in <a href=\"http://sofia-sip.sf.net/relnotes/relnotes-sofia-sip-1.12.7.txt\">1.12.7</a>" \
"EXP_1_12_7=@since Experimental in <a href=\"http://sofia-sip.sf.net/relnotes/relnotes-sofia-sip-1.12.7.txt\">1.12.7</a>, available if --enable-experimental configuration option is given" \
+ "VERSION_1_12_8=<a href=\"http://sofia-sip.sf.net/relnotes/relnotes-sofia-sip-1.12.8.txt\">1.12.8</a>" \
+ "NEW_1_12_8=@since New in <a href=\"http://sofia-sip.sf.net/relnotes/relnotes-sofia-sip-1.12.8.txt\">1.12.8</a>" \
+
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 Wed Jan 23 13:37:33 2008
@@ -2,7 +2,6 @@
docguide.docs \
mainpage.docs \
conformance.docs \
- hide_emails.sh \
ChangeLog \
pictures/SIP_basic_incoming_operation.eps \
pictures/SIP_basic_incoming_operation.gif \
@@ -37,7 +36,7 @@
print "RFC"i"=\"<a href="q site i type q">RFC "i"</a>\" "b; \
}}' \
site=http://www.faqs.org/rfcs/rfc type=.html \
- from=700 to=4800 \
+ from=700 to=5500 \
/dev/null > $@
CLEANFILES = Doxyfile.rfc *.doxytags
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 Wed Jan 23 13:37:33 2008
@@ -49,6 +49,7 @@
<a href="#4168">RFC 4168</a> <br>
<a href="#4320">RFC 4320</a> <br>
<a href="#4488">RFC 4488</a> <br>
+<a href="#5057">RFC 5057</a> <br>
</td><td>
<a href="#4566">RFC 4566</a> <br>
<a href="#2327">RFC 2327</a> <br>
@@ -963,6 +964,23 @@
</td>
</tr>
+<a name="5057"></a>
+<tr valign=top>
+ <th align="left">
+ @RFC5057: Multiple Dialog Usages in SIP
+ </th>
+ <td>
+ 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().
+ </td>
+ <td>
+ The client application must either use NUA or
+ sip_response_terminates_dialog().
+ </td>
+</tr>
+
</table>
<table border=1 cellpadding=4 cellspacing=0>
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/test_auth_digest.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/test_auth_digest.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/iptsec/test_auth_digest.c Wed Jan 23 13:37:33 2008
@@ -520,6 +520,11 @@
sip_www_authenticate_class,
sip_authentication_info_class
}};
+ auth_challenger_t pach[1] =
+ {{ 407, "Proxy Authorization required",
+ sip_proxy_authenticate_class,
+ sip_proxy_authentication_info_class
+ }};
TEST_1(home = su_home_new(sizeof(*home)));
@@ -994,6 +999,46 @@
TEST(as->as_status, 0);
auth_mod_destroy(am); aucs = NULL;
+ /* Test empty realm */
+ 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,
+ 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,
+ (url_t *)"sip:surf3@ims3.so.noklab.net",
+ sip->sip_payload), 1);
+ TEST_1(sip->sip_authorization);
+
+ auth_mod_check_client(am, as, sip->sip_authorization, ach);
+ TEST(as->as_status, 0);
+ aucs = NULL;
+ 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,
+ 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,
+ (url_t *)"sip:surf3@ims3.so.noklab.net",
+ sip->sip_payload), 1);
+ TEST_1(sip->sip_proxy_authorization);
+
+ auth_mod_check_client(am, as, sip->sip_proxy_authorization, pach);
+ TEST(as->as_status, 0);
+
+ auth_mod_destroy(am); aucs = NULL;
+
/* Test Basic authentication scheme */
TEST_1(am = auth_mod_create(root,
AUTHTAG_METHOD("Basic"),
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 Wed Jan 23 13:37:33 2008
@@ -176,9 +176,7 @@
url_t const *request_uri,
sip_call_id_t const *i,
char const *from_tag,
- url_t const *from_uri,
- char const *to_tag,
- url_t const *to_uri);
+ char const *to_tag);
static nta_leg_t *dst_find(nta_agent_t const *sa, url_t const *u0,
char const *method);
static void leg_recv(nta_leg_t *, msg_t *, sip_t *, tport_t *);
@@ -340,7 +338,7 @@
* NTATAG_BAD_REQ_MASK(), NTATAG_BAD_RESP_MASK(), NTATAG_BLACKLIST(),
* NTATAG_CANCEL_2543(), NTATAG_CANCEL_487(), NTATAG_CLIENT_RPORT(),
* NTATAG_DEBUG_DROP_PROB(), NTATAG_DEFAULT_PROXY(),
- * NTATAG_EXTRA_100(),
+ * 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(),
@@ -402,6 +400,7 @@
agent->sa_t4 = NTA_SIP_T4;
agent->sa_t1x64 = 64 * NTA_SIP_T1;
agent->sa_timer_c = 185 * 1000;
+ agent->sa_graylist = 600;
agent->sa_drop_prob = 0;
agent->sa_is_a_uas = 0;
agent->sa_progress = 60 * 1000;
@@ -896,7 +895,7 @@
* NTATAG_BAD_REQ_MASK(), NTATAG_BAD_RESP_MASK(), NTATAG_BLACKLIST(),
* NTATAG_CANCEL_2543(), NTATAG_CANCEL_487(), NTATAG_CLIENT_RPORT(),
* NTATAG_DEBUG_DROP_PROB(), NTATAG_DEFAULT_PROXY(),
- * NTATAG_EXTRA_100(),
+ * 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(),
@@ -946,6 +945,7 @@
unsigned sip_t4 = agent->sa_t4;
unsigned sip_t1x64 = agent->sa_t1x64;
unsigned timer_c = agent->sa_timer_c;
+ unsigned graylist = agent->sa_graylist;
unsigned blacklist = agent->sa_blacklist;
int ua = agent->sa_is_a_uas;
unsigned progress = agent->sa_progress;
@@ -989,6 +989,7 @@
NTATAG_DEBUG_DROP_PROB_REF(drop_prob),
NTATAG_DEFAULT_PROXY_REF(proxy),
NTATAG_EXTRA_100_REF(extra_100),
+ NTATAG_GRAYLIST_REF(graylist),
NTATAG_MAXSIZE_REF(maxsize),
NTATAG_MAX_PROCEEDING_REF(max_proceeding),
NTATAG_MAX_FORWARDS_REF(max_forwards),
@@ -1142,6 +1143,12 @@
outgoing_queue_adjust(agent, agent->sa_out.inv_proceeding, timer_c);
}
+ if (graylist > 24 * 60 * 60)
+ graylist = 24 * 60 * 60;
+ agent->sa_graylist = graylist;
+
+ if (blacklist > 24 * 60 * 60)
+ blacklist = 24 * 60 * 60;
agent->sa_blacklist = blacklist;
if (progress == 0)
@@ -1204,7 +1211,7 @@
* NTATAG_CANCEL_2543_REF(), NTATAG_CANCEL_487_REF(),
* NTATAG_CLIENT_RPORT_REF(), NTATAG_CONTACT_REF(),
* NTATAG_DEBUG_DROP_PROB_REF(), NTATAG_DEFAULT_PROXY_REF(),
- * NTATAG_EXTRA_100_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(),
@@ -1253,6 +1260,7 @@
NTATAG_DEBUG_DROP_PROB(agent->sa_drop_prob),
NTATAG_DEFAULT_PROXY(agent->sa_default_proxy),
NTATAG_EXTRA_100(agent->sa_extra_100),
+ NTATAG_GRAYLIST(agent->sa_graylist),
NTATAG_MAXSIZE(agent->sa_maxsize),
NTATAG_MAX_PROCEEDING(agent->sa_max_proceeding),
NTATAG_MAX_FORWARDS(agent->sa_max_forwards->mf_count),
@@ -2416,8 +2424,8 @@
if ((leg = leg_find(agent,
method_name, url,
sip->sip_call_id,
- sip->sip_from->a_tag, sip->sip_from->a_url,
- sip->sip_to->a_tag, sip->sip_to->a_url))) {
+ sip->sip_from->a_tag,
+ sip->sip_to->a_tag))) {
/* Try existing dialog */
SU_DEBUG_5(("nta: %s (%u) %s\n",
method_name, cseq, "going to existing leg"));
@@ -3991,12 +3999,12 @@
id->i_hash = msg_hash_string(id->i_id = rp->rp_call_id);
- leg = leg_find(sa, NULL, NULL, id, from_tag, NULL, to_tag, NULL);
+ leg = leg_find(sa, NULL, NULL, id, from_tag, to_tag);
if (leg == NULL && strcmp(from_tag, "0") == 0)
- leg = leg_find(sa, NULL, NULL, id, NULL, NULL, to_tag, NULL);
+ leg = leg_find(sa, NULL, NULL, id, NULL, to_tag);
if (leg == NULL && strcmp(to_tag, "0") == 0)
- leg = leg_find(sa, NULL, NULL, id, from_tag, NULL, NULL, NULL);
+ leg = leg_find(sa, NULL, NULL, id, from_tag, NULL);
}
return leg;
@@ -4120,11 +4128,14 @@
* @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_uri if there is no remote tag, the remote URI must match
+ * @param remote_uri ignored
* @param local_tag if non-NULL and there is local tag associated with leg,
* it must math
- * @param local_uri if there is no local tag, the local URI must match
+ * @param local_uri ignored
*
+ * @note
+ * If @a remote_tag or @a local_tag is an empty string (""), the tag is
+ * ignored when matching legs.
*/
nta_leg_t *nta_leg_by_dialog(nta_agent_t const *agent,
url_t const *request_uri,
@@ -4134,7 +4145,7 @@
char const *local_tag,
url_t const *local_uri)
{
- void *to_be_freed = NULL, *tbf2 = NULL, *tbf3 = NULL;
+ void *to_be_freed = NULL;
url_t *url;
url_t url0[1];
nta_leg_t *leg;
@@ -4158,21 +4169,18 @@
agent_aliases(agent, url, NULL); /* canonize url */
}
- if (remote_uri && URL_IS_STRING(remote_uri))
- request_uri = tbf2 = url_hdup(NULL, remote_uri);
+ if (remote_tag && remote_tag[0] == '\0')
+ remote_tag = NULL;
+ if (local_tag && local_tag[0] == '\0')
+ local_tag = NULL;
- if (local_uri && URL_IS_STRING(local_uri))
- local_uri = tbf3 = url_hdup(NULL, local_uri);
-
leg = leg_find(agent,
NULL, url,
call_id,
- remote_tag, remote_uri,
- local_tag, local_uri);
+ remote_tag,
+ local_tag);
if (to_be_freed) su_free(NULL, to_be_freed);
- if (tbf2) su_free(NULL, tbf2);
- if (tbf3) su_free(NULL, tbf3);
return leg;
}
@@ -4181,7 +4189,7 @@
* Find a leg corresponding to the request message.
*
* A leg matches to message if leg_match_request() returns true ("Call-ID",
- * "To", and "From" match).
+ * "To"-tag, and "From"-tag match).
*/
static
nta_leg_t *leg_find(nta_agent_t const *sa,
@@ -4189,9 +4197,7 @@
url_t const *request_uri,
sip_call_id_t const *i,
char const *from_tag,
- url_t const *from_uri,
- char const *to_tag,
- url_t const *to_uri)
+ char const *to_tag)
{
hash_value_t hash = i->i_hash;
leg_htable_t const *lht = sa->sa_dialogs;
@@ -4201,10 +4207,9 @@
(leg = *ll);
ll = leg_htable_next(lht, ll)) {
sip_call_id_t const *leg_i = leg->leg_id;
- url_t const *remote_uri = leg->leg_remote->a_url;
char const *remote_tag = leg->leg_remote->a_tag;
- url_t const *local_uri = leg->leg_local->a_url;
char const *local_tag = leg->leg_local->a_tag;
+
url_t const *leg_url = leg->leg_url;
char const *leg_method = leg->leg_method;
@@ -4212,6 +4217,7 @@
continue;
if (strcmp(leg_i->i_id, i->i_id) != 0)
continue;
+
/* Do not match if the incoming To has tag, but the local does not */
if (!local_tag && to_tag)
continue;
@@ -4226,15 +4232,14 @@
/* Do not match if incoming From has no tag but remote has a tag */
if (remote_tag && !from_tag)
continue;
+
/* Avoid matching with itself */
if (!remote_tag != !from_tag && !local_tag != !to_tag)
continue;
- if (local_tag && to_tag ?
- strcasecmp(local_tag, to_tag) : addr_cmp(local_uri, to_uri))
+ if (local_tag && to_tag && strcasecmp(local_tag, to_tag) && to_tag[0])
continue;
- if (remote_tag && from_tag ?
- strcasecmp(remote_tag, from_tag) : addr_cmp(remote_uri, from_uri))
+ if (remote_tag && from_tag && strcasecmp(remote_tag, from_tag) && from_tag[0])
continue;
if (leg_url && request_uri && url_cmp(leg_url, request_uri))
@@ -6390,7 +6395,7 @@
char const *timer,
su_duration_t now);
-static void outgoing_ack(nta_outgoing_t *orq, msg_t *msg, sip_t *sip);
+static void outgoing_ack(nta_outgoing_t *orq, sip_t *sip);
static msg_t *outgoing_ackmsg(nta_outgoing_t *, sip_method_t, char const *,
tagi_t const *tags);
static void outgoing_retransmit(nta_outgoing_t *orq);
@@ -7657,6 +7662,7 @@
if (outgoing_is_queued(orq))
outgoing_remove(orq);
+ assert(orq->orq_next == NULL);
assert(*queue->q_tail == NULL);
orq->orq_timeout = set_timeout(orq->orq_agent, queue->q_timeout);
@@ -7680,7 +7686,7 @@
if ((*orq->orq_prev = orq->orq_next))
orq->orq_next->orq_prev = orq->orq_prev;
else
- orq->orq_queue->q_tail = orq->orq_prev, assert(!*orq->orq_queue->q_tail);
+ orq->orq_queue->q_tail = orq->orq_prev;
orq->orq_queue->q_length--;
orq->orq_next = NULL;
@@ -8334,7 +8340,7 @@
else {
/* Final response */
if (status >= 300 && !internal)
- outgoing_ack(orq, msg, sip);
+ outgoing_ack(orq, sip);
if (!orq->orq_completed) {
if (outgoing_complete(orq))
@@ -8532,7 +8538,7 @@
/** @internal ACK to a final response (300..699).
* These messages are ACK'ed via the original URL (and tport)
*/
-void outgoing_ack(nta_outgoing_t *orq, msg_t *msg, sip_t *sip)
+void outgoing_ack(nta_outgoing_t *orq, sip_t *sip)
{
nta_outgoing_t *ack;
msg_t *ackmsg;
@@ -8563,7 +8569,7 @@
TAG_END())))
;
else
- msg_destroy(msg);
+ msg_destroy(ackmsg);
}
}
@@ -8836,8 +8842,8 @@
char const *sq_proto;
char const *sq_domain;
char sq_port[6]; /* port number */
-
- uint16_t sq_type;
+ uint16_t sq_otype; /* origin type of query data (0 means request) */
+ uint16_t sq_type; /* query type */
uint16_t sq_priority; /* priority or preference */
uint16_t sq_weight; /* preference or weight */
};
@@ -9068,6 +9074,65 @@
outgoing_reset_timer(orq);
outgoing_queue(orq->orq_agent->sa_out.resolving, orq);
+ if (orq->orq_status > 0)
+ /* PP: don't hack priority if a preliminary response has been received */
+ ;
+ else if (orq->orq_agent->sa_graylist == 0)
+ /* PP: priority hacking disabled */
+ ;
+ /* 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
+ *
+ * @TODO: fix cases with only A or AAAA answering, or all servers down.
+ */
+ else if (sr && sr->sr_target) {
+ struct sipdns_query *sq;
+
+ /* find latest A/AAAA record */
+ sq = sr->sr_head;
+ if (!sq || (sr->sr_a_aaaa1 != sr->sr_a_aaaa2 && sq->sq_type == sr->sr_a_aaaa1))
+ sq = sr->sr_done;
+
+ if (sq && sq->sq_otype == sres_type_srv) {
+ char const *target = sq->sq_domain, *proto = sq->sq_proto;
+ unsigned prio = sq->sq_priority, maxprio = prio;
+
+ SU_DEBUG_5(("nta: no response from %s:%s;transport=%s\n", target, sq->sq_port, proto));
+
+ 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;
+
+ if (sq->sq_type != sres_type_srv || strcmp(proto, sq->sq_proto))
+ continue;
+
+ /* 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,
+ target,
+ sq->sq_port[0] ? (uint16_t)strtoul(sq->sq_port, NULL, 10) : 0,
+ orq->orq_agent->sa_graylist,
+ maxprio + 1);
+
+ if (modified >= 0)
+ SU_DEBUG_3(("nta: reduced priority of %d %s SRV records (increase value to %u)\n",
+ modified, sq->sq_domain, maxprio + 1));
+ else
+ SU_DEBUG_3(("nta: failed to reduce %s SRV priority\n", sq->sq_domain));
+ }
+ }
+ }
+
return outgoing_resolve_next(orq);
}
@@ -9346,6 +9411,7 @@
sq = su_zalloc(home, (sizeof *sq) + rlen);
*tail = sq, tail = &sq->sq_next;
+ sq->sq_otype = sres_type_naptr;
sq->sq_priority = na->na_prefer;
sq->sq_weight = j;
sq->sq_type = type;
@@ -9446,11 +9512,11 @@
if (sq) {
*tail = sq, tail = &sq->sq_next;
+ sq->sq_otype = sres_type_srv;
sq->sq_type = sr->sr_a_aaaa1;
sq->sq_proto = sq0->sq_proto;
sq->sq_domain = memcpy(sq + 1, srv->srv_target, tlen);
snprintf(sq->sq_port, sizeof(sq->sq_port), "%u", srv->srv_port);
-
sq->sq_priority = srv->srv_priority;
sq->sq_weight = srv->srv_weight;
}
@@ -10143,8 +10209,8 @@
if ((leg = leg_find(irq->irq_agent,
method_name, url,
sip->sip_call_id,
- sip->sip_from->a_tag, sip->sip_from->a_url,
- sip->sip_to->a_tag, sip->sip_to->a_url))) {
+ 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,
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 Wed Jan 23 13:37:33 2008
@@ -167,6 +167,8 @@
/** SIP timer C - interval between provisional responses receivedxs */
unsigned sa_timer_c;
+ /** Graylisting period */
+ unsigned sa_graylist;
/** Blacklisting period */
unsigned sa_blacklist;
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 Wed Jan 23 13:37:33 2008
@@ -643,6 +643,31 @@
*/
tag_typedef_t ntatag_timer_c = UINTTAG_TYPEDEF(timer_c);
+/**@def NTATAG_GRAYLIST(x)
+ *
+ * Avoid failed servers.
+ *
+ * The NTATAG_GRAYLIST() provides the time that the servers are avoided
+ * after a request sent to them has been failed. Avoiding means that if a
+ * domain provides multiple servers, the failed servers are tried last.
+ *
+ * @par Used with
+ * nua_create(), nua_set_params(),
+ * nta_agent_create(), nta_agent_set_params()
+ *
+ * @par Parameter type
+ * unsigned int
+ *
+ * @par Values
+ * - Number of seconds that server is kept in graylist, from 0 to 86400.
+ *
+ * @par Default Value
+ * - 600 (graylist server for 10 minutes)
+ *
+ * @sa NTATAG_BLACKLIST(), NTATAG_TIMEOUT_408()
+ */
+tag_typedef_t ntatag_graylist = UINTTAG_TYPEDEF(graylist);
+
/**@def NTATAG_BLACKLIST(x)
*
* Add Retry-After header to error responses returned to application.
@@ -660,7 +685,7 @@
* unsigned int
*
* @par Values
- * - Value of delta-seconds in @RetryAfter header
+ * - Value of @i delta-seconds in @RetryAfter header, from 0 to 86400
*
* @par Default Value
* - 0 (no Retry-After is included)
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 Wed Jan 23 13:37:33 2008
@@ -203,6 +203,12 @@
NTA_DLL extern tag_typedef_t ntatag_timer_c_ref;
#define NTATAG_TIMER_C_REF(x) ntatag_timer_c_ref, tag_uint_vr(&(x))
+NTA_DLL extern tag_typedef_t ntatag_graylist;
+#define NTATAG_GRAYLIST(x) ntatag_graylist, tag_uint_v((x))
+
+NTA_DLL extern tag_typedef_t ntatag_graylist_ref;
+#define NTATAG_GRAYLIST_REF(x) ntatag_graylist_ref, tag_uint_vr(&(x))
+
NTA_DLL extern tag_typedef_t ntatag_blacklist;
#define NTATAG_BLACKLIST(x) ntatag_blacklist, tag_uint_v((x))
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 Wed Jan 23 13:37:33 2008
@@ -363,8 +363,16 @@
return 200;
}
+static client_check_f client_check_to_tag;
-static client_check_f * const default_checks[];
+static client_check_f * const default_checks[] = {
+ client_check_to_tag,
+ NULL
+};
+
+static client_check_f * const no_default_checks[] = {
+ NULL
+};
int outgoing_callback(client_t *ctx,
nta_outgoing_t *orq,
@@ -1014,14 +1022,6 @@
}
-static client_check_f * const default_checks[] = {
- client_check_to_tag,
- NULL
-};
-
-static client_check_f * const no_default_checks[] = {
- NULL
-};
/* Test transports */
@@ -2256,8 +2256,23 @@
END();
}
-/* Test merging */
+static ssize_t recv_udp(agent_t *ag, void *b, size_t size)
+{
+ ssize_t n;
+ memset(b, size, 0);
+
+ for (;;) {
+ su_root_step(ag->ag_root, 10L);
+ if (su_wait(ag->ag_sink_wait, 1, 0) == 0) {
+ n = su_recv(ag->ag_sink_socket, b, size, MSG_TRUNC);
+ if (n > 0)
+ return n;
+ }
+ }
+}
+
+/* Test merging */
int test_merging(agent_t *ag)
{
BEGIN();
@@ -2289,11 +2304,17 @@
size_t len, l1, l2;
su_sockaddr_t *su = ag->ag_su_nta;
socklen_t sulen = ag->ag_su_nta_len;
- int n;
+
+#ifndef MSG_TRUNC
+#define MSG_TRUNC 0
+#endif
/* Empty sink socket */
- while (su_wait(ag->ag_sink_wait, 1, 0) == 0)
- su_recv(ag->ag_sink_socket, m1, sizeof m1, MSG_TRUNC);
+ su_setblocking(ag->ag_sink_socket, 0);
+ while (su_recv(ag->ag_sink_socket, m1, sizeof m1, MSG_TRUNC) >= 0)
+ ;
+ su_wait(ag->ag_sink_wait, 1, 0);
+ su_wait(ag->ag_sink_wait, 1, 0);
{
/* RFC 3261 8.2.2.2 Merged Requests:
@@ -2338,16 +2359,9 @@
TEST_1((size_t)su_sendto(ag->ag_sink_socket, m1, l1, 0, su, sulen) == l1);
TEST_1((size_t)su_sendto(ag->ag_sink_socket, m2, l2, 0, su, sulen) == l2);
- for (n = 0; n < 2; ) {
- su_root_step(ag->ag_root, 10L);
- if (su_wait(ag->ag_sink_wait, 1, 0) == 0) {
- if (n == 0)
- su_recv(ag->ag_sink_socket, r1, sizeof r1, MSG_TRUNC);
- else
- su_recv(ag->ag_sink_socket, r2, sizeof r2, MSG_TRUNC);
- n++;
- }
- }
+ recv_udp(ag, r1, sizeof r1);
+ recv_udp(ag, r2, sizeof r2);
+
len = strlen("SIP/2.0 200 ");
TEST_1(memcmp(r1, "SIP/2.0 200 ", len) == 0);
TEST_1(memcmp(r2, "SIP/2.0 482 ", len) == 0);
@@ -2355,6 +2369,9 @@
TEST_P(ag->ag_latest_leg, ag->ag_server_leg);
}
+ while (su_recv(ag->ag_sink_socket, m1, sizeof m1, MSG_TRUNC) >= 0)
+ ;
+
{
/*
* Check that request with same call-id, cseq and from-tag
@@ -2392,16 +2409,8 @@
TEST_1((size_t)su_sendto(ag->ag_sink_socket, m1, l1, 0, su, sulen) == l1);
TEST_1((size_t)su_sendto(ag->ag_sink_socket, m2, l2, 0, su, sulen) == l2);
- for (n = 0; n < 2; ) {
- su_root_step(ag->ag_root, 10L);
- if (su_wait(ag->ag_sink_wait, 1, 0) == 0) {
- if (n == 0)
- su_recv(ag->ag_sink_socket, r1, sizeof r1, MSG_TRUNC);
- else
- su_recv(ag->ag_sink_socket, r2, sizeof r2, MSG_TRUNC);
- n++;
- }
- }
+ recv_udp(ag, r1, sizeof r1);
+ recv_udp(ag, r2, sizeof r2);
len = strlen("SIP/2.0 200 ");
TEST_1(memcmp(r1, "SIP/2.0 200 ", len) == 0);
@@ -2410,6 +2419,9 @@
TEST_P(ag->ag_latest_leg, ag->ag_server_leg);
}
+ while (su_recv(ag->ag_sink_socket, m1, sizeof m1, MSG_TRUNC) >= 0)
+ ;
+
{
/* test with rfc2543 */
@@ -2440,16 +2452,9 @@
TEST_1((size_t)su_sendto(ag->ag_sink_socket, m1, l1, 0, su, sulen) == l1);
TEST_1((size_t)su_sendto(ag->ag_sink_socket, m2, l2, 0, su, sulen) == l2);
- for (n = 0; n < 2; ) {
- su_root_step(ag->ag_root, 10L);
- if (su_wait(ag->ag_sink_wait, 1, 0) == 0) {
- if (n == 0)
- su_recv(ag->ag_sink_socket, r1, sizeof r1, MSG_TRUNC);
- else
- su_recv(ag->ag_sink_socket, r2, sizeof r2, MSG_TRUNC);
- n++;
- }
- }
+ recv_udp(ag, r1, sizeof r1);
+ recv_udp(ag, r2, sizeof r2);
+
l1 = strlen("SIP/2.0 200 ");
TEST_1(memcmp(r1, "SIP/2.0 200 ", l1) == 0);
TEST_1(memcmp(r2, "SIP/2.0 482 ", l1) == 0);
@@ -2457,6 +2462,9 @@
TEST_P(ag->ag_latest_leg, ag->ag_server_leg);
}
+ while (su_recv(ag->ag_sink_socket, m1, sizeof m1, MSG_TRUNC) >= 0)
+ ;
+
{
/* test with to-tag */
@@ -2487,16 +2495,9 @@
TEST_1((size_t)su_sendto(ag->ag_sink_socket, m1, l1, 0, su, sulen) == l1);
TEST_1((size_t)su_sendto(ag->ag_sink_socket, m2, l2, 0, su, sulen) == l2);
- for (n = 0; n < 2; ) {
- su_root_step(ag->ag_root, 10L);
- if (su_wait(ag->ag_sink_wait, 1, 0) == 0) {
- if (n == 0)
- su_recv(ag->ag_sink_socket, r1, sizeof r1, MSG_TRUNC);
- else
- su_recv(ag->ag_sink_socket, r2, sizeof r2, MSG_TRUNC);
- n++;
- }
- }
+ recv_udp(ag, r1, sizeof r1);
+ recv_udp(ag, r2, sizeof r2);
+
l1 = strlen("SIP/2.0 200 ");
TEST_1(memcmp(r1, "SIP/2.0 200 ", l1) == 0);
TEST_1(memcmp(r2, "SIP/2.0 482 ", l1) != 0);
@@ -2504,6 +2505,9 @@
TEST_P(ag->ag_latest_leg, ag->ag_server_leg);
}
+ while (su_recv(ag->ag_sink_socket, m1, sizeof m1, MSG_TRUNC) >= 0)
+ ;
+
{
/* test with rfc2543 and to-tag */
@@ -2532,16 +2536,9 @@
TEST_1((size_t)su_sendto(ag->ag_sink_socket, m1, l1, 0, su, sulen) == l1);
TEST_1((size_t)su_sendto(ag->ag_sink_socket, m2, l2, 0, su, sulen) == l2);
- for (n = 0; n < 2; ) {
- su_root_step(ag->ag_root, 10L);
- if (su_wait(ag->ag_sink_wait, 1, 0) == 0) {
- if (n == 0)
- su_recv(ag->ag_sink_socket, r1, sizeof r1, MSG_TRUNC);
- else
- su_recv(ag->ag_sink_socket, r2, sizeof r2, MSG_TRUNC);
- n++;
- }
- }
+ recv_udp(ag, r1, sizeof r1);
+ recv_udp(ag, r2, sizeof r2);
+
l1 = strlen("SIP/2.0 200 ");
TEST_1(memcmp(r1, "SIP/2.0 200 ", l1) == 0);
TEST_1(memcmp(r2, "SIP/2.0 482 ", l1) != 0);
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 Wed Jan 23 13:37:33 2008
@@ -1268,15 +1268,17 @@
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,
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,
a2->a_tag, NULL, a1->a_tag, a1->a_url),
dialog1);
- /* local url is used if there is no local tag */
+ /* 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,
a2->a_tag, a2->a_url, NULL, NULL),
NULL);
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 Wed Jan 23 13:37:33 2008
@@ -183,22 +183,35 @@
}
}
+/** Remove dialog information. */
+int nua_dialog_zap(nua_owner_t *own,
+ nua_dialog_state_t *ds)
+{
+ /* zap peer info */
+ 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 */
+ nta_leg_destroy(ds->ds_leg), ds->ds_leg = NULL;
+ /* Remote tag */
+ su_free(own, (void *)ds->ds_remote_tag), ds->ds_remote_tag = NULL;
+ /* Ready to set route/remote target */
+ ds->ds_route = 0;
+
+ return 0;
+}
+
/** Remove dialog (if there is no other usages). */
int nua_dialog_remove(nua_owner_t *own,
nua_dialog_state_t *ds,
nua_dialog_usage_t *usage)
{
if (ds->ds_usage == usage && (usage == NULL || usage->du_next == NULL)) {
- nua_dialog_store_peer_info(own, ds, NULL); /* zap peer info */
- msg_header_free(own, (msg_header_t *)ds->ds_ltarget), ds->ds_ltarget = NULL;
- nta_leg_destroy(ds->ds_leg), ds->ds_leg = NULL;
- su_free(own, (void *)ds->ds_remote_tag), ds->ds_remote_tag = NULL;
- ds->ds_route = 0;
+ return nua_dialog_zap(own, ds);
}
return 0;
}
-
/** @internal Get dialog usage slot. */
nua_dialog_usage_t **
nua_dialog_usage_at(nua_dialog_state_t const *ds,
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 Wed Jan 23 13:37:33 2008
@@ -422,6 +422,8 @@
sip_t const *sip, int rtag);
void nua_dialog_store_peer_info(nua_owner_t *, nua_dialog_state_t *ds,
sip_t const *sip);
+int nua_dialog_zap(nua_owner_t *own,
+ nua_dialog_state_t *ds);
int nua_dialog_remove(nua_owner_t *own,
nua_dialog_state_t *ds,
nua_dialog_usage_t *usage);
@@ -545,6 +547,8 @@
int nua_client_init_request(nua_client_request_t *cr);
+msg_t *nua_client_request_template(nua_client_request_t *cr);
+
int nua_client_restart_request(nua_client_request_t *cr,
int terminating,
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 Wed Jan 23 13:37:33 2008
@@ -262,7 +262,7 @@
nua_stack_event(nua, nh, NULL, e, SIP_200_OK, NULL);
}
else {
- nua_stack_event(nua, nh, NULL, e, NUA_INTERNAL_ERROR, NULL);
+ nua_stack_event(nua, nh, NULL, e, NUA_ERROR_AT(__FILE__, __LINE__), NULL);
}
}
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 Wed Jan 23 13:37:33 2008
@@ -775,7 +775,7 @@
return;
}
- nua_stack_tevent(nh->nh_nua, nh, NULL, e, NUA_INTERNAL_ERROR,
+ nua_stack_tevent(nh->nh_nua, nh, NULL, e, NUA_ERROR_AT(__FILE__, __LINE__),
NUTAG_SUBSTATE(nua_substate_terminated),
TAG_END());
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 Wed Jan 23 13:37:33 2008
@@ -405,7 +405,7 @@
if (!ex || ex->ex_delta == 0)
SET_STATUS(900, "Received Invalid Expiration Time");
else
- SET_STATUS1(NUA_INTERNAL_ERROR);
+ SET_STATUS1(NUA_ERROR_AT(__FILE__, __LINE__));
}
else
nua_dialog_usage_set_refresh(du, ex->ex_delta);
@@ -428,7 +428,7 @@
}
nua_stack_event(nh->nh_nua, nh, NULL,
- nua_r_publish, NUA_INTERNAL_ERROR,
+ nua_r_publish, NUA_ERROR_AT(__FILE__, __LINE__),
NULL);
nua_dialog_usage_remove(nh, ds, du);
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 Wed Jan 23 13:37:33 2008
@@ -1046,7 +1046,7 @@
}
/* Report that we have de-registered */
- nua_stack_event(nua, nh, NULL, nua_r_register, NUA_INTERNAL_ERROR, NULL);
+ nua_stack_event(nua, nh, NULL, nua_r_register, NUA_ERROR_AT(__FILE__, __LINE__), NULL);
nua_dialog_usage_remove(nh, ds, du);
}
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 Wed Jan 23 13:37:33 2008
@@ -1091,11 +1091,14 @@
assert(cr->cr_orq);
+
if (!ds->ds_leg) {
- nta_outgoing_destroy(cr->cr_orq);
- return -1;
+ /* XXX - fix nua_dialog_usage_remove_at() instead! */
+ nta_outgoing_destroy(cr->cr_orq);
+ return -1;
}
+ assert(ds->ds_leg);
msg = nta_outgoing_getrequest(cr->cr_orq);
sip = sip_object(msg);
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 Wed Jan 23 13:37:33 2008
@@ -650,7 +650,7 @@
}
if (error < 0) {
- nua_stack_event(nh->nh_nua, nh, NULL, event, NUA_INTERNAL_ERROR, NULL);
+ nua_stack_event(nh->nh_nua, nh, NULL, event, NUA_ERROR_AT(__FILE__, __LINE__), NULL);
}
su_msg_destroy(nua->nua_signal);
@@ -1214,9 +1214,9 @@
cr->cr_waiting = cr->cr_wait_for_cred = 0;
if (status < 0)
- nua_client_response(cr, 900, "Cannot add credentials", NULL);
+ nua_client_response(cr, 900, "Operation cannot add credentials", NULL);
else
- nua_client_response(cr, 904, "No matching challenge", NULL);
+ nua_client_response(cr, 904, "Operation has no matching challenge ", NULL);
}
else if (status < 0) {
nua_stack_event(nua, nh, NULL, e, 900, "Cannot add credentials", NULL);
@@ -1984,7 +1984,7 @@
return nua_stack_event(nh->nh_nua, nh,
NULL,
event,
- NUA_INTERNAL_ERROR,
+ NUA_ERROR_AT(__FILE__, __LINE__),
NULL);
}
@@ -2125,7 +2125,9 @@
}
if (du->du_cr && cr != du->du_cr) {
-
+ /* This should never happen (but it does):
+ assert(!nua_client_is_queued(du->du_cr));
+ */
if (nua_client_is_queued(du->du_cr))
return -1;
if (nua_client_is_reporting(du->du_cr)) {
@@ -2161,7 +2163,7 @@
int error = 0;
if (!cr->cr_method_name)
- return nua_client_return(cr, NUA_INTERNAL_ERROR, NULL);
+ return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), NULL);
if (cr->cr_msg)
return nua_client_request_try(cr);
@@ -2186,12 +2188,22 @@
}
if (!cr->cr_methods->crm_template ||
- !cr->cr_methods->crm_template(cr, &msg, cr->cr_tags))
- msg = nta_msg_create(nua->nua_nta, 0);
+ cr->cr_methods->crm_template(cr, &msg, cr->cr_tags) == 0)
+ msg = nua_client_request_template(cr);
sip = sip_object(msg);
if (!sip)
- return nua_client_return(cr, NUA_INTERNAL_ERROR, msg);
+ return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg);
+
+ if (nh->nh_tags) {
+ for (t = nh->nh_tags; t; t = t_next(t)) {
+ if (t->t_tag == siptag_contact ||
+ t->t_tag == siptag_contact_str)
+ has_contact = 1;
+ else if (t->t_tag == nutag_url)
+ url = (url_string_t const *)t->t_value;
+ }
+ }
/**@par Populating SIP Request Message with Tagged Arguments
*
@@ -2211,30 +2223,6 @@
* However, if a tag value is #SIP_NONE (-1 casted as a void pointer),
* the values from previous tags are ignored.
*/
- if (nh->nh_tags) {
- for (t = nh->nh_tags; t; t = t_next(t)) {
- if (t->t_tag == siptag_contact ||
- t->t_tag == siptag_contact_str)
- has_contact = 1;
- else if (t->t_tag == nutag_url)
- url = (url_string_t const *)t->t_value;
- }
-
- t = nh->nh_tags;
-
- /* Use the From header from the dialog */
- if (ds->ds_leg && t->t_tag == siptag_from)
- t++;
-
- sip_add_tagis(msg, sip, &t);
- }
-
- if (!ds->ds_route) {
- sip_route_t *initial_route = NH_PGET(nh, initial_route);
- if (initial_route)
- sip_add_dup(msg, sip, (sip_header_t *)initial_route);
- }
-
for (t = cr->cr_tags; t; t = t_next(t)) {
if (t->t_tag == siptag_contact ||
t->t_tag == siptag_contact_str)
@@ -2257,7 +2245,7 @@
if ((t = cr->cr_tags)) {
if (sip_add_tagis(msg, sip, &t) < 0)
- goto error;
+ return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg);
}
/**
@@ -2277,11 +2265,11 @@
if (!ds->ds_leg) {
if (ds->ds_remote_tag && ds->ds_remote_tag[0] &&
sip_to_tag(nh->nh_home, sip->sip_to, ds->ds_remote_tag) < 0)
- goto error;
+ return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg);
if (sip->sip_from == NULL &&
sip_add_dup(msg, sip, (sip_header_t *)nua->nua_from) < 0)
- goto error;
+ return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg);
if (cr->cr_dialog) {
ds->ds_leg = nta_leg_tcreate(nua->nua_nta,
@@ -2292,12 +2280,12 @@
SIPTAG_CSEQ(sip->sip_cseq),
TAG_END());
if (!ds->ds_leg)
- goto error;
+ return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg);
if (!sip->sip_from->a_tag &&
sip_from_tag(msg_home(msg), sip->sip_from,
nta_leg_tag(ds->ds_leg, NULL)) < 0)
- goto error;
+ return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg);
}
}
else {
@@ -2306,7 +2294,7 @@
}
if (url && nua_client_set_target(cr, (url_t *)url) < 0)
- goto error;
+ return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg);
cr->cr_has_contact = has_contact;
@@ -2315,7 +2303,7 @@
if (error < -1)
msg = NULL;
if (error < 0)
- goto error;
+ return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg);
if (error != 0)
return error;
}
@@ -2325,8 +2313,34 @@
return nua_client_request_try(cr);
- error:
- return nua_client_return(cr, NUA_INTERNAL_ERROR, msg);
+}
+
+msg_t *nua_client_request_template(nua_client_request_t *cr)
+{
+ nua_handle_t *nh = cr->cr_owner;
+ nua_t *nua = nh->nh_nua;
+ nua_dialog_state_t *ds = nh->nh_ds;
+
+ msg_t *msg = nta_msg_create(nua->nua_nta, 0);
+ sip_t *sip = sip_object(msg);
+
+ if (!sip)
+ return NULL;
+
+ if (nh->nh_tags) {
+ tagi_t const *t = nh->nh_tags;
+
+ /* Use the From header from the dialog.
+ From is always first tag in the handle */
+ if (ds->ds_leg && t->t_tag == siptag_from)
+ t++;
+
+ /* When the INVITE message (or any other SIP message) is
+ * created, the tagged values saved with nua_handle() are used first. */
+ sip_add_tagis(msg, sip, &t);
+ }
+
+ return msg;
}
@@ -2352,6 +2366,7 @@
return nua_client_request_try(cr);
}
+
return 0;
}
@@ -2415,7 +2430,7 @@
}
if (error < 0)
- error = nua_client_response(cr, NUA_INTERNAL_ERROR, NULL);
+ error = nua_client_response(cr, NUA_ERROR_AT(__FILE__, __LINE__), NULL);
assert(error > 0);
return error;
@@ -2453,6 +2468,22 @@
while (sip->sip_route)
sip_route_remove(msg, sip);
}
+ else if (!ds->ds_route) {
+ sip_route_t *initial_route = NH_PGET(nh, initial_route);
+
+ 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_t **)&sip->sip_route
+ * but directly casting pointer &sip->sip_route gives
+ * spurious type-punning warning */
+ (msg_header_t **)((char *)sip + offsetof(sip_t, sip_route)),
+ (msg_header_t *)initial_route);
+ }
+ }
+
/**
* For in-dialog requests, the request URI is taken from the @Contact
@@ -2747,14 +2778,16 @@
switch (status) {
case 302:
- if (nua_client_set_target(cr, sip->sip_contact->m_url) >= 0)
+ if (nua_dialog_zap(nh, nh->nh_ds) == 0 &&
+ nua_client_set_target(cr, sip->sip_contact->m_url) >= 0)
return nua_client_restart(cr, 100, "Redirected");
break;
case 305:
sip_route_init(r);
*r->r_url = *sip->sip_contact->m_url;
- if (sip_add_dup(cr->cr_msg, cr->cr_sip, (sip_header_t *)r) >= 0)
+ if (nua_dialog_zap(nh, nh->nh_ds) == 0 &&
+ sip_add_dup(cr->cr_msg, cr->cr_sip, (sip_header_t *)r) >= 0)
return nua_client_restart(cr, 100, "Redirected via a proxy");
break;
@@ -2867,10 +2900,11 @@
int status, char const *phrase)
{
nua_handle_t *nh = cr->cr_owner;
+ nua_dialog_state_t *ds = nh->nh_ds;
nta_outgoing_t *orq;
int error = -1, terminated, graceful;
- msg_t *msg;
- sip_t *sip;
+ msg_t *msg = NULL;
+ sip_t *sip = NULL;
if (cr->cr_retry_count > NH_PGET(nh, retry_count))
return 0;
@@ -2878,9 +2912,24 @@
orq = cr->cr_orq, cr->cr_orq = NULL; assert(orq);
terminated = cr->cr_terminated, cr->cr_terminated = 0;
graceful = cr->cr_graceful, cr->cr_graceful = 0;
+ cr->cr_offer_sent = cr->cr_answer_recv = 0;
+ cr->cr_offer_recv = cr->cr_answer_sent = 0;
- msg = msg_copy(cr->cr_msg);
- sip = sip_object(msg);
+ if (!ds->ds_leg && cr->cr_dialog) {
+ sip_t const *sip = cr->cr_sip;
+ ds->ds_leg = nta_leg_tcreate(nh->nh_nua->nua_nta,
+ nua_stack_process_request, nh,
+ SIPTAG_CALL_ID(sip->sip_call_id),
+ SIPTAG_FROM(sip->sip_from),
+ SIPTAG_TO(sip->sip_to),
+ SIPTAG_CSEQ(sip->sip_cseq),
+ TAG_END());
+ }
+
+ if (ds->ds_leg || !cr->cr_dialog) {
+ msg = msg_copy(cr->cr_msg);
+ sip = sip_object(msg);
+ }
if (msg && sip) {
cr->cr_restarting = 1;
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 Wed Jan 23 13:37:33 2008
@@ -207,6 +207,7 @@
extern char const nua_internal_error[];
#define NUA_INTERNAL_ERROR 900, nua_internal_error
+#define NUA_ERROR_AT(file, line) 900, "Internal error at " file ":" #line
struct nua_s {
su_home_t nua_home[1];
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 Wed Jan 23 13:37:33 2008
@@ -451,7 +451,7 @@
if (!eu->eu_unsolicited)
nua_stack_tevent(nh->nh_nua, nh, NULL,
- nua_i_notify, NUA_INTERNAL_ERROR,
+ nua_i_notify, NUA_ERROR_AT(__FILE__, __LINE__),
NUTAG_SUBSTATE(nua_substate_terminated),
SIPTAG_EVENT(du->du_event),
TAG_END());
@@ -831,22 +831,31 @@
tagi_t const *tags)
{
nua_handle_t *nh = cr->cr_owner;
- nua_dialog_usage_t *du = cr->cr_usage;
+ nua_dialog_usage_t *du, *du0 = cr->cr_usage;
struct event_usage *eu;
sip_event_t *event;
int error;
cr->cr_usage = NULL;
- if (du)
- nua_dialog_usage_remove(nh, nh->nh_ds, du);
-
event = sip_event_format(nh->nh_home, "refer;id=%u", sip->sip_cseq->cs_seq);
if (!event)
return -1;
- du = nua_dialog_usage_add(nh, nh->nh_ds, nua_subscribe_usage, event);
- if (!du)
- return -1;
+
+ if (du0 == NULL ||
+ du0->du_event == NULL ||
+ du0->du_event->o_id == NULL ||
+ strcmp(du0->du_event->o_id, event->o_id)) {
+ du = nua_dialog_usage_add(nh, nh->nh_ds, nua_subscribe_usage, event);
+ if (!du)
+ return -1;
+ }
+ else {
+ du = du0, du0 = NULL;
+ }
+
+ if (du0)
+ nua_dialog_usage_remove(nh, nh->nh_ds, du0);
eu = nua_dialog_usage_private(cr->cr_usage = du);
eu ->eu_refer = 1;
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_100rel.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_100rel.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_100rel.c Wed Jan 23 13:37:33 2008
@@ -1793,6 +1793,223 @@
END();
}
+
+int test_update_failure(struct context *ctx)
+{
+ BEGIN();
+#if 0
+ struct endpoint *a = &ctx->a, *b = &ctx->b;
+ struct call *a_call = a->call, *b_call = b->call;
+ struct event *e, *eu, *ei;
+ enum nua_callstate ustate, istate;
+
+ if (print_headings)
+ printf("TEST NUA-10.4.1: UPDATE failure terminating session\n");
+
+/* Test UPDATE failing:
+
+ A B
+ |-------INVITE------>|
+ |<----100 Trying-----|
+ | |
+ |<-------183---------|
+ |-------PRACK------->|
+ |<-------200---------|
+ | |
+ |<-------180---------|
+ | |
+ +------------------------+
+ |<------200 OK-------|
+ |-------UPDATE------>|
+ | |
+ |<-------481---------|
+ | |
+ |--------ACK-------->|
+ | |
+ |<-------BYE---------|
+ |-------200 OK-------|
+ | |
+
+*/
+
+ a_call->sdp = "m=audio 5008 RTP/AVP 8";
+ b_call->sdp = "m=audio 5010 RTP/AVP 0 8";
+
+ nua_set_params(ctx->a.nua,
+ NUTAG_EARLY_MEDIA(1),
+ SIPTAG_SUPPORTED_STR("100rel, precondition, timer"),
+ TAG_END());
+ run_a_until(ctx, nua_r_set_params, until_final_response);
+
+ nua_set_params(ctx->b.nua,
+ NUTAG_EARLY_MEDIA(1),
+ NUTAG_ONLY183_100REL(1),
+ SIPTAG_SUPPORTED_STR("100rel, precondition, timer"),
+ NUTAG_APPL_METHOD("UPDATE"),
+ TAG_END());
+ run_b_until(ctx, nua_r_set_params, until_final_response);
+
+ TEST_1(a_call->nh = nua_handle(a->nua, a_call, SIPTAG_TO(b->to), TAG_END()));
+
+ INVITE(a, a_call, a_call->nh,
+ TAG_IF(!ctx->proxy_tests, NUTAG_URL(b->contact->m_url)),
+ SOATAG_USER_SDP_STR(a_call->sdp),
+ SIPTAG_SUPPORTED_STR("100rel"),
+ TAG_END());
+
+ run_ab_until(ctx, -1, save_until_final_response, -1, until_pracked);
+
+ /* Client transitions:
+ INIT -(C1)-> CALLING: nua_invite(), nua_i_state
+ CALLING -(C2)-> PROCEEDING: nua_r_invite, nua_i_state
+ PROCEEDING -(C3+C4)-> READY: nua_r_invite, nua_i_state
+ */
+ TEST_1(e = a->events->head); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_calling); /* CALLING */
+ TEST_1(is_offer_sent(e->data->e_tags));
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_invite);
+ TEST(e->data->e_status, 183);
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_proceeding);
+ TEST_1(is_answer_recv(e->data->e_tags));
+ /* Offer is sent in PRACK */
+ TEST_1(is_offer_sent(e->data->e_tags));
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_prack);
+ TEST(e->data->e_status, 200);
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_proceeding);
+ TEST_1(is_answer_recv(e->data->e_tags));
+ TEST_1(!is_offer_sent(e->data->e_tags));
+
+ /* Send UPDATE */
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_proceeding);
+ TEST_1(!is_answer_recv(e->data->e_tags));
+ TEST_1(is_offer_sent(e->data->e_tags));
+
+ /* The final response to the UPDATE and INVITE can be received in any order */
+ eu = event_by_type(e->next, nua_r_update);
+ ei = event_by_type(e->next, nua_r_invite);
+
+ TEST_1(e = eu); TEST_E(e->data->e_event, nua_r_update);
+ TEST(e->data->e_status, 200);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ ustate = callstate(e->data->e_tags);
+ TEST_1(is_answer_recv(e->data->e_tags));
+ TEST_1(!is_offer_sent(e->data->e_tags));
+
+ TEST_1(e = ei); TEST_E(e->data->e_event, nua_r_invite);
+ TEST(e->data->e_status, 180);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_proceeding); /* PROCEEDING */
+ TEST_1(!is_offer_answer_done(e->data->e_tags));
+
+ /* Final response to INVITE */
+ TEST_1(ei = event_by_type(ei->next, nua_r_invite));
+
+ TEST_E(ei->data->e_event, nua_r_invite); TEST(ei->data->e_status, 200);
+ TEST_1(e = ei->next); TEST_E(e->data->e_event, nua_i_state);
+ istate = callstate(e->data->e_tags);
+ TEST_1(!is_offer_answer_done(e->data->e_tags));
+
+ if (eu == e->next) {
+ /* 200 OK to UPDATE is received after 200 OK to INVITE */
+ TEST(ustate, nua_callstate_ready);
+ TEST(istate, nua_callstate_completing);
+ }
+ else {
+ /* 200 OK to UPDATE is received before 200 OK to INVITE */
+ TEST(ustate, nua_callstate_proceeding);
+ TEST(istate, nua_callstate_ready);
+ }
+
+ free_events_in_list(ctx, a->events);
+
+ /*
+ Server transitions:
+ INIT -(S1)-> RECEIVED: nua_i_invite, nua_i_state
+ RECEIVED -(S2a)-> EARLY: nua_respond(), nua_i_state
+ EARLY -(S3b)-> COMPLETED: nua_respond(), nua_i_state
+ COMPLETED -(S4)-> READY: nua_i_ack, nua_i_state
+ */
+ TEST_1(e = b->events->head); TEST_E(e->data->e_event, nua_i_invite);
+ TEST(e->data->e_status, 100);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_received); /* RECEIVED */
+
+ /* Responded with 183 Session Progress */
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_early); /* EARLY */
+ TEST_1(is_answer_sent(e->data->e_tags));
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_prack);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_early); /* EARLY */
+ TEST_1(is_offer_recv(e->data->e_tags));
+ TEST_1(is_answer_sent(e->data->e_tags));
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_update);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_early); /* EARLY */
+ TEST_1(is_offer_recv(e->data->e_tags));
+ TEST_1(is_answer_sent(e->data->e_tags));
+
+ /* Responded with 180 Ringing */
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_early); /* EARLY */
+ TEST_1(!is_offer_answer_done(e->data->e_tags));
+
+ /* Responded with 200 OK */
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_completed); /* COMPLETED */
+ TEST_1(!is_offer_answer_done(e->data->e_tags));
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_ack);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_ready); /* READY */
+ TEST_1(!is_offer_answer_done(e->data->e_tags));
+ TEST_1(!e->next);
+ free_events_in_list(ctx, b->events);
+
+ if (print_headings)
+ printf("TEST NUA-10.4.1: PASSED\n");
+
+ if (print_headings)
+ printf("TEST NUA-10.4.2: terminate call\n");
+
+ BYE(b, b_call, b_call->nh, TAG_END());
+ run_ab_until(ctx, -1, until_terminated, -1, until_terminated);
+
+ /* B transitions:
+ READY --(T2)--> TERMINATING: nua_bye()
+ TERMINATING --(T3)--> TERMINATED: nua_r_bye, nua_i_state
+ */
+ TEST_1(e = b->events->head); TEST_E(e->data->e_event, nua_r_bye);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */
+ TEST_1(!e->next);
+ free_events_in_list(ctx, b->events);
+
+ /* A: READY -(T1)-> TERMINATED: nua_i_bye, nua_i_state */
+ TEST_1(e = a->events->head); TEST_E(e->data->e_event, nua_i_bye);
+ TEST(e->data->e_status, 200);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */
+ TEST_1(!e->next);
+ free_events_in_list(ctx, a->events);
+
+ nua_handle_destroy(a_call->nh), a_call->nh = NULL;
+ nua_handle_destroy(b_call->nh), b_call->nh = NULL;
+
+ if (print_headings)
+ printf("TEST NUA-10.4.2: PASSED\n");
+#endif
+ END();
+}
int cancel_when_pracked(CONDITION_PARAMS);
int alert_call(CONDITION_PARAMS);
@@ -2105,19 +2322,281 @@
END();
}
+int redirect_pracked(CONDITION_PARAMS);
+
+int test_180rel_redirected(struct context *ctx)
+{
+ BEGIN();
+
+ struct endpoint *a = &ctx->a, *b = &ctx->b;
+ struct call *a_call = a->call, *b_call = b->call;
+ struct event *e, *ep, *ei;
+ sip_t *sip;
+
+ if (print_headings)
+ printf("TEST NUA-10.8.1: Call with 100rel and 180\n");
+
+/* Test for 100rel:
+
+ A B
+ |-------INVITE------>|
+ |<----100 Trying-----|
+ | |
+ |<-------180---------|
+ |-------PRACK------->|
+ |<-------200---------|
+ | |
+ |<----302 Moved------|
+ |--------ACK-------->|
+ | |
+ |-------INVITE------>|
+ |<----100 Trying-----|
+ | |
+ |<-------180---------|
+ |-------PRACK------->|
+ |<-------200---------|
+ | |
+ |<------200 OK-------|
+ |--------ACK-------->|
+ | |
+ |<-------BYE---------|
+ |-------200 OK-------|
+ | |
+
+*/
+
+ a_call->sdp = "m=audio 5008 RTP/AVP 8";
+ b_call->sdp = "m=audio 5010 RTP/AVP 0 8";
+
+ nua_set_params(ctx->a.nua,
+ NUTAG_EARLY_MEDIA(1),
+ TAG_END());
+ run_a_until(ctx, nua_r_set_params, until_final_response);
+
+ nua_set_params(ctx->b.nua,
+ NUTAG_EARLY_MEDIA(1),
+ NUTAG_SESSION_TIMER(180),
+ TAG_END());
+ run_b_until(ctx, nua_r_set_params, until_final_response);
+
+ TEST_1(a_call->nh = nua_handle(a->nua, a_call, SIPTAG_TO(b->to), TAG_END()));
+
+ INVITE(a, a_call, a_call->nh,
+ TAG_IF(!ctx->proxy_tests, NUTAG_URL(b->contact->m_url)),
+ SOATAG_USER_SDP_STR(a_call->sdp),
+ TAG_END());
+
+ run_ab_until(ctx, -1, until_ready, -1, redirect_pracked);
+
+ /* Client transitions:
+ INIT -(C1)-> CALLING: nua_invite(), nua_i_state
+ CALLING -(C2)-> PROCEEDING: nua_r_invite, nua_i_state, nua_r_prack
+ PROCEEDING->(redirected)->CALLING: nua_r_invite, nua_i_state
+ CALLING -(C2)-> PROCEEDING: nua_r_invite, nua_i_state, nua_r_prack
+ PROCEEDING -(C3+C4)-> READY: nua_r_invite, nua_i_state
+ */
+ TEST_1(e = a->events->head); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_calling); /* CALLING */
+ TEST_1(is_offer_sent(e->data->e_tags));
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_invite);
+ TEST(e->data->e_status, 180);
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_proceeding);
+ TEST_1(is_answer_recv(e->data->e_tags));
+ TEST_1(!is_offer_sent(e->data->e_tags));
+
+ ei = event_by_type(e->next, nua_r_invite); /* 302 */
+ ep = event_by_type(e->next, nua_r_prack); /* 200 */
+ if (!ep) {
+ run_a_until(ctx, -1, save_until_final_response);
+ ep = event_by_type(e->next, nua_r_prack);
+ }
+
+ TEST_1(e = ep); TEST_E(e->data->e_event, nua_r_prack);
+ TEST(e->data->e_status, 200);
+
+ TEST_1(e = ei); TEST_E(e->data->e_event, nua_r_invite);
+ TEST(e->data->e_status, 100);
+ TEST_1(sip = sip_object(e->data->e_msg));
+ TEST(sip->sip_status->st_status, 302);
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_calling); /* CALLING */
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_invite);
+ TEST(e->data->e_status, 180);
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_proceeding);
+ TEST_1(is_answer_recv(e->data->e_tags));
+ TEST_1(!is_offer_sent(e->data->e_tags));
+
+ ei = event_by_type(e->next, nua_r_invite);
+ ep = event_by_type(e->next, nua_r_prack);
+ if (!ep) {
+ run_a_until(ctx, -1, save_until_final_response);
+ ep = event_by_type(e->next, nua_r_prack);
+ }
+
+ TEST_1(e = ep); TEST_E(e->data->e_event, nua_r_prack);
+ TEST(e->data->e_status, 200);
+
+ TEST_1(e = ei); TEST_E(e->data->e_event, nua_r_invite);
+ TEST(e->data->e_status, 200);
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_ready); /* READY */
+ TEST_1(!is_offer_answer_done(e->data->e_tags));
+
+ TEST_1(!e->next || !ep->next);
+ free_events_in_list(ctx, a->events);
+
+ /*
+ Server transitions:
+ INIT -(S1)-> RECEIVED: nua_i_invite, nua_i_state
+ RECEIVED -(S2a)-> EARLY: nua_respond(), nua_i_state
+ EARLY -(S3b)-> COMPLETED: nua_respond(), nua_i_state
+ COMPLETED -(S4)-> READY: nua_i_ack, nua_i_state
+ */
+ TEST_1(e = b->events->head); TEST_E(e->data->e_event, nua_i_invite);
+ TEST(e->data->e_status, 100);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_received); /* RECEIVED */
+ TEST_1(is_offer_recv(e->data->e_tags));
+
+ /* Responded with 180 Ringing */
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_early); /* EARLY */
+ TEST_1(is_answer_sent(e->data->e_tags));
+
+ /* 180 is PRACKed */
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_prack);
+ /* 302 terminates call */
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* Terminated */
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_invite);
+ TEST(e->data->e_status, 100);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_received); /* RECEIVED */
+ TEST_1(is_offer_recv(e->data->e_tags));
+
+ /* Responded with 180 Ringing */
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_early); /* EARLY */
+ TEST_1(is_answer_sent(e->data->e_tags));
+
+ /* 180 is PRACKed */
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_prack);
+ /* Does not have effect on call state */
+
+ /* Respond with 200 OK */
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_completed); /* COMPLETED */
+ TEST_1(!is_offer_answer_done(e->data->e_tags));
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_ack);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_ready); /* READY */
+ TEST_1(!is_offer_answer_done(e->data->e_tags));
+ TEST_1(!e->next);
+ free_events_in_list(ctx, b->events);
+
+ if (print_headings)
+ printf("TEST NUA-10.8.1: PASSED\n");
+
+ if (print_headings)
+ printf("TEST NUA-10.8.2: terminate call\n");
+
+ BYE(b, b_call, b_call->nh, TAG_END());
+ run_ab_until(ctx, -1, until_terminated, -1, until_terminated);
+
+ /* B transitions:
+ READY --(T2)--> TERMINATING: nua_bye()
+ TERMINATING --(T3)--> TERMINATED: nua_r_bye, nua_i_state
+ */
+ TEST_1(e = b->events->head); TEST_E(e->data->e_event, nua_r_bye);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */
+ TEST_1(!e->next);
+ free_events_in_list(ctx, b->events);
+
+ /* A: READY -(T1)-> TERMINATED: nua_i_bye, nua_i_state */
+ TEST_1(e = a->events->head); TEST_E(e->data->e_event, nua_i_bye);
+ TEST(e->data->e_status, 200);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_state);
+ TEST(callstate(e->data->e_tags), nua_callstate_terminated); /* TERMINATED */
+ TEST_1(!e->next);
+ free_events_in_list(ctx, a->events);
+
+ nua_handle_destroy(a_call->nh), a_call->nh = NULL;
+ nua_handle_destroy(b_call->nh), b_call->nh = NULL;
+
+ if (print_headings)
+ printf("TEST NUA-10.8.2: PASSED\n");
+
+ END();
+}
+
+int redirect_pracked(CONDITION_PARAMS)
+{
+ if (!(check_handle(ep, call, nh, SIP_500_INTERNAL_SERVER_ERROR)))
+ return 0;
+
+ save_event_in_list(ctx, event, ep, call);
+
+ if (event == nua_i_prack) {
+ if (!ep->flags.bit0) {
+ sip_contact_t m[1];
+
+ ep->flags.bit0 = 1;
+
+ *m = *ep->contact;
+ m->m_url->url_user = "302";
+ RESPOND(ep, call, nh, SIP_302_MOVED_TEMPORARILY, SIPTAG_CONTACT(m), TAG_END());
+ return 0;
+ }
+ else {
+ RESPOND(ep, call, nh, SIP_200_OK,
+ TAG_IF(call->sdp, SOATAG_USER_SDP_STR(call->sdp)),
+ TAG_END());
+ }
+ }
+
+
+ switch (callstate(tags)) {
+ case nua_callstate_received:
+ RESPOND(ep, call, nh, SIP_180_RINGING,
+ TAG_IF(call->sdp, SOATAG_USER_SDP_STR(call->sdp)),
+ TAG_END());
+ return 0;
+ case nua_callstate_ready:
+ return 1;
+ case nua_callstate_terminated:
+ if (call)
+ nua_handle_destroy(call->nh), call->nh = NULL;
+ return 0;
+ default:
+ return 0;
+ }
+}
int test_100rel(struct context *ctx)
{
int retval = 0;
-
+
retval = test_180rel(ctx); RETURN_ON_SINGLE_FAILURE(retval);
retval = test_prack_auth(ctx); RETURN_ON_SINGLE_FAILURE(retval);
retval = test_183rel(ctx); RETURN_ON_SINGLE_FAILURE(retval);
retval = test_preconditions(ctx); RETURN_ON_SINGLE_FAILURE(retval);
retval = test_preconditions2(ctx); RETURN_ON_SINGLE_FAILURE(retval);
retval = test_update_by_uas(ctx); RETURN_ON_SINGLE_FAILURE(retval);
+ retval = test_update_failure(ctx); RETURN_ON_SINGLE_FAILURE(retval);
retval = test_180rel_cancel1(ctx); RETURN_ON_SINGLE_FAILURE(retval);
retval = test_180rel_cancel2(ctx); RETURN_ON_SINGLE_FAILURE(retval);
+ retval = test_180rel_redirected(ctx); RETURN_ON_SINGLE_FAILURE(retval);
nua_set_params(ctx->a.nua,
NUTAG_EARLY_MEDIA(0),
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_refer.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_refer.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/test_refer.c Wed Jan 23 13:37:33 2008
@@ -48,13 +48,14 @@
int test_refer0(struct context *ctx, char const *tests,
int refer_with_id, int notify_by_appl);
-
int notify_until_terminated(CONDITION_PARAMS);
+int test_challenge_refer(struct context *ctx);
int test_refer(struct context *ctx)
{
/* test twice, once without id and once with id */
return
+ test_challenge_refer(ctx) ||
test_refer0(ctx, "NUA-9.1", 0, 0) ||
test_refer0(ctx, "NUA-9.2", 1, 0) ||
test_refer0(ctx, "NUA-9.3", 0, 1) ||
@@ -713,3 +714,139 @@
return 0;
}
}
+
+int authenticate_refer(CONDITION_PARAMS);
+int reject_refer_after_notified(CONDITION_PARAMS);
+
+int test_challenge_refer(struct context *ctx)
+{
+ BEGIN();
+
+ struct endpoint *a = &ctx->a, *b = &ctx->b, *c = &ctx->c;
+ struct call *a_call = a->call, *c_call = c->call;
+ struct event *e;
+ sip_t const *sip;
+
+ sip_refer_to_t r0[1];
+
+ if (!ctx->proxy_tests)
+ return 0;
+
+ if (print_headings)
+ printf("TEST NUA-9.0.1: challenge REFER\n");
+
+ nua_set_params(ctx->a.nua, NUTAG_APPL_METHOD("REFER"), TAG_END());
+ run_a_until(ctx, nua_r_set_params, until_final_response);
+
+ *sip_refer_to_init(r0)->r_url = *b->contact->m_url;
+ r0->r_url->url_headers = "subject=referred";
+ r0->r_display = "B";
+
+ TEST_1(c_call->nh = nua_handle(c->nua, c_call, SIPTAG_TO(a->to), TAG_END()));
+
+ REFER(c, c_call, c_call->nh,
+ SIPTAG_FROM(c->to),
+ SIPTAG_REFER_TO(r0),
+ TAG_END());
+
+ run_abc_until(ctx, -1, reject_refer_after_notified, -1, NULL, -1, authenticate_refer);
+
+ /*
+ Events in A:
+ nua_i_refer
+ */
+ TEST_1(e = a->events->head); TEST_E(e->data->e_event, nua_i_refer);
+ TEST(e->data->e_status, 100);
+ TEST_1(sip = sip_object(e->data->e_msg));
+ TEST_1(sip->sip_refer_to);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_notify);
+ TEST(e->data->e_status, 200);
+ TEST_1(!e->next);
+ /*
+ Events in C after nua_refer():
+ nua_r_refer
+ */
+ TEST_1(e = c->events->head); TEST_E(e->data->e_event, nua_r_refer);
+ TEST(e->data->e_status, 100);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_refer);
+ TEST(e->data->e_status, 407);
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_refer);
+ TEST(e->data->e_status, 100);
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_i_notify);
+ TEST(e->data->e_status, 200);
+
+ TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_refer);
+ TEST(e->data->e_status, 480);
+
+ TEST_1(!e->next);
+
+ free_events_in_list(ctx, a->events);
+ free_events_in_list(ctx, c->events);
+
+ nua_handle_destroy(a_call->nh), a_call->nh = NULL;
+ nua_handle_destroy(c_call->nh), c_call->nh = NULL;
+
+ nua_set_params(ctx->a.nua,
+ NUTAG_APPL_METHOD(NULL),
+ NUTAG_APPL_METHOD("INVITE, REGISTER, PUBLISH, SUBSCRIBE"),
+ TAG_END());
+ run_a_until(ctx, nua_r_set_params, until_final_response);
+
+ if (print_headings)
+ printf("TEST NUA-9.0.1: PASSED\n");
+
+ END();
+}
+
+int reject_refer_after_notified(CONDITION_PARAMS)
+{
+ if (!(check_handle(ep, call, nh, SIP_500_INTERNAL_SERVER_ERROR)))
+ return 0;
+
+ save_event_in_list(ctx, event, ep, call);
+
+ if (event == nua_i_refer) {
+ }
+
+ if (event == nua_r_notify) {
+ /* Respond to refer only after initial notify has been responded */
+ struct eventlist *list;
+ struct event *e;
+
+ if (call->events)
+ list = call->events;
+ else
+ list = ep->events;
+
+ for (e = list->head; e; e = e->next)
+ if (e->data->e_event == nua_i_refer)
+ break;
+
+ if (e) {
+ RESPOND(ep, call, nh, SIP_480_TEMPORARILY_UNAVAILABLE,
+ NUTAG_WITH(e->data->e_msg),
+ TAG_END());
+ return 1;
+ }
+ return 0;
+ }
+
+ return 0;
+}
+
+int authenticate_refer(CONDITION_PARAMS)
+{
+ if (!(check_handle(ep, call, nh, SIP_500_INTERNAL_SERVER_ERROR)))
+ return 0;
+
+ save_event_in_list(ctx, event, ep, call);
+
+ if (status == 401 || status == 407) {
+ AUTHENTICATE(ep, call, nh,
+ NUTAG_AUTH("Digest:\"test-proxy\":charlie:secret"),
+ TAG_END());
+ }
+
+ return status == 480;
+}
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 Wed Jan 23 13:37:33 2008
@@ -220,9 +220,13 @@
*
* The parsed Alert-Info header is stored in #sip_alert_info_t structure.
*
- * @NEW_1_12_7. In order to use @b Alert-Info header,
- * initialize the SIP parser with, e.g.,
- * sip_update_default_mclass(sip_extend_mclass(NULL))
+ * @NEW_1_12_7. In order to use @b Alert-Info header, initialize the SIP
+ * parser before calling nta_agent_create() or nua_create() with, e.g.,
+ * sip_update_default_mclass(sip_extend_mclass(NULL)).
+ *
+ * The #sip_t structure does not contain a @a sip_alert_info field, but
+ * sip_alert_info() function should be used for accessing the @b Alert-Info
+ * header structure.
*/
/**@ingroup sip_alert_info
@@ -283,8 +287,14 @@
* @sa sip_update_default_mclass()
*
* @NEW_1_12_7. In order to use @b Reply-To header,
- * initialize the SIP parser with, e.g.,
+ * initialize the SIP parser before calling nta_agent_create() or
+ * nua_create() with, e.g.,
* sip_update_default_mclass(sip_extend_mclass(NULL)).
+ *
+ * @note
+ * The #sip_t structure does not contain a @a sip_reply_to field, but
+ * sip_reply_to() function should be used for accessing the @b Reply-To
+ * header structure.
*/
/**@ingroup sip_reply_to
@@ -933,7 +943,13 @@
*
* @sa @RFC3265, draft-niemi-sip-subnot-etags-01.txt
*
- * @EXP_1_12_5. Note that #sip_t does not contain @a
+ * @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()
* function should be used for accessing the @b Suppress-Body-If-Match
* header structure.
@@ -999,10 +1015,15 @@
*
* @sa @RFC3265, draft-niemi-sip-subnot-etag-01
*
- * @EXP_1_12_5. Note that #sip_t does not contain @a
- * sip_suppress_notify_if_match field, but sip_suppress_notify_if_match()
- * function should be used for accessing the @b Suppress-Notify-If-Match
- * header structure.
+ * @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
+ * the @b Suppress-Notify-If-Match header structure.
*/
/**@ingroup sip_suppress_notify_if_match
@@ -1085,8 +1106,14 @@
* @sa sip_update_default_mclass(), draft-ietf-sip-privacy-04.txt, @RFC3325
*
* @NEW_1_12_7. In order to use @b Remote-Party-ID header,
- * initialize the SIP parser with, e.g.,
+ * initialize the SIP parser before calling nta_agent_create() or
+ * nua_create() with, e.g.,
* sip_update_default_mclass(sip_extend_mclass(NULL)).
+ *
+ * @note
+ * The #sip_t structure does not contain @a sip_remote_party_id field, but
+ * sip_remote_party_id() function should be used for accessing the @b
+ * Remote-Party-ID header structure.
*/
/**@ingroup sip_remote_party_id
@@ -1222,8 +1249,14 @@
* @sa @RFC3325, @PPreferredIdentity
*
* @NEW_1_12_7. In order to use @b P-Asserted-Identity header,
- * initialize the SIP parser with, e.g.,
+ * initialize the SIP parser before calling nta_agent_create() or
+ * nua_create() with, e.g.,
* sip_update_default_mclass(sip_extend_mclass(NULL)).
+ *
+ * @note
+ * The #sip_t structure does not contain @a sip_p_asserted_identity field,
+ * but sip_p_asserted_identity() function should be used for accessing the
+ * @b P-Asserted-Identity header structure.
*/
/**@ingroup sip_p_asserted_identity
@@ -1325,8 +1358,14 @@
* @sa @RFC3325, @PAssertedIdentity
*
* @NEW_1_12_7. In order to use @b P-Preferred-Identity header,
- * initialize the SIP parser with, e.g.,
+ * initialize the SIP parser before calling nta_agent_create() or
+ * nua_create() with, e.g.,
* sip_update_default_mclass(sip_extend_mclass(NULL)).
+ *
+ * @note
+ * The #sip_t structure does not contain @a sip_p_preferred_identity field,
+ * but sip_p_preferred_identity() function should be used for accessing the
+ * @b P-Preferred-Identity header structure.
*/
/**@ingroup sip_p_preferred_identity
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 Wed Jan 23 13:37:33 2008
@@ -90,6 +90,8 @@
* @retval 0 when successful
* @retval -1 upon an error
*
+ * @sa sip_extend_mclass()
+ *
* @NEW_1_12_7.
*/
int sip_update_default_mclass(msg_mclass_t const *mclass)
@@ -103,12 +105,22 @@
/**Extend SIP parser class with extension headers.
*
* Extend given SIP parser class with extension headers. If the given parser
- * class is the default one or NULL, make a clone of it before extending it.
+ * (message class) is the default one or NULL, make a clone of default
+ * parser before extending it.
*
* @param input pointer to a SIP message class (may be NULL)
*
* @return Pointer to extended mclass, or NULL upon an error.
*
+ * @sa
+ * @AlertInfo,
+ * @ReplyTo,
+ * @RemotePartyId,
+ * @PAssertedIdentity,
+ * @PPreferredIdentity,
+ * @SuppressBodyIfMatch,
+ * @SuppressNotifyIfMatch
+ *
* @NEW_1_12_7.
*/
msg_mclass_t *sip_extend_mclass(msg_mclass_t *input)
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 Wed Jan 23 13:37:33 2008
@@ -883,8 +883,7 @@
* decide whether to gracefully terminate or not, the
* @a *return_graceful_terminate_usage is left unmodified.
*
- * @sa
- * http://www.ietf.org/internet-drafts/draft-ietf-sipping-dialogusage-02.txt
+ * @RFC 5057
*/
int sip_response_terminates_dialog(int response_code,
sip_method_t method,
@@ -1060,8 +1059,6 @@
usage in an existing dialog, no new usage is created and existing
usages are unaffected.
*/
- *return_graceful_terminate_usage = 0;
- return 0;
case 423: /** @par 423 Interval Too Brief
@@ -1070,8 +1067,6 @@
subscribe usage is not destroyed (or otherwise affected). No
other usages of the dialog are affected.
*/
- *return_graceful_terminate_usage = 0;
- return sip_method_subscribe == method ? terminate_usage : no_effect;
case 428: /** @par 428 Use Identity Header
@@ -1079,8 +1074,6 @@
the usage. The usage is not affected. The dialog is only
affected by a change in its local @CSeq. No other usages of the
dialog are affected. */
- *return_graceful_terminate_usage = 0;
- return 0;
case 429: /** @par 429 Provide Referrer Identity
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 Wed Jan 23 13:37:33 2008
@@ -77,6 +77,9 @@
static int test_identity(void)
{
su_home_t *home;
+ sip_alert_info_t *ai;
+ sip_reply_to_t *rplyto;
+ sip_remote_party_id_t *rpid;
sip_p_asserted_identity_t *paid;
sip_p_preferred_identity_t *ppid;
@@ -115,15 +118,21 @@
"Call-ID: 0ha0isndaksdj(a)10.1.2.3\r\n"
"CSeq: 8 SUBSCRIBE\r\n"
"Via: SIP/2.0/UDP 135.180.130.133\r\n"
+ "Alert-Info: <http://test.com/tune>;walz, <http://test.com/buzz>\r\n"
+ "Reply-To: Arska <sip:arska@gov.ca.us>;humppa\r\n"
"P-Asserted-Identity: <sip:test@test.domain.com>\r\n"
"P-Preferred-Identity: <sip:test@test.domain.com>, <tel:+358708008000>\r\n"
+ "Remote-Party-ID: <sip:test2@test.domain.com>\r\n"
"Content-Length: 0\r\n"
"\r\n");
sip = sip_object(msg);
+ TEST_1(!sip_alert_info(sip));
+ TEST_1(!sip_reply_to(sip));
TEST_1(!sip_p_asserted_identity(sip));
TEST_1(!sip_p_preferred_identity(sip));
+ TEST_1(!sip_remote_party_id(sip));
msg_destroy(msg);
@@ -139,13 +148,22 @@
"Call-ID: 0ha0isndaksdj(a)10.1.2.3\r\n"
"CSeq: 8 SUBSCRIBE\r\n"
"Via: SIP/2.0/UDP 135.180.130.133\r\n"
+ "Alert-Info: <http://test.com/tune>;walz, <http://test.com/buzz>\r\n"
+ "Reply-To: Arska <sip:arska@gov.ca.us>;humppa\r\n"
"P-Asserted-Identity: <sip:test@test.domain.com>\r\n"
"P-Preferred-Identity: <sip:test@test.domain.com>, <tel:+358708008000>\r\n"
+ "Remote-Party-ID: <sip:test2@test.domain.com>\r\n"
"Content-Length: 0\r\n"
"\r\n");
sip = sip_object(msg);
+ TEST_1(!sip_alert_info(sip));
+ TEST_1(!sip_reply_to(sip));
+ TEST_1(sip_p_asserted_identity(sip));
+ TEST_1(sip_p_preferred_identity(sip));
+ TEST_1(!sip_remote_party_id(sip));
+
TEST_1(home = msg_home(msg));
TEST_1((paid = sip_p_asserted_identity_make(home, "sip:joe@example.com")));
@@ -161,6 +179,34 @@
/* Now with extensions */
TEST_1(test_mclass = msg_mclass_clone(def1, 0, 0));
+ msg = read_message(MSG_DO_EXTRACT_COPY,
+ "BYE sip:foo@bar SIP/2.0\r\n"
+ "To: <sip:foo@bar>;tag=deadbeef\r\n"
+ "From: <sip:bar@foo>;\r\n"
+ "Call-ID: 0ha0isndaksdj(a)10.1.2.3\r\n"
+ "CSeq: 8 SUBSCRIBE\r\n"
+ "Via: SIP/2.0/UDP 135.180.130.133\r\n"
+ "Alert-Info: <http://test.com/tune>;walz, <http://test.com/buzz>\r\n"
+ "Reply-To: Arska <sip:arska@gov.ca.us>;humppa\r\n"
+ "P-Asserted-Identity: <sip:test@test.domain.com>\r\n"
+ "P-Preferred-Identity: <sip:test@test.domain.com>, <tel:+358708008000>\r\n"
+ "Remote-Party-ID: <sip:test2@test.domain.com>\r\n"
+ "Content-Length: 0\r\n"
+ "\r\n");
+
+ sip = sip_object(msg);
+
+ TEST_1(ai = sip_alert_info(sip));
+ TEST_S(ai->ai_url->url_host, "test.com");
+ TEST_1(rplyto = sip_reply_to(sip));
+ TEST_S(rplyto->rplyto_url->url_host, "gov.ca.us");
+ TEST_1(paid = sip_p_asserted_identity(sip));
+ TEST_1(ppid = sip_p_preferred_identity(sip));
+ TEST_1(rpid = sip_remote_party_id(sip));
+ TEST_S(rpid->rpid_url->url_host, "test.domain.com");
+
+ msg_destroy(msg);
+
{
su_home_t *home = su_home_clone(NULL, sizeof *home);
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa.c Wed Jan 23 13:37:33 2008
@@ -70,10 +70,6 @@
/* ======================================================================== */
/* Internal prototypes */
-void soa_set_activity(soa_session_t *ss,
- sdp_media_t const *,
- int remote);
-
su_inline int soa_media_is_ready(soa_session_t const *ss);
enum soa_sdp_kind {
@@ -1171,7 +1167,7 @@
if (!new_version)
return 0;
- soa_set_activity(ss, sdp->sdp_media, 1);
+ soa_set_activity(ss, sdp->sdp_media, soa_activity_remote);
ss->ss_remote_version++;
@@ -1454,7 +1450,7 @@
if (!sdp)
return -1;
- soa_set_activity(ss, sdp->sdp_media, 0);
+ soa_set_activity(ss, sdp->sdp_media, soa_activity_local); /* Wanted activity */
ss->ss_offer_sent = 1;
ss->ss_answer_recv = 0;
@@ -1542,8 +1538,7 @@
su_free(ss->ss_home, ss->ss_rsession);
ss->ss_rsession = rsession;
- soa_set_activity(ss, l_sdp->sdp_media, 0);
- soa_set_activity(ss, r_sdp->sdp_media, 1);
+ soa_set_activity(ss, l_sdp->sdp_media, soa_activity_session);
ss->ss_offer_recv = 1;
ss->ss_answer_sent = 1;
@@ -1624,8 +1619,7 @@
su_free(ss->ss_home, ss->ss_rsession);
ss->ss_rsession = rsession;
- soa_set_activity(ss, l_sdp->sdp_media, 0);
- soa_set_activity(ss, r_sdp->sdp_media, 1);
+ soa_set_activity(ss, l_sdp->sdp_media, soa_activity_session);
ss->ss_answer_recv = 1;
ss->ss_complete = 1;
@@ -1692,7 +1686,7 @@
if (!l_sdp)
return -1;
- soa_set_activity(ss, l_sdp->sdp_media, 0);
+ soa_set_activity(ss, l_sdp->sdp_media, soa_activity_session);
ss->ss_offer_sent = 0;
@@ -1783,8 +1777,7 @@
ss->ss_oa_rounds = 0;
soa_description_free(ss, ss->ss_remote);
- soa_set_activity(ss, NULL, 0);
- soa_set_activity(ss, NULL, 1);
+ soa_set_activity(ss, NULL, soa_activity_session);
}
/** Return true if the SDP Offer/Answer negotation is complete.
@@ -1889,56 +1882,75 @@
void soa_set_activity(soa_session_t *ss,
sdp_media_t const *m,
- int remote)
+ enum soa_activity activity)
{
struct soa_media_activity *ma;
sdp_connection_t const *c;
- int mode;
- int ma_audio = SOA_ACTIVE_DISABLED;
- int ma_video = SOA_ACTIVE_DISABLED;
- int ma_chat = SOA_ACTIVE_DISABLED;
- int ma_image = SOA_ACTIVE_DISABLED;
- int *p;
-
- remote = !!remote;
+ int mode, swap;
+ int l_audio = SOA_ACTIVE_DISABLED, r_audio = SOA_ACTIVE_DISABLED;
+ int l_video = SOA_ACTIVE_DISABLED, r_video = SOA_ACTIVE_DISABLED;
+ int l_chat = SOA_ACTIVE_DISABLED, r_chat = SOA_ACTIVE_DISABLED;
+ int l_image = SOA_ACTIVE_DISABLED, r_image = SOA_ACTIVE_DISABLED;
- ma = remote ? ss->ss_remote_activity : ss->ss_local_activity;
+ int *l, *r;
for (; m; m = m->m_next) {
if (m->m_type == sdp_media_audio)
- p = &ma_audio;
+ l = &l_audio, r = &r_audio;
else if (m->m_type == sdp_media_video)
- p = &ma_video;
+ l = &l_video, r = &r_video;
else if (m->m_type == sdp_media_image)
- p = &ma_image;
+ l = &l_image, r = &r_image;
else if (strcasecmp(m->m_type_name, "message") == 0)
- p = &ma_chat;
+ l = &l_chat, r = &r_chat;
else
continue;
if (m->m_rejected) {
- if (*p < 0)
- *p = SOA_ACTIVE_REJECTED;
+ if (*l < 0) *l = SOA_ACTIVE_REJECTED;
+ if (*r < 0) *r = SOA_ACTIVE_REJECTED;
continue;
}
- mode = m->m_mode;
+ mode = m->m_mode, swap = ((mode << 1) & 2) | ((mode >> 1) & 1);
c = sdp_media_connections((sdp_media_t *)m);
- if (remote != (c && c->c_mcast))
- mode = ((mode << 1) & 2) | ((mode >> 1) & 1);
-
- if (*p < 0)
- *p = mode;
- else
- *p |= mode;
+ switch (activity) {
+ case soa_activity_local:
+ *l &= SOA_ACTIVE_SENDRECV;
+ *l |= c && c->c_mcast ? swap : mode;
+ break;
+ case soa_activity_remote:
+ *r &= SOA_ACTIVE_SENDRECV;
+ *r = c && c->c_mcast ? mode : swap;
+ break;
+ case soa_activity_session:
+ *l &= SOA_ACTIVE_SENDRECV;
+ *l |= c && c->c_mcast ? swap : mode;
+ *r &= SOA_ACTIVE_SENDRECV;
+ *r = c && c->c_mcast ? swap : mode;
+ break;
+ }
}
- ma->ma_audio = ma_audio;
- ma->ma_video = ma_video;
- ma->ma_image = ma_image;
- ma->ma_chat = ma_chat;
+ if (activity == soa_activity_local ||
+ activity == soa_activity_session) {
+ ma = ss->ss_local_activity;
+ ma->ma_audio = l_audio;
+ ma->ma_video = l_video;
+ ma->ma_image = l_image;
+ ma->ma_chat = l_chat;
+ }
+
+ if (activity == soa_activity_remote ||
+ activity == soa_activity_session) {
+ ma = ss->ss_remote_activity;
+ ma->ma_audio = r_audio;
+ ma->ma_video = r_video;
+ ma->ma_image = r_image;
+ ma->ma_chat = r_chat;
+ }
}
/* ----------------------------------------------------------------------*/
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa_static.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa_static.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa_static.c Wed Jan 23 13:37:33 2008
@@ -974,58 +974,28 @@
return 0;
}
-/** Check if @a session mode should be changed. */
-static
-int soa_sdp_mode_set_is_needed(sdp_session_t const *session,
- sdp_session_t const *remote,
- char const *hold)
-{
- sdp_media_t const *sm, *rm, *rm_next;
- int hold_all;
- sdp_mode_t recv_mode;
-
- SU_DEBUG_7(("soa_sdp_mode_set_is_needed(%p, %p, \"%s\"): called\n",
- (void *)session, (void *)remote, hold ? hold : ""));
-
- if (!session )
- return 0;
-
- hold_all = str0cmp(hold, "*") == 0;
-
- rm = remote ? remote->sdp_media : NULL, rm_next = NULL;
-
- for (sm = session->sdp_media; sm; sm = sm->m_next, rm = rm_next) {
- rm_next = rm ? rm->m_next : NULL;
-
- if (sm->m_rejected)
- continue;
-
- if (rm) {
- /* Mode bits do not match */
- if (((rm->m_mode & sdp_recvonly) == sdp_recvonly)
- != ((sm->m_mode & sdp_sendonly) == sdp_sendonly))
- return 1;
- }
-
- recv_mode = sm->m_mode & sdp_recvonly;
- if (recv_mode && hold &&
- (hold_all || strcasestr(hold, sm->m_type_name)))
- return 1;
- }
- return 0;
-}
-
-
-/** Update mode within session */
+/** Update mode within session.
+ *
+ * @sa soatag_hold
+ *
+ * @retval 1 if session was changed (or to be changed, if @a dryrun is nonzero)
+ */
static
-int soa_sdp_mode_set(sdp_session_t *session,
+int soa_sdp_mode_set(sdp_session_t const *user,
+ int const *s2u,
+ sdp_session_t *session,
sdp_session_t const *remote,
- char const *hold)
+ char const *hold,
+ int dryrun)
{
sdp_media_t *sm;
- sdp_media_t const *rm, *rm_next;
+ sdp_media_t const *rm, *rm_next, *um;
+ int retval = 0, i, j;
int hold_all;
+ int inactive_all;
+ int inactive = 0;
+ char const *hold_media = NULL;
sdp_mode_t send_mode, recv_mode;
SU_DEBUG_7(("soa_sdp_mode_set(%p, %p, \"%s\"): called\n",
@@ -1037,25 +1007,58 @@
rm = remote ? remote->sdp_media : NULL, rm_next = NULL;
hold_all = str0cmp(hold, "*") == 0;
+ inactive_all = str0cmp(hold, "#") == 0;
+
+ i = 0;
- for (sm = session->sdp_media; sm; sm = sm->m_next, rm = rm_next) {
+ for (sm = session->sdp_media; sm; sm = sm->m_next, rm = rm_next, i++) {
rm_next = rm ? rm->m_next : NULL;
+ inactive = 0;
if (sm->m_rejected)
continue;
- send_mode = sdp_sendonly;
+ assert(s2u);
+
+ for (j = 0, um = user->sdp_media; j != s2u[i]; um = um->m_next, j++)
+ assert(um);
+ assert(um);
+
+ send_mode = um->m_mode & sdp_sendonly;
if (rm)
send_mode = (rm->m_mode & sdp_recvonly) ? sdp_sendonly : 0;
- recv_mode = sm->m_mode & sdp_recvonly;
- if (recv_mode && hold && (hold_all || strcasestr(hold, sm->m_type_name)))
+ recv_mode = um->m_mode & sdp_recvonly;
+
+ if (rm && rm->m_mode == sdp_inactive) {
+ send_mode = recv_mode = 0;
+ }
+ else if (inactive_all) {
+ send_mode = recv_mode = 0;
+ }
+ else if (hold_all) {
recv_mode = 0;
+ }
+ else if (hold && (hold_media = strcasestr(hold, sm->m_type_name))) {
+ recv_mode = 0;
+ hold_media += strlen(sm->m_type_name);
+ hold_media += strspn(hold_media, " \t");
+ if (hold_media[0] == '=') {
+ hold_media += strspn(hold, " \t");
+ if (strncasecmp(hold_media, "inactive", strlen("inactive")) == 0)
+ recv_mode = send_mode = 0;
+ }
+ }
+
+ if (sm->m_mode != (unsigned)(recv_mode | send_mode))
+ retval = 1;
- sm->m_mode = recv_mode | send_mode;
+ if (!dryrun) {
+ sm->m_mode = recv_mode | send_mode;
+ }
}
- return 0;
+ return retval;
}
enum offer_answer_action {
@@ -1213,16 +1216,22 @@
/* Step D: Set media mode bits */
switch (action) {
+ int const *s2u_;
+
case generate_offer:
case generate_answer:
case process_answer:
- if (soa_sdp_mode_set_is_needed(local, remote, ss->ss_hold)) {
+ s2u_ = s2u;
+
+ if (!s2u_) s2u_ = sss->sss_s2u;
+
+ if (soa_sdp_mode_set(user, s2u_, local, remote, ss->ss_hold, 1)) {
if (local != local0) {
*local0 = *local, local = local0;
DUP_LOCAL(local);
}
- soa_sdp_mode_set(local, remote, ss->ss_hold);
+ soa_sdp_mode_set(user, s2u_, local, remote, ss->ss_hold, 0);
}
break;
default:
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa_tag.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa_tag.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/soa_tag.c Wed Jan 23 13:37:33 2008
@@ -585,12 +585,22 @@
/**@def SOATAG_HOLD(x)
*
- * Hold media stream or streams. When putting a SIP session on hold, the
- * application can include, e.g., SOATAG_HOLD("audio") or
- * SOATAG_HOLD("video") or SOATAG_HOLD("audio, video") or SOATAG_HOLD("*")
- * as @soa parameters. When resuming the session, it can include
- * SOATAG_HOLD(NULL). Note that last SOATAG_HOLD() in the tag list will
- * override the SOATAG_HOLD() tags before it.
+ * Hold media stream or streams.
+ *
+ * The hold media stream will have the attribute a=sendonly (meaning that
+ * some hold announcements or pause music is sent to the held party but that
+ * the held party should not generate any media) or a=inactive (meaning that
+ * no media is sent).
+ *
+ * When putting a SIP session on hold with sendonly, the application can
+ * include, e.g., SOATAG_HOLD("audio") or SOATAG_HOLD("video") or
+ * SOATAG_HOLD("audio, video") or SOATAG_HOLD("*") as @soa parameters. When
+ * using inactive instead, the application should use "#" or
+ * "audio=inactive" instead. When resuming the session, application should
+ * include the tag SOATAG_HOLD(NULL).
+ *
+ * Note that last SOATAG_HOLD() in the tag list will override the
+ * SOATAG_HOLD() tags before it.
*
* @par Used with
* soa_set_params(), soa_get_params(), soa_get_paramlist() \n
Modified: 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_session.h (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/sofia-sip/soa_session.h Wed Jan 23 13:37:33 2008
@@ -238,8 +238,11 @@
SOFIAPUBFUN int soa_set_status(soa_session_t *ss,
int status, char const *phrase);
+enum soa_activity { soa_activity_local, soa_activity_remote, soa_activity_session };
+
SOFIAPUBFUN void soa_set_activity(soa_session_t *ss,
- sdp_media_t const *m, int remote);
+ sdp_media_t const *m,
+ enum soa_activity activity);
SOFIAPUBFUN int soa_description_set(soa_session_t *ss,
struct soa_description *ssd,
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/test_soa.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/test_soa.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/soa/test_soa.c Wed Jan 23 13:37:33 2008
@@ -451,20 +451,67 @@
TEST(soa_is_audio_active(a), SOA_ACTIVE_SENDONLY);
TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDONLY);
+ /* 'A' will put call inactive */
+ offer = NONE;
+ TEST(soa_set_params(a, SOATAG_HOLD("#"), TAG_END()), 1);
+
+ TEST(soa_generate_offer(a, 1, test_completed), 0);
+ TEST(soa_get_local_sdp(a, NULL, &offer, &offerlen), 1);
+ TEST_1(offer != NULL && offer != NONE);
+ TEST_1(strstr(offer, "a=inactive"));
+ TEST(soa_set_remote_sdp(b, 0, offer, offerlen), 1);
+ TEST(soa_generate_answer(b, test_completed), 0);
+ TEST_1(soa_is_complete(b));
+ TEST(soa_activate(b, NULL), 0);
+ TEST(soa_get_local_sdp(b, NULL, &answer, &answerlen), 1);
+ TEST_1(answer != NULL && answer != NONE);
+ TEST_1(strstr(answer, "a=inactive"));
+ TEST(soa_set_remote_sdp(a, 0, answer, -1), 1);
+ TEST(soa_process_answer(a, test_completed), 0);
+ TEST(soa_activate(a, NULL), 0);
+
+ TEST(soa_is_audio_active(a), SOA_ACTIVE_INACTIVE);
+ TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_INACTIVE);
+
+ /* B will send an offer to A, but there is no change in O/A status */
+ TEST(soa_generate_offer(b, 1, test_completed), 0);
+ TEST(soa_get_local_sdp(b, NULL, &offer, &offerlen), 1);
+ TEST_1(offer != NULL && offer != NONE);
+ TEST_1(!strstr(offer, "a=inactive"));
+ printf("offer:\n%s", offer);
+ TEST(soa_set_remote_sdp(a, 0, offer, offerlen), 1);
+ TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDRECV);
+ TEST(soa_generate_answer(a, test_completed), 0);
+ TEST(soa_is_audio_active(a), SOA_ACTIVE_INACTIVE);
+ TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_INACTIVE);
+ TEST_1(soa_is_complete(a));
+ TEST(soa_activate(a, NULL), 0);
+ TEST(soa_get_local_sdp(a, NULL, &answer, &answerlen), 1);
+ TEST_1(answer != NULL && answer != NONE);
+ TEST_1(strstr(answer, "a=inactive"));
+ printf("answer:\n%s", answer);
+ TEST(soa_set_remote_sdp(b, 0, answer, -1), 1);
+ TEST(soa_process_answer(b, test_completed), 0);
+ TEST(soa_activate(b, NULL), 0);
+
+
+ TEST(soa_is_audio_active(b), SOA_ACTIVE_INACTIVE);
+ TEST(soa_is_remote_audio_active(b), SOA_ACTIVE_INACTIVE);
+
/* 'A' will release hold. */
TEST(soa_set_params(a, SOATAG_HOLD(NULL), TAG_END()), 1);
TEST(soa_generate_offer(a, 1, test_completed), 0);
TEST(soa_get_local_sdp(a, NULL, &offer, &offerlen), 1);
TEST_1(offer != NULL && offer != NONE);
- TEST_1(!strstr(offer, "a=sendonly"));
+ TEST_1(!strstr(offer, "a=sendonly") && !strstr(offer, "a=inactive"));
TEST(soa_set_remote_sdp(b, 0, offer, offerlen), 1);
TEST(soa_generate_answer(b, test_completed), 0);
TEST_1(soa_is_complete(b));
TEST(soa_activate(b, NULL), 0);
TEST(soa_get_local_sdp(b, NULL, &answer, &answerlen), 1);
TEST_1(answer != NULL && answer != NONE);
- TEST_1(!strstr(answer, "a=recvonly"));
+ TEST_1(!strstr(answer, "a=recvonly") && !strstr(answer, "a=inactive"));
TEST(soa_set_remote_sdp(a, 0, answer, -1), 1);
TEST(soa_process_answer(a, test_completed), 0);
TEST(soa_activate(a, NULL), 0);
@@ -1329,7 +1376,7 @@
{
BEGIN();
-#if 0
+#if 0 /* This has never been implemented */
int n;
char const *caps = NONE, *offer = NONE, *answer = NONE;
Modified: 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.h (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sofia-resolv/sres.h Wed Jan 23 13:37:33 2008
@@ -218,6 +218,16 @@
uint16_t type,
struct sockaddr const *addr);
+/**Modify the priority of the specified SRV records. */
+SRESPUBFUN
+int sres_set_cached_srv_priority(sres_resolver_t *res,
+ char const *domain,
+ char const *target,
+ uint16_t port,
+ uint32_t newttl,
+ uint16_t newprio);
+
+
/** Send a query, wait for answer, return results. */
SRESPUBFUN
int sres_blocking_query(sres_resolver_t *res,
Modified: 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_cache.h (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sofia-resolv/sres_cache.h Wed Jan 23 13:37:33 2008
@@ -102,6 +102,14 @@
/** Store a record to cache */
SRESPUBFUN void sres_cache_store(sres_cache_t *, sres_record_t *, time_t now);
+/** Modify the priority in the specified SRV record */
+SRESPUBFUN int sres_cache_set_srv_priority(sres_cache_t *,
+ char const *domain,
+ char const *target,
+ uint16_t port,
+ uint32_t newttl,
+ uint16_t newprio);
+
#ifdef __cplusplus
}
#endif
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres.c Wed Jan 23 13:37:33 2008
@@ -1347,6 +1347,47 @@
return result;
}
+/** Set the priority of the matching cached SRV record.
+ *
+ * The SRV records with the domain name, target and port are matched and
+ * their priority value is adjusted. This function is used to implement
+ * greylisting of SIP servers.
+ *
+ * @param res pointer to resolver
+ * @param domain domain name of the SRV record(s) to modify
+ * @param target SRV target of the SRV record(s) to modify
+ * @param port port number of SRV record(s) to modify
+ * (in host byte order)
+ * @param ttl new ttl for SRV records of the domain
+ * @param priority new priority value (0=highest, 65535=lowest)
+ *
+ * @sa sres_cache_set_srv_priority()
+ *
+ * @NEW_1_12_8
+ */
+int sres_set_cached_srv_priority(sres_resolver_t *res,
+ char const *domain,
+ char const *target,
+ uint16_t port,
+ uint32_t ttl,
+ uint16_t priority)
+{
+ char rooted_domain[SRES_MAXDNAME];
+
+ if (res == NULL || res->res_cache == NULL)
+ return su_seterrno(EFAULT);
+
+ domain = sres_toplevel(rooted_domain, sizeof rooted_domain, domain);
+
+ if (!domain)
+ return -1;
+
+ return sres_cache_set_srv_priority(res->res_cache,
+ domain, target, port,
+ ttl, priority);
+}
+
+
/** Sort answers. */
int
sres_sort_answers(sres_resolver_t *res, sres_record_t **answers)
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres_cache.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres_cache.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/sresolv/sres_cache.c Wed Jan 23 13:37:33 2008
@@ -471,6 +471,75 @@
}
}
+/** Set the priority of the matching cached SRV record.
+ *
+ * The SRV records with the domain name, target and port are matched and
+ * their priority value is adjusted. This function is used to implement
+ * greylisting of SIP servers.
+ *
+ * @param cache pointer to DNS cache object
+ * @param domain domain name of the SRV record(s) to modify
+ * (including final dot)
+ * @param target SRV target of the SRV record(s) to modify
+ * @param port port number of SRV record(s) to modify
+ * (in host byte order)
+ * @param ttl new ttl
+ * @param priority new priority value (0=highest, 65535=lowest)
+ *
+ * @sa sres_set_cached_srv_priority()
+ *
+ * @NEW_1_12_8
+ */
+int sres_cache_set_srv_priority(sres_cache_t *cache,
+ char const *domain,
+ char const *target,
+ uint16_t port,
+ uint32_t ttl,
+ uint16_t priority)
+{
+ int ret = 0;
+ unsigned hash;
+ sres_rr_hash_entry_t **iter;
+ time_t expires;
+
+ if (cache == NULL || domain == NULL || target == NULL)
+ return -1;
+
+ hash = sres_hash_key(domain);
+
+ if (!LOCK(cache))
+ return -1;
+
+ time(&expires);
+ expires += ttl;
+
+ for (iter = sres_htable_hash(cache->cache_hash, hash);
+ iter && *iter;
+ iter = sres_htable_next(cache->cache_hash, iter)) {
+ sres_record_t *rr = (*iter)->rr;
+
+ if (rr && rr->sr_name &&
+ sres_type_srv == rr->sr_type &&
+ strcasecmp(rr->sr_name, domain) == 0) {
+
+ (*iter)->rr_expires = expires;
+
+ if ((port == 0 || rr->sr_srv->srv_port == port) &&
+ rr->sr_srv->srv_target &&
+ strcasecmp(rr->sr_srv->srv_target, target) == 0) {
+ /* record found --> change priority of server */
+ rr->sr_srv->srv_priority = priority;
+ ret++;
+ }
+ }
+ }
+
+ UNLOCK(cache);
+
+ /** @return number of modified entries or -1 upon an error. */
+ return ret;
+}
+
HTABLE_BODIES_WITH(sres_htable, ht, sres_rr_hash_entry_t, SRES_HENTRY_HASH,
unsigned, size_t);
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/htable2.h
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/htable2.h (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/htable2.h Wed Jan 23 13:37:33 2008
@@ -34,30 +34,29 @@
* always storing a pointer to element). It can be used without
* <sofia-sip/su_alloc.h>.
*
- * This file contain a hash table template for C. The hash tables are
- * resizeable, and they usually contain pointers to entries. The
- * declaration for template datatypes is instantiated with macro
- * HTABLE2_DECLARE(). The prototypes for hashing functions are instantiated
- * with macro HTABLE2_PROTOS(). The implementation is instantiated with
- * macro HTABLE2_BODIES().
+ * This file contain a hash table template for C. The hash tables are
+ * resizeable, and they usually contain pointers to entries. The declaration
+ * for template datatypes is instantiated with macro HTABLE2_DECLARE2(). The
+ * prototypes for hashing functions are instantiated with macro
+ * HTABLE2_PROTOS2(). The implementation is instantiated with macro
+ * HTABLE2_BODIES2().
*
* The hash table template is most efficient when the hash value is
* precalculated and stored in each entry. The hash "function" given to the
- * HTABLE2_BODIES() would then be something like macro
+ * HTABLE2_BODIES2() would then be something like macro
* @code
- * #define HTABLE2_ENTRY_HASH(e) ((e).e_hash_value)
+ * #define ENTRY_HASH(e) ((e).e_hash_value)
* @endcode
*
- * When a entry with new identical hash key is added to the table, it can be
- * either @e inserted (before any other entry with same key value) or
- * @e appended.
+ * When a entry with new identical key is added to the table, it can be
+ * either @e inserted (before any other entry with same key value) or @e
+ * appended.
*
* Example code can be found from <htable_test.c>.
*
* @author Pekka Pessi <Pekka.Pessi(a)nokia.com>.
*
* @date Created: Tue Sep 25 17:42:40 2001 ppessi
- *
*/
typedef unsigned long hash_value_t;
@@ -75,6 +74,8 @@
* @param sname name of struct
* @param pr hash table field prefix
* @param entrytype entry type
+ *
+ * @NEW_1_12_8
*/
#define HTABLE2_DECLARE2(type, sname, pr, entrytype, size_t) \
typedef struct sname { \
@@ -101,6 +102,8 @@
* @param prefix function prefix
* @param pr hash table field prefix (not used)
* @param entrytype entry type
+ *
+ * @NEW_1_12_8
*/
#define HTABLE2_PROTOS2(type, prefix, pr, entrytype, size_t) \
HTABLE2_SCOPE int prefix##_resize(void *a, type *, size_t); \
@@ -131,6 +134,8 @@
* @param reclaim function or macro zeroing entry
* @param is_equal equality test
* @param halloc function allocating or freeing memory
+ *
+ * @NEW_1_12_8
*/
#define HTABLE2_BODIES2(type, prefix, pr, entrytype, size_t, \
hfun, is_used, reclaim, is_equal, halloc) \
Modified: 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_addrinfo.h (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_addrinfo.h Wed Jan 23 13:37:33 2008
@@ -126,7 +126,7 @@
#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
#endif
-/** RFC 1576 address info structure. */
+/** @RFC1576 address info structure. */
typedef struct addrinfo su_addrinfo_t;
/** Translate address and service. */
Modified: 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/su_wait.h (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/sofia-sip/su_wait.h Wed Jan 23 13:37:33 2008
@@ -398,8 +398,8 @@
su_msg_r msg,
su_msg_arg_t *arg);
-/** Message deinitialize. */
-typedef void su_msg_deinit_func(su_msg_arg_t *arg);
+/** Message deinitializer function type. @NEW_1_12_8 */
+typedef void su_msg_deinit_function(su_msg_arg_t *arg);
/** Message delivery function pointer type. */
typedef su_msg_function *su_msg_f;
@@ -529,7 +529,7 @@
su_task_r const to, su_task_r const from,
su_msg_f wakeup, isize_t size);
SOFIAPUBFUN int su_msg_report(su_msg_r msg, su_msg_f report);
-SOFIAPUBFUN int su_msg_deinitializer(su_msg_r msg, su_msg_deinit_func *);
+SOFIAPUBFUN int su_msg_deinitializer(su_msg_r msg, su_msg_deinit_function *);
SOFIAPUBFUN int su_msg_reply(su_msg_r reply, su_msg_cr msg,
su_msg_f wakeup, isize_t size);
SOFIAPUBFUN void su_msg_destroy(su_msg_r msg);
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_addrinfo.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_addrinfo.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_addrinfo.c Wed Jan 23 13:37:33 2008
@@ -893,6 +893,7 @@
{
int retval;
su_addrinfo_t *ai;
+ char const *realservice = service;
if (!service || service[0] == '\0')
service = "0";
@@ -932,6 +933,9 @@
retval = getaddrinfo(node, service, hints, res);
+ if (service != realservice && retval == EAI_SERVICE)
+ retval = getaddrinfo(node, realservice, hints, res);
+
if (retval == 0) {
for (ai = *res; ai; ai = ai->ai_next) {
if (ai->ai_protocol)
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 Wed Jan 23 13:37:33 2008
@@ -1494,7 +1494,10 @@
return 0;
}
-/** Release exclusive lock on home and decrease refcount (if home is threadsafe) */
+/** Release exclusive lock on home and decrease refcount (if home is threadsafe).
+ *
+ * @sa su_home_unlock().
+ */
int su_home_mutex_unlock(su_home_t *home)
{
if (home == NULL)
@@ -1517,8 +1520,14 @@
/** Obtain exclusive lock on home without increasing refcount.
*
+ * Unless su_home_threadsafe() has been used to intialize locking on home
+ * object the function just returns -1.
+ *
* @return 0 if successful, -1 if not threadsafe, error code otherwise.
*
+ * @sa su_home_mutex_lock(), su_home_unlock(), su_home_trylock().
+ *
+ * @NEW_1_12_8
*/
int su_home_lock(su_home_t *home)
{
@@ -1537,6 +1546,9 @@
* @return 0 if successful, -1 if not threadsafe,
* EBUSY if already locked, error code otherwise.
*
+ * @sa su_home_lock(), su_home_unlock().
+ *
+ * @NEW_1_12_8
*/
int su_home_trylock(su_home_t *home)
{
@@ -1550,9 +1562,15 @@
}
-/** Release exclusive lock on home.
+/** Release exclusive lock on home.
+ *
+ * Release lock without decreasing refcount.
*
* @return 0 if successful, -1 if not threadsafe, error code otherwise.
+ *
+ * @sa su_home_lock(), su_home_trylock(), su_home_mutex_unlock().
+ *
+ * @NEW_1_12_8
*/
int su_home_unlock(su_home_t *home)
{
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_global_log.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_global_log.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/su_global_log.c Wed Jan 23 13:37:33 2008
@@ -38,6 +38,7 @@
#include <sofia-sip/su_log.h>
#include <sofia-sip/su_debug.h>
+#ifdef DOXYGEN_ONLY
/**@var SU_DEBUG
*
* Environment variable determining the debug log level for @b su module.
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 Wed Jan 23 13:37:33 2008
@@ -67,7 +67,7 @@
su_task_r sum_from;
su_msg_f sum_func;
su_msg_f sum_report;
- su_msg_deinit_func *sum_deinit;
+ su_msg_deinit_function *sum_deinit;
su_msg_arg_t sum_data[1]; /* minimum size, may be extended */
};
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 Wed Jan 23 13:37:33 2008
@@ -885,6 +885,8 @@
*
* @retval 0 if successful,
* @retval -1 if message allocation fails.
+ *
+ * @NEW_1_12_8
*/
int su_msg_new(su_msg_r rmsg, size_t size)
{
@@ -957,9 +959,11 @@
*
* @param rmsg message reference
* @param deinit pointer to deinitializer function
+ *
+ * @NEW_1_12_8
*/
int su_msg_deinitializer(su_msg_r rmsg,
- su_msg_deinit_func *deinit)
+ su_msg_deinit_function *deinit)
{
if (rmsg && rmsg[0]) {
rmsg[0]->sum_deinit = deinit;
@@ -1156,7 +1160,10 @@
return 0;
}
-/** Send message to the @a to_task and mark @a from_task as sender */
+/** Send message to the @a to_task and mark @a from_task as sender.
+ *
+ * @NEW_1_12_8
+ */
SOFIAPUBFUN int su_msg_send_to(su_msg_r rmsg,
su_task_r const to_task,
su_msg_f wakeup)
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/test_htable2.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/test_htable2.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/test_htable2.c Wed Jan 23 13:37:33 2008
@@ -83,15 +83,15 @@
typedef struct hentry_s entry_t;
-HTABLE2_DECLARE2(htable2_t, htable2_s, ht2_, entry_t, size_t);
-HTABLE2_PROTOS2(htable2_t, htable2, ht2_, entry_t, size_t);
-
struct hentry_s
{
- unsigned long e_hash;
+ hash_value_t e_hash;
unsigned long e_n;
};
+HTABLE2_DECLARE2(htable2_t, htable2_s, ht2_, entry_t, size_t);
+HTABLE2_PROTOS2(htable2_t, htable2, ht2_, entry_t, size_t);
+
#define HENTRY_HASH(e) ((e).e_hash)
#define HENTRY_IS_USED(e) ((e).e_n != 0)
#define HENTRY_REMOVE(e) ((e)->e_n = 0, (e)->e_hash = 0)
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/su/torture_su.c Wed Jan 23 13:37:33 2008
@@ -155,7 +155,7 @@
int test_sendrecv(void)
{
su_socket_t s, l, a;
- int n;
+ ssize_t n;
su_sockaddr_t su, csu;
socklen_t sulen = sizeof su.su_sin, csulen = sizeof csu.su_sin;
char b1[8], b2[8], b3[8];
@@ -172,6 +172,7 @@
BEGIN();
s = su_socket(AF_INET, SOCK_DGRAM, 0); TEST_1(s != -1);
+ su_setblocking(s, 1);
memset(&su, 0, sulen);
su.su_len = sulen;
@@ -209,6 +210,8 @@
TEST(connect(s, &su.su_sa, sulen), 0);
a = accept(l, &csu.su_sa, &csulen); TEST_1(a != -1);
+ TEST(su_setblocking(a, 1), 0);
+
n = su_vsend(s, sv, 3, 0, NULL, 0); TEST(n, 8 + 8 + 6);
n = su_vrecv(a, rv, 3, 0, NULL, NULL); TEST(n, 8 + 8 + 6);
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/test_tport.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/test_tport.c (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/test_tport.c Wed Jan 23 13:37:33 2008
@@ -1009,18 +1009,19 @@
s = su_socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
TEST_1(s != SOCKET_ERROR);
-
+
+ su_setblocking(s, 1);
connected = connect(s, ai->ai_addr, (socklen_t)ai->ai_addrlen);
su_root_step(tt->tt_root, 50);
- TEST(send(s, "F", 1, 0), 1);
+ TEST(su_send(s, "F", 1, 0), 1);
su_root_step(tt->tt_root, 50);
- TEST(send(s, "O", 1, 0), 1);
+ TEST(su_send(s, "O", 1, 0), 1);
su_root_step(tt->tt_root, 50);
- TEST(send(s, "O", 1, 0), 1);
+ TEST(su_send(s, "O", 1, 0), 1);
su_root_step(tt->tt_root, 50);
- TEST(send(s, " ", 1, 0), 1);
+ TEST(su_send(s, " ", 1, 0), 1);
su_root_step(tt->tt_root, 50);
tt->tt_received = 0;
Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_internal.h
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_internal.h (original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/tport/tport_internal.h Wed Jan 23 13:37:33 2008
@@ -371,7 +371,7 @@
int tport_register_type(tport_vtable_t const *vtp);
-/** @internal Test if transport is needs connect() before sending. */
+/** @internal Test if transport needs connect() before sending. */
su_inline int tport_is_connection_oriented(tport_t const *self)
{
return self->tp_conn_orient;
Modified: freeswitch/trunk/libs/sofia-sip/tests/Makefile.am
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/tests/Makefile.am (original)
+++ freeswitch/trunk/libs/sofia-sip/tests/Makefile.am Wed Jan 23 13:37:33 2008
@@ -2,7 +2,7 @@
# Tests using check
#
-EXTRA_DIST = check_nua.c
+EXTRA_DIST = check_sofia.h check_sofia.c suite_for_nua.c
TESTS =
check_PROGRAMS =
Modified: freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua-static/libsofia_sip_ua_static.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua-static/libsofia_sip_ua_static.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua-static/libsofia_sip_ua_static.vcproj Wed Jan 23 13:37:33 2008
@@ -47,10 +47,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/libsofia_sip_ua_static.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\libsofia_sip_ua_static.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -84,7 +84,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/libsofia_sip_ua_static.bsc"
+ OutputFile=".\Debug\libsofia_sip_ua_static.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -127,10 +127,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/libsofia_sip_ua_static.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\libsofia_sip_ua_static.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -163,7 +163,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/libsofia_sip_ua_static.bsc"
+ OutputFile=".\Release\libsofia_sip_ua_static.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua/libsofia_sip_ua.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua/libsofia_sip_ua.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/libsofia-sip-ua/libsofia_sip_ua.vcproj Wed Jan 23 13:37:33 2008
@@ -42,7 +42,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Debug/libsofia_sip_ua.tlb"
+ TypeLibraryName=".\Debug\libsofia_sip_ua.tlb"
HeaderFileName=""
/>
<Tool
@@ -53,10 +53,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/libsofia_sip_ua.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\libsofia_sip_ua.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -79,12 +79,12 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib advapi32.lib iphlpapi.lib"
- OutputFile=".\Debug/libsofia_sip_ua.dll"
+ OutputFile=".\Debug\libsofia_sip_ua.dll"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/libsofia_sip_ua.pdb"
- ImportLibrary=".\Debug/libsofia_sip_ua.lib"
+ ProgramDatabaseFile=".\Debug\libsofia_sip_ua.pdb"
+ ImportLibrary=".\Debug\libsofia_sip_ua.lib"
TargetMachine="1"
/>
<Tool
@@ -99,7 +99,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/libsofia_sip_ua.bsc"
+ OutputFile=".\Debug\libsofia_sip_ua.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -144,7 +144,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Release/libsofia_sip_ua.tlb"
+ TypeLibraryName=".\Release\libsofia_sip_ua.tlb"
HeaderFileName=""
/>
<Tool
@@ -156,10 +156,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/libsofia_sip_ua.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\libsofia_sip_ua.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -181,11 +181,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib advapi32.lib iphlpapi.lib"
- OutputFile=".\Release/libsofia_sip_ua.dll"
+ OutputFile=".\Release\libsofia_sip_ua.dll"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/libsofia_sip_ua.pdb"
- ImportLibrary=".\Release/libsofia_sip_ua.lib"
+ ProgramDatabaseFile=".\Release\libsofia_sip_ua.pdb"
+ ImportLibrary=".\Release\libsofia_sip_ua.lib"
TargetMachine="1"
/>
<Tool
@@ -200,7 +200,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/libsofia_sip_ua.bsc"
+ OutputFile=".\Release\libsofia_sip_ua.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/test_htable/test_htable.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/test_htable/test_htable.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/test_htable/test_htable.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/test_htable.tlb"
+ TypeLibraryName=".\Debug\test_htable.tlb"
HeaderFileName=""
/>
<Tool
@@ -49,10 +49,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/test_htable.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\test_htable.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,11 +74,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/test_htable.exe"
+ OutputFile=".\Debug\test_htable.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/test_htable.pdb"
+ ProgramDatabaseFile=".\Debug\test_htable.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -94,7 +94,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/test_htable.bsc"
+ OutputFile=".\Debug\test_htable.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -133,7 +133,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/test_htable.tlb"
+ TypeLibraryName=".\Release\test_htable.tlb"
HeaderFileName=""
/>
<Tool
@@ -145,10 +145,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/test_htable.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\test_htable.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -169,10 +169,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/test_htable.exe"
+ OutputFile=".\Release\test_htable.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/test_htable.pdb"
+ ProgramDatabaseFile=".\Release\test_htable.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/test_htable.bsc"
+ OutputFile=".\Release\test_htable.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/test_memmem/test_memmem.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/test_memmem/test_memmem.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/test_memmem/test_memmem.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/test_memmem.tlb"
+ TypeLibraryName=".\Debug\test_memmem.tlb"
HeaderFileName=""
/>
<Tool
@@ -49,10 +49,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/test_memmem.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\test_memmem.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -73,11 +73,11 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile=".\Debug/test_memmem.exe"
+ OutputFile=".\Debug\test_memmem.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/test_memmem.pdb"
+ ProgramDatabaseFile=".\Debug\test_memmem.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -93,7 +93,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/test_memmem.bsc"
+ OutputFile=".\Debug\test_memmem.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -132,7 +132,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/test_memmem.tlb"
+ TypeLibraryName=".\Release\test_memmem.tlb"
HeaderFileName=""
/>
<Tool
@@ -144,10 +144,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/test_memmem.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\test_memmem.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -167,10 +167,10 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile=".\Release/test_memmem.exe"
+ OutputFile=".\Release\test_memmem.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/test_memmem.pdb"
+ ProgramDatabaseFile=".\Release\test_memmem.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -186,7 +186,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/test_memmem.bsc"
+ OutputFile=".\Release\test_memmem.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/test_nta/test_nta.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/test_nta/test_nta.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/test_nta/test_nta.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/test_nta.tlb"
+ TypeLibraryName=".\Release\test_nta.tlb"
HeaderFileName=""
/>
<Tool
@@ -50,10 +50,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/test_nta.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\test_nta.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,10 +74,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/test_nta.exe"
+ OutputFile=".\Release\test_nta.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/test_nta.pdb"
+ ProgramDatabaseFile=".\Release\test_nta.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -93,7 +93,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/test_nta.bsc"
+ OutputFile=".\Release\test_nta.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -132,7 +132,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/test_nta.tlb"
+ TypeLibraryName=".\Debug\test_nta.tlb"
HeaderFileName=""
/>
<Tool
@@ -143,10 +143,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/test_nta.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\test_nta.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -168,11 +168,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/test_nta.exe"
+ OutputFile=".\Debug\test_nta.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/test_nta.pdb"
+ ProgramDatabaseFile=".\Debug\test_nta.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/test_nta.bsc"
+ OutputFile=".\Debug\test_nta.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/test_nua/test_nua.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/test_nua/test_nua.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/test_nua/test_nua.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/test_nua.tlb"
+ TypeLibraryName=".\Debug\test_nua.tlb"
HeaderFileName=""
/>
<Tool
@@ -49,10 +49,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/test_nua.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\test_nua.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,11 +74,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/test_nua.exe"
+ OutputFile=".\Debug\test_nua.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/test_nua.pdb"
+ ProgramDatabaseFile=".\Debug\test_nua.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -94,7 +94,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/test_nua.bsc"
+ OutputFile=".\Debug\test_nua.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -133,7 +133,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/test_nua.tlb"
+ TypeLibraryName=".\Release\test_nua.tlb"
HeaderFileName=""
/>
<Tool
@@ -145,10 +145,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/test_nua.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\test_nua.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -169,10 +169,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/test_nua.exe"
+ OutputFile=".\Release\test_nua.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/test_nua.pdb"
+ ProgramDatabaseFile=".\Release\test_nua.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/test_nua.bsc"
+ OutputFile=".\Release\test_nua.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/test_su/test_su.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/test_su/test_su.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/test_su/test_su.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/test_su.tlb"
+ TypeLibraryName=".\Debug\test_su.tlb"
HeaderFileName=""
/>
<Tool
@@ -49,10 +49,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/test_su.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\test_su.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,11 +74,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/test_su.exe"
+ OutputFile=".\Debug\test_su.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/test_su.pdb"
+ ProgramDatabaseFile=".\Debug\test_su.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -94,7 +94,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/test_su.bsc"
+ OutputFile=".\Debug\test_su.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -133,7 +133,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/test_su.tlb"
+ TypeLibraryName=".\Release\test_su.tlb"
HeaderFileName=""
/>
<Tool
@@ -145,10 +145,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/test_su.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\test_su.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -169,10 +169,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/test_su.exe"
+ OutputFile=".\Release\test_su.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/test_su.pdb"
+ ProgramDatabaseFile=".\Release\test_su.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/test_su.bsc"
+ OutputFile=".\Release\test_su.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/test_tport/test_tport.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/test_tport/test_tport.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/test_tport/test_tport.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/test_tport.tlb"
+ TypeLibraryName=".\Debug\test_tport.tlb"
HeaderFileName=""
/>
<Tool
@@ -49,10 +49,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/test_tport.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\test_tport.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -73,11 +73,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/test_tport.exe"
+ OutputFile=".\Debug\test_tport.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/test_tport.pdb"
+ ProgramDatabaseFile=".\Debug\test_tport.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -93,7 +93,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/test_tport.bsc"
+ OutputFile=".\Debug\test_tport.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -132,7 +132,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/test_tport.tlb"
+ TypeLibraryName=".\Release\test_tport.tlb"
HeaderFileName=""
/>
<Tool
@@ -144,10 +144,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/test_tport.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\test_tport.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -167,10 +167,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/test_tport.exe"
+ OutputFile=".\Release\test_tport.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/test_tport.pdb"
+ ProgramDatabaseFile=".\Release\test_tport.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -186,7 +186,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/test_tport.bsc"
+ OutputFile=".\Release\test_tport.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/torture_rbtree/torture_rbtree.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/torture_rbtree/torture_rbtree.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/torture_rbtree/torture_rbtree.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/torture_rbtree.tlb"
+ TypeLibraryName=".\Release\torture_rbtree.tlb"
HeaderFileName=""
/>
<Tool
@@ -50,10 +50,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/torture_rbtree.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\torture_rbtree.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,10 +74,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/torture_rbtree.exe"
+ OutputFile=".\Release\torture_rbtree.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/torture_rbtree.pdb"
+ ProgramDatabaseFile=".\Release\torture_rbtree.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -93,7 +93,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/torture_rbtree.bsc"
+ OutputFile=".\Release\torture_rbtree.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -132,7 +132,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/torture_rbtree.tlb"
+ TypeLibraryName=".\Debug\torture_rbtree.tlb"
HeaderFileName=""
/>
<Tool
@@ -143,10 +143,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/torture_rbtree.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\torture_rbtree.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -168,11 +168,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/torture_rbtree.exe"
+ OutputFile=".\Debug\torture_rbtree.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/torture_rbtree.pdb"
+ ProgramDatabaseFile=".\Debug\torture_rbtree.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/torture_rbtree.bsc"
+ OutputFile=".\Debug\torture_rbtree.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su/torture_su.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su/torture_su.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su/torture_su.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/torture_su.tlb"
+ TypeLibraryName=".\Release\torture_su.tlb"
HeaderFileName=""
/>
<Tool
@@ -50,10 +50,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/torture_su.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\torture_su.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,10 +74,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/torture_su.exe"
+ OutputFile=".\Release\torture_su.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/torture_su.pdb"
+ ProgramDatabaseFile=".\Release\torture_su.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -93,7 +93,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/torture_su.bsc"
+ OutputFile=".\Release\torture_su.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -132,7 +132,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/torture_su.tlb"
+ TypeLibraryName=".\Debug\torture_su.tlb"
HeaderFileName=""
/>
<Tool
@@ -143,10 +143,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/torture_su.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\torture_su.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -168,11 +168,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/torture_su.exe"
+ OutputFile=".\Debug\torture_su.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/torture_su.pdb"
+ ProgramDatabaseFile=".\Debug\torture_su.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/torture_su.bsc"
+ OutputFile=".\Debug\torture_su.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_alloc/torture_su_alloc.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_alloc/torture_su_alloc.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_alloc/torture_su_alloc.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/torture_su_alloc.tlb"
+ TypeLibraryName=".\Release\torture_su_alloc.tlb"
HeaderFileName=""
/>
<Tool
@@ -50,10 +50,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/torture_su_alloc.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\torture_su_alloc.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,10 +74,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/torture_su_alloc.exe"
+ OutputFile=".\Release\torture_su_alloc.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/torture_su_alloc.pdb"
+ ProgramDatabaseFile=".\Release\torture_su_alloc.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -93,7 +93,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/torture_su_alloc.bsc"
+ OutputFile=".\Release\torture_su_alloc.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -132,7 +132,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/torture_su_alloc.tlb"
+ TypeLibraryName=".\Debug\torture_su_alloc.tlb"
HeaderFileName=""
/>
<Tool
@@ -143,10 +143,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/torture_su_alloc.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\torture_su_alloc.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -168,11 +168,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/torture_su_alloc.exe"
+ OutputFile=".\Debug\torture_su_alloc.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/torture_su_alloc.pdb"
+ ProgramDatabaseFile=".\Debug\torture_su_alloc.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/torture_su_alloc.bsc"
+ OutputFile=".\Debug\torture_su_alloc.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_bm/torture_su_bm.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_bm/torture_su_bm.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_bm/torture_su_bm.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/torture_su_bm.tlb"
+ TypeLibraryName=".\Debug\torture_su_bm.tlb"
HeaderFileName=""
/>
<Tool
@@ -49,10 +49,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/torture_su_bm.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\torture_su_bm.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,11 +74,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/torture_su_bm.exe"
+ OutputFile=".\Debug\torture_su_bm.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/torture_su_bm.pdb"
+ ProgramDatabaseFile=".\Debug\torture_su_bm.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -94,7 +94,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/torture_su_bm.bsc"
+ OutputFile=".\Debug\torture_su_bm.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -133,7 +133,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/torture_su_bm.tlb"
+ TypeLibraryName=".\Release\torture_su_bm.tlb"
HeaderFileName=""
/>
<Tool
@@ -145,10 +145,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/torture_su_bm.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\torture_su_bm.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -169,10 +169,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/torture_su_bm.exe"
+ OutputFile=".\Release\torture_su_bm.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/torture_su_bm.pdb"
+ ProgramDatabaseFile=".\Release\torture_su_bm.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/torture_su_bm.bsc"
+ OutputFile=".\Release\torture_su_bm.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_port/torture_su_port.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_port/torture_su_port.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_port/torture_su_port.vcproj Wed Jan 23 13:37:33 2008
@@ -37,7 +37,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/torture_su_port.tlb"
+ TypeLibraryName=".\Release\torture_su_port.tlb"
HeaderFileName=""
/>
<Tool
@@ -49,10 +49,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/torture_su_port.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\torture_su_port.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="3"
WarnAsError="true"
@@ -72,10 +72,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/torture_su_port.exe"
+ OutputFile=".\Release\torture_su_port.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/torture_su_port.pdb"
+ ProgramDatabaseFile=".\Release\torture_su_port.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -91,7 +91,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/torture_su_port.bsc"
+ OutputFile=".\Release\torture_su_port.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -130,7 +130,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/torture_su_port.tlb"
+ TypeLibraryName=".\Debug\torture_su_port.tlb"
HeaderFileName=""
/>
<Tool
@@ -141,10 +141,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/torture_su_port.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\torture_su_port.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="3"
WarnAsError="true"
@@ -165,11 +165,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/torture_su_port.exe"
+ OutputFile=".\Debug\torture_su_port.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/torture_su_port.pdb"
+ ProgramDatabaseFile=".\Debug\torture_su_port.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -185,7 +185,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/torture_su_port.bsc"
+ OutputFile=".\Debug\torture_su_port.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_root/torture_su_root.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_root/torture_su_root.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_root/torture_su_root.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/torture_su_root.tlb"
+ TypeLibraryName=".\Debug\torture_su_root.tlb"
HeaderFileName=""
/>
<Tool
@@ -49,10 +49,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/torture_su_root.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\torture_su_root.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,11 +74,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/torture_su_root.exe"
+ OutputFile=".\Debug\torture_su_root.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/torture_su_root.pdb"
+ ProgramDatabaseFile=".\Debug\torture_su_root.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -94,7 +94,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/torture_su_root.bsc"
+ OutputFile=".\Debug\torture_su_root.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -133,7 +133,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/torture_su_root.tlb"
+ TypeLibraryName=".\Release\torture_su_root.tlb"
HeaderFileName=""
/>
<Tool
@@ -145,10 +145,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/torture_su_root.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\torture_su_root.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -169,10 +169,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/torture_su_root.exe"
+ OutputFile=".\Release\torture_su_root.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/torture_su_root.pdb"
+ ProgramDatabaseFile=".\Release\torture_su_root.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/torture_su_root.bsc"
+ OutputFile=".\Release\torture_su_root.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_tag/torture_su_tag.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_tag/torture_su_tag.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_tag/torture_su_tag.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/torture_su_tag.tlb"
+ TypeLibraryName=".\Debug\torture_su_tag.tlb"
HeaderFileName=""
/>
<Tool
@@ -49,10 +49,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/torture_su_tag.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\torture_su_tag.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,11 +74,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/torture_su_tag.exe"
+ OutputFile=".\Debug\torture_su_tag.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/torture_su_tag.pdb"
+ ProgramDatabaseFile=".\Debug\torture_su_tag.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -94,7 +94,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/torture_su_tag.bsc"
+ OutputFile=".\Debug\torture_su_tag.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -133,7 +133,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/torture_su_tag.tlb"
+ TypeLibraryName=".\Release\torture_su_tag.tlb"
HeaderFileName=""
/>
<Tool
@@ -145,10 +145,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/torture_su_tag.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\torture_su_tag.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -169,10 +169,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/torture_su_tag.exe"
+ OutputFile=".\Release\torture_su_tag.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/torture_su_tag.pdb"
+ ProgramDatabaseFile=".\Release\torture_su_tag.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/torture_su_tag.bsc"
+ OutputFile=".\Release\torture_su_tag.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_time/torture_su_time.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_time/torture_su_time.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_time/torture_su_time.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/torture_su_time.tlb"
+ TypeLibraryName=".\Release\torture_su_time.tlb"
HeaderFileName=""
/>
<Tool
@@ -50,10 +50,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/torture_su_time.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\torture_su_time.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,10 +74,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/torture_su_time.exe"
+ OutputFile=".\Release\torture_su_time.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/torture_su_time.pdb"
+ ProgramDatabaseFile=".\Release\torture_su_time.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -93,7 +93,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/torture_su_time.bsc"
+ OutputFile=".\Release\torture_su_time.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -132,7 +132,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/torture_su_time.tlb"
+ TypeLibraryName=".\Debug\torture_su_time.tlb"
HeaderFileName=""
/>
<Tool
@@ -143,10 +143,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/torture_su_time.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\torture_su_time.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -168,11 +168,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/torture_su_time.exe"
+ OutputFile=".\Debug\torture_su_time.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/torture_su_time.pdb"
+ ProgramDatabaseFile=".\Debug\torture_su_time.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/torture_su_time.bsc"
+ OutputFile=".\Debug\torture_su_time.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_timer/torture_su_timer.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_timer/torture_su_timer.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/tests/torture_su_timer/torture_su_timer.vcproj Wed Jan 23 13:37:33 2008
@@ -38,7 +38,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Debug/torture_su_timer.tlb"
+ TypeLibraryName=".\Debug\torture_su_timer.tlb"
HeaderFileName=""
/>
<Tool
@@ -49,10 +49,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/torture_su_timer.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\torture_su_timer.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -74,11 +74,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/torture_su_timer.exe"
+ OutputFile=".\Debug\torture_su_timer.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/torture_su_timer.pdb"
+ ProgramDatabaseFile=".\Debug\torture_su_timer.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -94,7 +94,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/torture_su_timer.bsc"
+ OutputFile=".\Debug\torture_su_timer.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -133,7 +133,7 @@
/>
<Tool
Name="VCMIDLTool"
- TypeLibraryName=".\Release/torture_su_timer.tlb"
+ TypeLibraryName=".\Release\torture_su_timer.tlb"
HeaderFileName=""
/>
<Tool
@@ -145,10 +145,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/torture_su_timer.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\torture_su_timer.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
BrowseInformation="1"
WarningLevel="4"
WarnAsError="true"
@@ -169,10 +169,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/torture_su_timer.exe"
+ OutputFile=".\Release\torture_su_timer.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/torture_su_timer.pdb"
+ ProgramDatabaseFile=".\Release\torture_su_timer.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -188,7 +188,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/torture_su_timer.bsc"
+ OutputFile=".\Release\torture_su_timer.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/utils/localinfo/localinfo.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/utils/localinfo/localinfo.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/utils/localinfo/localinfo.vcproj Wed Jan 23 13:37:33 2008
@@ -42,7 +42,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Debug/localinfo.tlb"
+ TypeLibraryName=".\Debug\localinfo.tlb"
HeaderFileName=""
/>
<Tool
@@ -53,10 +53,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
- PrecompiledHeaderFile=".\Debug/localinfo.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\localinfo.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -78,11 +78,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/localinfo.exe"
+ OutputFile=".\Debug\localinfo.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/localinfo.pdb"
+ ProgramDatabaseFile=".\Debug\localinfo.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -98,7 +98,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/localinfo.bsc"
+ OutputFile=".\Debug\localinfo.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -141,7 +141,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Release/localinfo.tlb"
+ TypeLibraryName=".\Release\localinfo.tlb"
HeaderFileName=""
/>
<Tool
@@ -153,10 +153,10 @@
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/localinfo.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\localinfo.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -177,10 +177,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/localinfo.exe"
+ OutputFile=".\Release\localinfo.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/localinfo.pdb"
+ ProgramDatabaseFile=".\Release\localinfo.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -196,7 +196,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/localinfo.bsc"
+ OutputFile=".\Release\localinfo.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/utils/sip_dig/sip_dig.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/utils/sip_dig/sip_dig.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/utils/sip_dig/sip_dig.vcproj Wed Jan 23 13:37:33 2008
@@ -42,7 +42,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Release/sip_dig.tlb"
+ TypeLibraryName=".\Release\sip_dig.tlb"
HeaderFileName=""
/>
<Tool
@@ -54,10 +54,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/sip_dig.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\sip_dig.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -77,10 +77,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/sip_dig.exe"
+ OutputFile=".\Release\sip_dig.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/sip_dig.pdb"
+ ProgramDatabaseFile=".\Release\sip_dig.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -96,7 +96,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/sip_dig.bsc"
+ OutputFile=".\Release\sip_dig.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -139,7 +139,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Debug/sip_dig.tlb"
+ TypeLibraryName=".\Debug\sip_dig.tlb"
HeaderFileName=""
/>
<Tool
@@ -150,10 +150,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/sip_dig.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\sip_dig.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -174,11 +174,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/sip_dig.exe"
+ OutputFile=".\Debug\sip_dig.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/sip_dig.pdb"
+ ProgramDatabaseFile=".\Debug\sip_dig.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -194,7 +194,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/sip_dig.bsc"
+ OutputFile=".\Debug\sip_dig.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/utils/sip_options/sip_options.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/utils/sip_options/sip_options.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/utils/sip_options/sip_options.vcproj Wed Jan 23 13:37:33 2008
@@ -42,7 +42,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Release/sip_options.tlb"
+ TypeLibraryName=".\Release\sip_options.tlb"
HeaderFileName=""
/>
<Tool
@@ -54,10 +54,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/sip_options.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\sip_options.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -77,10 +77,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/sip_options.exe"
+ OutputFile=".\Release\sip_options.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/sip_options.pdb"
+ ProgramDatabaseFile=".\Release\sip_options.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -96,7 +96,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/sip_options.bsc"
+ OutputFile=".\Release\sip_options.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -139,7 +139,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Debug/sip_options.tlb"
+ TypeLibraryName=".\Debug\sip_options.tlb"
HeaderFileName=""
/>
<Tool
@@ -150,10 +150,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/sip_options.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\sip_options.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -174,11 +174,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/sip_options.exe"
+ OutputFile=".\Debug\sip_options.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/sip_options.pdb"
+ ProgramDatabaseFile=".\Debug\sip_options.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -194,7 +194,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/sip_options.bsc"
+ OutputFile=".\Debug\sip_options.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/utils/sip_options_static/sip_options_static.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/utils/sip_options_static/sip_options_static.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/utils/sip_options_static/sip_options_static.vcproj Wed Jan 23 13:37:33 2008
@@ -42,7 +42,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Release/sip_options_static.tlb"
+ TypeLibraryName=".\Release\sip_options_static.tlb"
HeaderFileName=""
/>
<Tool
@@ -54,10 +54,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/sip_options_static.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\sip_options_static.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -77,10 +77,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib advapi32.lib iphlpapi.lib"
- OutputFile=".\Release/sip_options_static.exe"
+ OutputFile=".\Release\sip_options_static.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/sip_options_static.pdb"
+ ProgramDatabaseFile=".\Release\sip_options_static.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -96,7 +96,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/sip_options_static.bsc"
+ OutputFile=".\Release\sip_options_static.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -139,7 +139,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Debug/sip_options_static.tlb"
+ TypeLibraryName=".\Debug\sip_options_static.tlb"
HeaderFileName=""
/>
<Tool
@@ -150,10 +150,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/sip_options_static.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\sip_options_static.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -174,11 +174,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib advapi32.lib iphlpapi.lib"
- OutputFile=".\Debug/sip_options_static.exe"
+ OutputFile=".\Debug\sip_options_static.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/sip_options_static.pdb"
+ ProgramDatabaseFile=".\Debug\sip_options_static.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -194,7 +194,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/sip_options_static.bsc"
+ OutputFile=".\Debug\sip_options_static.bsc"
/>
<Tool
Name="VCFxCopTool"
Modified: freeswitch/trunk/libs/sofia-sip/win32/utils/stunc/stunc.vcproj
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/win32/utils/stunc/stunc.vcproj (original)
+++ freeswitch/trunk/libs/sofia-sip/win32/utils/stunc/stunc.vcproj Wed Jan 23 13:37:33 2008
@@ -42,7 +42,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Debug/stunc.tlb"
+ TypeLibraryName=".\Debug\stunc.tlb"
HeaderFileName=""
/>
<Tool
@@ -53,10 +53,10 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- PrecompiledHeaderFile=".\Debug/stunc.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
+ PrecompiledHeaderFile=".\Debug\stunc.pch"
+ AssemblerListingLocation=".\Debug\"
+ ObjectFile=".\Debug\"
+ ProgramDataBaseFileName=".\Debug\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -77,11 +77,11 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Debug/stunc.exe"
+ OutputFile=".\Debug\stunc.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
- ProgramDatabaseFile=".\Debug/stunc.pdb"
+ ProgramDatabaseFile=".\Debug\stunc.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -97,7 +97,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Debug/stunc.bsc"
+ OutputFile=".\Debug\stunc.bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -140,7 +140,7 @@
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
- TypeLibraryName=".\Release/stunc.tlb"
+ TypeLibraryName=".\Release\stunc.tlb"
HeaderFileName=""
/>
<Tool
@@ -152,10 +152,10 @@
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/stunc.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
+ PrecompiledHeaderFile=".\Release\stunc.pch"
+ AssemblerListingLocation=".\Release\"
+ ObjectFile=".\Release\"
+ ProgramDataBaseFileName=".\Release\"
WarningLevel="4"
WarnAsError="true"
SuppressStartupBanner="true"
@@ -175,10 +175,10 @@
<Tool
Name="VCLinkerTool"
AdditionalDependencies="ws2_32.lib"
- OutputFile=".\Release/stunc.exe"
+ OutputFile=".\Release\stunc.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
- ProgramDatabaseFile=".\Release/stunc.pdb"
+ ProgramDatabaseFile=".\Release\stunc.pdb"
SubSystem="1"
TargetMachine="1"
/>
@@ -194,7 +194,7 @@
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
- OutputFile=".\Release/stunc.bsc"
+ OutputFile=".\Release\stunc.bsc"
/>
<Tool
Name="VCFxCopTool"
1
0
[commit] r7327 - in freeswitch/branches/anthonyl/spidermonkey-stuff/src/mod/languages: mod_spidermonkey_directory mod_spidermonkey_openssl
by Freeswitch SVN 23 Jan '08
by Freeswitch SVN 23 Jan '08
23 Jan '08
Author: anthonyl
Date: Wed Jan 23 13:30:20 2008
New Revision: 7327
Added:
freeswitch/branches/anthonyl/spidermonkey-stuff/src/mod/languages/mod_spidermonkey_directory/
freeswitch/branches/anthonyl/spidermonkey-stuff/src/mod/languages/mod_spidermonkey_openssl/
Log:
...
1
0