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;
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}