def _lookup_port(self, port, socktype): if isinstance(port, string_types): try: port = int(port) except ValueError: try: if socktype == 0: try: port = getservbyname(port, 'tcp') socktype = SOCK_STREAM except error: port = getservbyname(port, 'udp') socktype = SOCK_DGRAM elif socktype == SOCK_STREAM: port = getservbyname(port, 'tcp') elif socktype == SOCK_DGRAM: port = getservbyname(port, 'udp') else: raise gaierror(EAI_SERVICE, 'Servname not supported for ai_socktype') except error: ex = sys.exc_info()[1] if 'not found' in str(ex): raise gaierror(EAI_SERVICE, 'Servname not supported for ai_socktype') else: raise gaierror(str(ex)) except UnicodeEncodeError: raise error('Int or String expected') elif port is None: port = 0 elif isinstance(port, int): pass else: raise error('Int or String expected') port = int(port % 65536) return port, socktype
def _lookup_port(self, port, socktype): if isinstance(port, basestring): try: port = int(port) except ValueError: try: if socktype == 0: try: port = getservbyname(port, 'tcp') socktype = SOCK_STREAM except error: port = getservbyname(port, 'udp') socktype = SOCK_DGRAM elif socktype == SOCK_STREAM: port = getservbyname(port, 'tcp') elif socktype == SOCK_DGRAM: port = getservbyname(port, 'udp') else: raise gaierror(EAI_SERVICE, 'Servname not supported for ai_socktype') except error: ex = sys.exc_info()[1] if 'not found' in str(ex): raise gaierror(EAI_SERVICE, 'Servname not supported for ai_socktype') else: raise gaierror(str(ex)) except UnicodeEncodeError: raise error('Int or String expected') elif port is None: port = 0 elif isinstance(port, int): pass else: raise error('Int or String expected') port = int(port % 65536) return port, socktype
def _lookup_port(self, port, socktype): # pylint:disable=too-many-branches socktypes = [] if isinstance(port, string_types): try: port = int(port) except ValueError: try: if socktype == 0: origport = port try: port = getservbyname(port, 'tcp') socktypes.append(SOCK_STREAM) except error: port = getservbyname(port, 'udp') socktypes.append(SOCK_DGRAM) else: try: if port == getservbyname(origport, 'udp'): socktypes.append(SOCK_DGRAM) except error: pass elif socktype == SOCK_STREAM: port = getservbyname(port, 'tcp') elif socktype == SOCK_DGRAM: port = getservbyname(port, 'udp') else: raise gaierror( EAI_SERVICE, 'Servname not supported for ai_socktype') except error as ex: if 'not found' in str(ex): raise gaierror( EAI_SERVICE, 'Servname not supported for ai_socktype') else: raise gaierror(str(ex)) except UnicodeEncodeError: raise error('Int or String expected') elif port is None: port = 0 elif isinstance(port, integer_types): pass else: raise error('Int or String expected', port, type(port)) port = int(port % 65536) if not socktypes and socktype: socktypes.append(socktype) return port, socktypes
def _lookup_port(self, port, socktype): # pylint:disable=too-many-branches socktypes = [] if isinstance(port, string_types): try: port = int(port) except ValueError: try: if socktype == 0: origport = port try: port = getservbyname(port, "tcp") socktypes.append(SOCK_STREAM) except error: port = getservbyname(port, "udp") socktypes.append(SOCK_DGRAM) else: try: if port == getservbyname(origport, "udp"): socktypes.append(SOCK_DGRAM) except error: pass elif socktype == SOCK_STREAM: port = getservbyname(port, "tcp") elif socktype == SOCK_DGRAM: port = getservbyname(port, "udp") else: raise gaierror(EAI_SERVICE, "Servname not supported for ai_socktype") except error as ex: if "not found" in str(ex): raise gaierror(EAI_SERVICE, "Servname not supported for ai_socktype") else: raise gaierror(str(ex)) except UnicodeEncodeError: raise error("Int or String expected") elif port is None: port = 0 elif isinstance(port, integer_types): pass else: raise error("Int or String expected", port, type(port)) port = int(port % 65536) if not socktypes and socktype: socktypes.append(socktype) return port, socktypes
def _lookup_port(self, port, socktype): socktypes = [] if isinstance(port, string_types): try: port = int(port) except ValueError: try: if socktype == 0: origport = port try: port = getservbyname(port, 'tcp') socktypes.append(SOCK_STREAM) except error: port = getservbyname(port, 'udp') socktypes.append(SOCK_DGRAM) else: try: if port == getservbyname(origport, 'udp'): socktypes.append(SOCK_DGRAM) except error: pass elif socktype == SOCK_STREAM: port = getservbyname(port, 'tcp') elif socktype == SOCK_DGRAM: port = getservbyname(port, 'udp') else: raise gaierror(EAI_SERVICE, 'Servname not supported for ai_socktype') except error as ex: if 'not found' in str(ex): raise gaierror(EAI_SERVICE, 'Servname not supported for ai_socktype') else: raise gaierror(str(ex)) except UnicodeEncodeError: raise error('Int or String expected') elif port is None: port = 0 elif isinstance(port, int): pass else: raise error('Int or String expected') port = int(port % 65536) if not socktypes and socktype: socktypes.append(socktype) return port, socktypes
def test_getservbyname(self): self.assertEqual(_socket.getservbyname("http"), 80)
def _start(self): servers = [] prefer_xml = bool(self.config["global"].get("prefer_xml")) additional_hostnames = self.config["global"].get( "additional_hostnames") or [] if not isinstance(additional_hostnames, list): raise ConfigurationError("additional_hostnames is not a list") pretty = self.config.get("pretty_print", "auto") if pretty and pretty is not True: try: pretty = pretty.lower() except AttributeError: pretty = True else: if pretty == "auto": pretty = None else: pretty = True require_auth = self.config["global"].get("require_auth", True) for endpoint in self.config.get("endpoints") or []: interface = endpoint.get("interface") or "" port = endpoint["port"] personality = endpoint["personality"] host = endpoint.get("host") keyfile = endpoint.get("key") certfile = endpoint.get("crt") if not host: host = self._guess_host(interface) self.logger.info( "No host specified for %s endpoint on '%s'. Guessing %s", personality, interface, host) alternatives = self._guess_alternatives(interface) else: alternatives = [] application = SCLWSGIApplication( self.api.handle_request_indication, base_uri=None, server_address=interface, reference_point=personality, prefer_xml=prefer_xml, require_auth=require_auth, etsi_version_v2=self.etsi_version_v2, etsi_compatibility=self.etsi_compatibility_needed) if keyfile and certfile: scheme = "https" base_uri = application.base_uri = "https://%s:%s" % (host, port) servers.append( WSGIServer((interface, port), application, keyfile=keyfile, certfile=certfile)) else: scheme = "http" base_uri = application.base_uri = "http://%s:%s" % (host, port) servers.append(WSGIServer((interface, port), application)) self.api.register_endpoint(personality, base_uri) alternatives = [ "%s://%s:%s" % (scheme, host, port) for host in alternatives ] default_port = getservbyname(scheme) if port == default_port: alternatives.append("%s://%s" % (scheme, host)) if additional_hostnames: for hostname in additional_hostnames: alternative = "%s://%s" % (scheme, hostname) parsed_alternative = urlparse(alternative) alternative_port = parsed_alternative.port if alternative_port in (None, ''): alternative_port = port alternative = "%s:%s" % (alternative, port) alternatives.append(alternative) if alternative_port == default_port: alternatives.append( "%s://%s" % (scheme, parsed_alternative.hostname)) if alternatives: self.api.register_alternative_endpoints( personality, alternatives) rack = self.__rack = GEventServerRack(servers) rack.start() self._started()