diff --git a/rosbridge_library/src/rosbridge_library/protocol.py b/rosbridge_library/src/rosbridge_library/protocol.py index 9d91076c9..e18e54eb2 100644 --- a/rosbridge_library/src/rosbridge_library/protocol.py +++ b/rosbridge_library/src/rosbridge_library/protocol.py @@ -116,10 +116,9 @@ def incoming(self, message_string=""): message_string -- the wire-level message sent by the client """ - if len(self.buffer) > 0: - self.buffer = self.buffer + message_string - else: - self.buffer = message_string + self.buffer = self.old_buffer + message_string + if self.buffer == self.old_buffer: + return msg = None # take care of having multiple JSON-objects in receiving buffer @@ -217,13 +216,13 @@ def incoming(self, message_string=""): except Exception as exc: self.log("error", f"{op}: {str(exc)}", mid) - # if anything left in buffer .. re-call self.incoming - # TODO: check what happens if we have "garbage" on tcp-stack --> infinite loop might be triggered! .. might get out of it when next valid JSON arrives since only data after last 'valid' closing bracket is kept - if len(self.buffer) > 0: - # try to avoid infinite loop.. - if self.old_buffer != self.buffer: + try: + if len(self.buffer) > 0: self.old_buffer = self.buffer + self.buffer = "" self.incoming() + except Exception as exc: + self.log("error", f"{self.client_id}: {str(exc)}") def outgoing(self, message, compression="none"): """Pass an outgoing message to the client. This method should be