]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Don't stop RTP on errors on INFO messages.
authorOlle Johansson <oej@edvina.net>
Mon, 16 Apr 2007 14:08:33 +0000 (14:08 +0000)
committerOlle Johansson <oej@edvina.net>
Mon, 16 Apr 2007 14:08:33 +0000 (14:08 +0000)
Disclaimer: This patch was needed for Edvina AstHoloApp and was
meant to be included in 1.2, but never made it in time so I felt
I could add it now.

No, just joking, patching error found while testing T.140 with Omnitor earlier
this spring.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61663 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index f3d6edfc66a6b428e398608b04e4115c91295c96..155c0d73ebbb070287f046bd2ba4d82a600838af 100644 (file)
@@ -10201,13 +10201,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) {
@@ -10251,7 +10253,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)) {