|
@@ -0,0 +1,70 @@
|
|
|
|
+# WARNING: This is till work in progress
|
|
|
|
+#
|
|
|
|
+# Load into gdb with 'source ../tools/gdb-prettyprint.py'
|
|
|
|
+# Make sure to also apply 'set print pretty on' to get nice structure printouts
|
|
|
|
+
|
|
|
|
+class String:
|
|
|
|
+ def __init__(self, val):
|
|
|
|
+ self.val = val
|
|
|
|
+
|
|
|
|
+ def to_string (self):
|
|
|
|
+ length = int(self.val['length'])
|
|
|
|
+ data = self.val['data']
|
|
|
|
+
|
|
|
|
+ if int(data) == 0:
|
|
|
|
+ return "UA_STRING_NULL"
|
|
|
|
+ inferior = gdb.selected_inferior()
|
|
|
|
+ text = inferior.read_memory(data, length).tobytes().decode(errors='replace')
|
|
|
|
+ return "\"%s\"" % text
|
|
|
|
+
|
|
|
|
+class LocalizedText:
|
|
|
|
+ def __init__(self, val):
|
|
|
|
+ self.val = val
|
|
|
|
+
|
|
|
|
+ def to_string (self):
|
|
|
|
+ return "UA_LocalizedText(%s, %s)" % (self.val['locale'], self.val['text'])
|
|
|
|
+
|
|
|
|
+class QualifiedName:
|
|
|
|
+ def __init__(self, val):
|
|
|
|
+ self.val = val
|
|
|
|
+
|
|
|
|
+ def to_string (self):
|
|
|
|
+ return "UA_QualifiedName(%s, %s)" % (int(self.val['namespaceIndex']), self.val['name'])
|
|
|
|
+
|
|
|
|
+class Guid:
|
|
|
|
+ def __init__(self, val):
|
|
|
|
+ self.val = val
|
|
|
|
+
|
|
|
|
+ def to_string (self):
|
|
|
|
+ return "UA_Guid()"
|
|
|
|
+
|
|
|
|
+class NodeId:
|
|
|
|
+ def __init__(self, val):
|
|
|
|
+ self.val = val
|
|
|
|
+
|
|
|
|
+ def to_string (self):
|
|
|
|
+ return "UA_NodeId()"
|
|
|
|
+
|
|
|
|
+class Variant:
|
|
|
|
+ def __init__(self, val):
|
|
|
|
+ self.val = val
|
|
|
|
+
|
|
|
|
+ def to_string (self):
|
|
|
|
+ return "UA_Variant()"
|
|
|
|
+
|
|
|
|
+def lookup_type (val):
|
|
|
|
+ if str(val.type) == 'UA_String':
|
|
|
|
+ return String(val)
|
|
|
|
+ if str(val.type) == 'UA_LocalizedText':
|
|
|
|
+ return LocalizedText(val)
|
|
|
|
+ if str(val.type) == 'UA_QualifiedName':
|
|
|
|
+ return QualifiedName(val)
|
|
|
|
+ if str(val.type) == 'UA_Guid':
|
|
|
|
+ return Guid(val)
|
|
|
|
+ if str(val.type) == 'UA_NodeId':
|
|
|
|
+ return NodeId(val)
|
|
|
|
+ if str(val.type) == 'UA_Variant':
|
|
|
|
+ return Variant(val)
|
|
|
|
+ return None
|
|
|
|
+
|
|
|
|
+gdb.pretty_printers.append (lookup_type)
|