@@ -735,8 +735,7 @@ def __init__(self, x, y, objtype, *args, name="Default", maxconnections=4, ip=No
735735 TheGrid .moveto (self .image , self .x , self .y )
736736 self .image .show ()
737737
738- self .macdir = object ()
739- mac .__init__ (self .macdir ) #Soluciona un bug raro en Ubuntu
738+ self .macdir = mac ()
740739 print ("MAC:" , self .macdir , int (self .macdir ), bin (self .macdir ))
741740 if ip == None :
742741 print ("No ip definida" )
@@ -815,44 +814,6 @@ def resizetogrid(self, image, *args):
815814 def clickado (self , widget , event ):
816815 lprint ("Clickado en objeto " + str (self ) + " @ " + str (self .x ) + ", " + str (self .y ))
817816
818- class mac ():
819- def __init__ (self , * macaddr , bits = 48 ):
820- print ("macaddr:" , * macaddr )
821- if macaddr == None or True :
822- tmp = self .genmac (bits = bits )
823-
824- self .int = tmp [0 ]
825- self .str = tmp [1 ]
826- self .bin = ("{0:0" + str (bits )+ "b}" ).format (self .int )
827-
828- def genmac (* self , bits = 48 , mode = None ):
829- #Por defecto se usa mac 48, o lo que es lo mismo, la de toa la vida
830- #Nota, falta un comprobador de que la mac no se repita
831- realmac = int ("11" + str ("{0:0" + str (bits - 2 ) + "b}" ).format (random .getrandbits (bits - 2 )),2 )
832- readmac = str (hex (realmac )).upper ().replace ("0X" , "" )
833- readmac = ":" .join ([readmac [i * 2 :i * 2 + 2 ] for i ,bl in enumerate (readmac [::2 ])])
834- if mode == 0 :
835- return realmac
836- if mode == 1 :
837- return readmac
838- else :
839- return [realmac , readmac ]
840-
841- def __str__ (self ):
842- readmac = str (hex (self .int )).upper ().replace ("0X" , "" )
843- return ":" .join ([readmac [i * 2 :i * 2 + 2 ] for i ,bl in enumerate (readmac [::2 ])])
844-
845- def __bytes__ (self ):
846- return Object .__bytes__ (self )
847-
848- def __int__ (self ):
849- return self .int
850- def __index__ (self ):
851- return self .int
852- def list (self ):
853- return self .str .split (":" )
854-
855-
856817 #Esta fucnión se encarga de comprobar a que ordenador(es) está conectado
857818 #en total, pasando por routers, hubs y switches.
858819
@@ -1059,6 +1020,43 @@ def packet_received(self, pck, *args, port=None):
10591020
10601021 print ("<<Fin de los atributos" )
10611022
1023+ class mac ():
1024+ def __init__ (self , * macaddr , bits = 48 ):
1025+ print ("macaddr:" , * macaddr )
1026+ if macaddr == None or True :
1027+ tmp = self .genmac (bits = bits )
1028+
1029+ self .int = tmp [0 ]
1030+ self .str = tmp [1 ]
1031+ self .bin = ("{0:0" + str (bits )+ "b}" ).format (self .int )
1032+
1033+ def genmac (* self , bits = 48 , mode = None ):
1034+ #Por defecto se usa mac 48, o lo que es lo mismo, la de toa la vida
1035+ #Nota, falta un comprobador de que la mac no se repita
1036+ realmac = int ("11" + str ("{0:0" + str (bits - 2 ) + "b}" ).format (random .getrandbits (bits - 2 )),2 )
1037+ readmac = str (hex (realmac )).upper ().replace ("0X" , "" )
1038+ readmac = ":" .join ([readmac [i * 2 :i * 2 + 2 ] for i ,bl in enumerate (readmac [::2 ])])
1039+ if mode == 0 :
1040+ return realmac
1041+ if mode == 1 :
1042+ return readmac
1043+ else :
1044+ return [realmac , readmac ]
1045+
1046+ def __str__ (self ):
1047+ readmac = str (hex (self .int )).upper ().replace ("0X" , "" )
1048+ return ":" .join ([readmac [i * 2 :i * 2 + 2 ] for i ,bl in enumerate (readmac [::2 ])])
1049+
1050+ def __bytes__ (self ):
1051+ return Object .__bytes__ (self )
1052+
1053+ def __int__ (self ):
1054+ return self .int
1055+ def __index__ (self ):
1056+ return self .int
1057+ def list (self ):
1058+ return self .str .split (":" )
1059+
10621060npack = 0
10631061
10641062class Router (ObjetoBase ):
@@ -1076,89 +1074,92 @@ def __del__(self, *args):
10761074 push_elemento ("Eliminado objeto" )
10771075 del self
10781076
1079- class Switch (ObjetoBase ):
1080- cnt = 1
1081- #El objeto puerto
1082- class Port ():
1083- def __init__ (self , switch ):
1084- self .id = switch .portid
1085- self .dic = switch .pdic
1086- self .all = switch .pall
1087- switch .portid += 1
1088- self .switch = switch
1089- self .connection = None
1090- self .all [self .id ] = self
1091- self .dic [self .id ] = self .connection
1092- def connect (self , connection ):
1093- self .connection = connection
1094- self .dic [self .id ] = self .connection
1095- def disconnect (self ):
1096- self .connection = None
1097- self .dic [self .id ] = self .connection
1098- def is_available (self ):
1099- if self .connection == None :
1100- return True
1101- return False
1102-
1103- class w_switch_table (Gtk .ApplicationWindow ):
1104- def __init__ (self , switch ):
1105- self .link = switch
1106- builder = switch .builder
1107- builder .get_object ("window_switch-table_button" ).connect ("clicked" , self .hide )
1108- builder .get_object ("window_switch-table" ).connect ("delete-event" , self .hide )
1109- self .store = Gtk .ListStore (str ,int ,int ,int )
1110-
1111- self .view = builder .get_object ("window_switch-table-TreeView" )
1112- self .view .set_model (self .store )
1113- for i , column_title in enumerate (["MAC" , "Puerto" , "TTL (s)" ]):
1114- renderer = Gtk .CellRendererText ()
1115- column = Gtk .TreeViewColumn (column_title , renderer , text = i )
1116- column .set_sort_column_id (i )
1117- self .view .append_column (column )
1118- self .ticking = False
1119- builder .get_object ("window_switch-table" ).set_keep_above (True )
1120-
1121- def show (self , * a ):
1077+ ### ESTO ERA NESTED DE SWITHC ###
1078+
1079+ class Port ():
1080+ def __init__ (self , switch ):
1081+ self .id = switch .portid
1082+ self .dic = switch .pdic
1083+ self .all = switch .pall
1084+ switch .portid += 1
1085+ self .switch = switch
1086+ self .connection = None
1087+ self .all [self .id ] = self
1088+ self .dic [self .id ] = self .connection
1089+ def connect (self , connection ):
1090+ self .connection = connection
1091+ self .dic [self .id ] = self .connection
1092+ def disconnect (self ):
1093+ self .connection = None
1094+ self .dic [self .id ] = self .connection
1095+ def is_available (self ):
1096+ if self .connection == None :
1097+ return True
1098+ return False
1099+
1100+ class w_switch_table (Gtk .ApplicationWindow ):
1101+ def __init__ (self , switch ):
1102+ self .link = switch
1103+ builder = switch .builder
1104+ builder .get_object ("window_switch-table_button" ).connect ("clicked" , self .hide )
1105+ builder .get_object ("window_switch-table" ).connect ("delete-event" , self .hide )
1106+ self .store = Gtk .ListStore (str ,int ,int ,int )
1107+
1108+ self .view = builder .get_object ("window_switch-table-TreeView" )
1109+ self .view .set_model (self .store )
1110+ for i , column_title in enumerate (["MAC" , "Puerto" , "TTL (s)" ]):
1111+ renderer = Gtk .CellRendererText ()
1112+ column = Gtk .TreeViewColumn (column_title , renderer , text = i )
1113+ column .set_sort_column_id (i )
1114+ self .view .append_column (column )
1115+ self .ticking = False
1116+ builder .get_object ("window_switch-table" ).set_keep_above (True )
1117+
1118+ def show (self , * a ):
1119+ self .ticking = True
1120+ GObject .timeout_add (1001 , self .tick )
1121+ for row in self .store :
1122+ row [2 ] = row [3 ] - time .time ()
1123+ self .link .builder .get_object ("window_switch-table" ).show_all ()
1124+
1125+ def hide (self , window , * event ):
1126+ self .link .builder .get_object ("window_switch-table" ).hide ()
1127+ self .ticking = False
1128+ return True
1129+ def append (self , lst ):
1130+ lst .append (lst [2 ])
1131+ for row in self .store :
1132+ row [2 ] = row [3 ] - time .time ()
1133+ print (lst )
1134+ row = self .store .append (lst )
1135+ print (self .view .get_property ("visible" ))
1136+ if self .view .get_property ("visible" ) == True :
11221137 self .ticking = True
11231138 GObject .timeout_add (1001 , self .tick )
1124- for row in self .store :
1125- row [2 ] = row [3 ] - time .time ()
1126- self .link .builder .get_object ("window_switch-table" ).show_all ()
11271139
1128- def hide (self , window , * event ):
1129- self .link .builder .get_object ("window_switch-table" ).hide ()
1130- self .ticking = False
1131- return True
1132- def append (self , lst ):
1133- lst .append (lst [2 ])
1134- for row in self .store :
1135- row [2 ] = row [3 ] - time .time ()
1136- print (lst )
1137- row = self .store .append (lst )
1138- print (self .view .get_property ("visible" ))
1139- if self .view .get_property ("visible" ) == True :
1140- self .ticking = True
1141- GObject .timeout_add (1001 , self .tick )
1142-
1143- def tick (self ):
1144- for row in self .store :
1145- row [2 ] = row [3 ] - time .time ()
1146- if row [2 ] <= 0 :
1147- try :
1148- self .store .remove (row .iter )
1149- self .link .table .remove (row )
1150- except :
1151- pass
1152- if len (self .store ) == 0 :
1153- self .ticking = False
1154- return self .ticking
1155- def remove (self , lst ):
1156- for row in self .store :
1157- if row == lst :
1140+ def tick (self ):
1141+ for row in self .store :
1142+ row [2 ] = row [3 ] - time .time ()
1143+ if row [2 ] <= 0 :
1144+ try :
11581145 self .store .remove (row .iter )
1159- self .link .table
1160- break
1161- pass
1146+ self .link .table .remove (row )
1147+ except :
1148+ pass
1149+ if len (self .store ) == 0 :
1150+ self .ticking = False
1151+ return self .ticking
1152+ def remove (self , lst ):
1153+ for row in self .store :
1154+ if row == lst :
1155+ self .store .remove (row .iter )
1156+ self .link .table
1157+ break
1158+ pass
1159+
1160+ class Switch (ObjetoBase ):
1161+ cnt = 1
1162+ #El objeto puerto
11621163
11631164 def __init__ (self , x , y , * args , name = "Default" , maxconnections = 5 ):
11641165 self .objectype = "Switch"
@@ -1174,13 +1175,13 @@ def __init__(self, x, y, *args, name="Default", maxconnections=5):
11741175 self .timeout = 20 #Segundos
11751176
11761177 for p in range (self .max_connections ):
1177- self . Port (self )
1178+ Port (self )
11781179 print (self .pall )
11791180
11801181 self .table = [
11811182 #[MAC, port, expiration]
11821183 ]
1183- self .wtable = self . w_switch_table (self )
1184+ self .wtable = w_switch_table (self )
11841185 child = Gtk .MenuItem .new_with_label ("Routing Table" )
11851186 self .builder .get_object ("grid_rclick" ).append (child )
11861187 child .connect ("activate" , self .wtable .show )
@@ -1192,7 +1193,7 @@ def load(self):
11921193 ObjetoBase .load (self )
11931194 del self .wtable
11941195 self .table = []
1195- self .wtable = self . w_switch_table (self )
1196+ self .wtable = w_switch_table (self )
11961197
11971198 del self .ch
11981199 child = Gtk .MenuItem .new_with_label ("Routing Table" )
0 commit comments