aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDiederik de Groot <dkgroot@talon.nl>2017-02-19 18:05:20 +0100
committerAnders Broman <a.broman58@gmail.com>2017-02-22 05:39:53 +0000
commit73ac6974c4db73846c37d811a02d17c1436eab47 (patch)
tree55a3d0c58ef60af9cb8ac88df4752be882822c14 /tools
parenta4d7793b4cfc2e6d578bf4723fd334f24cf453ec (diff)
[skinny]: Fix tvb struct size guard value
The struct size guard value was used incorrectly, causing message with short content to be only partially dissected. Minor: - Renamed OffHookWithCgpn to OffHookWithCalingPartyNumber - Added SetHookFlashDetect Message - Removed some of the debug logging when parse_xml2skinny_dissector.py:debug=0 Change-Id: If4f20d2412f8775fac3d0a2979200e8369cea6f2 Reviewed-on: https://code.wireshark.org/review/20186 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/SkinnyProtocolOptimized.xml3
-rwxr-xr-xtools/parse_xml2skinny_dissector.py74
2 files changed, 38 insertions, 39 deletions
diff --git a/tools/SkinnyProtocolOptimized.xml b/tools/SkinnyProtocolOptimized.xml
index 1b3cf6da8e..c089be1820 100644
--- a/tools/SkinnyProtocolOptimized.xml
+++ b/tools/SkinnyProtocolOptimized.xml
@@ -851,7 +851,7 @@
<string comment="Statistics" longcomment="variable field size (max: 600]" maxsize="600" name="data" size_fieldname="dataSize" type="char"/>
</fields>
</message>
- <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="OffHookWithCgpnMessage" opcode="0x0024" type="CallControl">
+ <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="OffHookWithCalingPartyNumberMessage" opcode="0x0024" type="CallControl">
<fields>
<string comment="Calling Party Number" declare="yes" name="callingPartyNumber" size="VariableDirnumSize" type="char"/>
<string comment="Calling Party Voicemail Box Number" declare="yes" name="cgpnVoiceMailbox" size="VariableDirnumSize" type="char"/>
@@ -2152,6 +2152,7 @@
<enum comment="" name="lampMode" subtype="LampMode" type="uint32"/>
</fields>
</message>
+ <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="SetHookFlashDetectMessage" opcode="0x0087" type="CallControl"/>
<enum name="SpeakerMode">
<entries>
<entry comment="" name="SpeakerMode_On" text="On" value="0x0001"/>
diff --git a/tools/parse_xml2skinny_dissector.py b/tools/parse_xml2skinny_dissector.py
index 8acb50fdba..3af2abe169 100755
--- a/tools/parse_xml2skinny_dissector.py
+++ b/tools/parse_xml2skinny_dissector.py
@@ -222,22 +222,22 @@ def xml2obj(src):
if declarations > 1:
ret += "\n"
- if (self.fields is not None):
+ if self.fields is not None:
for fields in self.fields:
ret += '%s' %fields.dissect()
# setup request/response
if self.msgtype == "request":
- if req_resp_keys and req_resp_keys[0] != '':
- ret += self.indent_out('skinny_reqrep_add_request(cursor, pinfo, skinny_conv, %s ^ %s);\n' %(self.opcode, req_resp_keys[0]))
- else:
- ret += self.indent_out('skinny_reqrep_add_request(cursor, pinfo, skinny_conv, %s);\n' %(self.opcode))
+ if req_resp_keys and req_resp_keys[0] != '':
+ ret += self.indent_out('skinny_reqrep_add_request(cursor, pinfo, skinny_conv, %s ^ %s);\n' %(self.opcode, req_resp_keys[0]))
+ else:
+ ret += self.indent_out('skinny_reqrep_add_request(cursor, pinfo, skinny_conv, %s);\n' %(self.opcode))
if self.msgtype == "response":
- if req_resp_keys and req_resp_keys[0] != '':
- ret += self.indent_out('skinny_reqrep_add_response(cursor, pinfo, skinny_conv, %s ^ %s);\n' %(self.request, req_resp_keys[0]))
- else:
- ret += self.indent_out('skinny_reqrep_add_response(cursor, pinfo, skinny_conv, %s);\n' %(self.request))
+ if req_resp_keys and req_resp_keys[0] != '':
+ ret += self.indent_out('skinny_reqrep_add_response(cursor, pinfo, skinny_conv, %s ^ %s);\n' %(self.request, req_resp_keys[0]))
+ else:
+ ret += self.indent_out('skinny_reqrep_add_response(cursor, pinfo, skinny_conv, %s);\n' %(self.request))
self.decr_indent()
@@ -257,8 +257,6 @@ def xml2obj(src):
def declaration(self):
ret = ''
- #ret += '/* Fields Declaration */'
-
for field in self._children:
ret += '%s' %(field.declaration())
self.intsize += field.intsize
@@ -352,14 +350,14 @@ def xml2obj(src):
if size:
if self.size_fieldname:
- ret += self.indent_out('if (%s <= %s) { /* tvb integer size guard */\n' %(self.size_fieldname, size))
+ ret += self.indent_out('if (%s <= %s) {%s\n' %(self.size_fieldname, size, ' /* tvb integer size guard */' if debug else ''))
else:
ret += self.indent_out('{\n')
self.incr_indent()
variable = 'counter_%d' %indentation
ret += self.indent_out('guint32 %s = 0;\n' %(variable));
if self.size_fieldname:
- ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref: %s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, size, self.size_fieldname))
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref:%s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, size, self.size_fieldname))
else:
ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [max:%s]");\n' %(self.name, size))
ret += self.indent_out('for (%s = 0; %s < %s; %s++) {\n' %(variable, variable, size, variable));
@@ -386,9 +384,9 @@ def xml2obj(src):
if self.name in si_fields.keys():
if self.endianness == "big":
- ret += self.indent_out('%s = tvb_get_ntohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(si_fields[self.name]))
+ ret += self.indent_out('%s = tvb_get_ntohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(si_fields[self.name]))
else:
- ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(si_fields[self.name]))
+ ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(si_fields[self.name]))
ret += self.indent_out('ptvcursor_add(cursor, hf_skinny_%s, %d, %s);\n' %(self.name, self.intsize, self.endian))
@@ -400,12 +398,15 @@ def xml2obj(src):
ret += self.indent_out('}\n')
self.decr_indent()
ret += self.indent_out('}\n')
- ret += self.indent_out('ptvcursor_pop_subtree(cursor); /* end for loop tree: %s */\n' %self.name)
+ if debug:
+ ret += self.indent_out('ptvcursor_pop_subtree(cursor); /* end for loop tree: %s */\n' %(self.name))
+ else:
+ ret += self.indent_out('ptvcursor_pop_subtree(cursor);\n')
self.decr_indent()
if self.size_fieldname:
ret += self.indent_out('} else {\n')
self.incr_indent()
- ret += self.indent_out('ptvcursor_advance(cursor, (%s * %s)); /* guard kicked in -> skip the rest */;\n' %(size, self.intsize))
+ ret += self.indent_out('ptvcursor_advance(cursor, (%s * %s));%s\n' %(size, self.intsize, ' /* guard kicked in -> skip the rest */;' if debug else ''))
self.decr_indent()
ret += self.indent_out('}\n')
return ret
@@ -489,7 +490,10 @@ def xml2obj(src):
ret += self.indent_out('}\n')
self.decr_indent()
ret += self.indent_out('}\n')
- ret += self.indent_out('ptvcursor_pop_subtree(cursor); /* end for loop tree: %s */\n' %self.name)
+ if debug:
+ ret += self.indent_out('ptvcursor_pop_subtree(cursor); /* end for loop tree: %s */\n' %(self.name))
+ else:
+ ret += self.indent_out('ptvcursor_pop_subtree(cursor);\n')
self.decr_indent()
if self.size_fieldname:
ret += self.indent_out('} else {\n')
@@ -753,8 +757,8 @@ def xml2obj(src):
self.basemessage.declared.append("hdr_version")
for fields in self.fields:
ret += '%s' %fields.declaration()
- self.intsize += fields.intsize
-
+ #self.intsize += fields.intsize
+ self.intsize = fields.intsize
return ret
def dissect(self):
@@ -763,29 +767,29 @@ def xml2obj(src):
size = 0
if self.size_fieldname:
- if self.basemessage.dynamic == "yes":
- size = self.size_fieldname
- else:
- size = self.maxsize
+ #if self.basemessage.dynamic == "yes":
+ # size = self.size_fieldname
+ #else:
+ # size = self.maxsize
+ size = self.maxsize
elif self.size:
size = self.size
if size:
if self.size_fieldname:
- ret += self.indent_out('if (%s <= %s) { /* tvb struct size guard */\n' %(self.size_fieldname, self.intsize))
+ ret += self.indent_out('if (%s <= %s) {%s\n' %(self.size_fieldname, size, ' /* tvb struct size guard */' if debug else ''))
else:
ret += self.indent_out('{\n')
self.incr_indent()
if debug:
ret += self.indent_out('/* start struct : %s / size: %d */\n' %(self.name, self.intsize))
- #self.incr_indent()
ret += self.indent_out('guint32 %s = 0;\n' %(variable));
if self.size_fieldname:
- ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref: %s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, self.maxsize, self.size_fieldname))
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref:%s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, self.maxsize, self.size_fieldname))
if self.maxsize:
- ret += self.indent_out('if (%s && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (%s * %s) && %s <= %s) { /* tvb counter size guard */\n' %(self.size_fieldname, self.size_fieldname, self.intsize, self.size_fieldname, self.maxsize))
+ ret += self.indent_out('if (%s && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (%s * %s) && %s <= %s) {%s\n' %(self.size_fieldname, self.size_fieldname, self.intsize, self.size_fieldname, self.maxsize, '/* tvb counter size guard */' if debug else ''))
else:
- ret += self.indent_out('if (%s && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (%s * %s)) { /* tvb counter size guard */\n' %(self.size_fieldname, self.size_fieldname, self.intsize))
+ ret += self.indent_out('if (%s && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (%s * %s)) {%s\n' %(self.size_fieldname, self.size_fieldname, self.intsize, '/* tvb counter size guard */' if debug else ''))
self.incr_indent()
else:
ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [max:%s]");\n' %(self.name, size))
@@ -828,10 +832,7 @@ def xml2obj(src):
ret += self.indent_out('}\n')
if self.size_fieldname:
self.decr_indent()
- if debug:
- ret += self.indent_out('} /* end counter tvb size guard */\n')
- else:
- ret += self.indent_out('}\n')
+ ret += self.indent_out('} /* end counter tvb size guard */\n' if debug else '}\n')
ret += self.indent_out('ptvcursor_pop_subtree(cursor);\n')
if debug:
@@ -840,12 +841,9 @@ def xml2obj(src):
if self.size_fieldname:
ret += self.indent_out('} else {\n')
self.incr_indent()
- ret += self.indent_out('ptvcursor_advance(cursor, (%s * %s)); /* guard kicked in -> skip the rest */;\n' %(self.size_fieldname, self.intsize));
+ ret += self.indent_out('ptvcursor_advance(cursor, (%s * %s));%s\n' %(self.size_fieldname, self.intsize, ' /* guard kicked in -> skip the rest */' if debug else ''));
self.decr_indent()
- if debug:
- ret += self.indent_out('} /* end struct size guard */\n')
- else:
- ret += self.indent_out('}\n')
+ ret += self.indent_out('} /* end struct size guard */\n' if debug else '}\n')
return ret