'Returns true if the service could be discovered on the
network, and updates this object with details discovered.'

def request(self, zeroconf, timeout):

    now = currentTimeMillis()
    delay = _LISTENER_TIME
    next = (now + delay)
    last = (now + timeout)
    result = 0
    try:
        zeroconf.addListener(self, DNSQuestion(self.name, _TYPE_ANY, _CLASS_IN))
        while ((self.server is None) or (self.address is None) or (self.text is None)):
            if (last <= now):
                return 0
            if (next <= now):
                out = DNSOutgoing(_FLAGS_QR_QUERY)
                out.addQuestion(DNSQuestion(self.name, _TYPE_SRV, _CLASS_IN))
                out.addAnswerAtTime(zeroconf.cache.getByDetails(self.name, _TYPE_SRV, _CLASS_IN), now)
                out.addQuestion(DNSQuestion(self.name, _TYPE_TXT, _CLASS_IN))
                out.addAnswerAtTime(zeroconf.cache.getByDetails(self.name, _TYPE_TXT, _CLASS_IN), now)
                if (self.server is not None):
                    out.addQuestion(DNSQuestion(self.server, _TYPE_A, _CLASS_IN))
                    out.addAnswerAtTime(zeroconf.cache.getByDetails(self.server, _TYPE_A, _CLASS_IN), now)
                zeroconf.send(out)
                next = (now + delay)
                delay = (delay * 2)
            zeroconf.wait((min(next, last) - now))
            now = currentTimeMillis()
        result = 1
    finally:
        zeroconf.removeListener(self)
    return result
