Handle yet some SIP contact issue nuances and exceptions (bug #5289 with mods and...
authorMark Spencer <markster@digium.com>
Wed, 12 Oct 2005 04:59:58 +0000 (04:59 +0000)
committerMark Spencer <markster@digium.com>
Wed, 12 Oct 2005 04:59:58 +0000 (04:59 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6747 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 1acdd1a..636f5e9 100755 (executable)
@@ -5279,7 +5279,7 @@ static int transmit_register(struct sip_registry *r, int sipmethod, char *auth,
                        append_history(p, "RegistryInit", tmp);
                }
                /* Find address to hostname */
-               if (create_addr(p,r->hostname)) {
+               if (create_addr(p, r->hostname)) {
                        /* we have what we hope is a temporary network error,
                         * probably DNS.  We need to reschedule a registration try */
                        sip_destroy(p);
@@ -10764,12 +10764,14 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc
                        ignore=1;
                }
        
-               extract_uri(p, req);
                e = ast_skip_blanks(e);
                if (sscanf(e, "%d %n", &respid, &len) != 1) {
                        ast_log(LOG_WARNING, "Invalid response: '%s'\n", e);
                } else {
-                       handle_response(p, respid, e + len, req,ignore, seqno);
+                       /* More SIP ridiculousness, we have to ignore bogus contacts in 100 etc responses */
+                       if ((respid == 200) || ((respid >= 300) && (respid <= 399)))
+                               extract_uri(p, req);
+                       handle_response(p, respid, e + len, req, ignore, seqno);
                }
                return 0;
        }