Successfully parsing HTTP requests from freeswitch
authorStas Shtin <antisvin@gmail.com>
Wed, 14 Apr 2010 20:58:46 +0000 (00:58 +0400)
committerStas Shtin <antisvin@gmail.com>
Wed, 14 Apr 2010 20:58:46 +0000 (00:58 +0400)
src/ipypbx/http.py

index fe288f0..86699b9 100644 (file)
@@ -72,9 +72,8 @@ class FreeswitchConfigServer(QtNetwork.QTcpServer):
             self.socket.readyRead.connect(self.receiveData)
 
     def receiveData(self):
-        while self.socket.canReadLine():
-            line = str(self.socket.readLine()).strip()
-            print '<', line
+        # TODO: read in chunks.
+        for line in str(self.socket.readAll()).split('\r\n'):
             self.httpRequestParser.handle(line)
             
 
@@ -103,7 +102,8 @@ class HttpRequestParser(object):
         self.method = None
         self.request_path = None
         self.http_version = None
-        self.message = ''
+        self.headers = {}
+        self.data = {}
         
         # Set initial state.
         self.state = self.HTTP_NONE        
@@ -114,6 +114,7 @@ class HttpRequestParser(object):
         """
         for state in self.HTTP_STATES:
             if getattr(self, 'HTTP_%s' % state) == self.state:
+                print self.state, line
                 getattr(self, 'handle%s' % state.title())(line)
                 break
         else:
@@ -142,6 +143,7 @@ class HttpRequestParser(object):
             self.headers[key] = value
         else:
             self.state += 1
+            self.handle(line)
 
     def handleEmpty(self, line):
         """
@@ -153,4 +155,5 @@ class HttpRequestParser(object):
         """
         Append to message body.
         """
-        self.message += line
+        self.data = dict(pair.split('=', 2) for pair in line.split('&'))
+        print self.data