On 2012-09-19 23:30:25 +0000, James Cameron said: > It is a scriptable observer client without a graphics head. It was > cut down from an earlier version of Gytha. It can be used as the > basis for a protocol sniffer, but by far the best sniffer we have at > the moment is Gytha. James can you give a description of how this code works? I've never seen the __metaclass__ stuff. I understand in Python classes are objects and metaclasses are classes' classes :-) Duplicating the functionality in obj-c has been a stumbling block. Just hoping for some plain English on how this works so I better understand how to simulation the concept in obj-c. """ server originated packets """ sp_table = {} class ServerPacket(type): def __new__(cls, name, bases, dct): server_packet = type.__new__(cls, name, bases, dct) if dct['code'] not in sp_table: obj = server_packet() sp_table[server_packet.code] = ( struct.calcsize(server_packet.format), obj) if name.lower() not in globals(): globals()[name.lower()] = obj return server_packet class SP: __metaclass__ = ServerPacket code = -1 format = '' def find(self, number): """ given a packet type return a tuple consisting of (size, instance), or (1, self) if type not known """ if number not in sp_table: return (1, self) return sp_table[number] def handler(self, data): raise NotImplemented class SP_MOTD(SP): code = 11 format = '!bxxx80s' def handler(self, data): (ignored, message) = struct.unpack(self.format, data) message = strnul(message) if opt.sp: print "SP_MOTD message=", message galaxy.motd.add(message) -- Bob Tanner <basic at us.netrek.org> Key fingerprint = 9906 320A 8BB6 64AD 96A7 7785 CBFB 10BF 568B F98C