Removed redundant while loop - hooray for flatter code.
[electrum-server.git] / stratum.py
index 74e5866..fab33f9 100644 (file)
@@ -72,7 +72,7 @@ class Session:
     def pop_request(self):
         return self.request_queue.get()
 
-    def push_response(self):
+    def push_response(self, item):
         self.response_queue.put(item)
 
     def pop_response(self):
@@ -131,32 +131,35 @@ class TcpClientRequestor(threading.Thread):
             return None
 
     def parse(self):
-        while True:
-            raw_buffer = self.message.find('\n')
-            if raw_buffer == -1:
-                return True
+        raw_buffer = self.message.find('\n')
+        if raw_buffer == -1:
+            return True
 
-            command = self.message[0:raw_buffer].strip()
-            self.message = self.message[raw_buffer + 1:]
-            if command == 'quit': 
-                return False
+        raw_command = self.message[0:raw_buffer].strip()
+        self.message = self.message[raw_buffer + 1:]
+        if raw_command == 'quit': 
+            return False
 
-            try:
-                command = json.loads(command)
-            except:
-                print "json error", repr(command)
-                continue
+        try:
+            command = json.loads(raw_command)
+        except:
+            self.session.push_response(
+                {"error": "bad JSON", "request": raw_command})
+            return True
 
-            try:
-                message_id = command.get('id')
-                method = command.get('method')
-                params = command.get('params')
-            except:
-                print "syntax error", repr(command), self.session.address[0]
-                continue
+        try:
+            # Try to load vital fields, and return an error if
+            # unsuccessful.
+            message_id = command['id']
+            method = command['method']
+        except KeyError:
+            # Return an error JSON in response.
+            self.session.push_response(
+                {"error": "syntax error", "request": raw_command})
+        else:
+            self.session.push_request(command)
 
-            self.session.push_request((message_id, method, params))
-            print message_id, method, params
+        return True
 
 class TcpServer(threading.Thread):