def getaddrinfo(space, w_host, w_port, family=rsocket.AF_UNSPEC, socktype=0, proto=0, flags=0): """getaddrinfo(host, port [, family, socktype, proto, flags]) -> list of (family, socktype, proto, canonname, sockaddr) Resolve host and port into addrinfo struct. """ # host can be None, string or unicode if space.is_w(w_host, space.w_None): host = None elif space.isinstance_w(w_host, space.w_str): host = space.str_w(w_host) elif space.isinstance_w(w_host, space.w_unicode): w_shost = space.call_method(w_host, "encode", space.wrap("idna")) host = space.str_w(w_shost) else: raise OperationError(space.w_TypeError, space.wrap("getaddrinfo() argument 1 must be string or None")) # port can be None, int or string if space.is_w(w_port, space.w_None): port = None elif space.isinstance_w(w_port, space.w_int) or space.isinstance_w(w_port, space.w_long): port = str(space.int_w(w_port)) elif space.isinstance_w(w_port, space.w_str): port = space.str_w(w_port) else: raise OperationError(space.w_TypeError, space.wrap("getaddrinfo() argument 2 must be integer or string")) try: lst = rsocket.getaddrinfo(host, port, family, socktype, proto, flags) except SocketError, e: raise converted_error(space, e)
def getaddrinfo(space, w_host, w_port, family=rsocket.AF_UNSPEC, type=0, proto=0, flags=0): """getaddrinfo(host, port [, family, type, proto, flags]) -> list of (family, type, proto, canonname, sockaddr) Resolve host and port into addrinfo struct. """ socktype = type # host can be None, string or unicode if space.is_w(w_host, space.w_None): host = None elif space.isinstance_w(w_host, space.w_bytes): host = space.bytes_w(w_host) elif space.isinstance_w(w_host, space.w_unicode): host = encode_idna(space, w_host) else: raise oefmt(space.w_TypeError, "getaddrinfo() argument 1 must be string or None") # port can be None, int or string if space.is_w(w_port, space.w_None): port = None elif space.isinstance_w(w_port, space.w_int): port = str(space.int_w(w_port)) elif space.isinstance_w(w_port, space.w_bytes): port = space.bytes_w(w_port) elif space.isinstance_w(w_port, space.w_unicode): port = space.bytes_w( space.encode_unicode_object(w_port, 'utf-8', 'strict')) else: raise oefmt(space.w_TypeError, "getaddrinfo() argument 2 must be integer or string") try: lst = rsocket.getaddrinfo(host, port, family, socktype, proto, flags) except SocketError as e: raise converted_error(space, e) lst1 = [ space.newtuple([ space.newint(family), space.newint(socktype), space.newint(protocol), space.newtext(canonname), addr_as_object(addr, INVALID_SOCKET, space) ]) # -1 as per cpython for (family, socktype, protocol, canonname, addr) in lst ] return space.newlist(lst1)
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: host = space.str_w((space.getitem(w_sockaddr, space.wrap(0)))) port = str(space.int_w(space.getitem(w_sockaddr, space.wrap(1)))) lst = rsocket.getaddrinfo(host, port, rsocket.AF_UNSPEC, rsocket.SOCK_DGRAM, 0, rsocket.AI_NUMERICHOST) if len(lst) > 1: raise OperationError( get_error(space, 'error'), space.wrap("sockaddr resolved to multiple addresses")) addr = lst[0][4] fill_from_object(addr, space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) except SocketError, e: raise converted_error(space, e)
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: host = space.text_w((space.getitem(w_sockaddr, space.newint(0)))) port = str(space.int_w(space.getitem(w_sockaddr, space.newint(1)))) lst = rsocket.getaddrinfo(host, port, rsocket.AF_UNSPEC, rsocket.SOCK_DGRAM, 0, rsocket.AI_NUMERICHOST) if len(lst) > 1: raise oefmt(get_error(space, 'error'), "sockaddr resolved to multiple addresses") addr = lst[0][4] fill_from_object(addr, space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) except SocketError as e: raise converted_error(space, e) return space.newtuple([space.newtext(host), space.newtext(servport)])
def getaddrinfo(space, w_host, w_port, family=rsocket.AF_UNSPEC, type=0, proto=0, flags=0): """getaddrinfo(host, port [, family, type, proto, flags]) -> list of (family, type, proto, canonname, sockaddr) Resolve host and port into addrinfo struct. """ socktype = type # host can be None, string or unicode if space.is_w(w_host, space.w_None): host = None elif space.isinstance_w(w_host, space.w_bytes): host = space.bytes_w(w_host) elif space.isinstance_w(w_host, space.w_unicode): w_shost = space.call_method(w_host, "encode", space.wrap("idna")) host = space.bytes_w(w_shost) else: raise OperationError( space.w_TypeError, space.wrap("getaddrinfo() argument 1 must be string or None")) # port can be None, int or string if space.is_w(w_port, space.w_None): port = None elif space.isinstance_w(w_port, space.w_int): port = str(space.int_w(w_port)) elif space.isinstance_w(w_port, space.w_bytes): port = space.bytes_w(w_port) elif space.isinstance_w(w_port, space.w_unicode): port = space.str_w(w_port) else: raise OperationError( space.w_TypeError, space.wrap("getaddrinfo() argument 2 must be integer or string")) try: lst = rsocket.getaddrinfo(host, port, family, socktype, proto, flags) except SocketError, e: raise converted_error(space, e)
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: host = space.str_w((space.getitem(w_sockaddr, space.wrap(0)))) port = str(space.int_w(space.getitem(w_sockaddr, space.wrap(1)))) lst = rsocket.getaddrinfo(host, port, rsocket.AF_UNSPEC, rsocket.SOCK_DGRAM, 0, rsocket.AI_NUMERICHOST) if len(lst) > 1: raise OperationError( get_error(space, 'error'), space.wrap("sockaddr resolved to multiple addresses")) addr = lst[0][4] fill_from_object(addr, space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) except SocketError, e: raise converted_error(space, e)
def getaddrinfo(space, w_host, w_port, family=rsocket.AF_UNSPEC, socktype=0, proto=0, flags=0): """getaddrinfo(host, port [, family, socktype, proto, flags]) -> list of (family, socktype, proto, canonname, sockaddr) Resolve host and port into addrinfo struct. """ # host can be None, string or unicode if space.is_w(w_host, space.w_None): host = None elif space.isinstance_w(w_host, space.w_str): host = space.bytes_w(w_host) elif space.isinstance_w(w_host, space.w_unicode): w_shost = space.call_method(w_host, "encode", space.wrap("idna")) host = space.bytes_w(w_shost) else: raise oefmt(space.w_TypeError, "getaddrinfo() argument 1 must be string or None") # port can be None, int or string if space.is_w(w_port, space.w_None): port = None elif space.isinstance_w(w_port, space.w_int) or space.isinstance_w(w_port, space.w_long): port = str(space.int_w(w_port)) elif space.isinstance_w(w_port, space.w_str): port = space.bytes_w(w_port) else: raise oefmt(space.w_TypeError, "getaddrinfo() argument 2 must be integer or string") try: lst = rsocket.getaddrinfo(host, port, family, socktype, proto, flags) except SocketError as e: raise converted_error(space, e) lst1 = [space.newtuple([space.wrap(family), space.wrap(socktype), space.wrap(protocol), space.wrap(canonname), addr_as_object(addr, INVALID_SOCKET, space)]) # -1 as per cpython for (family, socktype, protocol, canonname, addr) in lst] return space.newlist(lst1)