diff -uNr a/blatta/blatta b/blatta/blatta --- a/blatta/blatta 78e7bff9012264c8334e1df4d0d03a3ef609ef39330f1a3809df3a8e3fb4ffc2c2e212f505cabb4a05df90174d39cf5f085d71ec3f6be1cd6745038bda5bdfc1 +++ b/blatta/blatta 50acef42c77e18fb23fa8157201ddba47717bb95ac85fe9d23393aba847a39665373cc6c98fdbb08096f321081980f421c17acd4490de8cb56d38bef637c0565 @@ -30,6 +30,10 @@ metavar="X", help="load the configfile from X") op.add_option( + "-n", "--channel-name", + metavar="X", + help="specify the channel name for this Pest network") + op.add_option( "-d", "--daemon", action="store_true", help="fork and become a daemon") @@ -84,6 +88,8 @@ " (requires root)") (options, args) = op.parse_args(argv[1:]) + if options.channel_name is None: + options.channel_name = "#pest" if options.debug: options.verbose = True if options.irc_ports is None: diff -uNr a/blatta/lib/client.py b/blatta/lib/client.py --- a/blatta/lib/client.py 1fea4f4a6a2c05324ba98ddf9615bed578e108a6e299a79a10ee5ad3748341f3df42a4d68799cad74655be7ac8820669fc2ba15d72cc6ea6b325f345ad54393b +++ b/blatta/lib/client.py a35f64ee21532cc117fb36691ece37e2f523cb01855fb4eb8268ac745519f27fd36addb324d56d4893fb7a84fe70302630e53becf3571e250b3b578ca46abce3 @@ -48,7 +48,7 @@ return True def get_prefix(self): - return "%s!%s@%s" % (self.nickname, self.user, self.host) + return "%s" % (self.nickname) prefix = property(get_prefix) def check_aliveness(self): @@ -217,8 +217,8 @@ self.reply("353 %s = %s :%s" % (self.nickname, channelname, - " ".join(sorted(x.nickname - for x in channel.members)))) + " ".join(sorted(x + for x in self.server.state.get_peer_handles())))) self.reply("366 %s %s :End of NAMES list" % (self.nickname, channelname)) @@ -490,6 +490,7 @@ try: self.server.state.add_peer(arguments[0]) self.pest_reply("added new peer %s" % arguments[0]) + self.message(":%s JOIN %s" % (arguments[0], self.server.channel_name)) except: self.pest_reply("error attempting to add peer %s" % arguments[0]) else: @@ -500,6 +501,7 @@ try: self.server.state.remove_peer(arguments[0]) self.pest_reply("removed peer %s" % arguments[0]) + self.message(":%s PART %s" % (arguments[0], self.server.channel_name)) except Exception, e: self.server.print_debug(e) self.pest_reply("Error attempting to remove peer") diff -uNr a/blatta/lib/infosec.py b/blatta/lib/infosec.py --- a/blatta/lib/infosec.py e983984d664daef6d42fd55c86f784bfead4057b78673c18a8f8e85346db539f3f3429de5185a86805a1e698c2907441b5c2017e224bb1606358b930615ce84c +++ b/blatta/lib/infosec.py 25a41366c0d57c2fa6eaaba61e0bdb07e77b9f48d09fb7fea1d65296fcc68c8b8836f954b13de8ee071061a6f49bf8db89e958ec7b961ac974926f5163694c21 @@ -138,15 +138,16 @@ nonce, bounces, version, command, message_bytes = struct.unpack(RED_PACKET_FORMAT, red_packet_bytes) - # nothing to be done for an IGNORE command - - if command == IGNORE: - return Message({"error_code": IGNORED}) - # unpack message int_ts, self_chain, net_chain, speaker, message = struct.unpack(MESSAGE_PACKET_FORMAT, message_bytes) speaker = speaker.strip() + + # nothing to be done for an IGNORE command + + if command == IGNORE: + return Message({"speaker": speaker, "error_code": IGNORED}) + # check timestamp diff -uNr a/blatta/lib/server.py b/blatta/lib/server.py --- a/blatta/lib/server.py 7a172ddfd99e3c419bdca866441ad222790353ca0eddcb452b6d607e1998041ac0d61e8841d23e82d7c13e850cf7ff01bbfcba5d1924169795a100c4674bbcb5 +++ b/blatta/lib/server.py f36bf2d21b07d0a2e017b7c0a1f7c8784ded0a4539f2e6cb9dac2b834f2909686b0ab3cfa28a64b35db83c16018b049f99da69b4eeb61ef238c5fe90555927e3 @@ -1,4 +1,4 @@ -VERSION = "9990" +VERSION = "9989" import os import select @@ -36,6 +36,7 @@ def __init__(self, options): self.irc_ports = options.irc_ports self.udp_port = options.udp_port + self.channel_name = options.channel_name self.password = options.password self.motdfile = options.motd self.verbose = options.verbose @@ -163,18 +164,7 @@ if(error_code == None): self.print_debug("[%s] -> %s" % (peer.handles[0], message.body)) - # 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] - }) + self.conditionally_update_address_table(peer, message, address) # send the message to all clients for c in self.clients: if (self.clients[c].is_addressed_to_me(message.body)): @@ -193,12 +183,26 @@ self.print_debug("[%s:%d] -> malformed packet: %s" % packet_info) return elif error_code == IGNORED: + self.conditionally_update_address_table(peer, message, address) self.print_debug("[%s:%d] -> ignoring packet: %s" % packet_info) return elif error_code == INVALID_SIGNATURE: pass self.print_debug("[%s:%d] -> martian packet: %s" % packet_info) + # we only update the address table if the speaker is same as peer + + def conditionally_update_address_table(self, peer, message, address): + 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] + }) def peer_message(self, message): message.original = True if message.command == DIRECT: diff -uNr a/blatta/lib/state.py b/blatta/lib/state.py --- a/blatta/lib/state.py 7621f8a10842a06cbd590e6dc7460985c762458875771369d1707f24d6449021762a24277e9b1bbb017f5df601219c8b80a38e6142861503ec7dc265f013a92a +++ b/blatta/lib/state.py cf7a79184dc4f229361a26a8db0901bbcc915ec3c46c7d8a41177a5dda82e50aaca1ab94c324239251ec1fc148b6c14cb9fb967d4eb08223fa6679d15bac599a @@ -175,6 +175,10 @@ return list(chain.from_iterable(self.cursor.execute("select handle_id from handles where peer_id=?", (peer_id,)).fetchall())) + def get_peer_handles(self): + handles = list(chain.from_iterable(self.cursor.execute("select handle from handles").fetchall())) + return handles + def get_peers(self): peers = [] handles = self.cursor.execute("select handle from handles").fetchall() diff -uNr a/blatta/start_test_net.sh b/blatta/start_test_net.sh --- a/blatta/start_test_net.sh 5256691880aa5d35f8534834ad318afefb85fe95b62e9ad41fe83c7dce5d1e4bf4b1727b153492199c3567a77e65a4c36fb644af046c74c0523511e263353d96 +++ b/blatta/start_test_net.sh 10233fa2a74d0f92f3215b417140a9481f1263ceb7ca4486cca97d48e9c112a36a9b66cb4f2c99a553626dea431d6d8ae6d22735bd2535b8bde7ea964a1f0b21 @@ -1,6 +1,6 @@ #!/bin/bash # start 3 servers on different ports -./blatta --debug --irc-port 6668 --udp-port 7778 --db-path a.db --address-table-path test_net_configs/a.py > logs/a & -./blatta --debug --irc-port 6669 --udp-port 7779 --db-path b.db --address-table-path test_net_configs/b.py > logs/b & -./blatta --debug --irc-port 6670 --udp-port 7780 --db-path c.db --address-table-path test_net_configs/c.py > logs/c & +./blatta --debug --channel-name \#aleth --irc-port 6668 --udp-port 7778 --db-path a.db --address-table-path test_net_configs/a.py > logs/a & +./blatta --debug --channel-name \#aleth --irc-port 6669 --udp-port 7779 --db-path b.db --address-table-path test_net_configs/b.py > logs/b & +./blatta --debug --channel-name \#aleth --irc-port 6670 --udp-port 7780 --db-path c.db --address-table-path test_net_configs/c.py > logs/c &