| Index: third_party/twisted_8_1/twisted/application/strports.py
|
| diff --git a/third_party/twisted_8_1/twisted/application/strports.py b/third_party/twisted_8_1/twisted/application/strports.py
|
| deleted file mode 100644
|
| index 18ac64e8f841ce490913a151f9a6c27aab332aaf..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/application/strports.py
|
| +++ /dev/null
|
| @@ -1,175 +0,0 @@
|
| -# -*- test-case-name: twisted.test.test_strports -*-
|
| -
|
| -# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -#
|
| -"""
|
| -Port description language
|
| -
|
| -This module implements a description mini-language for ports, and provides
|
| -functions to parse it and to use it to directly construct appropriate
|
| -network server services or to directly listen on them.
|
| -
|
| -Here are some examples::
|
| - >>> s=service("80", server.Site())
|
| - >>> s=service("tcp:80", server.Site())
|
| - >>> s=service("tcp:80:interface=127.0.0.1", server.Site())
|
| - >>> s=service("ssl:443", server.Site())
|
| - >>> s=service("ssl:443:privateKey=mykey.pem", server.Site())
|
| - >>> s=service("ssl:443:privateKey=mykey.pem:certKey=cert.pem", server.Site())
|
| - >>> s=service("unix:/var/run/finger", FingerFactory())
|
| - >>> s=service("unix:/var/run/finger:mode=660", FingerFactory())
|
| - >>> p=listen("80", server.Site())
|
| - >>> p=listen("tcp:80", server.Site())
|
| - >>> p=listen("tcp:80:interface=127.0.0.1", server.Site())
|
| - >>> p=listen("ssl:443", server.Site())
|
| - >>> p=listen("ssl:443:privateKey=mykey.pem", server.Site())
|
| - >>> p=listen("ssl:443:privateKey=mykey.pem:certKey=cert.pem", server.Site())
|
| - >>> p=listen("unix:/var/run/finger", FingerFactory())
|
| - >>> p=listen("unix:/var/run/finger:mode=660", FingerFactory())
|
| -
|
| -See specific function documentation for more information.
|
| -
|
| -Maintainer: U{Moshe Zadka<mailto:moshez@twistedmatrix.com>}
|
| -"""
|
| -from __future__ import generators
|
| -
|
| -def _parseTCP(factory, port, interface="", backlog=50):
|
| - return (int(port), factory), {'interface': interface,
|
| - 'backlog': int(backlog)}
|
| -
|
| -def _parseUNIX(factory, address, mode='666', backlog=50):
|
| - return (address, factory), {'mode': int(mode, 8), 'backlog': int(backlog)}
|
| -
|
| -def _parseSSL(factory, port, privateKey="server.pem", certKey=None,
|
| - sslmethod=None, interface='', backlog=50):
|
| - from twisted.internet import ssl
|
| - if certKey is None:
|
| - certKey = privateKey
|
| - kw = {}
|
| - if sslmethod is not None:
|
| - kw['sslmethod'] = getattr(ssl.SSL, sslmethod)
|
| - cf = ssl.DefaultOpenSSLContextFactory(privateKey, certKey, **kw)
|
| - return ((int(port), factory, cf),
|
| - {'interface': interface, 'backlog': int(backlog)})
|
| -
|
| -_funcs = {"tcp": _parseTCP,
|
| - "unix": _parseUNIX,
|
| - "ssl": _parseSSL}
|
| -
|
| -_OP, _STRING = range(2)
|
| -def _tokenize(description):
|
| - current = ''
|
| - ops = ':='
|
| - nextOps = {':': ':=', '=': ':'}
|
| - description = iter(description)
|
| - for n in description:
|
| - if n in ops:
|
| - yield _STRING, current
|
| - yield _OP, n
|
| - current = ''
|
| - ops = nextOps[n]
|
| - elif n=='\\':
|
| - current += description.next()
|
| - else:
|
| - current += n
|
| - yield _STRING, current
|
| -
|
| -def _parse(description):
|
| - args, kw = [], {}
|
| - def add(sofar):
|
| - if len(sofar)==1:
|
| - args.append(sofar[0])
|
| - else:
|
| - kw[sofar[0]] = sofar[1]
|
| - sofar = ()
|
| - for (type, value) in _tokenize(description):
|
| - if type is _STRING:
|
| - sofar += (value,)
|
| - elif value==':':
|
| - add(sofar)
|
| - sofar = ()
|
| - add(sofar)
|
| - return args, kw
|
| -
|
| -def parse(description, factory, default=None):
|
| - """
|
| - Parse the description of a reliable virtual circuit server (that is, a
|
| - TCP port, a UNIX domain socket or an SSL port) and return the data
|
| - necessary to call the reactor methods to listen on the given socket with
|
| - the given factory.
|
| -
|
| - An argument with no colons means a default port. Usually the default
|
| - type is C{tcp}, but passing a non-C{None} value as C{default} will set
|
| - that as the default. Otherwise, it is a colon-separated string. The
|
| - first part means the type -- currently, it can only be ssl, unix or tcp.
|
| - After that, comes a list of arguments. Arguments can be positional or
|
| - keyword, and can be mixed. Keyword arguments are indicated by
|
| - C{'name=value'}. If a value is supposed to contain a C{':'}, a C{'='} or
|
| - a C{'\\'}, escape it with a C{'\\'}.
|
| -
|
| - For TCP, the arguments are the port (port number) and, optionally the
|
| - interface (interface on which to listen) and backlog (how many clients
|
| - to keep in the backlog).
|
| -
|
| - For UNIX domain sockets, the arguments are address (the file name of the
|
| - socket) and optionally the mode (the mode bits of the file, as an octal
|
| - number) and the backlog (how many clients to keep in the backlog).
|
| -
|
| - For SSL sockets, the arguments are the port (port number) and,
|
| - optionally, the privateKey (file in which the private key is in),
|
| - certKey (file in which the certification is in), sslmethod (the name of
|
| - the SSL method to allow), the interface (interface on which to listen)
|
| - and the backlog (how many clients to keep in the backlog).
|
| -
|
| - @type description: C{str}
|
| - @type factory: L{twisted.internet.interfaces.IProtocolFactory}
|
| - @type default: C{str} or C{None}
|
| - @rtype: C{tuple}
|
| - @return: a tuple of string, tuple and dictionary. The string is the name
|
| - of the method (sans C{'listen'}) to call, and the tuple and dictionary
|
| - are the arguments and keyword arguments to the method.
|
| - @raises ValueError: if the string is formatted incorrectly.
|
| - @raises KeyError: if the type is other than unix, ssl or tcp.
|
| - """
|
| - args, kw = _parse(description)
|
| - if not args or (len(args)==1 and not kw):
|
| - args[0:0] = [default or 'tcp']
|
| - return (args[0].upper(),)+_funcs[args[0]](factory, *args[1:], **kw)
|
| -
|
| -def service(description, factory, default=None):
|
| - """Return the service corresponding to a description
|
| -
|
| - @type description: C{str}
|
| - @type factory: L{twisted.internet.interfaces.IProtocolFactory}
|
| - @type default: C{str} or C{None}
|
| - @rtype: C{twisted.application.service.IService}
|
| - @return: the service corresponding to a description of a reliable
|
| - virtual circuit server.
|
| -
|
| - See the documentation of the C{parse} function for description
|
| - of the semantics of the arguments.
|
| - """
|
| - from twisted.application import internet
|
| - name, args, kw = parse(description, factory, default)
|
| - return getattr(internet, name+'Server')(*args, **kw)
|
| -
|
| -def listen(description, factory, default=None):
|
| - """Listen on a port corresponding to a description
|
| -
|
| - @type description: C{str}
|
| - @type factory: L{twisted.internet.interfaces.IProtocolFactory}
|
| - @type default: C{str} or C{None}
|
| - @rtype: C{twisted.internet.interfaces.IListeningPort}
|
| - @return: the port corresponding to a description of a reliable
|
| - virtual circuit server.
|
| -
|
| - See the documentation of the C{parse} function for description
|
| - of the semantics of the arguments.
|
| - """
|
| - from twisted.internet import reactor
|
| - name, args, kw = parse(description, factory, default)
|
| - return getattr(reactor, 'listen'+name)(*args, **kw)
|
| -
|
| -__all__ = ['parse', 'service', 'listen']
|
|
|