Revision
14183
Author
mikej
Date
2009-07-09 19:44:40 -0500 (Thu, 09 Jul 2009)

Log Message

Tue Jul  7 15:33:55 CDT 2009  Pekka Pessi <first.last@nokia.com>
  * check_nta_client.c: check that nta tries to use TCP even if NAPTR points to UDP

Modified Paths

Diff

Modified: freeswitch/trunk/libs/sofia-sip/.update (14182 => 14183)


--- freeswitch/trunk/libs/sofia-sip/.update	2009-07-10 00:43:59 UTC (rev 14182)
+++ freeswitch/trunk/libs/sofia-sip/.update	2009-07-10 00:44:40 UTC (rev 14183)
@@ -1 +1 @@
-Thu Jul  9 19:42:19 CDT 2009
+Thu Jul  9 19:42:57 CDT 2009

Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/check_nta_client.c (14182 => 14183)


--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/check_nta_client.c	2009-07-10 00:43:59 UTC (rev 14182)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nta/check_nta_client.c	2009-07-10 00:44:40 UTC (rev 14183)
@@ -345,12 +345,13 @@
   *udpurl = *s2sip->tcp.contact->m_url;
   udpurl->url_params = "transport=udp";
 
-  /* Create DNS records for both UDP and TCP */
+  /* Create DNS records for both UDP and TCP, resolver matches UDP */
   s2_dns_domain("udptcp.org", 1,
 		"s2", 1, udpurl,
-		"s2", 1, s2sip->tcp.contact->m_url,
+		"s2", 2, s2sip->tcp.contact->m_url,
 		NULL);
 
+  /* Sent to tport selected by resolver */
   orq = nta_outgoing_tcreate(s2->default_leg,
 			     s2_nta_orq_callback, NULL,
 			     URL_STRING_MAKE("sip:udptcp.org"),
@@ -359,8 +360,41 @@
 			     SIPTAG_FROM_STR("<sip:client@example.net>"),
 			     TAG_END());
   fail_unless(orq != NULL);
+  response = s2_nta_wait_for(wait_for_orq, orq,
+			     wait_for_status, 503,
+			     0);
+  s2_nta_free_event(response);
+  nta_outgoing_destroy(orq);
+
+  /* Message size exceeds 1300, tries to use TCP even if NAPTR points to UDP */
+  orq = nta_outgoing_tcreate(s2->default_leg,
+			     s2_nta_orq_callback, NULL,
+			     URL_STRING_MAKE("sip:udptcp.org"),
+			     SIP_METHOD_MESSAGE,
+			     URL_STRING_MAKE("sip:test2.0.example.org"),
+			     SIPTAG_FROM_STR("<sip:client@example.net>"),
+#define ROW "012345678901234567890123456789012345678901234\n"
+			     SIPTAG_PAYLOAD_STR( /* > 1300 bytes */
+       	       	       	       "0000 " ROW "0050 " ROW
+			       "0100 " ROW "0150 " ROW
+			       "0200 " ROW "0250 " ROW
+			       "0300 " ROW "0350 " ROW
+			       "0400 " ROW "0450 " ROW
+			       "0500 " ROW "0550 " ROW
+			       "0600 " ROW "0650 " ROW
+			       "0700 " ROW "0750 " ROW
+			       "0800 " ROW "0850 " ROW
+			       "0900 " ROW "0950 " ROW
+			       "1000 " ROW "1050 " ROW
+			       "1100 " ROW "1150 " ROW
+       	       	       	       "1200 " ROW "1250 " ROW
+						 ),
+#undef ROW
+			     TAG_END());
+  fail_unless(orq != NULL);
   request = s2_sip_wait_for_request(SIP_METHOD_MESSAGE);
   fail_unless(request != NULL);
+  fail_unless(request->sip->sip_via->v_protocol == sip_transport_tcp);
   s2_sip_respond_to(request, NULL, 200, "2.1.2", TAG_END());
   s2_sip_free_message(request);
   response = s2_nta_wait_for(wait_for_orq, orq,