def __init__(self, sized, minChars=0, maxChars=0, delimiter=None): """Constructor of AbstractWordType: """ AbstractType.__init__(self, sized, minChars, maxChars, delimiter) self.log = logging.getLogger('netzob.Common.MMSTD.Dictionary.Types.AbstractWordType.py')
def loadFromXML(xmlRoot, namespace, version, symbol): """loadFromXML: Loads a data variable from an XML definition. We do not trust the user and check every field (even mandatory). """ logging.debug("[ DataVariable: loadFromXML:") if version == "0.1": xmlID = xmlRoot.get("id") xmlName = xmlRoot.get("name") xmlMutable = xmlRoot.get("mutable") == "True" xmlLearnable = xmlRoot.get("learnable") == "True" # originalValue xmlOriginalValue = xmlRoot.find("{" + namespace + "}originalValue") if xmlOriginalValue is not None and xmlOriginalValue.text != "None": originalValue = xmlOriginalValue.text else: originalValue = None # sized xmlSized = xmlRoot.find("{" + namespace + "}sized") if xmlSized is not None and xmlSized.text != "None": sized = xmlSized.text == 'True' else: sized = True # minChars xmlMinChars = xmlRoot.find("{" + namespace + "}minChars") if xmlMinChars is not None and xmlMinChars.text != "None": minChars = int(xmlMinChars.text) else: minChars = 0 # maxChars xmlMaxChars = xmlRoot.find("{" + namespace + "}maxChars") if xmlMaxChars is not None and xmlMaxChars.text != "None": maxChars = int(xmlMaxChars.text) else: maxChars = minChars # delimiter xmlDelimiter = xmlRoot.find("{" + namespace + "}delimiter") if xmlDelimiter is not None and xmlDelimiter.text != "None": delimiter = xmlDelimiter.text else: delimiter = None # type _type = None xmlType = xmlRoot.find("{" + namespace + "}type") if xmlType is not None: _type = AbstractType.makeType(xmlType.text, sized, minChars, maxChars, delimiter) if type is None: return None else: logging.error("No type specified for this variable in the xml file.") return None if originalValue is not None: originalValue = _type.str2bin(originalValue) result = DataVariable(xmlID, xmlName, xmlMutable, xmlLearnable, _type, originalValue) logging.debug("DataVariable: loadFromXML successes: {0} ]".format(result.toString())) return result logging.debug("DataVariable: loadFromXML fails") return None
def validateChanges(self, widget): """validateChanges: Validate the changes that a user has done on a variable. Called by a click on the apply button. @type widget: Gtk.widget @param widget: the widget which calls this function. """ dialog = self.view.getWidg("dialog") if self.editOverCreate: anid = self.variable.getID() else: anid = str(uuid.uuid4()) name = self.view.getWidg("nameEntry").get_text() mutable = self.view.getWidg("mutableCheck").get_active() learnable = self.view.getWidg("learnableCheck").get_active() strVarType = self.view.getWidg("variableTypeCombo").get_active_text() variable = None # Aggregate variable if strVarType == AggregateVariable.TYPE: variable = AggregateVariable(anid, name, mutable, learnable) # Alternate Variable elif strVarType == AlternateVariable.TYPE: variable = AlternateVariable(anid, name, mutable, learnable) # Repeat Variable elif strVarType == RepeatVariable.TYPE: minIterations = int(self.view.getWidg("minSpin").get_text()) maxIterations = int(self.view.getWidg("maxSpin").get_text()) variable = RepeatVariable(anid, name, mutable, learnable, None, minIterations, maxIterations) # Data Variable elif strVarType == DataVariable.TYPE: originalValue = str(self.view.getWidg("valueEntry").get_text()) sized = self.view.getWidg("sizedCheck").get_active() if sized: # If the variable is defined by a size. minChars = int(self.view.getWidg("minSpin").get_text()) maxChars = int(self.view.getWidg("maxSpin").get_text()) delimiter = None else: # The variable is defined by a delimiter. minChars = 0 maxChars = 0 delimiter = self.view.getWidg("delimiterEntry").get_text() vtype = AbstractType.makeType(self.view.getWidg("typeCombo").get_active_text(), sized, minChars, maxChars, delimiter) variable = DataVariable(anid, name, mutable, learnable, vtype, originalValue) #=============================================================================== # # Direct Relation Variable # elif strVarType == DirectRelationVariable.TYPE: # # # We find the variable by its ID. # pointedID = str(self.view.getWidg("IDEntry").get_text()) # # variable = DirectRelationVariable(anid, name, mutable, learnable, pointedID, self.treeController.symbol) #=============================================================================== # Computed Relation Variable elif strVarType == ComputedRelationVariable.TYPE: # We find the variable by its ID. pointedID = str(self.view.getWidg("IDEntry").get_text()) sized = self.view.getWidg("sizedCheck").get_active() if sized: # If the variable is defined by a size. minChars = int(self.view.getWidg("minSpin").get_text()) maxChars = int(self.view.getWidg("maxSpin").get_text()) delimiter = None else: # The variable is defined by a delimiter. minChars = 0 maxChars = 0 delimiter = self.view.getWidg("delimiterEntry").get_text() vtype = AbstractRelationType.makeType(self.view.getWidg("relationTypeCombo").get_active_text(), sized, minChars, maxChars, delimiter) variable = ComputedRelationVariable(anid, name, mutable, learnable, vtype, pointedID, self.treeController.symbol) if variable is not None: # This part is for saving and transfering children when transforming a node variable into an other kind of node variable. if self.editOverCreate: father = self.variable.getFathers()[0] # We transform a node variable into a node variable. if (self.variable.getVariableType() == AggregateVariable.TYPE or self.variable.getVariableType() == AlternateVariable.TYPE) and (variable.getVariableType() == AggregateVariable.TYPE or variable.getVariableType() == AlternateVariable.TYPE): children = self.variable.getChildren() self.variable = variable for child in children: self.variable.addChild(child) # We transform a repeat variable into a node variable. elif (self.variable.getVariableType() == RepeatVariable.TYPE) and (variable.getVariableType() == AggregateVariable.TYPE or variable.getVariableType() == AlternateVariable.TYPE): child = self.variable.getChild() self.variable = variable self.variable.addChild(child) # We transform a repeat variable into a repeat variable. elif (self.variable.getVariableType() == RepeatVariable.TYPE) and (variable.getVariableType() == RepeatVariable.TYPE): child = self.variable.getChild() self.variable = variable self.variable.addChild(child) # We do not manage/save children. else: self.variable = variable self.variable.addFather(father) self.treeController.editVariable(self.variable) else: self.variable.addChild(variable) self.treeController.registerVariable(self.rootEntry, variable) dialog.destroy()
def validateChanges(self, widget): """validateChanges: Validate the changes that a user has done on a variable. Called by a click on the apply button. @type widget: Gtk.widget @param widget: the widget which calls this function. """ dialog = self.view.getWidg("dialog") if self.editOverCreate: anid = self.variable.getID() else: anid = str(uuid.uuid4()) name = self.view.getWidg("nameEntry").get_text() mutable = self.view.getWidg("mutableCheck").get_active() learnable = self.view.getWidg("learnableCheck").get_active() varTypeIndex = self.view.getWidg("variableTypeCombo").get_active() variable = None # Aggregate variable if varTypeIndex == VariableTreeController.VARIABLE_INDEX_LIST.index(AggregateVariable.TYPE): variable = AggregateVariable(anid, name, mutable, learnable) # Alternate Variable elif varTypeIndex == VariableTreeController.VARIABLE_INDEX_LIST.index(AlternateVariable.TYPE): variable = AlternateVariable(anid, name, mutable, learnable) # Repeat Variable elif varTypeIndex == VariableTreeController.VARIABLE_INDEX_LIST.index(RepeatVariable.TYPE): minIterations = int(self.view.getWidg("minSpin").get_text()) maxIterations = int(self.view.getWidg("maxSpin").get_text()) variable = RepeatVariable(anid, name, mutable, learnable, None, minIterations, maxIterations) # Data Variable elif varTypeIndex == VariableTreeController.VARIABLE_INDEX_LIST.index(DataVariable.TYPE): sized = self.view.getWidg("sizedCheck").get_active() if sized: # If the variable is defined by a size. minChars = int(self.view.getWidg("minSpin").get_text()) maxChars = int(self.view.getWidg("maxSpin").get_text()) delimiter = None else: # The variable is defined by a delimiter. minChars = 0 maxChars = 0 delimiter = self.view.getWidg("delimiterEntry").get_text() vtype = AbstractType.makeType(VariableTreeController.TYPE_INDEX_LIST[self.view.getWidg("typeCombo").get_active()], sized, minChars, maxChars, delimiter) originalValue = vtype.str2bin(self.view.getWidg("valueEntry").get_text()) variable = DataVariable(anid, name, mutable, learnable, vtype, originalValue) #=============================================================================== # # Direct Relation Variable # elif strVarType == DirectRelationVariable.TYPE: # # # We find the variable by its ID. # pointedID = str(self.view.getWidg("IDEntry").get_text()) # # variable = DirectRelationVariable(anid, name, mutable, learnable, pointedID, self.treeController.symbol) #=============================================================================== # Computed Relation Variable elif varTypeIndex == VariableTreeController.VARIABLE_INDEX_LIST.index(ComputedRelationVariable.TYPE): # We find the variable by its ID. pointedID = str(self.view.getWidg("IDEntry").get_text()) sized = self.view.getWidg("sizedCheck").get_active() if sized: # If the variable is defined by a size. minChars = int(self.view.getWidg("minSpin").get_text()) maxChars = int(self.view.getWidg("maxSpin").get_text()) delimiter = None else: # The variable is defined by a delimiter. minChars = 0 maxChars = 0 delimiter = self.view.getWidg("delimiterEntry").get_text() factor = float(self.view.getWidg("factorEntry").get_text()) offset = float(self.view.getWidg("offsetEntry").get_text()) vtype = AbstractRelationType.makeType(VariableTreeController.RELATION_TYPE_INDEX_LIST[self.view.getWidg("relationTypeCombo").get_active()], sized, minChars, maxChars, delimiter, factor, offset) variable = ComputedRelationVariable(anid, name, mutable, learnable, vtype, pointedID, self.treeController.symbol) if variable is not None: # This part is for saving and transfering children when transforming a node variable into an other kind of node variable. if self.editOverCreate: father = None if len(self.variable.getFathers()) > 0: father = self.variable.getFathers()[0] # We transform a node variable into a node variable. if (self.variable.getVariableType() == AggregateVariable.TYPE or self.variable.getVariableType() == AlternateVariable.TYPE) and (variable.getVariableType() == AggregateVariable.TYPE or variable.getVariableType() == AlternateVariable.TYPE): children = self.variable.getChildren() self.variable = variable for child in children: self.variable.addChild(child) # We transform a repeat variable into a node variable. elif (self.variable.getVariableType() == RepeatVariable.TYPE) and (variable.getVariableType() == AggregateVariable.TYPE or variable.getVariableType() == AlternateVariable.TYPE): child = self.variable.getChild() self.variable = variable self.variable.addChild(child) # We transform a repeat variable into a repeat variable. elif (self.variable.getVariableType() == RepeatVariable.TYPE) and (variable.getVariableType() == RepeatVariable.TYPE): child = self.variable.getChild() self.variable = variable self.variable.setChild(child) # We do not manage/save children. else: self.variable = variable if father is not None: self.variable.addFather(father) self.treeController.editVariable(self.variable) else: if self.variable.getVariableType() == RepeatVariable.TYPE: self.variable.setChild(variable) else: self.variable.addChild(variable) self.treeController.registerVariable(self.rootEntry, variable) dialog.destroy()
def setDataType(self, dataType): self.dataType = AbstractType.makeType(dataType)
def loadFromXML(xmlRoot, namespace, version, symbol): """loadFromXML: Loads a data variable from an XML definition. We do not trust the user and check every field (even mandatory). """ logging.debug("[ DataVariable: loadFromXML:") if version == "0.1": xmlID = xmlRoot.get("id") xmlName = xmlRoot.get("name") xmlMutable = xmlRoot.get("mutable") == "True" xmlLearnable = xmlRoot.get("learnable") == "True" # originalValue xmlOriginalValue = xmlRoot.find("{" + namespace + "}originalValue") if xmlOriginalValue is not None and xmlOriginalValue.text != "None": originalValue = xmlOriginalValue.text else: originalValue = None # sized xmlSized = xmlRoot.find("{" + namespace + "}sized") if xmlSized is not None and xmlSized.text != "None": sized = xmlSized.text == 'True' else: sized = True # minChars xmlMinChars = xmlRoot.find("{" + namespace + "}minChars") if xmlMinChars is not None and xmlMinChars.text != "None": minChars = int(xmlMinChars.text) else: minChars = 0 # maxChars xmlMaxChars = xmlRoot.find("{" + namespace + "}maxChars") if xmlMaxChars is not None and xmlMaxChars.text != "None": maxChars = int(xmlMaxChars.text) else: maxChars = minChars # delimiter xmlDelimiter = xmlRoot.find("{" + namespace + "}delimiter") if xmlDelimiter is not None and xmlDelimiter.text != "None": delimiter = xmlDelimiter.text else: delimiter = None # type _type = None xmlType = xmlRoot.find("{" + namespace + "}type") if xmlType is not None: _type = AbstractType.makeType(xmlType.text, sized, minChars, maxChars, delimiter) if type is None: return None else: logging.error( "No type specified for this variable in the xml file.") return None if originalValue is not None: originalValue = _type.str2bin(originalValue) result = DataVariable(xmlID, xmlName, xmlMutable, xmlLearnable, _type, originalValue) logging.debug("DataVariable: loadFromXML successes: {0} ]".format( result.toString())) return result logging.debug("DataVariable: loadFromXML fails") return None