| 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)
 | 
| 
 |