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:
Olle Johansson
2011-09-30 19:25:36 +00:00
parent bd30e7abc4
commit 260648043b

View File

@@ -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_party_connected_line connected;
struct ast_set_party_connected_line update_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); 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); ast_debug(4, "SIP response %d to standard invite\n", resp);
}
if (p->alreadygone) { /* This call is already gone */ if (p->alreadygone) { /* This call is already gone */
ast_debug(1, "Got response on call that is already terminated: %s (ignoring)\n", p->callid); 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) /* RFC3261 says we must treat every 1xx response (but not 100)
that we don't recognize as if it was 183. 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; resp = 183;
}
/* For INVITE, treat all 2XX responses as we would a 200 response */ /* For INVITE, treat all 2XX responses as we would a 200 response */
if ((resp >= 200) && (resp < 300)) { 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 */ /* 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; p->invitestate = INV_PROCEEDING;
}
/* Final response, not 200 ? */ /* 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; p->invitestate = INV_COMPLETED;
}
/* Final response, clear out pending invite */ /* 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; p->pendinginvite = 0;
}
/* If this is a response to our initial INVITE, we need to set what we can use /* If this is a response to our initial INVITE, we need to set what we can use
* for this peer. * for this peer.
@@ -19968,15 +19973,17 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
switch (resp) { switch (resp) {
case 100: /* Trying */ case 100: /* Trying */
case 101: /* Dialog establishment */ 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"); ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
}
check_pendings(p); check_pendings(p);
break; break;
case 180: /* 180 Ringing */ case 180: /* 180 Ringing */
case 182: /* 182 Queued */ 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"); ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
}
if (!req->ignore && p->owner) { if (!req->ignore && p->owner) {
if (get_rpid(p, req)) { if (get_rpid(p, req)) {
/* Queue a connected line update */ /* 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 (find_sdp(req)) {
if (p->invitestate != INV_CANCELLED) if (p->invitestate != INV_CANCELLED) {
p->invitestate = INV_EARLY_MEDIA; p->invitestate = INV_EARLY_MEDIA;
}
res = process_sdp(p, req, SDP_T38_NONE); res = process_sdp(p, req, SDP_T38_NONE);
if (!req->ignore && p->owner) { if (!req->ignore && p->owner) {
/* Queue a progress frame only if we have SDP in 180 or 182 */ /* 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; break;
case 183: /* Session progress */ 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"); ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
}
if (!req->ignore && p->owner) { if (!req->ignore && p->owner) {
if (get_rpid(p, req)) { if (get_rpid(p, req)) {
/* Queue a connected line update */ /* 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); sip_handle_cc(p, req, AST_CC_CCNR);
} }
if (find_sdp(req)) { if (find_sdp(req)) {
if (p->invitestate != INV_CANCELLED) if (p->invitestate != INV_CANCELLED) {
p->invitestate = INV_EARLY_MEDIA; p->invitestate = INV_EARLY_MEDIA;
}
res = process_sdp(p, req, SDP_T38_NONE); res = process_sdp(p, req, SDP_T38_NONE);
if (!req->ignore && p->owner) { if (!req->ignore && p->owner) {
/* Queue a progress frame */ /* Queue a progress frame */
@@ -20084,8 +20094,9 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
break; break;
case 200: /* 200 OK on invite - someone's answering our call */ 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"); ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
}
p->authtries = 0; p->authtries = 0;
if (find_sdp(req)) { if (find_sdp(req)) {
if ((res = process_sdp(p, req, SDP_T38_ACCEPT)) && !req->ignore) 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); update_call_counter(p, DEC_CALL_RINGING);
parse_ok_contact(p, req); parse_ok_contact(p, req);
/* Save Record-Route for any later requests we make on this dialogue */ /* Save Record-Route for any later requests we make on this dialogue */
if (!reinvite) if (!reinvite) {
build_route(p, req, 1); build_route(p, req, 1);
}
if(set_address_from_contact(p)) { if(set_address_from_contact(p)) {
/* Bad contact - we don't know how to reach this device */ /* Bad contact - we don't know how to reach this device */
/* We need to ACK, but then send a bye */ /* 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); 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 (!req->ignore && p->owner) {
if (!reinvite) { if (!reinvite) {
ast_queue_control(p->owner, AST_CONTROL_ANSWER); ast_queue_control(p->owner, AST_CONTROL_ANSWER);
if (sip_cfg.callevents) if (sip_cfg.callevents) {
manager_event(EVENT_FLAG_SYSTEM, "ChannelUpdate", 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", "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); p->owner->name, "SIP", p->owner->uniqueid, p->callid, p->fullcontact, p->peername);
}
} else { /* RE-invite */ } else { /* RE-invite */
if (p->t38.state == T38_DISABLED || p->t38.state == T38_REJECTED) { if (p->t38.state == T38_DISABLED || p->t38.state == T38_REJECTED) {
ast_queue_control(p->owner, AST_CONTROL_UPDATE_RTP_PEER); 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 /* It's possible we're getting an 200 OK after we've tried to disconnect
by sending CANCEL */ by sending CANCEL */
/* First send ACK, then send bye */ /* First send ACK, then send bye */
if (!req->ignore) if (!req->ignore) {
ast_set_flag(&p->flags[0], SIP_PENDINGBYE); ast_set_flag(&p->flags[0], SIP_PENDINGBYE);
}
} }
/* Check for Session-Timers related headers */ /* 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 */ case 401: /* Www auth */
/* First we ACK */ /* First we ACK */
xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE); xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
if (p->options) if (p->options) {
p->options->auth_type = resp; p->options->auth_type = resp;
}
/* Then we AUTH */ /* Then we AUTH */
ast_string_field_set(p, theirtag, NULL); /* forget their old tag, so we don't match tags when getting response */ ast_string_field_set(p, theirtag, NULL); /* forget their old tag, so we don't match tags when getting response */
if (!req->ignore) { if (!req->ignore) {
if (p->authtries < MAX_AUTHTRIES) if (p->authtries < MAX_AUTHTRIES) {
p->invitestate = INV_CALLING; p->invitestate = INV_CALLING;
}
if (p->authtries == MAX_AUTHTRIES || do_proxy_auth(p, req, resp, SIP_INVITE, 1)) { 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")); 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"); pvt_set_needdestroy(p, "failed to authenticate on INVITE");
sip_alreadygone(p); sip_alreadygone(p);
if (p->owner) if (p->owner) {
ast_queue_control(p->owner, AST_CONTROL_CONGESTION); ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
}
} }
} }
break; 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 */ /* 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); 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); xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
if (p->owner) if (p->owner) {
ast_queue_control(p->owner, AST_CONTROL_CONGESTION); ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
}
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT); sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
break; 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); xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
append_history(p, "Identity", "SIP identity is required. Not supported by Asterisk."); 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); 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); ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
}
break; 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) { if (p->udptl && p->t38.state == T38_LOCAL_REINVITE) {
change_t38_state(p, T38_REJECTED); change_t38_state(p, T38_REJECTED);
/* Try to reset RTP timers */ /* Try to reset RTP timers */
/* XXX Why is this commented away??? */
//ast_rtp_set_rtptimers_onhold(p->rtp); //ast_rtp_set_rtptimers_onhold(p->rtp);
/* Trigger a reinvite back to audio */ /* Trigger a reinvite back to audio */
transmit_reinvite_with_sdp(p, FALSE, FALSE); transmit_reinvite_with_sdp(p, FALSE, FALSE);
} else { } else {
/* We can't set up this call, so give up */ /* 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); ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
}
pvt_set_needdestroy(p, "received 488 response"); pvt_set_needdestroy(p, "received 488 response");
/* If there's no dialog to end, then mark p as already gone */ /* If there's no dialog to end, then mark p as already gone */
if (!reinvite) if (!reinvite) {
sip_alreadygone(p); sip_alreadygone(p);
}
} }
break; break;
case 491: /* Pending */ 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 405: /* Not allowed */
case 501: /* Not implemented */ case 501: /* Not implemented */
xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE); xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
if (p->owner) if (p->owner) {
ast_queue_control(p->owner, AST_CONTROL_CONGESTION); ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
}
break; break;
} }
if (xmitres == XMIT_ERROR) if (xmitres == XMIT_ERROR) {
ast_log(LOG_WARNING, "Could not transmit message in dialog %s\n", p->callid); ast_log(LOG_WARNING, "Could not transmit message in dialog %s\n", p->callid);
}
} }
/* \brief Handle SIP response in NOTIFY transaction /* \brief Handle SIP response in NOTIFY transaction