Formatting changes only
--Denna och nedanstående rader kommer inte med i loggmeddelandet-- M channels/chan_sip.c git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@338755 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
bd30e7abc4
commit
260648043b
|
@ -19921,10 +19921,11 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
struct ast_party_connected_line connected;
|
||||
struct ast_set_party_connected_line update_connected;
|
||||
|
||||
if (reinvite)
|
||||
if (reinvite) {
|
||||
ast_debug(4, "SIP response %d to RE-invite on %s call %s\n", resp, outgoing ? "outgoing" : "incoming", p->callid);
|
||||
else
|
||||
} else {
|
||||
ast_debug(4, "SIP response %d to standard invite\n", resp);
|
||||
}
|
||||
|
||||
if (p->alreadygone) { /* This call is already gone */
|
||||
ast_debug(1, "Got response on call that is already terminated: %s (ignoring)\n", p->callid);
|
||||
|
@ -19938,8 +19939,9 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
/* RFC3261 says we must treat every 1xx response (but not 100)
|
||||
that we don't recognize as if it was 183.
|
||||
*/
|
||||
if (resp > 100 && resp < 200 && resp!=101 && resp != 180 && resp != 181 && resp != 182 && resp != 183)
|
||||
if (resp > 100 && resp < 200 && resp!=101 && resp != 180 && resp != 181 && resp != 182 && resp != 183) {
|
||||
resp = 183;
|
||||
}
|
||||
|
||||
/* For INVITE, treat all 2XX responses as we would a 200 response */
|
||||
if ((resp >= 200) && (resp < 300)) {
|
||||
|
@ -19947,16 +19949,19 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
}
|
||||
|
||||
/* Any response between 100 and 199 is PROCEEDING */
|
||||
if (resp >= 100 && resp < 200 && p->invitestate == INV_CALLING)
|
||||
if (resp >= 100 && resp < 200 && p->invitestate == INV_CALLING) {
|
||||
p->invitestate = INV_PROCEEDING;
|
||||
}
|
||||
|
||||
/* Final response, not 200 ? */
|
||||
if (resp >= 300 && (p->invitestate == INV_CALLING || p->invitestate == INV_PROCEEDING || p->invitestate == INV_EARLY_MEDIA ))
|
||||
if (resp >= 300 && (p->invitestate == INV_CALLING || p->invitestate == INV_PROCEEDING || p->invitestate == INV_EARLY_MEDIA )) {
|
||||
p->invitestate = INV_COMPLETED;
|
||||
}
|
||||
|
||||
/* Final response, clear out pending invite */
|
||||
if ((resp == 200 || resp >= 300) && p->pendinginvite && seqno == p->pendinginvite)
|
||||
if ((resp == 200 || resp >= 300) && p->pendinginvite && seqno == p->pendinginvite) {
|
||||
p->pendinginvite = 0;
|
||||
}
|
||||
|
||||
/* If this is a response to our initial INVITE, we need to set what we can use
|
||||
* for this peer.
|
||||
|
@ -19968,15 +19973,17 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
switch (resp) {
|
||||
case 100: /* Trying */
|
||||
case 101: /* Dialog establishment */
|
||||
if (!req->ignore && p->invitestate != INV_CANCELLED && sip_cancel_destroy(p))
|
||||
if (!req->ignore && p->invitestate != INV_CANCELLED && sip_cancel_destroy(p)) {
|
||||
ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
|
||||
}
|
||||
check_pendings(p);
|
||||
break;
|
||||
|
||||
case 180: /* 180 Ringing */
|
||||
case 182: /* 182 Queued */
|
||||
if (!req->ignore && p->invitestate != INV_CANCELLED && sip_cancel_destroy(p))
|
||||
if (!req->ignore && p->invitestate != INV_CANCELLED && sip_cancel_destroy(p)) {
|
||||
ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
|
||||
}
|
||||
if (!req->ignore && p->owner) {
|
||||
if (get_rpid(p, req)) {
|
||||
/* Queue a connected line update */
|
||||
|
@ -20005,8 +20012,9 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
}
|
||||
}
|
||||
if (find_sdp(req)) {
|
||||
if (p->invitestate != INV_CANCELLED)
|
||||
if (p->invitestate != INV_CANCELLED) {
|
||||
p->invitestate = INV_EARLY_MEDIA;
|
||||
}
|
||||
res = process_sdp(p, req, SDP_T38_NONE);
|
||||
if (!req->ignore && p->owner) {
|
||||
/* Queue a progress frame only if we have SDP in 180 or 182 */
|
||||
|
@ -20037,8 +20045,9 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
break;
|
||||
|
||||
case 183: /* Session progress */
|
||||
if (!req->ignore && (p->invitestate != INV_CANCELLED) && sip_cancel_destroy(p))
|
||||
if (!req->ignore && (p->invitestate != INV_CANCELLED) && sip_cancel_destroy(p)) {
|
||||
ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
|
||||
}
|
||||
if (!req->ignore && p->owner) {
|
||||
if (get_rpid(p, req)) {
|
||||
/* Queue a connected line update */
|
||||
|
@ -20063,8 +20072,9 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
sip_handle_cc(p, req, AST_CC_CCNR);
|
||||
}
|
||||
if (find_sdp(req)) {
|
||||
if (p->invitestate != INV_CANCELLED)
|
||||
if (p->invitestate != INV_CANCELLED) {
|
||||
p->invitestate = INV_EARLY_MEDIA;
|
||||
}
|
||||
res = process_sdp(p, req, SDP_T38_NONE);
|
||||
if (!req->ignore && p->owner) {
|
||||
/* Queue a progress frame */
|
||||
|
@ -20084,8 +20094,9 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
break;
|
||||
|
||||
case 200: /* 200 OK on invite - someone's answering our call */
|
||||
if (!req->ignore && (p->invitestate != INV_CANCELLED) && sip_cancel_destroy(p))
|
||||
if (!req->ignore && (p->invitestate != INV_CANCELLED) && sip_cancel_destroy(p)) {
|
||||
ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
|
||||
}
|
||||
p->authtries = 0;
|
||||
if (find_sdp(req)) {
|
||||
if ((res = process_sdp(p, req, SDP_T38_ACCEPT)) && !req->ignore)
|
||||
|
@ -20136,14 +20147,16 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
update_call_counter(p, DEC_CALL_RINGING);
|
||||
parse_ok_contact(p, req);
|
||||
/* Save Record-Route for any later requests we make on this dialogue */
|
||||
if (!reinvite)
|
||||
if (!reinvite) {
|
||||
build_route(p, req, 1);
|
||||
}
|
||||
|
||||
if(set_address_from_contact(p)) {
|
||||
/* Bad contact - we don't know how to reach this device */
|
||||
/* We need to ACK, but then send a bye */
|
||||
if (!p->route && !req->ignore)
|
||||
if (!p->route && !req->ignore) {
|
||||
ast_set_flag(&p->flags[0], SIP_PENDINGBYE);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -20151,10 +20164,11 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
if (!req->ignore && p->owner) {
|
||||
if (!reinvite) {
|
||||
ast_queue_control(p->owner, AST_CONTROL_ANSWER);
|
||||
if (sip_cfg.callevents)
|
||||
if (sip_cfg.callevents) {
|
||||
manager_event(EVENT_FLAG_SYSTEM, "ChannelUpdate",
|
||||
"Channel: %s\r\nChanneltype: %s\r\nUniqueid: %s\r\nSIPcallid: %s\r\nSIPfullcontact: %s\r\nPeername: %s\r\n",
|
||||
p->owner->name, "SIP", p->owner->uniqueid, p->callid, p->fullcontact, p->peername);
|
||||
}
|
||||
} else { /* RE-invite */
|
||||
if (p->t38.state == T38_DISABLED || p->t38.state == T38_REJECTED) {
|
||||
ast_queue_control(p->owner, AST_CONTROL_UPDATE_RTP_PEER);
|
||||
|
@ -20166,8 +20180,9 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
/* It's possible we're getting an 200 OK after we've tried to disconnect
|
||||
by sending CANCEL */
|
||||
/* First send ACK, then send bye */
|
||||
if (!req->ignore)
|
||||
if (!req->ignore) {
|
||||
ast_set_flag(&p->flags[0], SIP_PENDINGBYE);
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for Session-Timers related headers */
|
||||
|
@ -20213,20 +20228,23 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
case 401: /* Www auth */
|
||||
/* First we ACK */
|
||||
xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
|
||||
if (p->options)
|
||||
if (p->options) {
|
||||
p->options->auth_type = resp;
|
||||
}
|
||||
|
||||
/* Then we AUTH */
|
||||
ast_string_field_set(p, theirtag, NULL); /* forget their old tag, so we don't match tags when getting response */
|
||||
if (!req->ignore) {
|
||||
if (p->authtries < MAX_AUTHTRIES)
|
||||
if (p->authtries < MAX_AUTHTRIES) {
|
||||
p->invitestate = INV_CALLING;
|
||||
}
|
||||
if (p->authtries == MAX_AUTHTRIES || do_proxy_auth(p, req, resp, SIP_INVITE, 1)) {
|
||||
ast_log(LOG_NOTICE, "Failed to authenticate on INVITE to '%s'\n", sip_get_header(&p->initreq, "From"));
|
||||
pvt_set_needdestroy(p, "failed to authenticate on INVITE");
|
||||
sip_alreadygone(p);
|
||||
if (p->owner)
|
||||
if (p->owner) {
|
||||
ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -20257,8 +20275,9 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
/* Could be REFER caused INVITE with replaces */
|
||||
ast_log(LOG_WARNING, "Re-invite to non-existing call leg on other UA. SIP dialog '%s'. Giving up.\n", p->callid);
|
||||
xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
|
||||
if (p->owner)
|
||||
if (p->owner) {
|
||||
ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
|
||||
}
|
||||
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
|
||||
break;
|
||||
|
||||
|
@ -20272,8 +20291,9 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
|
||||
append_history(p, "Identity", "SIP identity is required. Not supported by Asterisk.");
|
||||
ast_log(LOG_WARNING, "SIP identity required by proxy. SIP dialog '%s'. Giving up.\n", p->callid);
|
||||
if (p->owner)
|
||||
if (p->owner) {
|
||||
ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
|
@ -20300,18 +20320,21 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
if (p->udptl && p->t38.state == T38_LOCAL_REINVITE) {
|
||||
change_t38_state(p, T38_REJECTED);
|
||||
/* Try to reset RTP timers */
|
||||
/* XXX Why is this commented away??? */
|
||||
//ast_rtp_set_rtptimers_onhold(p->rtp);
|
||||
|
||||
/* Trigger a reinvite back to audio */
|
||||
transmit_reinvite_with_sdp(p, FALSE, FALSE);
|
||||
} else {
|
||||
/* We can't set up this call, so give up */
|
||||
if (p->owner && !req->ignore)
|
||||
if (p->owner && !req->ignore) {
|
||||
ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
|
||||
}
|
||||
pvt_set_needdestroy(p, "received 488 response");
|
||||
/* If there's no dialog to end, then mark p as already gone */
|
||||
if (!reinvite)
|
||||
if (!reinvite) {
|
||||
sip_alreadygone(p);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 491: /* Pending */
|
||||
|
@ -20342,12 +20365,14 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
|||
case 405: /* Not allowed */
|
||||
case 501: /* Not implemented */
|
||||
xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
|
||||
if (p->owner)
|
||||
if (p->owner) {
|
||||
ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (xmitres == XMIT_ERROR)
|
||||
if (xmitres == XMIT_ERROR) {
|
||||
ast_log(LOG_WARNING, "Could not transmit message in dialog %s\n", p->callid);
|
||||
}
|
||||
}
|
||||
|
||||
/* \brief Handle SIP response in NOTIFY transaction
|
||||
|
|
Loading…
Reference in New Issue