diff -uNr a/blatta/lib/client.py b/blatta/lib/client.py --- a/blatta/lib/client.py 804c596288d04455ba5127cc25937f7ac76ca289f046ad31bd71b66264b9db73584a8fc1d4535e882d70a0f5fde10f896dbd3ae51c3fde4018a3f3e49b55f7f2 +++ b/blatta/lib/client.py 622dc40643fd936b33df0f60bac3167453dd1684021504c1d7201e07aea2140b17c4d857cc106ddd6df9963a8003e84d938696796c5d2001de2b68dbe5533f23 @@ -462,16 +462,23 @@ def wot_handler(): if len(arguments) < 1: # Display the current WOT - for peer in self.server.state.get_peers(): - self.pest_reply("%s %s:%d" % (string.join(peer.handles, ","), peer.address, peer.port)) + peers = self.server.state.get_peers() + if len(peers) > 0: + for peer in peers: + self.pest_reply("%s %s:%s" % (string.join(peer.handles, ","), peer.address, peer.port)) + else: + self.pest_reply("WOT is empty") elif len(arguments) == 1: # Display all WOT data concerning the peer identified by HANDLE, # including all known keys, starting with the most recently used, for that peer. handle = arguments[0] peer = self.server.state.get_peer_by_handle(handle) - self.pest_reply("keys:") - for key in peer.keys: - self.pest_reply("%s" % key) + if peer: + self.pest_reply("keys:") + for key in peer.keys: + self.pest_reply("%s" % key) + else: + self.pest_reply("unknown peer: %s" % handle) else: pass @@ -488,7 +495,8 @@ try: self.server.state.remove_peer(arguments[0]) self.pest_reply("removed peer %s" % arguments[0]) - except: + except Exception, e: + self.server.print_debug(e) self.pest_reply("Error attempting to remove peer") else: self.pest_reply("Usage: UNPEER ") @@ -504,6 +512,7 @@ key = arguments[1] try: self.server.state.add_key(handle, key) + self.pest_reply("added key: %s" % key) except: self.pest_reply("Error attempting to add key") @@ -513,8 +522,10 @@ else: try: self.server.state.remove_key(arguments[0]) - except: + self.pest_reply("removed key: %s" % arguments[0]) + except Exception, e: self.pest_reply("Error attempting to remove key") + self.server.print_debug(e) def at_handler(): if len(arguments) == 0: @@ -528,14 +539,18 @@ self.server.state.update_address_table({"handle": handle, "address": address_ip, "port": port}) + self.pest_reply("updated address table: %s %s" % (handle, address)) return elif len(arguments) > 2: self.pest_reply("Usage: AT [] [
]") return - for address in at: - self.pest_reply("%s %s %s" % (address["handle"], - address["address"], - address["updated_at"])) + if len(at) > 0: + for address in at: + self.pest_reply("%s %s %s" % (address["handle"], + address["address"], + address["updated_at"])) + else: + self.pest_reply("no results") handler_table = { "AWAY": away_handler, diff -uNr a/blatta/lib/peer.py b/blatta/lib/peer.py --- a/blatta/lib/peer.py c7fca9b7a5d928f0e6a742d2b6903dd938c8592ad15f6a1423189830f68dc50ec1e37d19a6d6eeb4c5800752213b0f82f19ed3ced68499b9d272719c1d578831 +++ b/blatta/lib/peer.py b26a086b1bede8fcfe1af5aa32d9fefcae5ba0011d32ca698b65b2b5026734f9f8b8ba18b6d3925572308cffdef5454d595f17a2a74f9775cf0748dfe468c776 @@ -15,7 +15,10 @@ self.infosec = Infosec(server) def get_key(self): - return self.keys[0] + if len(self.keys) > 0: + return self.keys[0] + else: + return None def send(self, msg): try: diff -uNr a/blatta/lib/server.py b/blatta/lib/server.py --- a/blatta/lib/server.py 016f72e7fd06b003916fcd423f9ab0155a912b421064d440823aa37d96f532e325120a93308278921f984c6bd5d4e8e887124370059c2d295d2f23fd1f7903e8 +++ b/blatta/lib/server.py 851fe9967ea2562f0bd30255f3e9b1ca1487e7fd56a649e93a0efba4d6de28a70f0ff6c1b3ddbef90ee4d6370403d18a27a31cdcd062a46e7116db5f4479f7a3 @@ -1,4 +1,4 @@ -VERSION = "9993" +VERSION = "9992" import os import select @@ -142,47 +142,51 @@ del self.channels[irc_lower(channel.name)] def handle_udp_data(self, bytes_address_pair): + data = bytes_address_pair[0] + address = bytes_address_pair[1] for peer in self.state.get_peers(): - data = bytes_address_pair[0] - address = bytes_address_pair[1] - message = self.infosec.unpack(peer, data) - if(message != None): - self.print_debug("valid message from peer: %s" % peer.handles[0]) - - # we only update the address table if the speaker is same as peer - - try: - idx = peer.handles.index(message["speaker"]) - except: - idx = None - - if idx != None: - self.state.update_address_table({"handle": message["speaker"], - "address": address[0], - "port": address[1] - }) - # send the message to all clients - for c in self.clients: - # self.clients[c].udp_socket_readable_notification(message) - if (self.clients[c].is_addressed_to_me(message["body"])): - self.clients[c].message(message["body"]) - # send the message to all other peers if it should be propagated - if(message["command"] == BROADCAST) and message["bounces"] < MAX_BOUNCES: - self.rebroadcast(peer, message) - return + if peer.get_key() != None: + message = self.infosec.unpack(peer, data) + if(message != None): + self.print_debug("valid message from peer: %s" % peer.handles[0]) + + # we only update the address table if the speaker is same as peer + + try: + idx = peer.handles.index(message["speaker"]) + except: + idx = None + + if idx != None: + self.state.update_address_table({"handle": message["speaker"], + "address": address[0], + "port": address[1] + }) + # send the message to all clients + for c in self.clients: + # self.clients[c].udp_socket_readable_notification(message) + if (self.clients[c].is_addressed_to_me(message["body"])): + self.clients[c].message(message["body"]) + # send the message to all other peers if it should be propagated + if(message["command"] == BROADCAST) and message["bounces"] < MAX_BOUNCES: + self.rebroadcast(peer, message) + return self.print_debug("Unknown peer: %s %d" % (address[0], address[1])) def peer_message(self, message): message["original"] = True if message["command"] == DIRECT: peer = self.state.get_peer_by_handle(message["handle"]) - if peer: + if peer and (peer.get_key() != None): peer.send(message) else: - self.print_debug("Discarding message to unknown handle: %s" % message["handle"]) + self.print_debug("Discarding message to unknown handle or handle with no key: %s" % message["handle"]) else: for peer in self.state.get_peers(): - peer.send(message) + if peer.get_key() != None: + peer.send(message) + else: + self.print_debug("Discarding message to handle with no key: %s" % message["handle"]) def rebroadcast(self, source_peer, message): message["original"] = False diff -uNr a/blatta/lib/state.py b/blatta/lib/state.py --- a/blatta/lib/state.py 4f6467d323b0e8cfe531ddeed0b604438bbc15b6ffb050f0da9ba0509174c6bb42d633c94f1cd46acba1fa7b7d2b74b8c5bdd896080c663b8f9c8bf893a174d6 +++ b/blatta/lib/state.py 5e6216fb339f461e197c6c2f878148cbf2032ce6c433f83df2c29e88b31c467f9c8b689e14d5b0471a6275e7a40e286ac9dbea69c60d3a16171e4bae6b091339 @@ -40,14 +40,15 @@ results = self.cursor.execute("select handle_id,address,port,updated_at from at\ order by updated_at desc").fetchall() else: - handle_id = self.cursor.execute("select handle_id from handles where handle=?", - (handle,)).fetchone()[0] - if None != handle_id: - results = self.cursor.execute("select handle_id,address,port,updated_at from at \ - where handle_id=? order by updated_at desc", - (handle_id,)).fetchall() + result = self.cursor.execute("select handle_id from handles where handle=?", + (handle,)).fetchone() + if None != result: + handle_id = result[0] else: return [] + results = self.cursor.execute("select handle_id,address,port,updated_at from at \ + where handle_id=? order by updated_at desc", + (handle_id,)).fetchall() for result in results: handle_id, address, port, updated_at = result h = self.cursor.execute("select handle from handles where handle_id=?", @@ -130,10 +131,11 @@ def remove_peer(self, handle): # get peer id - peer_id = self.cursor.execute("select peer_id from handles where handle=?", (handle,)).fetchone()[0] - if peer_id == None: - return + result = self.cursor.execute("select peer_id from handles where handle=?", (handle,)).fetchone() + if result == None: + return else: + peer_id = result[0] # get all aliases handle_ids = self.get_handle_ids_for_peer(peer_id) @@ -174,7 +176,7 @@ for handle in handles: peer = self.get_peer_by_handle(handle[0]) - if not self.is_duplicate(peers, peer): + if not (self.is_duplicate(peers, peer)): peers.append(peer) return peers