Author: oej
Date: Thu Aug 21 04:41:13 2014
New Revision: 421664

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=421664
Log:
Trying to understand the old transmit_register() function. Some of the things 
here
are a mystery. In order to add proper DNS srv failover and lookup a lot of stuff
needs to be re-ordered and changed.

Also implemented a flag that indicates that someone configured a port number. In
that case, SRV should be disabled. That part is a bug fix I think.

Modified:
    team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/chan_sip.c
    team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/config_parser.c
    team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/include/sip.h
    team/oej/pgtips-srv-and-outbound-stuff-1.8/configs/sip.conf.sample

Modified: team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/chan_sip.c
URL: 
http://svnview.digium.com/svn/asterisk/team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/chan_sip.c?view=diff&rev=421664&r1=421663&r2=421664
==============================================================================
--- team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/chan_sip.c (original)
+++ team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/chan_sip.c Thu Aug 21 
04:41:13 2014
@@ -5753,8 +5753,9 @@
        peername2 = ast_strdupa(opeer);
        AST_NONSTANDARD_RAW_ARGS(hostport, peername2, ':');
 
-       if (hostport.port)
-               dialog->portinuri = 1;
+       if (hostport.port) {
+               dialog->portinuri = TRUE;
+       }
 
        dialog->timer_t1 = global_t1; /* Default SIP retransmission timer T1 
(RFC 3261) */
        dialog->timer_b = global_timer_b; /* Default SIP transaction timer B 
(RFC 3261) */
@@ -5804,7 +5805,7 @@
                /* Section 4.2 of RFC 3263 specifies that if a port number is 
specified, then
                 * an A record lookup should be used instead of SRV.
                 */
