[commit] r10826 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nta
Author: mikej Date: Tue Dec 16 15:34:00 2008 New Revision: 10826 Log: Mon Dec 15 08:31:45 CST 2008 Stas Maximov <smaximov@ieee.org> * nta: NULL host and port in user Via are filled automaticaly NULL host or port in user-supplied Via header will be filled automaticaly by NTA, just like branch and rport params. Added related test case to test_nta_api.c. Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Tue Dec 16 15:34:00 2008 @@ -1 +1 @@ -Tue Dec 16 14:28:36 CST 2008 +Tue Dec 16 14:33:26 CST 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/nta.c Tue Dec 16 15:34:00 2008 @@ -2550,12 +2550,12 @@ clear = 1, v->v_protocol = via->v_protocol; /* XXX - should we do this? */ - if (!user_via && + if ((!user_via || !v->v_host) && via->v_host != v->v_host && str0cmp(via->v_host, v->v_host)) clear = 1, v->v_host = via->v_host; - if ((!user_via || + if ((!user_via || !v->v_port || /* Replace port in user Via only if we use udp and no rport */ (v->v_protocol == sip_transport_udp && !v->v_rport && !orq->orq_stateless)) && Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/test_nta_api.c Tue Dec 16 15:34:00 2008 @@ -865,6 +865,90 @@ } +/* Test that NULL host and/or port fields of user supplied Via header are + filled in automaticaly */ +int api_test_user_via_fillin(agent_t *ag) +{ + su_home_t home[1]; + su_root_t *root; + nta_agent_t *nta; + nta_leg_t *leg; + nta_outgoing_t *orq0, *orq1; + msg_t *msg0, *msg1; + sip_t *sip0, *sip1; + sip_via_t *via0, *via1; + sip_via_t via[1]; + static char *via_params[] = { "param1=value1", "param2=value2" }; + int i; + + BEGIN(); + + memset(home, 0, sizeof home); + su_home_init(home); + + TEST_1(root = su_root_create(NULL)); + + TEST_1(nta = nta_agent_create(root, + (url_string_t *)"sip:*:*", + NULL, + NULL, + TAG_END())); + TEST_1(leg = nta_leg_tcreate(nta, NULL, NULL, + NTATAG_NO_DIALOG(1), + TAG_END())); + + /* This creates a delayed response message */ + orq0 = nta_outgoing_tcreate(leg, outgoing_callback, ag, NULL, + SIP_METHOD_MESSAGE, + URL_STRING_MAKE("sip:foo.bar;transport=none"), + SIPTAG_FROM_STR("<sip:bar.foo>"), + SIPTAG_TO_STR("<sip:foo.bar>"), + TAG_END()); + TEST_1(orq0); + TEST_1(msg0 = nta_outgoing_getrequest(orq0)); + TEST_1(sip0 = sip_object(msg0)); + TEST_1(via0 = sip0->sip_via); + + /* create user Via template to be filled in by NTA */ + sip_via_init(via); + via->v_protocol = "*"; + for (i = 0; i < sizeof(via_params)/sizeof(via_params[0]); i++) + sip_via_add_param(home,via,via_params[i]); /* add param to the template */ + + /* This creates a delayed response message */ + orq1 = nta_outgoing_tcreate(leg, outgoing_callback, ag, NULL, + SIP_METHOD_MESSAGE, + URL_STRING_MAKE("sip:foo.bar;transport=none"), + SIPTAG_FROM_STR("<sip:bar.foo>"), + SIPTAG_TO_STR("<sip:foo.bar>"), + NTATAG_USER_VIA(1), + SIPTAG_VIA(via), + TAG_END()); + TEST_1(orq1); + TEST_1(msg1 = nta_outgoing_getrequest(orq1)); + TEST_1(sip1 = sip_object(msg1)); + TEST_1(via1 = sip1->sip_via); + + /* check that template has been filled correctly */ + TEST_S(via0->v_protocol,via1->v_protocol); + TEST_S(via0->v_host,via1->v_host); + TEST_S(via0->v_port,via1->v_port); + /* check that the parameter has been preserved */ + for (i = 0; i < sizeof(via_params)/sizeof(via_params[0]); i++) + TEST_S(via1->v_params[i],via_params[i]); + + TEST_VOID(nta_outgoing_destroy(orq0)); + TEST_VOID(nta_outgoing_destroy(orq1)); + TEST_VOID(nta_leg_destroy(leg)); + TEST_VOID(nta_agent_destroy(nta)); + + TEST_VOID(su_root_destroy(root)); + TEST_VOID(su_home_deinit(home)); + + END(); +} + + int outgoing_default(agent_t *ag, nta_outgoing_t *orq, sip_t const *sip) @@ -1426,6 +1510,7 @@ retval |= api_test_tport(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_dialogs(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_default(ag); SINGLE_FAILURE_CHECK(); + retval |= api_test_user_via_fillin(ag); SINGLE_FAILURE_CHECK(); } retval |= api_test_deinit(ag); fflush(stdout);
participants (1)
-
FreeSWITCH SVN