| 4 | from tls import TLSHandshake |
| 5 | |
| 6 | class HTTPRequestHandler(asyncore.dispatcher): |
| 7 | response = """HTTP/1.0 200 OK\r |
| 8 | Date: Sun, 23 Oct 2016 18:02:00 GMT\r |
| 9 | Content-Type: text/html; charset=UTF-8\r |
| 10 | Content-Encoding: UTF-8\r |
| 11 | Content-Length: 136\r |
| 12 | Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT\r |
| 13 | Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)\r |
| 14 | ETag: "3f80f-1b6-3e1cb03b"\r |
| 15 | Accept-Ranges: bytes\r |
| 16 | Connection: close\r |
| 17 | \r |
| 18 | <html> |
| 19 | <head> |
| 20 | <title>An Example Page</title> |
| 21 | </head> |
| 22 | <body> |
| 23 | Hello World, this is a very simple HTML document. |
| 24 | </body> |
| 25 | </html>""" |
| 26 | |
| 27 | def __init__(self, sock): |
| 28 | if not hasattr(self, '_map'): |
| 29 | asyncore.dispatcher.__init__(self, sock) |
| 30 | self.inbuf = "" |
| 31 | self.ready = True |
| 32 | self.busy = False |
| 33 | self.respos = 0 |
| 34 | |
| 35 | def handle_close(self): |
| 36 | self.close() |
| 37 | |
| 38 | def readable(self): |
| 39 | return self.ready |
| 40 | |
| 41 | def writable(self): |
| 42 | return self.busy |
| 43 | |
| 44 | def handle_read(self): |
| 45 | self.inbuf += self.recv(8192) |
| 46 | if self.inbuf[-4:] == "\r\n\r\n": |
| 47 | self.busy = True |
| 48 | self.ready = False |
| 49 | self.inbuf = "" |
| 50 | elif self.inbuf == "": |
| 51 | pass |
| 52 | |
| 53 | def handle_write(self): |
| 54 | if self.busy and self.respos < len(HTTPRequestHandler.response): |
| 55 | written = 0 |
| 56 | written = self.send(HTTPRequestHandler.response[self.respos:65536]) |
| 57 | self.respos += written |
| 58 | elif self.busy: |
| 59 | self.busy = False |
| 60 | self.ready = True |
| 61 | self.close() |
| 62 | |
| 63 | |