summaryrefslogtreecommitdiff
path: root/tools/parse_xml2skinny_dissector.py
diff options
context:
space:
mode:
authorDiederik de Groot <dkgroot@talon.nl>2017-02-13 17:50:53 +0100
committerAnders Broman <a.broman58@gmail.com>2017-02-16 05:01:54 +0000
commit9a22102d352a5f51eb92eaa43cafb8f28ad1503b (patch)
tree93f0647c9fe10027b37106e8580ac09992069bd6 /tools/parse_xml2skinny_dissector.py
parente6c51e7badca002fadbb9fdcab3e54c3b2910705 (diff)
downloadwireshark-9a22102d352a5f51eb92eaa43cafb8f28ad1503b.tar.gz
[skinny]: Added conversation and request_response handling
Improvements: - added conversation - added request/response handling Change-Id: Ia670eb23c0671b195108876a30ff3ff5eb4a152c Reviewed-on: https://code.wireshark.org/review/20094 Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'tools/parse_xml2skinny_dissector.py')
-rwxr-xr-xtools/parse_xml2skinny_dissector.py51
1 files changed, 44 insertions, 7 deletions
diff --git a/tools/parse_xml2skinny_dissector.py b/tools/parse_xml2skinny_dissector.py
index d6fea70be0..8acb50fdba 100755
--- a/tools/parse_xml2skinny_dissector.py
+++ b/tools/parse_xml2skinny_dissector.py
@@ -128,6 +128,14 @@ def xml2obj(src):
def getfieldnames(self):
return ''
+ def get_req_resp_keys(self, req_resp_keys):
+ return []
+
+ def get_req_resp_key(self):
+ if self.req_resp_key == "1":
+ return self.name
+ return None
+
def declaration(self):
global fieldsArray
if self.name not in fieldsArray:
@@ -177,16 +185,18 @@ def xml2obj(src):
ret += self.indent_out("/*\n")
ret += self.indent_out(" * Message: %s\n" %self.name)
ret += self.indent_out(" * Opcode: %s\n" %self.opcode)
- ret += self.indent_out(" * Type: %s\n" %self.type)
+ ret += self.indent_out(" * Type: %s\n" %self.type)
ret += self.indent_out(" * Direction: %s\n" %self.direction)
ret += self.indent_out(" * VarLength: %s\n" %self.dynamic)
+ ret += self.indent_out(" * MsgType: %s\n" %self.msgtype)
if self.comment:
ret += self.indent_out(" * Comment: %s\n" %self.comment)
ret += self.indent_out(" */\n")
ret += self.indent_out("static void\n")
- ret += self.indent_out("handle_%s(ptvcursor_t *cursor, packet_info * pinfo _U_)\n" %self.name)
+ ret += self.indent_out("handle_%s(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)\n" %self.name)
ret += self.indent_out("{\n")
self.incr_indent()
+
for fields in self.fields:
if fields.size_lt or fields.size_gt:
if self.basemessage.declared is None or "hdr_data_length" not in self.basemessage.declared:
@@ -202,7 +212,10 @@ def xml2obj(src):
ret += self.indent_out("guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);\n")
self.basemessage.declared.append("hdr_version")
declarations += 1
+
+ req_resp_keys = []
for fields in self.fields:
+ fields.get_req_resp_keys(req_resp_keys)
ret += '%s' %fields.declaration()
declarations += 1
@@ -213,6 +226,19 @@ def xml2obj(src):
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 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))
+
self.decr_indent()
ret += "}\n\n"
@@ -222,6 +248,12 @@ def xml2obj(src):
''' Fields '''
size_fieldnames= []
+ def get_req_resp_keys(self, req_resp):
+ for field in self._children:
+ key = field.get_req_resp_key()
+ if not key is None and not key in req_resp:
+ req_resp.append(key)
+
def declaration(self):
ret = ''
@@ -474,6 +506,11 @@ def xml2obj(src):
def __str__(self):
return '%s:%s' %(self.__class__,self.name)
+ def get_req_resp_key(self):
+ if self.req_resp_key == "1":
+ return 'wmem_str_hash(%s)' %self.name
+ return None
+
def declaration(self):
ret = ''
self.intsize = 0
@@ -494,10 +531,10 @@ def xml2obj(src):
self.basemessage.declared.append("hdr_version")
ret += self.indent_out('guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;\n')
self.basemessage.declared.append("VariableDirnumSize")
- else:
- if self.basemessage.declared is None or self.name not in self.basemessage.declared:
- ret += self.indent_out('guint32 %s = 0;\n' %self.name)
- self.basemessage.declared.append(self.name)
+ #else:
+ # if self.basemessage.declared is None or self.name not in self.basemessage.declared:
+ # ret += self.indent_out('gchar *%s = NULL;\n' %self.name)
+ # self.basemessage.declared.append(self.name)
if self.basemessage.dynamic == "yes" and not self.subtype == "DisplayLabel":
if self.basemessage.declared is None or self.name + '_len' not in self.basemessage.declared:
@@ -513,7 +550,7 @@ def xml2obj(src):
ret = ''
if self.declare == "yes" and self.size != "VariableDirnumSize":
- ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);\n' %self.name)
+ ret += self.indent_out('const gchar * %s = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), %s));\n' %(self.name, self.size))
if self.subtype == "DisplayLabel":
if self.basemessage.dynamic == "yes":