static apt_bool_t mrcp_sofia_session_offer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor) { char sdp_str[2048]; char *local_sdp_str = NULL; mrcp_sofia_session_t *sofia_session = session->obj; if(!sofia_session || !sofia_session->nh) { return FALSE; } if(session->signaling_agent) { mrcp_sofia_agent_t *sofia_agent = session->signaling_agent->obj; if(sofia_agent && sofia_agent->config->origin) { apt_string_set(&descriptor->origin,sofia_agent->config->origin); } } if(sdp_string_generate_by_mrcp_descriptor(sdp_str,sizeof(sdp_str),descriptor,TRUE) > 0) { local_sdp_str = sdp_str; apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Local SDP\n%s", local_sdp_str); } nua_invite(sofia_session->nh, TAG_IF(local_sdp_str,SOATAG_USER_SDP_STR(local_sdp_str)), TAG_END()); return TRUE; }
static void mrcp_sofia_on_resource_discover(mrcp_sofia_agent_t *sofia_agent, nua_handle_t *nh, mrcp_sofia_session_t *sofia_session, sip_t const *sip, tagi_t tags[]) { char sdp_str[2048]; const char *local_sdp_str = NULL; const char *ip = sofia_agent->config->ext_ip ? sofia_agent->config->ext_ip : sofia_agent->config->local_ip; if(sdp_resource_discovery_string_generate(ip,sofia_agent->config->origin,sdp_str,sizeof(sdp_str)) > 0) { local_sdp_str = sdp_str; apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Resource Discovery SDP\n[%s]\n", local_sdp_str); } nua_respond(nh, SIP_200_OK, NUTAG_WITH_CURRENT(sofia_agent->nua), TAG_IF(sofia_agent->sip_contact_str,SIPTAG_CONTACT_STR(sofia_agent->sip_contact_str)), TAG_IF(local_sdp_str,SOATAG_USER_SDP_STR(local_sdp_str)), SOATAG_AUDIO_AUX("telephone-event"), TAG_END()); }
static apt_bool_t mrcp_sofia_on_session_answer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor) { mrcp_sofia_session_t *sofia_session = session->obj; mrcp_sofia_agent_t *sofia_agent = session->signaling_agent->obj; const char *local_sdp_str = NULL; char sdp_str[2048]; if(!sofia_agent || !sofia_session || !sofia_session->nh) { return FALSE; } if(sofia_agent->config->origin) { apt_string_set(&descriptor->origin,sofia_agent->config->origin); } if(sdp_string_generate_by_mrcp_descriptor(sdp_str,sizeof(sdp_str),descriptor,FALSE) > 0) { local_sdp_str = sdp_str; apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Local SDP\n%s", local_sdp_str); } nua_respond(sofia_session->nh, SIP_200_OK, SIPTAG_CONTACT_STR(sofia_agent->sip_contact_str), TAG_IF(local_sdp_str,SOATAG_USER_SDP_STR(local_sdp_str)), NUTAG_AUTOANSWER(0), TAG_END()); return TRUE; }
static struct message * invite_sent_by_nua(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...) { ta_list ta; ta_start(ta, tag, value); nua_invite(nh, SOATAG_USER_SDP_STR("m=audio 5004 RTP/AVP 0 8"), ta_tags(ta)); ta_end(ta); fail_unless(s2_check_callstate(nua_callstate_calling)); return s2_sip_wait_for_request(SIP_METHOD_INVITE); }
static void etsi_setup(void) { nua = s2_nua_setup("ETSI", NUTAG_OUTBOUND("no-options-keepalive, no-validate"), TAG_END()); soa = soa_create(NULL, s2base->root, NULL); fail_if(!soa); soa_set_params(soa, SOATAG_USER_SDP_STR("m=audio 5008 RTP/AVP 8 0" CRLF "m=video 5010 RTP/AVP 34" CRLF), TAG_END()); d1 = su_home_new(sizeof *d1); fail_if(!d1); d2 = su_home_new(sizeof *d2); fail_if(!d2); }
static apt_bool_t mrcp_sofia_on_session_answer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor) { mrcp_sofia_session_t *sofia_session = session->obj; mrcp_sofia_agent_t *sofia_agent = session->signaling_agent->obj; const char *local_sdp_str = NULL; char sdp_str[2048]; if(!sofia_agent || !sofia_session || !sofia_session->nh) { return FALSE; } if(descriptor->status != MRCP_SESSION_STATUS_OK) { int status = sip_status_get(descriptor->status); nua_respond(sofia_session->nh, status, sip_status_phrase(status), TAG_IF(sofia_agent->sip_contact_str,SIPTAG_CONTACT_STR(sofia_agent->sip_contact_str)), TAG_END()); return TRUE; } if(sofia_agent->config->origin) { apt_string_set(&descriptor->origin,sofia_agent->config->origin); } if(sdp_string_generate_by_mrcp_descriptor(sdp_str,sizeof(sdp_str),descriptor,FALSE) > 0) { local_sdp_str = sdp_str; apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Local SDP "APT_NAMESID_FMT"\n%s", session->name, MRCP_SESSION_SID(session), local_sdp_str); } nua_respond(sofia_session->nh, SIP_200_OK, TAG_IF(sofia_agent->sip_contact_str,SIPTAG_CONTACT_STR(sofia_agent->sip_contact_str)), TAG_IF(local_sdp_str,SOATAG_USER_SDP_STR(local_sdp_str)), SOATAG_AUDIO_AUX("telephone-event"), NUTAG_AUTOANSWER(0), TAG_END()); return TRUE; }
static apt_bool_t mrcp_sofia_session_offer(mrcp_session_t *session, mrcp_session_descriptor_t *descriptor) { char sdp_str[2048]; const char *local_sdp_str = NULL; apt_bool_t res = FALSE; mrcp_sofia_session_t *sofia_session = session->obj; if(!sofia_session) { return FALSE; } if(session->signaling_agent) { mrcp_sofia_agent_t *sofia_agent = mrcp_sofia_agent_get(session); if(sofia_agent) { if(sofia_agent->config->origin) { apt_string_set(&descriptor->origin,sofia_agent->config->origin); } } } if(sdp_string_generate_by_mrcp_descriptor(sdp_str,sizeof(sdp_str),descriptor,TRUE) > 0) { local_sdp_str = sdp_str; sofia_session->descriptor = descriptor; apt_obj_log(APT_LOG_MARK,APT_PRIO_INFO,session->log_obj,"Local SDP "APT_NAMESID_FMT"\n%s", session->name, MRCP_SESSION_SID(session), local_sdp_str); } apr_thread_mutex_lock(sofia_session->mutex); if(sofia_session->nh) { res = TRUE; nua_invite(sofia_session->nh, TAG_IF(local_sdp_str,SOATAG_USER_SDP_STR(local_sdp_str)), TAG_END()); } apr_thread_mutex_unlock(sofia_session->mutex); return res; }