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'] |