def test_encryption(self): orig_test = 'Hi I am Alice' bobread = encrypter.encrypt(orig_test) print bobread clear = encrypter.decrypt(bobread) print clear self.assert_(clear == orig_test)
def do_ping(self, other): ping_payload = {'type':'ping', 'seqno':0, 'node': other['name'], 'from': self.uuid} message = json.dumps(ping_payload) enc_message = encrypter.encrypt(message) addr = other['addr'] port = other['port'] _t = time.time() try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP sock.sendto(enc_message, (addr, port) ) logger.debug('PING waiting %s ack message' % other['name'], part='gossip') # Allow 3s to get an answer sock.settimeout(3) ret = sock.recv(65535) logger.debug('PING got a return from %s' % other['name'], len(ret), part='gossip') # An aswer? great it is alive! self.set_alive(other, strong=True) except (socket.timeout, socket.gaierror), exp: logger.debug("PING: error joining the other node %s:%s : %s" % (addr, port, exp), part='gossip') logger.debug("PING: go indirect mode", part='gossip') possible_relays = [] with self.nodes_lock: possible_relays = [n for n in self.nodes.values() if n['uuid'] != self.uuid and n != other and n['state'] == 'alive'] if len(possible_relays) == 0: logger.log("PING: no possible relays for ping", part='gossip') self.set_suspect(other) # Take at least 3 relays to ask ping relays = random.sample(possible_relays, min(len(possible_relays), 3)) logger.debug('POSSIBLE RELAYS', relays) ping_relay_payload = {'type':'ping-relay', 'seqno':0, 'tgt': other['uuid'], 'from': self.uuid} message = json.dumps(ping_relay_payload) enc_message = encrypter.encrypt(message) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP for r in relays: try: sock.sendto(enc_message, (r['addr'], r['port']) ) logger.debug('PING waiting ack message', part='gossip') except socket.error, exp: logger.error('Cannot send a ping relay to %s:%s' % (r['addr'], r['port']), part='gossip')
def do_gossip_push(self, dest): message = '' to_del = [] stack = [] tags = dest['tags'] for b in broadcaster.broadcasts: # not a valid node for this message, skip it if 'tag' in b and b['tag'] not in tags: continue old_message = message send = b['send'] if send >= KGOSSIP: to_del.append(b) bmsg = b['msg'] stack.append(bmsg) message = json.dumps(stack) # Maybe we are now too large and we do not have just one # f*****g big message, so we fail back to the old_message that was # in the good size and send it now if len(message) > 1400 and len(stack) != 1: message = old_message stack = stack[:-1] break # stack a sent to this broadcast message b['send'] += 1 # Clean too much broadcasted messages for b in to_del: broadcaster.broadcasts.remove(b) # Void message? bail out if len(message) == 0: return addr = dest['addr'] port = dest['port'] # and go for it! try: enc_message = encrypter.encrypt(message) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP sock.sendto(enc_message, (addr, port) ) logger.debug('BROADCAST: sent %d message (len=%d) to %s:%s' % (len(stack), len(enc_message), addr, port), part='gossip') except (socket.timeout, socket.gaierror), exp: logger.debug("ERROR: cannot sent the message %s" % exp, part='gossip')