Beispiel #1
0
 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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
 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()
 def test_getservbyname(self):
     self.assertEqual(_socket.getservbyname("http"), 80)