def save(message, root, namespace_project, namespace_common): """Generate an XML representation of a message""" # Create the initial xml tree xmlMessage = etree.SubElement(root, "{" + namespace_common + "}message") xmlMessage.set("id", str(message.getID())) xmlMessage.set("timestamp", str(message.getTimestamp())) # Add the data subData = etree.SubElement(xmlMessage, "{" + namespace_common + "}data") subData.text = str(message.getData()) # Depending of the type, we add its proper meta-datas if message.getType() == "File": FileMessageFactory.save(message, xmlMessage, namespace_project, namespace_common) elif message.getType() == "L2Network": L2NetworkMessageFactory.save(message, xmlMessage, namespace_project, namespace_common) elif message.getType() == "L3Network": L3NetworkMessageFactory.save(message, xmlMessage, namespace_project, namespace_common) elif message.getType() == "L4Network": L4NetworkMessageFactory.save(message, xmlMessage, namespace_project, namespace_common) elif message.getType() == "IPC": IPCMessageFactory.save(message, xmlMessage, namespace_project, namespace_common) elif message.getType() == "IRP": IRPMessageFactory.save(message, xmlMessage, namespace_project, namespace_common) elif message.getType() == "IRPDeviceIoControl": IRPDeviceIoControlMessageFactory.save(message, xmlMessage, namespace_project, namespace_common) elif message.getType() == "RAW": RawMessageFactory.save(message, xmlMessage, namespace_project, namespace_common) else: raise NameError('''There is no factory which would support the generation of an xml representation of the message : ''' + str(message)) return etree.tostring(xmlMessage)