Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(234)

Unified Diff: third_party/twisted_8_1/twisted/internet/udp.py

Issue 12261012: Remove third_party/twisted_8_1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/twisted_8_1/twisted/internet/udp.py
diff --git a/third_party/twisted_8_1/twisted/internet/udp.py b/third_party/twisted_8_1/twisted/internet/udp.py
deleted file mode 100644
index 1597814f680df30f84508e302377f5f1563b3950..0000000000000000000000000000000000000000
--- a/third_party/twisted_8_1/twisted/internet/udp.py
+++ /dev/null
@@ -1,385 +0,0 @@
-# -*- test-case-name: twisted.test.test_udp -*-
-
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-
-"""
-Various asynchronous UDP classes.
-
-Please do not use this module directly.
-
-Maintainer: U{Itamar Shtull-Trauring<mailto:twisted@itamarst.org>}
-"""
-
-# System Imports
-import os
-import socket
-import operator
-import struct
-import warnings
-from zope.interface import implements
-
-from twisted.python.runtime import platformType
-if platformType == 'win32':
- from errno import WSAEWOULDBLOCK as EWOULDBLOCK
- from errno import WSAEINTR as EINTR
- from errno import WSAEMSGSIZE as EMSGSIZE
- from errno import WSAECONNREFUSED as ECONNREFUSED
- from errno import WSAECONNRESET
- EAGAIN=EWOULDBLOCK
-else:
- from errno import EWOULDBLOCK, EINTR, EMSGSIZE, ECONNREFUSED, EAGAIN
-
-# Twisted Imports
-from twisted.internet import protocol, base, defer, address
-from twisted.persisted import styles
-from twisted.python import log, reflect, failure
-
-# Sibling Imports
-import abstract, error, interfaces
-
-
-class Port(base.BasePort):
- """UDP port, listening for packets."""
-
- implements(interfaces.IUDPTransport, interfaces.ISystemHandle)
-
- addressFamily = socket.AF_INET
- socketType = socket.SOCK_DGRAM
- maxThroughput = 256 * 1024 # max bytes we read in one eventloop iteration
-
- # Actual port number being listened on, only set to a non-None
- # value when we are actually listening.
- _realPortNumber = None
-
- def __init__(self, port, proto, interface='', maxPacketSize=8192, reactor=None):
- """Initialize with a numeric port to listen on.
- """
- base.BasePort.__init__(self, reactor)
- self.port = port
- self.protocol = proto
- self.maxPacketSize = maxPacketSize
- self.interface = interface
- self.setLogStr()
- self._connectedAddr = None
-
- def __repr__(self):
- if self._realPortNumber is not None:
- return "<%s on %s>" % (self.protocol.__class__, self._realPortNumber)
- else:
- return "<%s not connected>" % (self.protocol.__class__,)
-
- def getHandle(self):
- """Return a socket object."""
- return self.socket
-
- 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.
- """
- self._bindSocket()
- self._connectToProtocol()
-
- def _bindSocket(self):
- try:
- skt = self.createInternetSocket()
- skt.bind((self.interface, self.port))
- except socket.error, le:
- raise error.CannotListenError, (self.interface, self.port, le)
-
- # Make sure that if we listened on port 0, we update that to
- # reflect what the OS actually assigned us.
- self._realPortNumber = skt.getsockname()[1]
-
- log.msg("%s starting on %s"%(self.protocol.__class__, self._realPortNumber))
-
- self.connected = 1
- self.socket = skt
- self.fileno = self.socket.fileno
-
- def _connectToProtocol(self):
- self.protocol.makeConnection(self)
- self.startReading()
-
-
- 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)
- except socket.error, se:
- no = se.args[0]
- if no in (EAGAIN, EINTR, EWOULDBLOCK):
- return
- if (no == ECONNREFUSED) or (platformType == "win32" and no == WSAECONNRESET):
- if self._connectedAddr:
- self.protocol.connectionRefused()
- else:
- raise
- else:
- read += len(data)
- try:
- self.protocol.datagramReceived(data, addr)
- except:
- log.err()
-
-
- def write(self, datagram, addr=None):
- """Write a datagram.
-
- @param addr: should be a tuple (ip, port), can be None in connected mode.
- """
- if self._connectedAddr:
- assert addr in (None, self._connectedAddr)
- try:
- return self.socket.send(datagram)
- except socket.error, se:
- no = se.args[0]
- if no == EINTR:
- return self.write(datagram)
- elif no == EMSGSIZE:
- raise error.MessageLengthError, "message too long"
- elif no == ECONNREFUSED:
- self.protocol.connectionRefused()
- else:
- raise
- else:
- assert addr != None
- if not addr[0].replace(".", "").isdigit():
- warnings.warn("Please only pass IPs to write(), not hostnames", DeprecationWarning, stacklevel=2)
- try:
- return self.socket.sendto(datagram, addr)
- except socket.error, se:
- no = se.args[0]
- if no == EINTR:
- return self.write(datagram, addr)
- elif no == EMSGSIZE:
- raise error.MessageLengthError, "message too long"
- elif no == ECONNREFUSED:
- # in non-connected UDP ECONNREFUSED is platform dependent, I think
- # and the info is not necessarily useful. Nevertheless maybe we
- # should call connectionRefused? XXX
- return
- else:
- raise
-
- def writeSequence(self, seq, addr):
- self.write("".join(seq), addr)
-
- def connect(self, host, port):
- """'Connect' to remote server."""
- if self._connectedAddr:
- raise RuntimeError, "already connected, reconnecting is not currently supported (talk to itamar if you want this)"
- if not abstract.isIPAddress(host):
- raise ValueError, "please pass only IP addresses, not domain names"
- self._connectedAddr = (host, port)
- self.socket.connect((host, port))
-
- def _loseConnection(self):
- self.stopReading()
- if self.connected: # actually means if we are *listening*
- from twisted.internet import reactor
- reactor.callLater(0, self.connectionLost)
-
- def stopListening(self):
- if self.connected:
- result = self.d = defer.Deferred()
- else:
- result = None
- self._loseConnection()
- return result
-
- def loseConnection(self):
- warnings.warn("Please use stopListening() to disconnect port", DeprecationWarning, stacklevel=2)
- self.stopListening()
-
- def connectionLost(self, reason=None):
- """Cleans up my socket.
- """
- log.msg('(Port %s Closed)' % self._realPortNumber)
- self._realPortNumber = None
- 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 logPrefix(self):
- """Returns the name of my class, to prefix log entries with.
- """
- return self.logstr
-
- def getHost(self):
- """
- Returns an IPv4Address.
-
- This indicates the address from which I am connecting.
- """
- return address.IPv4Address('UDP', *(self.socket.getsockname() + ('INET_UDP',)))
-
-
-class ConnectedPort(Port):
- """DEPRECATED.
-
- A connected UDP socket."""
-
- implements(interfaces.IUDPConnectedTransport)
-
- def __init__(self, (remotehost, remoteport), port, proto, interface='', maxPacketSize=8192, reactor=None):
- Port.__init__(self, port, proto, interface, maxPacketSize, reactor)
- self.remotehost = remotehost
- self.remoteport = remoteport
-
- def startListening(self):
- self._bindSocket()
- if abstract.isIPAddress(self.remotehost):
- self.setRealAddress(self.remotehost)
- else:
- self.realAddress = None
- d = self.reactor.resolve(self.remotehost)
- d.addCallback(self.setRealAddress).addErrback(self.connectionFailed)
-
- def setRealAddress(self, addr):
- self.realAddress = addr
- self.socket.connect((addr, self.remoteport))
- self._connectToProtocol()
-
- 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) or (platformType == "win32" and no == WSAECONNRESET):
- 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()
- else:
- raise
-
- def getPeer(self):
- """
- Returns a tuple of ('INET_UDP', hostname, port), indicating
- the remote address.
- """
- return address.IPv4Address('UDP', self.remotehost, self.remoteport, 'INET_UDP')
-
-
-class MulticastMixin:
- """Implement multicast functionality."""
-
- def getOutgoingInterface(self):
- i = self.socket.getsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF)
- return socket.inet_ntoa(struct.pack("@i", i))
-
- def setOutgoingInterface(self, addr):
- """Returns Deferred of success."""
- return self.reactor.resolve(addr).addCallback(self._setInterface)
-
- def _setInterface(self, addr):
- i = socket.inet_aton(addr)
- self.socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, i)
- return 1
-
- def getLoopbackMode(self):
- return self.socket.getsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP)
-
- def setLoopbackMode(self, mode):
- mode = struct.pack("b", operator.truth(mode))
- self.socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, mode)
-
- def getTTL(self):
- return self.socket.getsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL)
-
- def setTTL(self, ttl):
- ttl = struct.pack("B", ttl)
- self.socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl)
-
- def joinGroup(self, addr, interface=""):
- """Join a multicast group. Returns Deferred of success."""
- return self.reactor.resolve(addr).addCallback(self._joinAddr1, interface, 1)
-
- def _joinAddr1(self, addr, interface, join):
- return self.reactor.resolve(interface).addCallback(self._joinAddr2, addr, join)
-
- def _joinAddr2(self, interface, addr, join):
- addr = socket.inet_aton(addr)
- interface = socket.inet_aton(interface)
- if join:
- cmd = socket.IP_ADD_MEMBERSHIP
- else:
- cmd = socket.IP_DROP_MEMBERSHIP
- try:
- self.socket.setsockopt(socket.IPPROTO_IP, cmd, addr + interface)
- except socket.error, e:
- return failure.Failure(error.MulticastJoinError(addr, interface, *e.args))
-
- def leaveGroup(self, addr, interface=""):
- """Leave multicast group, return Deferred of success."""
- return self.reactor.resolve(addr).addCallback(self._joinAddr1, interface, 0)
-
-
-class MulticastPort(MulticastMixin, Port):
- """UDP Port that supports multicasting."""
-
- implements(interfaces.IMulticastTransport)
-
- def __init__(self, port, proto, interface='', maxPacketSize=8192, reactor=None, listenMultiple=False):
- Port.__init__(self, port, proto, interface, maxPacketSize, reactor)
- self.listenMultiple = listenMultiple
-
- def createInternetSocket(self):
- skt = Port.createInternetSocket(self)
- if self.listenMultiple:
- skt.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- if hasattr(socket, "SO_REUSEPORT"):
- skt.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
- return skt
-
-
-class ConnectedMulticastPort(MulticastMixin, ConnectedPort):
- """DEPRECATED.
-
- Connected UDP Port that supports multicasting."""
-
- implements(interfaces.IMulticastTransport)
« no previous file with comments | « third_party/twisted_8_1/twisted/internet/tksupport.py ('k') | third_party/twisted_8_1/twisted/internet/unix.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698