-               if (!hostport.port && sip_cfg.srvlookup) {
+               if (!dialog->portinuri && sip_cfg.srvlookup) {
                        if (dialog->srvcontext) {
                                ast_srv_context_free_list(dialog->srvcontext);
                        }
@@ -13840,12 +13841,19 @@
                snprintf(transport, sizeof(transport), "_%s._%s", 
get_srv_service(r->transport), get_srv_protocol(r->transport)); /* have to use 
static get_transport function */
                r->us.ss.ss_family = get_address_family_filter(r->transport); 
/* Filter address family */
 
+#ifdef DISABLE_DUAL_LOOKUP
+               /* OEJ: Disabling this lookup, since create_addr is better at 
using DNS SRV records for
+                  now. Remind me wy we do the SRV here instead of in the 
dialog, since we keep the dialog
+                  anyway.
+               */
                /* No point in doing a DNS lookup of the register hostname if 
we're just going to
                 * end up using an outbound proxy. obproxy_get is safe to call 
with either of r->call
                 * or peer NULL. Since we're only concerned with its existence, 
we're not going to
                 * bother getting a ref to the proxy*/
                if (!obproxy_get(r->call, peer)) {
+                       /* Why are we doing this when create_addr is doing it 
for us? */
                        registry_addref(r, "add reg ref for dnsmgr");
+                       /* If we have a configured port number, do not do SRV 
lookups */
                        ast_dnsmgr_lookup_cb(peer ? peer->tohost : r->hostname, 
&r->us, &r->dnsmgr, sip_cfg.srvlookup ? transport : NULL, 
on_dns_update_registry, r);
                        if (!r->dnsmgr) {
                                /*dnsmgr refresh disabled, no reference added! 
*/
@@ -13856,6 +13864,7 @@
                        peer = unref_peer(peer, "removing peer ref for 
dnsmgr_lookup");
                }
        }
+#endif
 
        if (r->call) {  /* We have a registration */
                if (!auth) {
@@ -13880,6 +13889,9 @@
 
                /* reset tag to consistent value from registry */
                ast_string_field_set(p, tag, r->localtag);
+
+               /* If we have a port configured, do not activate SRV record 
lookup for this host */
+               p->portinuri = r->portconfigured;
 
                if (p->do_history) {
                        append_history(p, "RegistryInit", "Account: %s@%s", 
r->username, r->hostname);
@@ -13904,6 +13916,18 @@
                                }
                                peer = unref_peer(peer, "unref after 
find_peer");
                        }
+               }
+
+               /* Set transport and port so the correct contact is built */
+               set_socket_transport(&p->socket, r->transport);
+               if (r->transport == SIP_TRANSPORT_TLS || r->transport == 
SIP_TRANSPORT_TCP) {
+                       p->socket.port =
+                           
htons(ast_sockaddr_port(&sip_tcp_desc.local_address));
+               }
+               if (!r->dnsmgr && r->portno) {
+                       ast_sockaddr_set_port(&p->sa, r->portno);
+                       ast_sockaddr_set_port(&p->recv, r->portno);
+                       ast_debug(2, "Confusing code set port to %d\n", 
r->portno);
                }
 
                /* Find address to hostname */
@@ -13929,11 +13953,6 @@
                /* Copy back Call-ID in case create_addr changed it */
                ast_string_field_set(r, callid, p->callid);
 
-               if (!r->dnsmgr && r->portno) {
-                       ast_sockaddr_set_port(&p->sa, r->portno);
-                       ast_sockaddr_set_port(&p->recv, r->portno);
-                       ast_debug(2, "Confusing code set port to %d\n", 
r->portno);
-               }
                if (!ast_strlen_zero(p->fromdomain)) {
                        portno = (p->fromdomainport) ? p->fromdomainport : 
STANDARD_SIP_PORT;
                } else if (!ast_strlen_zero(r->regdomain)) {
@@ -13968,12 +13987,6 @@
                        ast_string_field_set(p, exten, r->callback);
                }
 
-               /* Set transport and port so the correct contact is built */
-               set_socket_transport(&p->socket, r->transport);
-               if (r->transport == SIP_TRANSPORT_TLS || r->transport == 
SIP_TRANSPORT_TCP) {
-                       p->socket.port =
-                           
htons(ast_sockaddr_port(&sip_tcp_desc.local_address));
-               }
 
                /*
                  check which address we should use in our contact header
@@ -14065,11 +14078,11 @@
 
        initialize_initreq(p, &req);
        if (sip_debug_test_pvt(p)) {
-               ast_verbose("REGISTER %d headers, %d lines\n", 
p->initreq.headers, p->initreq.lines);
+               ast_verbose("SIP REGISTER %d headers, %d lines\n", 
p->initreq.headers, p->initreq.lines);
        }
        r->regstate = auth ? REG_STATE_AUTHSENT : REG_STATE_REGSENT;
        r->regattempts++;       /* Another attempt */
-       ast_debug(4, "REGISTER attempt %d to %s@%s\n", r->regattempts, 
r->username, r->hostname);
+       ast_debug(4, "SIP REGISTER attempt %d to %s@%s\n", r->regattempts, 
r->username, r->hostname);
        res = send_request(p, &req, XMIT_CRITICAL, p->ocseq);
        dialog_unref(p, "p is finished here at the end of transmit_register");
        return res;

Modified: 
team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/config_parser.c
URL: 
http://svnview.digium.com/svn/asterisk/team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/config_parser.c?view=diff&rev=421664&r1=421663&r2=421664
==============================================================================
--- team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/config_parser.c 
(original)
+++ team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/config_parser.c Thu 
Aug 21 04:41:13 2014
@@ -244,11 +244,16 @@
 
        /* if no portnum specified, set default for transport */
        if (!portnum) {
+               reg->portconfigured = FALSE;
                if (transport == SIP_TRANSPORT_TLS) {
                        portnum = STANDARD_TLS_PORT;
                } else {
                        portnum = STANDARD_SIP_PORT;
                }
+       } else {
+               /* If any port (including 5060/5061) was configured we should 
avoid
+                  doing SRV lookups - just like for SIP URI's */
+               reg->portconfigured = TRUE;
        }
 
        /* copy into sip_registry object */

Modified: team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/include/sip.h
URL: 
http://svnview.digium.com/svn/asterisk/team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/include/sip.h?view=diff&rev=421664&r1=421663&r2=421664
==============================================================================
--- team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/include/sip.h 
(original)
+++ team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/include/sip.h Thu 
Aug 21 04:41:13 2014
@@ -1352,6 +1352,7 @@
        );
        enum sip_transport transport;   /*!< Transport for this registration 
UDP, TCP or TLS */
        int portno;                     /*!< Optional port override */
+       int portconfigured;             /*!< If port is configured, disable SRV 
lookups. */
        int regdomainport;              /*!< Port override for domainport */
        int expire;                     /*!< Sched ID of expiration */
        int configured_expiry;          /*!< Configured value to use for the 
Expires header */

Modified: team/oej/pgtips-srv-and-outbound-stuff-1.8/configs/sip.conf.sample
URL: 
http://svnview.digium.com/svn/asterisk/team/oej/pgtips-srv-and-outbound-stuff-1.8/configs/sip.conf.sample?view=diff&rev=421664&r1=421663&r2=421664
==============================================================================
--- team/oej/pgtips-srv-and-outbound-stuff-1.8/configs/sip.conf.sample 
(original)
+++ team/oej/pgtips-srv-and-outbound-stuff-1.8/configs/sip.conf.sample Thu Aug 
21 04:41:13 2014
@@ -704,6 +704,7 @@
 ; to use a port here. That is, you must explicitly provide a "secret" and 
"authuser" even if
 ; they are blank. See the third example below for an illustration.
 ;
+; If a port number is specified for the host, no SRV lookup will be done. 
 ;
 ; Examples:
 ;


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to