Return TypeFunction nameArguments
hzEcodehzDNS::SelectMX(hzList<hzResServer>&,const char*,)

Declared in file: hzDNS.h
Defined in file : hzDNS.cpp

Function Logic:

0:START 1:hzChain::Clear 2:!dom||!dom[0] 3:Return hzerr(E_ARGUMENT,No domain name supplied) 4:hzDNS::QueryMX rc 5:rc!=E_OK 6:Return rc 7:_hzGlobal_Debug&HZ_DEBUG_DNS 8:hzDNS::NoAnswers hzDNS::NoAuth hzDNS::NoAdditional hzChain::Printf ri 9:ri.Valid(); 10:hzList::Iter::Element dr 11:dr.m_Ipa==(uint32_t)0x00000000||dr.m_Ipa==(uint32_t)0x7f000001 12:_hzGlobal_Debug&HZ_DEBUG_DNS 13:hzChain::Printf 14:S S S hzList::Add 15:Return rc

Function body:

hzEcode hzDNS::SelectMX (hzList<hzResServer>& ServersMX, const char* dom)
{
   _hzfunc("hzDNS::SelectMX") ;
   hzList<hzResServer>         smx ;
   hzList<hzResServer>::Iter   I ;
   hzList<DnsRec>::Iter        ri ;
   hzList<DnsRec>::Iter        si ;
   hzDNS           dq ;
   hzDNS           dq2 ;
   hzResServer     S ;
   hzResServer     X ;
   DnsRec          dr ;
   DnsRec          dr2 ;
   hzEcode         rc = E_OK ;
   m_Error.Clear() ;
   if (!dom || !dom[0])
       return hzerr(E_ARGUMENT, "No domain name supplied") ;
   rc = dq.QueryMX(dom) ;
   if (rc != E_OK)
       return rc ;
   if (_hzGlobal_Debug & HZ_DEBUG_DNS)
       m_Error.Printf("DNS found %d answers, %d auth and %d additional\n", dq.NoAnswers(), dq.NoAuth(), dq.NoAdditional()) ;
   for (ri = dq.m_arAns ; ri.Valid() ; ri++)
   {
       dr = ri.Element() ;
       if (dr.m_Ipa == IPADDR_NULL || dr.m_Ipa == IPADDR_LOCAL)
       {
           if (_hzGlobal_Debug & HZ_DEBUG_DNS)
               m_Error.Printf("Domain %s Server %s - NULL IP (case 1)\n", *dr.m_Domain, *dr.m_Server) ;
       }
       S.m_Servername = dr.m_Server ;
       S.m_nValue = dr.m_nValue ;
       S.m_Ipa = dr.m_Ipa ;
       ServersMX.Add(S) ;
   }
   /*
   **  if (!ServersMX.Count())
   **   {
   **    // This is where the initial answer did not for whatever reason, provide an IP address along with the servername.
   **  
   **    if (_hzGlobal_Debug & HZ_DEBUG_DNS)
   **     m_Error.Printf("Initial pass did not produce IP addresses for the mail servers\n") ;
   **  
   **    for (ri = dq.m_arAns ; ri.Valid() ; ri++)
   **    {
   **     dr = ri.Element() ;
   **  
   **     // Do a direct (type A) query on the mail server's name
   **     rc = dq2.QueryA(*dr.m_Domain) ;
   **     if (rc != E_OK)
   **     {
   **      if (_hzGlobal_Debug & HZ_DEBUG_DNS)
   **       m_Error.Printf("DNS Unavailable (case 2)\n") ;
   **      return rc ;
   **     }
   **  
   **     if (!dq2.NoAnswers())
   **     {
   **      if (_hzGlobal_Debug & HZ_DEBUG_DNS)
   **       m_Error.Printf("Type A query on mail-server <%s> produced no answers\n", *dr.m_Server) ;
   **      return E_DNS_FAILED ;
   **     }
   **  
   **     for (si = dq2.m_arAns ; si.Valid() ; si++)
   **     {
   **      dr2 = si.Element() ;
   **  
   **      if (dr2.m_Ipa == IPADDR_NULL || dr2.m_Ipa == IPADDR_LOCAL)
   **      {
   **       if (_hzGlobal_Debug & HZ_DEBUG_DNS)
   **        m_Error.Printf("Domain %s Server %s - NULL IP (case 2)\n", *dr2.m_Domain, *dr2.m_Server) ;
   **       continue ;
   **      }
   **  
   **      S.m_Servername = dr2.m_Server ;
   **      S.m_nValue = dr2.m_nValue ;
   **      S.m_Ipa = dr2.m_Ipa ;
   **      ServersMX.Add(S) ;
   **     }
   **    }
   **   }
   **  
   **   if (!ServersMX.Count())
   **   {
   **    // This is where the initial answer did not for whatever reason, provide an IP address along with the servername.
   **  
   **    if (_hzGlobal_Debug & HZ_DEBUG_DNS)
   **     m_Error.Printf("Initial pass did not produce IP addresses for the mail servers\n") ;
   **  
   **    for (ri = dq.m_arAns ; ri.Valid() ; ri++)
   **    {
   **     dr = ri.Element() ;
   **  
   **     // Do a direct (type A) query on the mail server's name
   **     rc = dq2.QueryA(*dr.m_Server) ;
   **     if (rc != E_OK)
   **     {
   **      if (_hzGlobal_Debug & HZ_DEBUG_DNS)
   **       m_Error.Printf("DNS Unavailable (case 3)\n") ;
   **      return rc ;
   **     }
   **  
   **     if (!dq2.NoAnswers())
   **     {
   **      if (_hzGlobal_Debug & HZ_DEBUG_DNS)
   **       m_Error.Printf("Type A query on mail-server <%s> produced no answers\n", *dr.m_Server) ;
   **      return E_DNS_FAILED ;
   **     }
   **  
   **     for (si = dq2.m_arAns ; si.Valid() ; si++)
   **     {
   **      dr2 = si.Element() ;
   **  
   **      if (dr2.m_Ipa == IPADDR_NULL || dr2.m_Ipa == IPADDR_LOCAL)
   **      {
   **       if (_hzGlobal_Debug & HZ_DEBUG_DNS)
   **        m_Error.Printf("Domain %s Server %s - NULL IP (case 3)\n", *dr2.m_Domain, *dr2.m_Server) ;
   **       continue ;
   **      }
   **  
   **      S.m_Servername = dr2.m_Server ;
   **      S.m_nValue = dr2.m_nValue ;
   **      S.m_Ipa = dr2.m_Ipa ;
   **      ServersMX.Add(S) ;
   **     }
   **    }
   **   }
   **      */
   return rc ;
}