| OLD | NEW |
| (Empty) |
| 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 | |
| OLD | NEW |