static apt_bool_t mrcp_sofia_session_create(mrcp_session_t *session) { mrcp_sofia_agent_t *sofia_agent = session->signaling_agent->obj; mrcp_sofia_session_t *sofia_session; session->request_vtable = &session_request_vtable; sofia_session = apr_palloc(session->pool,sizeof(mrcp_sofia_session_t)); sofia_session->home = su_home_new(sizeof(*sofia_session->home)); sofia_session->session = session; sofia_session->terminate_requested = FALSE; session->obj = sofia_session; sofia_session->nh = nua_handle( sofia_agent->nua, sofia_session, SIPTAG_TO_STR(sofia_agent->sip_to_str), SIPTAG_FROM_STR(sofia_agent->sip_from_str), SIPTAG_CONTACT_STR(sofia_agent->sip_contact_str), TAG_END()); return TRUE; }
static apt_bool_t mrcp_sofia_session_create(mrcp_session_t *session, mrcp_sig_settings_t *settings) { mrcp_sofia_agent_t *sofia_agent = mrcp_sofia_agent_get(session); mrcp_sofia_session_t *sofia_session; session->request_vtable = &session_request_vtable; sofia_session = apr_palloc(session->pool,sizeof(mrcp_sofia_session_t)); sofia_session->mutex = NULL; sofia_session->home = su_home_new(sizeof(*sofia_session->home)); sofia_session->session = session; sofia_session->sip_settings = settings; sofia_session->terminate_requested = FALSE; session->obj = sofia_session; if(settings->user_name && settings->user_name != '\0') { sofia_session->sip_to_str = apr_psprintf(session->pool,"sip:%s@%s:%hu", settings->user_name, settings->server_ip, settings->server_port); } else { sofia_session->sip_to_str = apr_psprintf(session->pool,"sip:%s:%hu", settings->server_ip, settings->server_port); } sofia_session->nh = nua_handle( sofia_agent->nua, sofia_session, SIPTAG_TO_STR(sofia_session->sip_to_str), SIPTAG_FROM_STR(sofia_agent->sip_from_str), SIPTAG_CONTACT_STR(sofia_agent->sip_contact_str), TAG_END()); apr_thread_mutex_create(&sofia_session->mutex,APR_THREAD_MUTEX_DEFAULT,session->pool); return TRUE; }
END_TEST START_TEST(client_2_0_2) { nta_outgoing_t *orq; struct message *request; struct event *response; char payload[2048]; S2_CASE("client-2.0.2", "Send MESSAGE", "Basic non-INVITE transaction exceeding " "default path MTU (1300 bytes)"); memset(payload, 'x', sizeof payload); payload[(sizeof payload) - 1] = '\0'; orq = nta_outgoing_tcreate(s2->default_leg, s2_nta_orq_callback, NULL, NULL, SIP_METHOD_MESSAGE, URL_STRING_MAKE("sip:test2.0.example.org"), SIPTAG_FROM_STR("<sip:[email protected]>"), SIPTAG_PAYLOAD_STR(payload), 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, "OK 2.0.2", TAG_END()); response = s2_nta_wait_for(wait_for_orq, orq, wait_for_status, 200, 0); s2_nta_free_event(response); nta_outgoing_destroy(orq); }
END_TEST START_TEST(client_2_1_2) { nta_outgoing_t *orq; struct message *request; struct event *response; url_t udpurl[1]; S2_CASE("client-2.1.2", "Send MESSAGE", "Non-INVITE transaction to TCP-only server"); client_setup_tcp_only_server(); *udpurl = *s2sip->tcp.contact->m_url; udpurl->url_params = "transport=udp"; /* Create DNS records for both UDP and TCP, resolver matches UDP */ s2_dns_domain("udptcp.org", 1, "s2", 1, udpurl, "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"), SIP_METHOD_MESSAGE, URL_STRING_MAKE("sip:test2.0.example.org"), SIPTAG_FROM_STR("<sip:[email protected]>"), 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:[email protected]>"), #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, wait_for_status, 200, 0); s2_nta_free_event(response); nta_outgoing_destroy(orq); }