@@ -88,7 +88,9 @@ def __init__(self, msg_id=0, msg_data=None):
8888 # Constructor 1: make a pingmessage object from a binary data buffer
8989 # (for receiving + unpacking)
9090 if msg_data is not None :
91- self .unpack_msg_data (msg_data )
91+ if not self .unpack_msg_data (msg_data ):
92+ # Attempted to create an unknown message
93+ return
9294 # Constructor 2: make a pingmessage object cooresponding to a message
9395 # id, with field members ready to access and populate
9496 # (for packing + transmitting)
@@ -150,7 +152,8 @@ def pack_msg_data(self):
150152
151153 return self .msg_data
152154
153- ## Unpack a bytearray into object attributes
155+ ## Attempts to unpack a bytearray into object attributes
156+ # @Returns True if successful, False otherwise
154157 def unpack_msg_data (self , msg_data ):
155158 self .msg_data = msg_data
156159
@@ -161,7 +164,11 @@ def unpack_msg_data(self, msg_data):
161164 setattr (self , attr , header [i ])
162165
163166 ## The name of this message
164- self .name = payload_dict [self .message_id ]["name" ]
167+ try :
168+ self .name = payload_dict [self .message_id ]["name" ]
169+ except KeyError :
170+ print ("Unknown message: " , self .message_id )
171+ return False
165172
166173 ## The field names of this message
167174 self .payload_field_names = payload_dict [self .message_id ]["field_names" ]
@@ -190,6 +197,7 @@ def unpack_msg_data(self, msg_data):
190197
191198 # Extract checksum
192199 self .checksum = struct .unpack (PingMessage .endianess + PingMessage .checksum_format , self .msg_data [PingMessage .headerLength + self .payload_length : PingMessage .headerLength + self .payload_length + PingMessage .checksumLength ])[0 ]
200+ return True
193201
194202 ## Calculate the checksum from the internal bytearray self.msg_data
195203 def calculate_checksum (self ):
0 commit comments