- commit
- 72a7237458c705ee78039b20289ed7d48625e705
- parent
- 8f5e90943f4adf0656b8f7aae1bcd55cd0027d28
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2018-08-03 12:12
Fix NetstringReceiver
Diffstat
| M | laneya/protocol.py | 16 | +++++++++------- |
1 files changed, 9 insertions, 7 deletions
diff --git a/laneya/protocol.py b/laneya/protocol.py
@@ -131,7 +131,7 @@ class NetstringReceiver(asyncio.Protocol): 131 131 132 132 """ 133 133 def __init__(self):134 -1 self.__buffer = ''-1 134 self.__buffer = b'' 135 135 self.transport = None 136 136 137 137 def connection_made(self, transport): @@ -144,20 +144,21 @@ class NetstringReceiver(asyncio.Protocol): 144 144 # FIXME: invalid data should not crash the server 145 145 self.__buffer += data 146 146147 -1 while ':' in self.__buffer:148 -1 length, remainder = self.__buffer.split(':', 1)-1 147 while b':' in self.__buffer: -1 148 length, remainder = self.__buffer.split(b':', 1) 149 149 length = int(length) 150 150 151 151 if len(remainder) > length:152 -1 assert remainder[length] == ','-1 152 assert remainder[length] == ord(b',') 153 153 s = remainder[:length]154 -1 self.__buffer = self.__buffer[len('%i:%s,' % (length, s)):]-1 154 self.__buffer = self.__buffer[len(b'%i:%s,' % (length, s)):] 155 155 self.string_received(s) 156 156 else: 157 157 break 158 158 159 159 def send_string(self, data):160 -1 self.transport.write('%i:%s,' % (len(data), data))-1 160 b = data.encode('utf8') -1 161 self.transport.write(b'%i:%s,' % (len(b), b)) 161 162 162 163 163 164 class JSONProtocol(NetstringReceiver): @@ -167,7 +168,8 @@ class JSONProtocol(NetstringReceiver): 167 168 raise NotImplementedError 168 169 169 170 def string_received(self, s):170 -1 return self.json_received(json.loads(s))-1 171 data = json.loads(s.decode('utf8')) -1 172 return self.json_received(data) 171 173 172 174 def send_json(self, data): 173 175 return self.send_string(json.dumps(data))