Changeset 3332
- Timestamp:
- 08/04/08 18:30:41 (5 years ago)
- Location:
- branch/PacketManipulator
- Files:
-
- 3 modified
-
Backend/UMPA.py (modified) (3 diffs)
-
Tabs/PropertyTab.py (modified) (3 diffs)
-
widgets/PropertyGrid.py (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branch/PacketManipulator/Backend/UMPA.py
r3330 r3332 116 116 return str(ret) 117 117 118 def get_field_size(proto, field): 119 return field.bits 120 121 def get_field_offset(proto, field): 122 return proto.get_offset(field) 123 124 def get_field_enumeration_s2i(field): 125 return field.enumerable.items() 126 127 def get_field_enumeration_i2s(field): 128 return [(v, k) for (k, v) in field.enumerable.items()] 129 118 130 def get_keyflag_value(proto, flag, key): 119 131 return flag.get()[key].get() … … 151 163 def get_packet_raw(metapack): 152 164 return metapack.root.get_raw() 165 166 # Checking stuff 167 168 def is_field(field): 169 return isinstance(field, Field) 170 171 def is_flags(field): 172 return isinstance(field, Flags) 173 174 def is_proto(proto): 175 return isinstance(proto, Protocol) 176 177 def implements(obj, klass): 178 return isinstance(obj, klass) 179 153 180 154 181 class MetaPacket: … … 174 201 yield i 175 202 203 176 204 gprotos = load_gprotocols() 177 205 178 206 PMField = Field 179 207 PMFlagsField = Flags 208 209 PMBitField = BitField 210 PMIPField = IPv4AddrField 211 PMByteField = None 212 PMShortField = None 213 PMLEShortField = None 214 PMIntField = IntField 215 PMSignedIntField = None 216 PMLEIntField = None 217 PMLESignedIntField = None 218 PMLongField = None 219 PMLELongField = None 220 PMStrField = None 221 PMLenField = None 222 PMRDLenField = None 223 PMFieldLenField = None 224 PMBCDFloatField = None 225 PMEnumField = EnumField -
branch/PacketManipulator/Tabs/PropertyTab.py
r3311 r3332 20 20 21 21 import gtk 22 import Backend 23 22 24 from views import UmitView 23 25 from widgets.PropertyGrid import PropertyGrid … … 61 63 62 64 proto = page.proto_hierarchy.get_active_protocol() 63 print proto64 65 65 66 self.grid.populate(proto) … … 91 92 92 93 if page: 93 page.hexview.select_block(proto.get_offset(field) / 8, max(field.bits / 8, 1)) 94 start = Backend.get_field_offset(proto, field) 95 length = Backend.get_field_size(proto, field) 96 97 page.hexview.select_block(start / 8, max(length / 8, 1)) -
branch/PacketManipulator/widgets/PropertyGrid.py
r3331 r3332 86 86 def create_widgets(self): 87 87 # Manage the None type 88 if not self.value: 89 self.value = 0 88 89 value = self.value 90 91 if value is None: 92 value = 0 90 93 91 94 self.calc_bounds() 92 self.adj = gtk.Adjustment( self.value, self.min, self.max, 1, 2)95 self.adj = gtk.Adjustment(value, self.min, self.max, 1, 2) 93 96 self.spin = gtk.SpinButton(self.adj, digits=self.digits) 94 97 … … 103 106 def calc_bounds(self): 104 107 # Unsigned int / Int? :( 105 if self.field.bits:108 if Backend.get_field_size(self.protocol, self.field) != None: 106 109 self.min = 0 107 self.max = (2 ** self.field.bits) - 1 # (2 ^ n) - 1110 self.max = (2 ** Backend.get_field_size(self.protocol, self.field)) - 1 # (2 ^ n) - 1 108 111 self.digits = 0 109 el if isinstance(self.value, int):112 else: 110 113 import sys 111 114 print "Hei man we are falling back to sys.maxint for", self.field … … 179 182 self.combo.set_attributes(txt, text=1) 180 183 181 self.odict = [(v, k) for k, v in self.field.enumerable.items()]184 self.odict = Backend.get_field_enumeration_i2s(self.field) 182 185 self.odict.sort() 183 186 … … 200 203 self.store.append([self.icon, _("Set manually"), -1]) 201 204 202 self.int_editor = IntEditor( self.field)205 self.int_editor = IntEditor((self.protocol, self.field)) 203 206 204 207 self.undo_btn = MiniButton(stock=gtk.STOCK_UNDO) … … 267 270 def __on_changed(self, entry): 268 271 self.value = self.entry.get_text() 272 273 def get_editor(field): 274 "@return the corresponding editor class for field or None" 275 276 assert Backend.is_field(field) 277 278 # MACField 279 # IPField 280 281 # We use a list because order is important here 282 table = [#(Backend.PMMACField, MACEditor), 283 (Backend.PMStrField, StrEditor), 284 (Backend.PMIPField, IPv4Editor), 285 (Backend.PMEnumField, EnumEditor), 286 (Backend.PMByteField, IntEditor), 287 (Backend.PMShortField, IntEditor), 288 (Backend.PMLEShortField, IntEditor), 289 (Backend.PMIntField, IntEditor), 290 (Backend.PMSignedIntField, IntEditor), 291 (Backend.PMLEIntField, IntEditor), 292 (Backend.PMLESignedIntField, IntEditor), 293 (Backend.PMLongField, IntEditor), 294 (Backend.PMLELongField, IntEditor), 295 (Backend.PMLenField, IntEditor), 296 (Backend.PMRDLenField, IntEditor), 297 (Backend.PMFieldLenField, IntEditor), 298 (Backend.PMBCDFloatField, IntEditor), 299 (Backend.PMBitField, IntEditor), 300 ] 301 302 for it in table: 303 if it[0] != None and Backend.implements(field, it[0]): 304 return it[1] 269 305 270 306 class HackEntry(gtk.Entry): … … 530 566 531 567 proto, field = self.__get_parent_field(model, iter) 568 569 print proto, field 532 570 533 571 if not proto or not field or \ 534 not isinstance(field, Backend.PMField): 535 #or not isinstance(proto, base.Protocol): 572 not Backend.is_field(field) or \ 573 not Backend.is_proto(proto): 574 536 575 return (None, None) 537 576 … … 539 578 540 579 def __on_selection_changed(self, selection): 541 return542 580 model, iter = selection.get_selected() 543 581 … … 568 606 field = model.get_value(iter, 1) 569 607 570 if not field or not isinstance(field, Backend.PMField):608 if not Backend.is_field(field): 571 609 return 572 610 … … 618 656 obj = model.get_value(iter, 1) 619 657 620 if isinstance(obj, Backend.PMFlagsField):658 if Backend.is_flags(obj): 621 659 cell.set_property('cell-background-gdk', 622 660 self.style.mid[gtk.STATE_NORMAL]) … … 631 669 632 670 # If we are a field or a string (a sub field of flags) 633 elif isinstance(obj, Backend.PMField) or \ 634 isinstance(obj, str): 635 636 cell.field = obj 671 elif Backend.is_field(obj) or isinstance(obj, str): 672 673 cell.field = None 637 674 cell.set_property('editable', True) 638 675 cell.set_property('cell-background-gdk', None) 639 676 677 # We have a standard field 678 640 679 protocol = self.__get_parent_protocol(model, iter) 641 680 … … 647 686 648 687 cell.set_property('markup', '<tt>%s</tt>' % value) 688 cell.editor = get_editor(obj) 689 690 if cell.editor: 691 cell.field = (protocol, obj) 649 692 650 693 return 651 694 695 # We have a subkey of Flags 652 696 653 697 proto, flags = self.__get_parent_flags_field(model, iter) … … 658 702 659 703 return 660 661 if obj.bits == 1:662 cell.editor = BitEditor663 elif issubclass(obj.__class__, base.EnumField):664 cell.editor = EnumEditor665 elif issubclass(obj.__class__, base.IPv4AddrField):666 cell.editor = IPv4Editor667 elif issubclass(obj.__class__, base.IntField):668 cell.editor = IntEditor669 else:670 cell.field = None671 704 672 705 else: … … 684 717 proto = model.get_value(model.iter_parent(iter), 0) 685 718 686 if isinstance(obj, str) or \ 687 isinstance(obj, Backend.PMField): 688 689 if isinstance(obj, Backend.PMFlagsField): 719 if Backend.is_field(obj): 720 721 if Backend.is_flags(obj): 690 722 color = self.style.mid[gtk.STATE_NORMAL] 691 723 else: 692 724 color = None 693 725 694 if isinstance(obj, Backend.PMField): 695 if Backend.is_field_autofilled(obj): 696 markup = '<i>%s</i>' % Backend.get_field_name(obj) 697 else: 698 markup = '<b>%s</b>' % Backend.get_field_name(obj) 726 if Backend.is_field_autofilled(obj): 727 markup = '<i>%s</i>' % Backend.get_field_name(obj) 699 728 else: 700 markup = '<b>%s</b>' % obj 729 markup = '<b>%s</b>' % Backend.get_field_name(obj) 730 731 elif isinstance(obj, str): 732 color = None 733 markup = '<b>%s</b>' % obj 701 734 else: 702 735 markup = '<b>%s</b>' % Backend.get_proto_name(obj) … … 711 744 icon, color = None, self.style.mid[gtk.STATE_NORMAL] 712 745 713 if isinstance(obj, str) or isinstance(obj, Backend.PMField):714 715 if isinstance(obj, Backend.PMFlagsField):746 if Backend.is_field(obj): 747 748 if Backend.is_flags(obj): 716 749 color = self.style.mid[gtk.STATE_NORMAL] 717 750 else: 718 751 color = None 719 752 720 if isinstance(obj, Backend.PMField): 721 if Backend.is_field_autofilled(obj): 722 icon = self.icon_locked 753 if Backend.is_field_autofilled(obj): 754 icon = self.icon_locked 755 756 elif isinstance(obj, str): 757 color = None 723 758 724 759 cell.set_property('cell-background-gdk', color) … … 740 775 flag_iter = self.store.append(root_iter, [None, field]) 741 776 742 if isinstance(field, Backend.PMFlagsField):777 if Backend.is_flags(field): 743 778 for flag in Backend.get_flag_keys(field): 744 779 self.store.append(flag_iter, [None, flag])
