pike.git / lib / modules / Protocols.pmod / DNS.pmod

version» Context lines:

pike.git/lib/modules/Protocols.pmod/DNS.pmod:37:    if(strlen(s)>63)    throw(({"Too long component in domain name\n",backtrace()}));    return sprintf("%c%s",strlen(s),s);    }       string low_mkquery(int id,    string dname,    int cl,    int type)    { +  if ( dname[-1] == '.') dname = dname[..sizeof(dname)-2];    return sprintf("%2c%c%c%2c%2c%2c%2c%s\000%2c%2c",    id,    1,0,    1,    0,    0,    0,    Array.map(dname/".",mklabel)*"",    type,cl);   
pike.git/lib/modules/Protocols.pmod/DNS.pmod:518:    foreach(m->an, mapping m2)    {    if(m2->preference<minpref)    {    ret=m2->mx;    minpref=m2->preference;    }    }    return ret;    } +  +  string *get_mx(string host) +  { +  mapping m; +  if(sizeof(domains) && host[-1] != '.' && sizeof(host/".") < 3) { +  m = do_sync_query(mkquery(host, C_IN, T_MX)); +  if(!m || !m->an || !sizeof(m->an)) { +  foreach(domains, string domain) +  { +  m = do_sync_query(mkquery(host+"."+domain, C_IN, T_MX)); +  if(m && m->an && sizeof(m->an)) +  break;    } -  +  } +  } else { +  m = do_sync_query(mkquery(host, C_IN, T_MX)); +  } +  if (!m) { +  return 0; +  } +  array a = m->an; +  array(string) b = column( a, "mx"); +  sort( column( a, "preference"), b);    -  +  return b; +  } + } +    #define REMOVE_DELAY 120   #define GIVE_UP_DELAY (RETRIES * RETRY_DELAY + REMOVE_DELAY)*2      class async_client   {    inherit client;    inherit Stdio.UDP : udp;    async_client next_client;       class Request