|
@@ -919,116 +919,148 @@ static void on_state(CONDITION_PARAMS)
|
|
|
SOATAG_LOCAL_SDP_STR_REF(local_sdp_str),
|
|
|
TAG_END());
|
|
|
|
|
|
- LOG_TRACE("state = %d, offer_recv=%d, answer_recv=%d, offer_sent=%d, answer_sent=%d",
|
|
|
- state, offer_recv, answer_recv, offer_sent, answer_sent);
|
|
|
+ char strmsg[MAX_PATH] = { 0 };
|
|
|
+ _snprintf(strmsg, MAX_PATH, "state = %d, offer_recv=%d, answer_recv=%d, offer_sent=%d, answer_sent=%d", state, offer_recv, answer_recv, offer_sent, answer_sent);
|
|
|
+ LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_PROCESS_MSG, strmsg);
|
|
|
|
|
|
- switch (state)
|
|
|
+ switch (state)
|
|
|
{
|
|
|
- case nua_callstate_calling:
|
|
|
- LOG_TRACE("nua_callstate_calling, has_local_sdp : %d, has_remote_sdp : %d", !!local_sdp_str, !!remote_sdp_str);
|
|
|
- if (local_sdp_str) {
|
|
|
- sdp_parser_t *parser = sdp_parse(call->home, local_sdp_str, strlen(local_sdp_str), -1);
|
|
|
- assert(call->last_sdp == NULL);
|
|
|
- call->last_sdp = sdp_session_dup(call->home, sdp_session(parser));
|
|
|
- sdp_parser_free(parser);
|
|
|
- }
|
|
|
- st = CALLING;
|
|
|
- call->cb.on_call_state(st, state_desc[st], phrase, call->cb.user_data);
|
|
|
- break;
|
|
|
- case nua_callstate_proceeding:
|
|
|
- LOG_TRACE("nua_callstate_proceeding, status = %d, has_local_sdp: %d, has_remote_sdp : %d", status, !!local_sdp_str, !!remote_sdp_str);
|
|
|
- st = PROCEEDING;
|
|
|
- call->cb.on_call_state(st, state_desc[st], phrase, call->cb.user_data);
|
|
|
- if (remote_sdp_str) {
|
|
|
- sdp_parser_t *parser = sdp_parse(call->home, remote_sdp_str, strlen(remote_sdp_str), -1);
|
|
|
- remote_sdp = sdp_session(parser);
|
|
|
- if (call->last_sdp) {
|
|
|
- negotiate_sdp(call, call->last_sdp, remote_sdp);
|
|
|
- su_free(call->home, call->last_sdp);
|
|
|
- call->last_sdp = NULL;
|
|
|
- }
|
|
|
- sdp_parser_free(parser);
|
|
|
- }
|
|
|
- break;
|
|
|
- case nua_callstate_completing:
|
|
|
- st = COMPLETING;
|
|
|
- LOG_TRACE("nua_callstate_completing, has_local_sdp : %d, has_remote_sdp : %d", !!local_sdp_str, !!remote_sdp_str);
|
|
|
- call->cb.on_call_state(st, state_desc[st], phrase, call->cb.user_data);
|
|
|
- if (remote_sdp_str) {
|
|
|
- sdp_parser_t *parser = sdp_parse(call->home, remote_sdp_str, strlen(remote_sdp_str), -1);
|
|
|
- remote_sdp = sdp_session(parser);
|
|
|
- if (call->last_sdp) {
|
|
|
- negotiate_sdp(call, call->last_sdp, remote_sdp);
|
|
|
- su_free(call->home, call->last_sdp);
|
|
|
- call->last_sdp = NULL;
|
|
|
+ case nua_callstate_calling:
|
|
|
+ {
|
|
|
+ char strcalling[MAX_PATH] = { 0 };
|
|
|
+ _snprintf(strcalling, MAX_PATH, "nua_callstate_calling, has_local_sdp : %d, has_remote_sdp : %d", !!local_sdp_str, !!remote_sdp_str);
|
|
|
+ LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_PROCESS_MSG, strcalling);
|
|
|
+ if (local_sdp_str) {
|
|
|
+ sdp_parser_t* parser = sdp_parse(call->home, local_sdp_str, strlen(local_sdp_str), -1);
|
|
|
+ assert(call->last_sdp == NULL);
|
|
|
+ call->last_sdp = sdp_session_dup(call->home, sdp_session(parser));
|
|
|
+ sdp_parser_free(parser);
|
|
|
+ }
|
|
|
+ st = CALLING;
|
|
|
+ call->cb.on_call_state(st, state_desc[st], phrase, call->cb.user_data);
|
|
|
}
|
|
|
- sdp_parser_free(parser);
|
|
|
- }
|
|
|
- break;
|
|
|
- case nua_callstate_completed:
|
|
|
- LOG_TRACE("nua_callstate_completed, has_local_sdp : %d, has_remote_sdp : %d", !!local_sdp_str, !!remote_sdp_str);
|
|
|
- if (remote_sdp_str) {
|
|
|
- if (!call->last_sdp) {
|
|
|
- sdp_parser_t *parser = sdp_parse(call->home, remote_sdp_str, strlen(remote_sdp_str), -1);
|
|
|
- call->last_sdp = sdp_session_dup(call->home, sdp_session(parser));
|
|
|
- sdp_parser_free(parser);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case nua_callstate_proceeding:
|
|
|
+ {
|
|
|
+ char strproceeding[MAX_PATH] = { 0 };
|
|
|
+ _snprintf(strproceeding, MAX_PATH, "nua_callstate_proceeding, status = %d, has_local_sdp: %d, has_remote_sdp : %d", status, !!local_sdp_str, !!remote_sdp_str);
|
|
|
+ LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_PROCESS_MSG, strproceeding);
|
|
|
+ st = PROCEEDING;
|
|
|
+ call->cb.on_call_state(st, state_desc[st], phrase, call->cb.user_data);
|
|
|
+ if (remote_sdp_str) {
|
|
|
+ sdp_parser_t* parser = sdp_parse(call->home, remote_sdp_str, strlen(remote_sdp_str), -1);
|
|
|
+ remote_sdp = sdp_session(parser);
|
|
|
+ if (call->last_sdp) {
|
|
|
+ negotiate_sdp(call, call->last_sdp, remote_sdp);
|
|
|
+ su_free(call->home, call->last_sdp);
|
|
|
+ call->last_sdp = NULL;
|
|
|
+ }
|
|
|
+ sdp_parser_free(parser);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- if (local_sdp_str) {
|
|
|
- if (call->last_sdp) {
|
|
|
- sdp_parser_t *parser = sdp_parse(call->home, local_sdp_str, strlen(local_sdp_str), -1);
|
|
|
- local_sdp = sdp_session(parser);
|
|
|
- negotiate_sdp(call, local_sdp, call->last_sdp);
|
|
|
- su_free(call->home, call->last_sdp);
|
|
|
- call->last_sdp = NULL;
|
|
|
- sdp_parser_free(parser);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case nua_callstate_completing:
|
|
|
+ {
|
|
|
+ st = COMPLETING;
|
|
|
+ char strcompleting[MAX_PATH] = { 0 };
|
|
|
+ _snprintf(strcompleting, MAX_PATH, "nua_callstate_completing, has_local_sdp : %d, has_remote_sdp : %d", !!local_sdp_str, !!remote_sdp_str);
|
|
|
+ LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_PROCESS_MSG, strcompleting);
|
|
|
+ call->cb.on_call_state(st, state_desc[st], phrase, call->cb.user_data);
|
|
|
+ if (remote_sdp_str) {
|
|
|
+ sdp_parser_t* parser = sdp_parse(call->home, remote_sdp_str, strlen(remote_sdp_str), -1);
|
|
|
+ remote_sdp = sdp_session(parser);
|
|
|
+ if (call->last_sdp) {
|
|
|
+ negotiate_sdp(call, call->last_sdp, remote_sdp);
|
|
|
+ su_free(call->home, call->last_sdp);
|
|
|
+ call->last_sdp = NULL;
|
|
|
+ }
|
|
|
+ sdp_parser_free(parser);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- break;
|
|
|
- case nua_callstate_ready:
|
|
|
- call->connected = true;
|
|
|
- LOG_TRACE("nua_callstate_ready, has_local_sdp : %d, has_remote_sdp : %d.", !!local_sdp_str, !!remote_sdp_str);
|
|
|
- st = READY;
|
|
|
- call->cb.on_call_state(st, state_desc[st], phrase, call->cb.user_data);
|
|
|
- if (remote_sdp_str) {
|
|
|
- sdp_parser_t *parser = sdp_parse(call->home, remote_sdp_str, strlen(remote_sdp_str), -1);
|
|
|
- remote_sdp = sdp_session(parser);
|
|
|
- if (call->last_sdp) {
|
|
|
- negotiate_sdp(call, call->last_sdp, remote_sdp);
|
|
|
- su_free(call->home, call->last_sdp);
|
|
|
- call->last_sdp = NULL;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case nua_callstate_completed:
|
|
|
+ {
|
|
|
+ char strcompleted[MAX_PATH] = { 0 };
|
|
|
+ _snprintf(strcompleted, MAX_PATH, "nua_callstate_completed, has_local_sdp : %d, has_remote_sdp : %d", !!local_sdp_str, !!remote_sdp_str);
|
|
|
+ LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_PROCESS_MSG, strcompleted);
|
|
|
+ if (remote_sdp_str) {
|
|
|
+ if (!call->last_sdp) {
|
|
|
+ sdp_parser_t* parser = sdp_parse(call->home, remote_sdp_str, strlen(remote_sdp_str), -1);
|
|
|
+ call->last_sdp = sdp_session_dup(call->home, sdp_session(parser));
|
|
|
+ sdp_parser_free(parser);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (local_sdp_str) {
|
|
|
+ if (call->last_sdp) {
|
|
|
+ sdp_parser_t* parser = sdp_parse(call->home, local_sdp_str, strlen(local_sdp_str), -1);
|
|
|
+ local_sdp = sdp_session(parser);
|
|
|
+ negotiate_sdp(call, local_sdp, call->last_sdp);
|
|
|
+ su_free(call->home, call->last_sdp);
|
|
|
+ call->last_sdp = NULL;
|
|
|
+ sdp_parser_free(parser);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- sdp_parser_free(parser);
|
|
|
- }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case nua_callstate_ready:
|
|
|
+ {
|
|
|
+ call->connected = true;
|
|
|
+ char strready[MAX_PATH] = { 0 };
|
|
|
+ _snprintf(strready, MAX_PATH, "nua_callstate_ready, has_local_sdp : %d, has_remote_sdp : %d.", !!local_sdp_str, !!remote_sdp_str);
|
|
|
+ LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_PROCESS_MSG, strready);
|
|
|
+ st = READY;
|
|
|
+ call->cb.on_call_state(st, state_desc[st], phrase, call->cb.user_data);
|
|
|
+ if (remote_sdp_str) {
|
|
|
+ sdp_parser_t* parser = sdp_parse(call->home, remote_sdp_str, strlen(remote_sdp_str), -1);
|
|
|
+ remote_sdp = sdp_session(parser);
|
|
|
+ if (call->last_sdp) {
|
|
|
+ negotiate_sdp(call, call->last_sdp, remote_sdp);
|
|
|
+ su_free(call->home, call->last_sdp);
|
|
|
+ call->last_sdp = NULL;
|
|
|
+ }
|
|
|
+ sdp_parser_free(parser);
|
|
|
+ }
|
|
|
#if 0
|
|
|
- if (remote_sdp_str) {
|
|
|
- sdp_parser_t *parser = sdp_parse(call->home, remote_sdp_str, strlen(remote_sdp_str), -1);
|
|
|
- remote_sdp = sdp_session(parser);
|
|
|
- negotiate_sdp(call, call->last_sdp, remote_sdp);
|
|
|
- sdp_parser_free(parser);
|
|
|
- } else if (local_sdp_str) {
|
|
|
- sdp_parser_t *parser = sdp_parse(call->home, local_sdp_str, strlen(local_sdp_str), -1);
|
|
|
- local_sdp = sdp_session(parser);
|
|
|
- negotiate_sdp(call, local_sdp, call->last_sdp);
|
|
|
- sdp_parser_free(parser);
|
|
|
- }
|
|
|
+ if (remote_sdp_str) {
|
|
|
+ sdp_parser_t* parser = sdp_parse(call->home, remote_sdp_str, strlen(remote_sdp_str), -1);
|
|
|
+ remote_sdp = sdp_session(parser);
|
|
|
+ negotiate_sdp(call, call->last_sdp, remote_sdp);
|
|
|
+ sdp_parser_free(parser);
|
|
|
+ }
|
|
|
+ else if (local_sdp_str) {
|
|
|
+ sdp_parser_t* parser = sdp_parse(call->home, local_sdp_str, strlen(local_sdp_str), -1);
|
|
|
+ local_sdp = sdp_session(parser);
|
|
|
+ negotiate_sdp(call, local_sdp, call->last_sdp);
|
|
|
+ sdp_parser_free(parser);
|
|
|
+ }
|
|
|
#endif
|
|
|
- break;
|
|
|
- case nua_callstate_terminated:
|
|
|
- st = TERMINATED;
|
|
|
- LOG_TRACE("call terminated! in sofia thread!");
|
|
|
- {
|
|
|
- media_desc_t audio_desc = {0};
|
|
|
- audio_desc.media_dir = DIR_NONE;
|
|
|
- endpoint_media_update_audio(call, &audio_desc, call->ep->curr_audio_dev_type);
|
|
|
- }
|
|
|
- call->cb.on_call_state(st, state_desc[st], phrase, call->cb.user_data);
|
|
|
- nua_handle_bind(nh, NULL);
|
|
|
- nua_handle_destroy(nh);
|
|
|
- call->nh = NULL;
|
|
|
- break;
|
|
|
- }
|
|
|
+ }
|
|
|
+ break;
|
|
|
|
|
|
+ case nua_callstate_terminated:
|
|
|
+ {
|
|
|
+ st = TERMINATED;
|
|
|
+ char strterminated[MAX_PATH] = { 0 };
|
|
|
+ _snprintf(strterminated, MAX_PATH, "call terminated! in sofia thread!");
|
|
|
+ LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_PROCESS_MSG, strterminated);
|
|
|
+ {
|
|
|
+ media_desc_t audio_desc = { 0 };
|
|
|
+ audio_desc.media_dir = DIR_NONE;
|
|
|
+ endpoint_media_update_audio(call, &audio_desc, call->ep->curr_audio_dev_type);
|
|
|
+ }
|
|
|
+ call->cb.on_call_state(st, state_desc[st], phrase, call->cb.user_data);
|
|
|
+ nua_handle_bind(nh, NULL);
|
|
|
+ nua_handle_destroy(nh);
|
|
|
+ call->nh = NULL;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void Terminatedcall(endpoint_call_t *call)
|
|
@@ -1327,7 +1359,7 @@ endpoint_t *endpoint_create(CEntityBase *pEntity, const endpoint_conf_t *conf,in
|
|
|
|
|
|
endpt = __endpoint_create(pEntity, conf,nDev);
|
|
|
if (endpt) {
|
|
|
- Dbg("new create endpoint addr is 0x%x.", endpt);
|
|
|
+ Dbg("new create endpoint addr is 0x%08x.", endpt);
|
|
|
int rc = __endpoint_start(endpt);
|
|
|
if (rc != 0) {
|
|
|
__endpoint_destroy(endpt);
|
|
@@ -1442,7 +1474,7 @@ int endpoint_call_start(endpoint_call_t *call)
|
|
|
|
|
|
call_make_offer(call, sdp, -1);
|
|
|
|
|
|
- Dbg("sdp is %s", sdp);
|
|
|
+ //Dbg("sdp is %s", sdp);
|
|
|
|
|
|
nua_invite(call->nh,
|
|
|
//NUTAG_URL(call->remote_uri),
|
|
@@ -1451,6 +1483,8 @@ int endpoint_call_start(endpoint_call_t *call)
|
|
|
//SOATAG_AUDIO_AUX("telephone-event"),
|
|
|
TAG_END());
|
|
|
|
|
|
+ LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_INVITE_SEND, sdp);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|