changeset 32:1acccfa6a4f6

Added support for header parsing.
author Atul Varma <varmaa@toolness.com>
date Mon, 27 Apr 2009 13:51:19 -0700
parents 041bda62b614
children 8146a59c8045
files openwebchat.py
diffstat 1 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/openwebchat.py	Mon Apr 27 11:44:38 2009 -0700
+++ b/openwebchat.py	Mon Apr 27 13:51:19 2009 -0700
@@ -2,10 +2,18 @@
 import math
 import re
 import httplib
+import cStringIO
+import mimetools
 
 from cosocket import *
 import channels
 
+class Conversation(list):
+    pass
+
+class Conversations(dict):
+    pass
+
 class OpenWebChatServer(object):
     CONVERSATION_URL = re.compile('\/conversations\/([A-Za-z0-9_]+)')
 
@@ -15,7 +23,8 @@
                   'js' : 'text/javascript',
                   'css' : 'text/css'}
 
-    def __init__(self, addr):
+    def __init__(self, addr, conversations):
+        self._convs = conversations
         self._server = CoroutineSocketServer(addr,
                                              self._server_coroutine)
 
@@ -82,7 +91,8 @@
         request = yield until_received(terminator = '\r\n\r\n')
         request = request.splitlines()
         request_line = request[0]
-        request_headers = request[1:]
+        stringfile = cStringIO.StringIO('\n'.join(request[1:]))
+        headers = mimetools.Message(stringfile)
         req_parts = request_line.split()
         if req_parts[1] == '/listen':
             yield self._until_multipart_header_sent('chunk')
@@ -92,6 +102,8 @@
                     'chunk',
                     'Got message %d from %s.' % (num, ip))
         elif req_parts[1] == '/send':
+            length = int(headers.getheader('Content-Length', 0))
+            msg = yield until_received(bytes = length)
             yield channels.until_message_sent('global',
                                               (addr[0], 1))
             yield self._until_http_response_sent('sent.')
@@ -113,5 +125,6 @@
                                                      code = 404)
 
 if __name__ == '__main__':
-    server = OpenWebChatServer(('127.0.0.1', 8071))
+    server = OpenWebChatServer(('127.0.0.1', 8071),
+                               Conversations())
     server.run()