def handle_message(self, msg): #print "got", msg, msg.recipient #print to, to.hashid, self.myinfo.hashid if msg.type == "CPOLL": self.handle_CPOLL(msg) return True if msg.type == "CRESP": cname = self.get_channel_from_hashid(msg.get_content("CHANNEL")) if len(msg.message) > 0: for m in msg.message: #print m ckey = ChatMessage.passwrd_to_3DES(cname) chash = hash_util.hash_str(cname) m.DESKEY = ChatMessage.passwrd_to_3DES(cname) #print len(m.message) m = copy.deepcopy(m) m.decrypt() m_owner = UserInfo.from_secret(m.sender) #cname = self.get_channel_from_hashid(chash) if str(m_owner.hashid) != str(self.myinfo.hashid): print "<"+cname+">","["+m_owner.handle+"]", m.message subscribed_channels[cname] = msg.get_content("pollTime") return True if msg.type == "CPOST": self.handle_CPOST(msg) return True to = UserInfo.from_secret(msg.recipient) if not hash_util.hash_equal(to.hashid,self.myinfo.hashid): #print("got somebody else's message") return True if msg.type == "CHAT": origin = UserInfo.from_secret(msg.sender) local_origin = self.get_friend_from_hash(origin.hashid) if local_origin is None: print("You got a message from a user outside your friend list") return msg.desecure(self.myinfo) msg.decrypt() print( "{"+local_origin.handle+"} "+msg.message) return True if msg.type == "PING": msg.desecure(self.myinfo) msg.decrypt() to = UserInfo.from_secret(msg.sender) pid = msg.message if pid in self.open_pings.keys(): now = time.time() delta = now - self.open_pings[pid] print self.get_friend_from_hash(to.hashid).handle, "is online", delta else: print to.handle, "is online and has pinged you" newmsg = ChatMessage(self.owner, to.hashid, self.owner, self.myinfo.gen_secret(False), to.gen_secret(False), pid, to.sign(pid) ) newmsg.type = "PING" newmsg.encrypt() newmsg.secure(to) self.send_message(newmsg,None) return True return True
def get_friend_from_hash(self,hashid): for f in self.friends: if hash_util.hash_equal(f.hashid, hashid): return f return None