Exemplo n.º 1
0
    def _gethostbyaddr(self, ip_address):
        if PY3:
            if isinstance(ip_address, str):
                ip_address = ip_address.encode('idna')
            elif not isinstance(ip_address, (bytes, bytearray)):
                raise TypeError('Expected es(idna), not %s' %
                                type(ip_address).__name__)
        else:
            if isinstance(ip_address, text_type):
                ip_address = ip_address.encode('ascii')
            elif not isinstance(ip_address, str):
                raise TypeError('Expected string, not %s' %
                                type(ip_address).__name__)

        waiter = Waiter(self.hub)
        try:
            self.ares.gethostbyaddr(waiter, ip_address)
            return waiter.get()
        except InvalidIP:
            result = self._getaddrinfo(ip_address,
                                       None,
                                       family=AF_UNSPEC,
                                       socktype=SOCK_DGRAM)
            if not result:
                raise
            _ip_address = result[0][-1][0]
            if isinstance(_ip_address, text_type):
                _ip_address = _ip_address.encode('ascii')
            if _ip_address == ip_address:
                raise
            waiter.clear()
            self.ares.gethostbyaddr(waiter, _ip_address)
            return waiter.get()
Exemplo n.º 2
0
    def _gethostbyaddr(self, ip_address):
        if PY3:
            if isinstance(ip_address, str):
                ip_address = ip_address.encode("idna")
            elif not isinstance(ip_address, (bytes, bytearray)):
                raise TypeError("Expected es(idna), not %s" % type(ip_address).__name__)
        else:
            if isinstance(ip_address, text_type):
                ip_address = ip_address.encode("ascii")
            elif not isinstance(ip_address, str):
                raise TypeError("Expected string, not %s" % type(ip_address).__name__)

        waiter = Waiter(self.hub)
        try:
            self.ares.gethostbyaddr(waiter, ip_address)
            return waiter.get()
        except InvalidIP:
            result = self._getaddrinfo(ip_address, None, family=AF_UNSPEC, socktype=SOCK_DGRAM)
            if not result:
                raise
            _ip_address = result[0][-1][0]
            if isinstance(_ip_address, text_type):
                _ip_address = _ip_address.encode("ascii")
            if _ip_address == ip_address:
                raise
            waiter.clear()
            self.ares.gethostbyaddr(waiter, _ip_address)
            return waiter.get()
Exemplo n.º 3
0
 def _gethostbyaddr(self, ip_address):
     waiter = Waiter(self.hub)
     try:
         self.ares.gethostbyaddr(waiter, ip_address)
         return waiter.get()
     except InvalidIP:
         result = self._getaddrinfo(ip_address, None, family=AF_UNSPEC, socktype=SOCK_DGRAM)
         if not result:
             raise
         _ip_address = result[0][-1][0]
         if _ip_address == ip_address:
             raise
         waiter.clear()
         self.ares.gethostbyaddr(waiter, _ip_address)
         return waiter.get()
 def _gethostbyaddr(self, ip_address):
     waiter = Waiter(self.hub)
     try:
         self.ares.gethostbyaddr(waiter, ip_address)
         return waiter.get()
     except InvalidIP:
         result = self._getaddrinfo(ip_address, None, family=AF_UNSPEC, socktype=SOCK_DGRAM)
         if not result:
             raise
         _ip_address = result[0][-1][0]
         if _ip_address == ip_address:
             raise
         waiter.clear()
         self.ares.gethostbyaddr(waiter, _ip_address)
         return waiter.get()
Exemplo n.º 5
0
def iwait(objects, timeout=None):
    """Yield objects as they are ready, until all are ready or timeout expired.

    *objects* must be iterable yielding instance implementing wait protocol (rawlink() and unlink()).

    Modified version, fixing https://github.com/surfly/gevent/issues/467
    """
    # QQQ would be nice to support iterable here that can be generated slowly (why?)
    waiter = Waiter()
    waiter_switch = waiter.switch
    queue = deque()

    def switch(value=None):
        queue.append(value)
        waiter_switch(True)

    if timeout is not None:
        timer = get_hub().loop.timer(timeout, priority=-1)
        timer.start(switch, _NONE)
    try:
        count = len(objects)
        for obj in objects:
            obj.rawlink(switch)

        n = count
        while n:
            noti = waiter.get()
            assert noti is True, 'Invalid switch into iwait'
            waiter.clear()
            while queue:
                item = queue.popleft()
                if item is _NONE:
                    return
                yield item
                n -= 1

    finally:
        if timeout is not None:
            timer.stop()
        for obj in objects:
            unlink = getattr(obj, 'unlink', None)
            if unlink:
                try:
                    unlink(switch)
                except:
                    traceback.print_exc()
Exemplo n.º 6
0
 def __gethostbyaddr(self, ip_address):
     waiter = Waiter(self.hub)
     try:
         self.cares.gethostbyaddr(waiter, ip_address)
         return waiter.get()
     except InvalidIP:
         result = self._getaddrinfo(ip_address, None,
                                    family=AF_UNSPEC, socktype=SOCK_DGRAM,
                                    proto=0, flags=0)
         if not result:
             raise
         _ip_address = result[0][-1][0]
         if isinstance(_ip_address, text_type):
             _ip_address = _ip_address.encode('ascii')
         if _ip_address == ip_address:
             raise
         waiter.clear()
         self.cares.gethostbyaddr(waiter, _ip_address)
         return waiter.get()
Exemplo n.º 7
0
    def _gethostbyaddr(self, ip_address):
        if isinstance(ip_address, unicode):
            ip_address = ip_address.encode('ascii')
        elif not isinstance(ip_address, str):
            raise TypeError('Expected string, not %s' % type(ip_address).__name__)

        waiter = Waiter(self.hub)
        try:
            self.ares.gethostbyaddr(waiter, ip_address)
            return waiter.get()
        except InvalidIP:
            result = self._getaddrinfo(ip_address, None, family=AF_UNSPEC, socktype=SOCK_DGRAM)
            if not result:
                raise
            _ip_address = result[0][-1][0]
            if _ip_address == ip_address:
                raise
            waiter.clear()
            self.ares.gethostbyaddr(waiter, _ip_address)
            return waiter.get()