]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
vici: Ensure we read exactly the specified amount of bytes from the socket in Python
authorTobias Brunner <tobias@strongswan.org>
Mon, 2 May 2016 13:14:40 +0000 (15:14 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 10 May 2016 09:42:29 +0000 (11:42 +0200)
recv() will return less bytes than specified (as that's the buffer size)
if not as many are ready to be read from the socket.

src/libcharon/plugins/vici/python/vici/protocol.py

index 855a7b2e29c32f3c43e8d0a95ddeafcdd72c7f25..4951817eb0387a5bec3dec40bd81f658a691ba27 100644 (file)
@@ -20,15 +20,22 @@ class Transport(object):
         self.socket.sendall(struct.pack("!I", len(packet)) + packet)
 
     def receive(self):
-        raw_length = self.socket.recv(self.HEADER_LENGTH)
+        raw_length = self._recvall(self.HEADER_LENGTH)
         length, = struct.unpack("!I", raw_length)
-        payload = self.socket.recv(length)
+        payload = self._recvall(length)
         return payload
 
     def close(self):
         self.socket.shutdown(socket.SHUT_RDWR)
         self.socket.close()
 
+    def _recvall(self, count):
+        """Ensure to read count bytes from the socket"""
+        data = b""
+        while len(data) < count:
+            data += self.socket.recv(count - len(data))
+        return data
+
 
 class Packet(object):
     CMD_REQUEST = 0         # Named request message