]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 265698 via svnmerge from
authorMark Michelson <mmichelson@digium.com>
Tue, 25 May 2010 21:05:54 +0000 (21:05 +0000)
committerMark Michelson <mmichelson@digium.com>
Tue, 25 May 2010 21:05:54 +0000 (21:05 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

........
  r265698 | mmichelson | 2010-05-25 15:59:04 -0500 (Tue, 25 May 2010) | 12 lines

  Properly use peer's outboundproxy for outbound REGISTERs.

  The logic used in transmit_register to get the outboundproxy for a peer
  was flawed since this value would be overridden shortly afterwards when
  create_addr was called.

  In addition, this also fixes some logic used when parsing users.conf so
  that the peer name is placed in the internally-generated register string
  so that an outboundproxy set in the Asterisk GUI will be used for outbound
  REGISTERs.
........

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

channels/chan_sip.c

index d087ea4e98582a2356cf4061d1ac2f292e88b357..c886e4ded3a1d8e63d2690c91042a4b7e7b37c41 100644 (file)
@@ -11653,23 +11653,12 @@ static int transmit_register(struct sip_registry *r, int sipmethod, const char *
                if (p->do_history)
                        append_history(p, "RegistryInit", "Account: %s@%s", r->username, r->hostname);
 
-               if (!ast_strlen_zero(r->peername)) {
-                       if (!(peer = find_peer(r->peername, NULL, 1, FINDPEERS, FALSE, 0))) {
-                               ast_log(LOG_WARNING, "Could not find peer %s in transmit_register\n", r->peername);
-                       } else {
-                               p->peerauth = peer->auth;
-                       }
-               }
-               ref_proxy(p, obproxy_get(p, peer)); /* it is ok to pass a NULL peer into obproxy_get() */
-               if (peer) {
-                       unref_peer(peer, "transmit_registration: from find_peer operation");
-               }
                /* Use port number specified if no SRV record was found */
                if (!r->us.sin_port && r->portno)
                        r->us.sin_port = htons(r->portno);
 
                /* Find address to hostname */
-               if (create_addr(p, r->hostname, &r->us, 0)) {
+               if (create_addr(p, S_OR(r->peername, r->hostname), &r->us, 0)) {
                        /* we have what we hope is a temporary network error,
                         * probably DNS.  We need to reschedule a registration try */
                        dialog_unlink_all(p, TRUE, TRUE);
@@ -25107,14 +25096,14 @@ static int reload_config(enum channelreloadreason reason)
                                        if (!ast_strlen_zero(username) && !ast_strlen_zero(host)) {
                                                if (!ast_strlen_zero(secret)) {
                                                        if (!ast_strlen_zero(authuser)) {
-                                                               snprintf(tmp, sizeof(tmp), "%s:%s:%s@%s/%s", username, secret, authuser, host, contact);
+                                                               snprintf(tmp, sizeof(tmp), "%s?%s:%s:%s@%s/%s", cat, username, secret, authuser, host, contact);
                                                        } else {
-                                                               snprintf(tmp, sizeof(tmp), "%s:%s@%s/%s", username, secret, host, contact);
+                                                               snprintf(tmp, sizeof(tmp), "%s?%s:%s@%s/%s", cat, username, secret, host, contact);
                                                        }
                                                } else if (!ast_strlen_zero(authuser)) {
-                                                       snprintf(tmp, sizeof(tmp), "%s::%s@%s/%s", username, authuser, host, contact);
+                                                       snprintf(tmp, sizeof(tmp), "%s?%s::%s@%s/%s", cat, username, authuser, host, contact);
                                                } else {
-                                                       snprintf(tmp, sizeof(tmp), "%s@%s/%s", username, host, contact);
+                                                       snprintf(tmp, sizeof(tmp), "%s?%s@%s/%s", cat, username, host, contact);
                                                }
                                                if (sip_register(tmp, 0) == 0)
                                                        registry_count++;