Send Contract when receving a call
Contact with correct peer address must be included, so the call proceeds correctly. Only the host/port is used, no user. This seems to work.
This commit is contained in:
parent
18af4626db
commit
172dee960a
|
@ -586,8 +586,35 @@ static void setup_req(call_t *call, osmo_cc_msg_t *msg)
|
|||
osmo_cc_ll_msg(&call->sip_ep->cc_ep, call->cc_callref, msg);
|
||||
}
|
||||
|
||||
static const char *response_contact(call_t *call)
|
||||
{
|
||||
static char contact[1024] = "";
|
||||
const char *peer, *p;
|
||||
|
||||
/* provide contact with correct peer */
|
||||
if (call->sip_ep->public_ip[0])
|
||||
peer = call->sip_ep->public_ip;
|
||||
else
|
||||
peer = call->sip_ep->local_peer;
|
||||
sprintf(contact, "sip:%s", peer);
|
||||
/* if port is not set (maybe public IP), get it from local_peer */
|
||||
if (!strchr(peer, ':')) {
|
||||
/* append port of local peer or use 5060, if not exits */
|
||||
p = osmo_cc_port_of_address(call->sip_ep->local_peer);
|
||||
if (!p)
|
||||
p = "5060";
|
||||
strcat(contact, ":");
|
||||
strcat(contact, p);
|
||||
}
|
||||
PDEBUG(DSIP, DEBUG_DEBUG, " -> Contact = %s\n", contact);
|
||||
|
||||
return contact;
|
||||
}
|
||||
|
||||
static void send_progress_sdp(call_t *call, const char *sdp)
|
||||
{
|
||||
const char *contact;
|
||||
|
||||
if (call->sdp_sent)
|
||||
return;
|
||||
|
||||
|
@ -603,8 +630,11 @@ static void send_progress_sdp(call_t *call, const char *sdp)
|
|||
|
||||
PDEBUG(DSIP, DEBUG_INFO, "Sending INVITE response: %d %s (callref %d)\n", SIP_183_SESSION_PROGRESS, call->cc_callref);
|
||||
|
||||
contact = response_contact(call);
|
||||
|
||||
nua_respond(call->nua_handle, SIP_183_SESSION_PROGRESS,
|
||||
NUTAG_MEDIA_ENABLE(0),
|
||||
TAG_IF(contact[0], SIPTAG_CONTACT_STR(contact)),
|
||||
TAG_IF(sdp, SIPTAG_CONTENT_TYPE_STR("application/sdp")),
|
||||
TAG_IF(sdp, SIPTAG_PAYLOAD_STR(sdp)),
|
||||
TAG_END());
|
||||
|
@ -635,6 +665,7 @@ static void alert_req(call_t *call, osmo_cc_msg_t *msg)
|
|||
{
|
||||
char sdp[65536];
|
||||
int rc;
|
||||
const char *contact;
|
||||
|
||||
rc = osmo_cc_get_ie_sdp(msg, 0, sdp, sizeof(sdp));
|
||||
if (rc >= 0)
|
||||
|
@ -645,9 +676,13 @@ static void alert_req(call_t *call, osmo_cc_msg_t *msg)
|
|||
return;
|
||||
}
|
||||
|
||||
contact = response_contact(call);
|
||||
|
||||
PDEBUG(DSIP, DEBUG_INFO, "Sending INVITE response: %d %s (callref %d)\n", SIP_180_RINGING, call->cc_callref);
|
||||
|
||||
nua_respond(call->nua_handle, SIP_180_RINGING, TAG_END());
|
||||
nua_respond(call->nua_handle, SIP_180_RINGING,
|
||||
TAG_IF(contact[0], SIPTAG_CONTACT_STR(contact)),
|
||||
TAG_END());
|
||||
}
|
||||
|
||||
static void setup_rsp(call_t *call, osmo_cc_msg_t *msg)
|
||||
|
@ -655,6 +690,7 @@ static void setup_rsp(call_t *call, osmo_cc_msg_t *msg)
|
|||
char sdp_buffer[65536];
|
||||
const char *sdp;
|
||||
int rc;
|
||||
const char *contact;
|
||||
|
||||
rc = osmo_cc_get_ie_sdp(msg, 0, sdp_buffer, sizeof(sdp_buffer));
|
||||
if (rc < 0) {
|
||||
|
@ -674,10 +710,13 @@ static void setup_rsp(call_t *call, osmo_cc_msg_t *msg)
|
|||
} else
|
||||
PDEBUG(DSIP, DEBUG_INFO, "There was no SDP received during PROC/ALERT/PROGRESS/SETUP-RSP from Osmo-CC. The call will fail due to missing SDP. (callref %d)\n", call->cc_callref);
|
||||
|
||||
contact = response_contact(call);
|
||||
|
||||
PDEBUG(DSIP, DEBUG_INFO, "Sending INVITE response: %d %s (callref %d)\n", SIP_200_OK, call->cc_callref);
|
||||
|
||||
nua_respond(call->nua_handle, SIP_200_OK,
|
||||
NUTAG_MEDIA_ENABLE(0),
|
||||
TAG_IF(contact[0], SIPTAG_CONTACT_STR(contact)),
|
||||
TAG_IF(sdp, SIPTAG_CONTENT_TYPE_STR("application/sdp")),
|
||||
TAG_IF(sdp, SIPTAG_PAYLOAD_STR(sdp)),
|
||||
TAG_END());
|
||||
|
|
Loading…
Reference in New Issue