~0x44/nova/extdoc

« back to all changes in this revision

Viewing changes to vendor/Twisted-10.0.0/twisted/protocols/wire.py

  • Committer: Jesse Andrews
  • Date: 2010-05-28 06:05:26 UTC
  • Revision ID: git-v1:bf6e6e718cdc7488e2da87b21e258ccc065fe499
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
 
2
# See LICENSE for details.
 
3
 
 
4
"""Implement standard (and unused) TCP protocols.
 
5
 
 
6
These protocols are either provided by inetd, or are not provided at all.
 
7
"""
 
8
 
 
9
# system imports
 
10
import time, struct
 
11
from zope.interface import implements
 
12
 
 
13
# twisted import
 
14
from twisted.internet import protocol, interfaces
 
15
 
 
16
 
 
17
class Echo(protocol.Protocol):
 
18
    """As soon as any data is received, write it back (RFC 862)"""
 
19
    
 
20
    def dataReceived(self, data):
 
21
        self.transport.write(data)
 
22
 
 
23
 
 
24
class Discard(protocol.Protocol):
 
25
    """Discard any received data (RFC 863)"""
 
26
    
 
27
    def dataReceived(self, data):
 
28
        # I'm ignoring you, nyah-nyah
 
29
        pass
 
30
 
 
31
 
 
32
class Chargen(protocol.Protocol):
 
33
    """Generate repeating noise (RFC 864)"""
 
34
    noise = r'@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&?'
 
35
 
 
36
    implements(interfaces.IProducer)
 
37
 
 
38
    def connectionMade(self):
 
39
        self.transport.registerProducer(self, 0)
 
40
 
 
41
    def resumeProducing(self):
 
42
        self.transport.write(self.noise)
 
43
 
 
44
    def pauseProducing(self):
 
45
        pass
 
46
 
 
47
    def stopProducing(self):
 
48
        pass
 
49
 
 
50
 
 
51
class QOTD(protocol.Protocol):
 
52
    """Return a quote of the day (RFC 865)"""
 
53
    
 
54
    def connectionMade(self):
 
55
        self.transport.write(self.getQuote())
 
56
        self.transport.loseConnection()
 
57
 
 
58
    def getQuote(self):
 
59
        """Return a quote. May be overrriden in subclasses."""
 
60
        return "An apple a day keeps the doctor away.\r\n"
 
61
 
 
62
class Who(protocol.Protocol):
 
63
    """Return list of active users (RFC 866)"""
 
64
    
 
65
    def connectionMade(self):
 
66
        self.transport.write(self.getUsers())
 
67
        self.transport.loseConnection()
 
68
    
 
69
    def getUsers(self):
 
70
        """Return active users. Override in subclasses."""
 
71
        return "root\r\n"
 
72
 
 
73
 
 
74
class Daytime(protocol.Protocol):
 
75
    """Send back the daytime in ASCII form (RFC 867)"""
 
76
    
 
77
    def connectionMade(self):
 
78
        self.transport.write(time.asctime(time.gmtime(time.time())) + '\r\n')
 
79
        self.transport.loseConnection()
 
80
 
 
81
 
 
82
class Time(protocol.Protocol):
 
83
    """Send back the time in machine readable form (RFC 868)"""
 
84
    
 
85
    def connectionMade(self):
 
86
        # is this correct only for 32-bit machines?
 
87
        result = struct.pack("!i", int(time.time()))
 
88
        self.transport.write(result)
 
89
        self.transport.loseConnection()
 
90