Exemple #1
0
    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
Exemple #2
0
 def get_friend_from_hash(self,hashid):
     for f in self.friends:
         if hash_util.hash_equal(f.hashid, hashid):
             return f
     return None