|
|
|
@ -10298,13 +10298,15 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
|
|
|
|
|
if ((resp >= 300) && (resp < 700)) {
|
|
|
|
|
if ((option_verbose > 2) && (resp != 487))
|
|
|
|
|
ast_verbose(VERBOSE_PREFIX_3 "Got SIP response %d \"%s\" back from %s\n", resp, rest, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr));
|
|
|
|
|
if (p->rtp) {
|
|
|
|
|
/* Immediately stop RTP */
|
|
|
|
|
ast_rtp_stop(p->rtp);
|
|
|
|
|
}
|
|
|
|
|
if (p->vrtp) {
|
|
|
|
|
/* Immediately stop VRTP */
|
|
|
|
|
ast_rtp_stop(p->vrtp);
|
|
|
|
|
if (sipmethod == SIP_INVITE) {
|
|
|
|
|
if (p->rtp) {
|
|
|
|
|
/* Immediately stop RTP */
|
|
|
|
|
ast_rtp_stop(p->rtp);
|
|
|
|
|
}
|
|
|
|
|
if (p->vrtp) {
|
|
|
|
|
/* Immediately stop VRTP */
|
|
|
|
|
ast_rtp_stop(p->vrtp);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* XXX Locking issues?? XXX */
|
|
|
|
|
switch(resp) {
|
|
|
|
@ -10348,7 +10350,8 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
|
|
|
|
|
/* ACK on invite */
|
|
|
|
|
if (sipmethod == SIP_INVITE)
|
|
|
|
|
transmit_request(p, SIP_ACK, seqno, 0, 0);
|
|
|
|
|
ast_set_flag(p, SIP_ALREADYGONE);
|
|
|
|
|
if (sipmethod != SIP_MESSAGE && sipmethod != SIP_INFO)
|
|
|
|
|
ast_set_flag(p, SIP_ALREADYGONE);
|
|
|
|
|
if (!p->owner)
|
|
|
|
|
ast_set_flag(p, SIP_NEEDDESTROY);
|
|
|
|
|
} else if ((resp >= 100) && (resp < 200)) {
|
|
|
|
@ -11175,6 +11178,10 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
|
|
|
|
|
ast_copy_string(p->context, p->subscribecontext, sizeof(p->context));
|
|
|
|
|
else if (ast_strlen_zero(p->context))
|
|
|
|
|
strcpy(p->context, default_context);
|
|
|
|
|
|
|
|
|
|
/* Get full contact header - this needs to be used as a request URI in NOTIFY's */
|
|
|
|
|
parse_ok_contact(p, req);
|
|
|
|
|
|
|
|
|
|
/* Get destination right away */
|
|
|
|
|
build_contact(p);
|
|
|
|
|
if (gotdest) {
|
|
|
|
|