Index: third_party/twisted_8_1/twisted/internet/unix.py |
diff --git a/third_party/twisted_8_1/twisted/internet/unix.py b/third_party/twisted_8_1/twisted/internet/unix.py |
deleted file mode 100644 |
index 0fc5ad86d6126a7716e2ac47d8dbb4335f785da7..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/internet/unix.py |
+++ /dev/null |
@@ -1,297 +0,0 @@ |
-# -*- test-case-name: twisted.test.test_unix -*- |
- |
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories. |
-# See LICENSE for details. |
- |
- |
-"""Various asynchronous TCP/IP classes. |
- |
-End users shouldn't use this module directly - use the reactor APIs instead. |
- |
-Maintainer: U{Itamar Shtull-Trauring<mailto:twisted@itamarst.org>} |
-""" |
- |
-# System imports |
-import os, stat, socket |
-from errno import EINTR, EMSGSIZE, EAGAIN, EWOULDBLOCK, ECONNREFUSED |
- |
-from zope.interface import implements, implementsOnly, implementedBy |
- |
-if not hasattr(socket, 'AF_UNIX'): |
- raise ImportError("UNIX sockets not supported on this platform") |
- |
-# Twisted imports |
-from twisted.internet import base, tcp, udp, error, interfaces, protocol, address |
-from twisted.internet.error import CannotListenError |
-from twisted.python import lockfile, log, reflect, failure |
- |
- |
-class Server(tcp.Server): |
- def __init__(self, sock, protocol, client, server, sessionno): |
- tcp.Server.__init__(self, sock, protocol, (client, None), server, sessionno) |
- |
- def getHost(self): |
- return address.UNIXAddress(self.socket.getsockname()) |
- |
- def getPeer(self): |
- return address.UNIXAddress(self.hostname) |
- |
- |
-class Port(tcp.Port): |
- addressFamily = socket.AF_UNIX |
- socketType = socket.SOCK_STREAM |
- |
- transport = Server |
- lockFile = None |
- |
- def __init__(self, fileName, factory, backlog=50, mode=0666, reactor=None, wantPID = 0): |
- tcp.Port.__init__(self, fileName, factory, backlog, reactor=reactor) |
- self.mode = mode |
- self.wantPID = wantPID |
- |
- def __repr__(self): |
- factoryName = reflect.qual(self.factory.__class__) |
- if hasattr(self, 'socket'): |
- return '<%s on %r>' % (factoryName, self.port) |
- else: |
- return '<%s (not listening)>' % (factoryName,) |
- |
- def _buildAddr(self, name): |
- return address.UNIXAddress(name) |
- |
- def startListening(self): |
- """Create and bind my socket, and begin listening on it. |
- |
- This is called on unserialization, and must be called after creating a |
- server to begin listening on the specified port. |
- """ |
- log.msg("%s starting on %r" % (self.factory.__class__, repr(self.port))) |
- if self.wantPID: |
- self.lockFile = lockfile.FilesystemLock(self.port + ".lock") |
- if not self.lockFile.lock(): |
- raise CannotListenError, (None, self.port, "Cannot acquire lock") |
- else: |
- if not self.lockFile.clean: |
- try: |
- # This is a best-attempt at cleaning up |
- # left-over unix sockets on the filesystem. |
- # If it fails, there's not much else we can |
- # do. The bind() below will fail with an |
- # exception that actually propegates. |
- if stat.S_ISSOCK(os.stat(self.port).st_mode): |
- os.remove(self.port) |
- except: |
- pass |
- |
- self.factory.doStart() |
- try: |
- skt = self.createInternetSocket() |
- skt.bind(self.port) |
- except socket.error, le: |
- raise CannotListenError, (None, self.port, le) |
- else: |
- # Make the socket readable and writable to the world. |
- try: |
- os.chmod(self.port, self.mode) |
- except: # probably not a visible filesystem name |
- pass |
- skt.listen(self.backlog) |
- self.connected = True |
- self.socket = skt |
- self.fileno = self.socket.fileno |
- self.numberAccepts = 100 |
- self.startReading() |
- |
- def connectionLost(self, reason): |
- os.unlink(self.port) |
- if self.lockFile is not None: |
- self.lockFile.unlock() |
- tcp.Port.connectionLost(self, reason) |
- |
- def getHost(self): |
- """Returns a UNIXAddress. |
- |
- This indicates the server's address. |
- """ |
- return address.UNIXAddress(self.socket.getsockname()) |
- |
- |
-class Client(tcp.BaseClient): |
- """A client for Unix sockets.""" |
- addressFamily = socket.AF_UNIX |
- socketType = socket.SOCK_STREAM |
- |
- def __init__(self, filename, connector, reactor=None, checkPID = 0): |
- self.connector = connector |
- self.realAddress = self.addr = filename |
- if checkPID and not lockfile.isLocked(filename + ".lock"): |
- self._finishInit(None, None, error.BadFileError(filename), reactor) |
- self._finishInit(self.doConnect, self.createInternetSocket(), |
- None, reactor) |
- |
- def getPeer(self): |
- return address.UNIXAddress(self.addr) |
- |
- def getHost(self): |
- return address.UNIXAddress(None) |
- |
- |
-class Connector(base.BaseConnector): |
- def __init__(self, address, factory, timeout, reactor, checkPID): |
- base.BaseConnector.__init__(self, factory, timeout, reactor) |
- self.address = address |
- self.checkPID = checkPID |
- |
- def _makeTransport(self): |
- return Client(self.address, self, self.reactor, self.checkPID) |
- |
- def getDestination(self): |
- return address.UNIXAddress(self.address) |
- |
- |
-class DatagramPort(udp.Port): |
- """Datagram UNIX port, listening for packets.""" |
- |
- implements(interfaces.IUNIXDatagramTransport) |
- |
- addressFamily = socket.AF_UNIX |
- |
- def __init__(self, addr, proto, maxPacketSize=8192, mode=0666, reactor=None): |
- """Initialize with address to listen on. |
- """ |
- udp.Port.__init__(self, addr, proto, maxPacketSize=maxPacketSize, reactor=reactor) |
- self.mode = mode |
- |
- |
- def __repr__(self): |
- protocolName = reflect.qual(self.protocol.__class__,) |
- if hasattr(self, 'socket'): |
- return '<%s on %r>' % (protocolName, self.port) |
- else: |
- return '<%s (not listening)>' % (protocolName,) |
- |
- |
- def _bindSocket(self): |
- log.msg("%s starting on %s"%(self.protocol.__class__, repr(self.port))) |
- try: |
- skt = self.createInternetSocket() # XXX: haha misnamed method |
- if self.port: |
- skt.bind(self.port) |
- except socket.error, le: |
- raise error.CannotListenError, (None, self.port, le) |
- if self.port: |
- try: |
- os.chmod(self.port, self.mode) |
- except: # probably not a visible filesystem name |
- pass |
- self.connected = 1 |
- self.socket = skt |
- self.fileno = self.socket.fileno |
- |
- def write(self, datagram, address): |
- """Write a datagram.""" |
- try: |
- return self.socket.sendto(datagram, address) |
- except socket.error, se: |
- no = se.args[0] |
- if no == EINTR: |
- return self.write(datagram, address) |
- elif no == EMSGSIZE: |
- raise error.MessageLengthError, "message too long" |
- elif no == EAGAIN: |
- # oh, well, drop the data. The only difference from UDP |
- # is that UDP won't ever notice. |
- # TODO: add TCP-like buffering |
- pass |
- else: |
- raise |
- |
- def connectionLost(self, reason=None): |
- """Cleans up my socket. |
- """ |
- log.msg('(Port %s Closed)' % repr(self.port)) |
- base.BasePort.connectionLost(self, reason) |
- if hasattr(self, "protocol"): |
- # we won't have attribute in ConnectedPort, in cases |
- # where there was an error in connection process |
- self.protocol.doStop() |
- self.connected = 0 |
- self.socket.close() |
- del self.socket |
- del self.fileno |
- if hasattr(self, "d"): |
- self.d.callback(None) |
- del self.d |
- |
- def setLogStr(self): |
- self.logstr = reflect.qual(self.protocol.__class__) + " (UDP)" |
- |
- def getHost(self): |
- return address.UNIXAddress(self.socket.getsockname()) |
- |
- |
-class ConnectedDatagramPort(DatagramPort): |
- """A connected datagram UNIX socket.""" |
- |
- implementsOnly(interfaces.IUNIXDatagramConnectedTransport, |
- *(implementedBy(base.BasePort))) |
- |
- def __init__(self, addr, proto, maxPacketSize=8192, mode=0666, bindAddress=None, reactor=None): |
- assert isinstance(proto, protocol.ConnectedDatagramProtocol) |
- DatagramPort.__init__(self, bindAddress, proto, maxPacketSize, mode, reactor) |
- self.remoteaddr = addr |
- |
- def startListening(self): |
- try: |
- self._bindSocket() |
- self.socket.connect(self.remoteaddr) |
- self._connectToProtocol() |
- except: |
- self.connectionFailed(failure.Failure()) |
- |
- def connectionFailed(self, reason): |
- self.loseConnection() |
- self.protocol.connectionFailed(reason) |
- del self.protocol |
- |
- def doRead(self): |
- """Called when my socket is ready for reading.""" |
- read = 0 |
- while read < self.maxThroughput: |
- try: |
- data, addr = self.socket.recvfrom(self.maxPacketSize) |
- read += len(data) |
- self.protocol.datagramReceived(data) |
- except socket.error, se: |
- no = se.args[0] |
- if no in (EAGAIN, EINTR, EWOULDBLOCK): |
- return |
- if no == ECONNREFUSED: |
- self.protocol.connectionRefused() |
- else: |
- raise |
- except: |
- log.deferr() |
- |
- def write(self, data): |
- """Write a datagram.""" |
- try: |
- return self.socket.send(data) |
- except socket.error, se: |
- no = se.args[0] |
- if no == EINTR: |
- return self.write(data) |
- elif no == EMSGSIZE: |
- raise error.MessageLengthError, "message too long" |
- elif no == ECONNREFUSED: |
- self.protocol.connectionRefused() |
- elif no == EAGAIN: |
- # oh, well, drop the data. The only difference from UDP |
- # is that UDP won't ever notice. |
- # TODO: add TCP-like buffering |
- pass |
- else: |
- raise |
- |
- def getPeer(self): |
- return address.UNIXAddress(self.remoteaddr) |