]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix SIP ACK for BYE (bug #3087)
authorRussell Bryant <russell@russellbryant.com>
Mon, 20 Dec 2004 01:48:20 +0000 (01:48 +0000)
committerRussell Bryant <russell@russellbryant.com>
Mon, 20 Dec 2004 01:48:20 +0000 (01:48 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@4500 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 8a039511a3db25fa801ca0713781290fa0a69bd7..68e0923a8b7e77b47b279cdf1ad0c369fd0185a5 100755 (executable)
@@ -3100,6 +3100,7 @@ static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, stru
        return 0;
 }
 
+/*--- reqprep: Initialize a SIP request packet ---*/
 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno, int newbranch)
 {
        struct sip_request *orig = &p->initreq;
@@ -3135,9 +3136,12 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int se
                        c = p->okcontacturi;
                else
                        c = p->initreq.rlPart2;
+       } else if (!ast_strlen_zero(p->okcontacturi)) {
+               c = p->okcontacturi; /* Use for BYE or REINVITE */
        } else if (!ast_strlen_zero(p->uri)) {
                c = p->uri;
        } else {
+               /* We have no URI, use To: or From:  header as URI (depending on direction) */
                if (p->outgoing)
                        strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
                else
@@ -3569,7 +3573,7 @@ static int determine_firstline_parts( struct sip_request *req ) {
       e++;
       if( !*e ) { return -1; }  
     }
-    req->rlPart2= e;
+    req->rlPart2= e;   /* URI */
     if( ( e= strrchr( req->rlPart2, 'S' ) ) == NULL ) {
       return -1;
     }
@@ -3583,9 +3587,12 @@ static int determine_firstline_parts( struct sip_request *req ) {
   return 1;
 }
 
-/* transmit_reinvite_with_sdp: Transmit reinvite with SDP :-) ---*/
-/*   A re-invite is basically a new INVITE with the same CALL-ID and TAG as the
-     INVITE that opened the SIP dialogue */
+/*--- transmit_reinvite_with_sdp: Transmit reinvite with SDP :-) ---*/
+/*     A re-invite is basically a new INVITE with the same CALL-ID and TAG as the
+       INVITE that opened the SIP dialogue 
+       We reinvite so that the audio stream (RTP) go directly between
+       the SIP UAs. SIP Signalling stays with * in the path.
+*/
 static int transmit_reinvite_with_sdp(struct sip_pvt *p)
 {
        struct sip_request req;
@@ -6563,6 +6570,7 @@ static void parse_moved_contact(struct sip_pvt *p, struct sip_request *req)
        }
 }
 
+/*--- check_pendings: Check pending actions on SIP call ---*/
 static void check_pendings(struct sip_pvt *p)
 {
        /* Go ahead and send bye at this point */
@@ -8865,6 +8873,7 @@ static struct ast_rtp *sip_get_vrtp_peer(struct ast_channel *chan)
        return rtp;
 }
 
+/*--- sip_set_rtp_peer: Set the RTP peer for this call ---*/
 static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struct ast_rtp *vrtp, int codecs)
 {
        struct sip_pvt *p;