diff --git a/pyogp/lib/base/message/message_template_parser.py b/pyogp/lib/base/message/message_template_parser.py index 96f4016..a5c00eb 100644 --- a/pyogp/lib/base/message/message_template_parser.py +++ b/pyogp/lib/base/message/message_template_parser.py @@ -8,7 +8,7 @@ import pprint import message_template from pyogp.lib.base.data import msg_tmpl from pyogp.lib.base.message.message_types import MsgFrequency, MsgTrust, \ - MsgEncoding, MsgDeprecation, MsgBlockType, MsgType + MsgEncoding, MsgDeprecation, MsgBlockType, MsgType, sizeof class MessageTemplateParser(object): def __init__(self, template_file): @@ -154,58 +154,40 @@ class MessageTemplateParser(object): var_size = -1 if type_string == 'U8': var_type = MsgType.MVT_U8 - var_size = 1 elif type_string == 'U16': var_type = MsgType.MVT_U16 - var_size = 2 elif type_string == 'U32': var_type = MsgType.MVT_U32 - var_size = 4 elif type_string == 'U64': var_type = MsgType.MVT_U64 - var_size = 8 elif type_string == 'S8': var_type = MsgType.MVT_S8 - var_size = 1 elif type_string == 'S16': var_type = MsgType.MVT_S16 - var_size = 2 elif type_string == 'S32': var_type = MsgType.MVT_S32 - var_size = 4 elif type_string == 'S64': var_type = MsgType.MVT_S64 - var_size = 8 elif type_string == 'F32': var_type = MsgType.MVT_F32 - var_size = 4 elif type_string == 'F64': var_type = MsgType.MVT_F64 - var_size = 8 elif type_string == 'LLVector3': var_type = MsgType.MVT_LLVector3 - var_size = 12 elif type_string == 'LLVector3d': var_type = MsgType.MVT_LLVector3d - var_size = 24 elif type_string == 'LLVector4': var_type = MsgType.MVT_LLVector4 - var_size = 16 elif type_string == 'LLQuaternion': var_type = MsgType.MVT_LLQuaternion - var_size = 12 elif type_string == 'LLUUID': var_type = MsgType.MVT_LLUUID - var_size = 16 elif type_string == 'BOOL': var_type = MsgType.MVT_BOOL - var_size = 1 elif type_string == 'IPADDR': var_type = MsgType.MVT_IP_ADDR - var_size = 4 elif type_string == 'IPPORT': var_type = MsgType.MVT_IP_PORT - var_size = 2 elif type_string == 'Fixed' or type_string == 'Variable': if type_string == 'Fixed': var_type = MsgType.MVT_FIXED @@ -215,7 +197,10 @@ class MessageTemplateParser(object): var_size = int(parts[2]) if var_size <= 0: raise Exception('Bad variable size') - + + if var_size == -1: + var_size = sizeof(var_type) + current_var = message_template.MessageTemplateVariable(parts[0], var_type, var_size) current_block.add_variable(current_var) diff --git a/pyogp/lib/base/message/message_template_reader.py b/pyogp/lib/base/message/message_template_reader.py index 93d3dbe..3d3e5d7 100644 --- a/pyogp/lib/base/message/message_template_reader.py +++ b/pyogp/lib/base/message/message_template_reader.py @@ -85,7 +85,7 @@ class MessageTemplateReader(object): offset = self.unpacker.unpack_data(data[MsgHeader.PHL_OFFSET:MsgHeader.PHL_OFFSET+1], MsgType.MVT_U8) freq_bytes = self.current_template.frequency - #fixed case + #HACK: fixed case if freq_bytes == -1: freq_bytes = 4 @@ -135,8 +135,6 @@ class MessageTemplateReader(object): var_size = struct.unpack('>B', data[decode_pos:decode_pos+1])[0] elif data_size == 2: var_size = struct.unpack('>H', data[decode_pos:decode_pos+2])[0] - print 'Data size 2' - print 'Var size: ' + str(var_size) elif data_size == 4: var_size = struct.unpack('>I', data[decode_pos:decode_pos+4])[0] else: diff --git a/pyogp/lib/base/tests/test_template_reader.py b/pyogp/lib/base/tests/test_template_reader.py index 09a0f54..116ba72 100644 --- a/pyogp/lib/base/tests/test_template_reader.py +++ b/pyogp/lib/base/tests/test_template_reader.py @@ -249,7 +249,7 @@ class TestTemplateReader(unittest.TestCase): self.builder.next_block('Info') self.builder.add_data('AgentID', UUID("550e8400-e29b-41d4-a716-446655440000"), MsgType.MVT_LLUUID) self.builder.add_data('LocationID', 0x00000001, MsgType.MVT_U32) - self.builder.add_data('SimIP', 'www.testing.com', MsgType.MVT_IP_ADDR) + self.builder.add_data('SimIP', '.com', MsgType.MVT_IP_ADDR) self.builder.add_data('SimPort', 80, MsgType.MVT_IP_PORT) self.builder.add_data('RegionHandle', 0x0000000000000001, MsgType.MVT_U64) self.builder.add_data('SeedCapability', "Testing", MsgType.MVT_VARIABLE) @@ -263,7 +263,20 @@ class TestTemplateReader(unittest.TestCase): assert self.reader.get_data('Info', 'SeedCapability', MsgType.MVT_VARIABLE) == "Testing",\ "TeleportFinish variable not read correctly" - + assert self.reader.get_data('Info', 'SimPort', MsgType.MVT_IP_PORT) == 80,\ + "TeleportFinish variable not read correctly" + + def test_read_medium(self): + self.builder.new_message('ConfirmEnableSimulator') + self.builder.next_block('AgentData') + self.builder.add_data('AgentID', UUID("550e8400-e29b-41d4-a716-446655440000"), MsgType.MVT_LLUUID) + self.builder.add_data('SessionID', UUID("550e8400-e29b-41d4-a716-446655440000"), MsgType.MVT_LLUUID) + message, size = self.builder.build_message() + message = PackFlags.LL_NONE + '\x00\x00\x00\x01' + '\x00' + message + size = len(message) + + assert self.reader.validate_message(message, size), "Variable invalid" + assert self.reader.read_message(message), "Variable read fail" def test_get_bad_data(self): self.reader.clear_message()