def _validate_pattern(self, forced_pattern, value, field): patterns = forced_pattern[1:-1].split('|') for pattern in patterns: if self._is_match(pattern, value, field._parent): return [] return ["Value of field '%s' does not match pattern '%s!=%s'" % (field._get_recursive_name(), to_0xhex(value), forced_pattern)]
def _validate_pattern(self, forced_pattern, value, field): if self._validate_or(forced_pattern, value, field): return [] if self._validate_masked(forced_pattern, value): return [] return ["Value of field '%s' does not match pattern '%s!=%s'" % (field._get_recursive_name(), to_0xhex(value), forced_pattern)]
def _validate_pattern(self, forced_pattern, value, field): if self._validate_or(forced_pattern, value, field): return [] if self._validate_masked(forced_pattern, value): return [] return [ "Value of field '%s' does not match pattern '%s!=%s'" % (field._get_recursive_name(), to_0xhex(value), forced_pattern) ]
def convert_to_ip(value): try: return to_0xhex( struct.pack('BBBB', *(int(number) for number in value.split(".")))) except: raise Exception("Malformed IP: %s" % value)
def _is_match(self, forced_value, value, message): forced_binary_val, _ = self._encode_value( forced_value, message) # TODO: Should pass msg return int(to_0xhex(forced_binary_val), 16) == int(to_0xhex(value), 16)
def _default_presentation_format(self, value): return to_0xhex(value)
def _apply_mask_to_values(self, forced_pattern, value): val = forced_pattern[1:-1].split('&')[0].strip() mask = forced_pattern[1:-1].split('&')[1].strip() return to_int(val) & to_int(mask), to_int( to_0xhex(value)) & to_int(mask)
def test_to_0xhex(self): self.assertEquals(to_0xhex("\x00"), "0x00") self.assertEquals(to_0xhex("\xca\xfe\xba\xbe\xf0\x0d\xd0\x0d\xde\xad\xbe\xef"), "0xcafebabef00dd00ddeadbeef")
def _is_match(self, forced_value, value, message): forced_binary_val, _ = self._encode_value(forced_value, message) # TODO: Should pass msg return int(to_0xhex(forced_binary_val), 16) == int(to_0xhex(value), 16)
def _apply_mask_to_values(self, forced_pattern, value): val = forced_pattern[1:-1].split('&')[0].strip() mask = forced_pattern[1:-1].split('&')[1].strip() return to_int(val) & to_int(mask), to_int(to_0xhex(value)) & to_int(mask)
def test_to_0xhex(self): self.assertEquals(to_0xhex('\x00'), '0x00') self.assertEquals( to_0xhex('\xca\xfe\xba\xbe\xf0\x0d\xd0\x0d\xde\xad\xbe\xef'), '0xcafebabef00dd00ddeadbeef')