mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-09 19:38:22 +00:00
- Don't hangup because of failed re-invite. Go back to previous state.
- Keep RTP running during T.38 session We might improve the code to issue ast_rtp_stop if T.38 re-invite not fails later on in the code, but I don't see many reasons to. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@47510 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -4862,22 +4862,6 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
|||||||
memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
|
memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
|
||||||
if (vhp)
|
if (vhp)
|
||||||
memcpy(&vsin.sin_addr, vhp->h_addr, sizeof(vsin.sin_addr));
|
memcpy(&vsin.sin_addr, vhp->h_addr, sizeof(vsin.sin_addr));
|
||||||
|
|
||||||
if (p->rtp) {
|
|
||||||
if (portno > 0) {
|
|
||||||
sin.sin_port = htons(portno);
|
|
||||||
ast_rtp_set_peer(p->rtp, &sin);
|
|
||||||
if (debug)
|
|
||||||
ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
|
|
||||||
} else {
|
|
||||||
ast_rtp_stop(p->rtp);
|
|
||||||
if (debug)
|
|
||||||
ast_verbose("Peer doesn't provide audio\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Setup video port number */
|
|
||||||
if (vportno != -1)
|
|
||||||
vsin.sin_port = htons(vportno);
|
|
||||||
|
|
||||||
/* Setup UDPTL port number */
|
/* Setup UDPTL port number */
|
||||||
if (p->udptl) {
|
if (p->udptl) {
|
||||||
@@ -4893,6 +4877,28 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (p->rtp) {
|
||||||
|
if (portno > 0) {
|
||||||
|
sin.sin_port = htons(portno);
|
||||||
|
ast_rtp_set_peer(p->rtp, &sin);
|
||||||
|
if (debug)
|
||||||
|
ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
|
||||||
|
} else {
|
||||||
|
if (udptlportno > 0) {
|
||||||
|
if (debug)
|
||||||
|
ast_verbose("Got T.38 Re-invite without audio. Keeping RTP active during T.38 session. Callid %s\n", p->callid);
|
||||||
|
} else {
|
||||||
|
ast_rtp_stop(p->rtp);
|
||||||
|
if (debug)
|
||||||
|
ast_verbose("Peer doesn't provide audio. Callid %s\n", p->callid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Setup video port number */
|
||||||
|
if (vportno != -1)
|
||||||
|
vsin.sin_port = htons(vportno);
|
||||||
|
|
||||||
/* Next, scan through each "a=rtpmap:" line, noting each
|
/* Next, scan through each "a=rtpmap:" line, noting each
|
||||||
* specified RTP payload type (with corresponding MIME subtype):
|
* specified RTP payload type (with corresponding MIME subtype):
|
||||||
*/
|
*/
|
||||||
@@ -13479,7 +13485,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
|
|||||||
transmit_response(p, "488 Not acceptable here", req);
|
transmit_response(p, "488 Not acceptable here", req);
|
||||||
else
|
else
|
||||||
transmit_response_reliable(p, "488 Not acceptable here", req);
|
transmit_response_reliable(p, "488 Not acceptable here", req);
|
||||||
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* The other side is already setup for T.38 most likely so we need to acknowledge this too */
|
/* The other side is already setup for T.38 most likely so we need to acknowledge this too */
|
||||||
@@ -13497,7 +13503,9 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
|
|||||||
p->t38.state = T38_DISABLED;
|
p->t38.state = T38_DISABLED;
|
||||||
if (option_debug > 1)
|
if (option_debug > 1)
|
||||||
ast_log(LOG_DEBUG,"T38 state changed to %d on channel %s\n", p->t38.state, p->owner ? p->owner->name : "<none>");
|
ast_log(LOG_DEBUG,"T38 state changed to %d on channel %s\n", p->t38.state, p->owner ? p->owner->name : "<none>");
|
||||||
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
|
|
||||||
|
if (!p->lastinvite) /* Only destroy if this is *not* a re-invite */
|
||||||
|
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* we are not bridged in a call */
|
/* we are not bridged in a call */
|
||||||
@@ -13524,7 +13532,6 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
|
|||||||
transmit_response(p, "488 Not Acceptable Here (unsupported)", req);
|
transmit_response(p, "488 Not Acceptable Here (unsupported)", req);
|
||||||
else
|
else
|
||||||
transmit_response_reliable(p, "488 Not Acceptable Here (unsupported)", req);
|
transmit_response_reliable(p, "488 Not Acceptable Here (unsupported)", req);
|
||||||
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
|
|
||||||
sendok = FALSE;
|
sendok = FALSE;
|
||||||
}
|
}
|
||||||
/* No bridged peer with T38 enabled*/
|
/* No bridged peer with T38 enabled*/
|
||||||
|
|||||||
Reference in New Issue
Block a user