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

version» Context lines:

pike.git/lib/modules/Protocols.pmod/DNS.pmod:1498:    async_client next_client;       class Request    {    string req;    string domain;    function callback;    int retries;    int timestamp;    array args; +  mixed retry_co;    };       mapping requests=([]);       protected private void remove(object(Request) r)    {    if(!r) return;    sscanf(r->req,"%2c",int id);    m_delete(requests,id); -  +  if (r->retry_co) remove_call_out(r->retry_co); +  r->retry_co = UNDEFINED;    r->callback(r->domain,0,@r->args);    destruct(r);    }       void retry(object(Request) r, void|int nsno)    {    if(!r) return;    if (nsno >= sizeof(nameservers)) {    if(r->retries++ > RETRIES)    { -  call_out(remove,REMOVE_DELAY,r); +  r->retry_co = call_out(remove, REMOVE_DELAY, r);    return;    } else {    nsno = 0;    }    }       send(nameservers[nsno],53,r->req); -  call_out(retry,RETRY_DELAY,r,nsno+1); +  r->retry_co = call_out(retry, RETRY_DELAY, r, nsno+1);    }       void do_query(string domain, int cl, int type,    function(string,mapping,mixed...:void) callback,    mixed ... args)    {    for(int e=next_client ? 100 : 256;e>=0;e--)    {    int lid = random(65536);    if(!catch { requests[lid]++; })
pike.git/lib/modules/Protocols.pmod/DNS.pmod:1547:    string req=low_mkquery(lid,domain,cl,type);       object r=Request();    r->req=req;    r->domain=domain;    r->callback=callback;    r->args=args;    r->timestamp=time();    requests[lid]=r;    udp::send(nameservers[0],53,r->req); -  call_out(retry,RETRY_DELAY,r,1); +  r->retry_co = call_out(retry, RETRY_DELAY, r, 1);    return;    }    }       /* We failed miserably to find a request id to use,    * so we create a second UDP port to be able to have more    * requests 'in the air'. /Hubbe    */    if(!next_client)    next_client=async_client(nameservers,domains);