Example #1
0
    def run(self):
        global CLIENTID
        cw.addnotification("starting rx components".upper())
        while not self.stop_event.isSet():
            try:
                data = self.sock.recv(message.protocolsize())
                if not data:
                    continue
                m = message.Message(data)
                m.content = self.sock.recv(m.contentlength)

                if m.mtype == message.MSG_TEXT:
                    self.win.addmessage(m.content)
                elif m.mtype == message.MSG_SERVERDOWN:
                    self.win.addnotification(m.content)
                    self.stop()
                elif m.mtype == message.MSG_SERVERERROR:
                    self.win.adderror(m.content)
                    CLIENTID = md5.new(os.urandom(32)).digest()
                else:
                    self.win.adderror(m.content)
                self.win.win.refresh()
            except:
                self.win.adderror("error getting data")
                self.stop()
    def run(self): 
        global CLIENTID
        cw.addnotification("starting rx components".upper())  
        while not self.stop_event.isSet():    
            try: 
                data = self.sock.recv(message.protocolsize())
                if not data:
                    continue
                m = message.Message(data)
                m.content = self.sock.recv(m.contentlength)

                if m.mtype == message.MSG_TEXT:
                    self.win.addmessage(m.content)
                elif m.mtype == message.MSG_SERVERDOWN:
                    self.win.addnotification(m.content)
                    self.stop()
                elif m.mtype == message.MSG_SERVERERROR:
                    self.win.adderror(m.content)
                    CLIENTID = md5.new(os.urandom(32)).digest()
                else:
                    self.win.adderror(m.content)
                self.win.win.refresh()
            except:
                self.win.adderror("error getting data")
                self.stop()
    def handle(self):

        logging.debug("connection opened from {0}".format(self.client_address[0]))

        while True:
            try:
                data = ''
                while len(data) < message.protocolsize():
                    recvdata = self.request.recv(message.protocolsize()-len(data))
                    if not recvdata:
                        break
                    else:
                        data += recvdata

                logging.debug("{} bytes recived: {}".format(len(data), binascii.hexlify(data)))
                m = message.Message(data)
                del data
                if m.contentlength > 0:
                    while len(m.content) < m.contentlength:
                        contentdata = self.request.recv(m.contentlength - len(m.content))
                        if not contentdata:
                            break
                        else:
                            m.content = m.content + contentdata
                    logging.debug("content {} bytes recived: {}".format(len(m.content), m.content))
                logging.debug("message from client {}: {}".format(self.client_address[0], m))
                print m  #FOR DEBUGGING
            except:
                break

            if not m.sid:
                logging.debug("no sid given from client {0}".format(self.client_address[0]))
                break
            if not len(m.sid) == 16:
                logging.debug("wrong sid given from client {0}".format(self.client_address[0]))
                break

            self.sessionid = binascii.hexlify(m.sid)

            if not self.sessionid in SESSIONS.keys():  #NOT LOGGED IN YET

                self.initSession()
                answer = message.Message()
                answer.sid = ID

                if m.mtype == message.MSG_LOGIN: #login message
                    logging.debug("try to login client {}".format(self.sessionid))
                    c = m.content.split('\n')
                    try:
                        user = c[0][:32]
                        passwd = c[1][:32]
                    except:
                        logging.debug("fail to login client {}: Wrong format".format(self.sessionid))
                        answer.content = "Wrong format"
                        answer.mtype = message.MSG_SERVERERROR
                        self.queue.put(answer)
                        break

                    SESSIONS[self.sessionid] = (user, self.queue)

                    if self.loginUser(user, passwd):
                        logging.debug("login user {} successfull".format(user))
                        answer.content = "Login successfull"
                        answer.mtype = message.MSG_LOGINSUCC
                        self.queue.put(answer)
                    else:
                        logging.debug("fail to login client {}: Wrong password".format(self.sessionid))
                        answer.content = "Login failed, wrong password"
                        answer.mtype = message.MSG_SERVERERROR
                        self.queue.put(answer)
                        continue

                elif m.mtype == message.MSG_TEXT:
                    DQUEUE.put(m)
                    break

                else:
                    answer.content = "Not logged in yet"
                    answer.mtype = message.MSG_SERVERERROR
                    self.queue.put(answer)
                    break

            else:   # ALLREADY LOGGED IN
            
                if m.ttl > 3: #check ttl
                    m.ttl = 1
                
                if m.ttl == 0:
                    logging.debug("TTL 0, dropping message from client {}: {}".format(self.client_address[0], m))
                    continue
                else:
                    m.ttl -= 1

                if m.mtype == message.MSG_TEXT:
                    DQUEUE.put(m)   

                elif m.mtype == message.MSG_STORE:
                    self.storeSecret(SESSIONS[self.sessionid][0], m.content)
                    answer = message.Message()
                    answer.mtype = message.MSG_INFO
                    answer.content = "secret stored"
                    answer.sid = ID
                    self.queue.put(answer)
                    del answer
                    if len(SHIPS) > 0:
                        SQUEUE.put(m)

                elif m.mtype == message.MSG_RETR:
                    secret = self.retrieveSecret(SESSIONS[self.sessionid][0])
                    answer = message.Message()
                    answer.content = "{0}:{1}".format('SECRET', secret)
                    answer.mtype = message.MSG_INFO
                    answer.sid = ID
                    self.queue.put(answer)
                    del answer

                elif m.mtype == message.MSG_INFO:
                    answer = message.Message()
                    answer.mtype = message.MSG_INFO
                    answer.content = info()
                    answer.sid = ID
                    self.queue.put(answer)
                    del answer

                elif m.mtype == message.MSG_SHIPS:  # this is still not completly implemented
                    c = m.content.split(':')
                    try:
                        bserver = c[0][:32]
                        bport = int(c[1][:32])
                        SHIPS.append((bserver, bport))
                    except:
                        answer = message.Message()
                        answer.content = "error adding new Ship Comm System"
                        answer.mtype = message.MSG_SERVERERROR
                        answer.sid = ID
                        self.queue.put(answer)
                        del answer

                elif m.mtype == message.MSG_ECHO:
                    self.queue.put(m) #echo back message
                    del m

                else:
                    answer = message.Message()
                    answer.content = "unknown message type"
                    answer.mtype = message.MSG_SERVERERROR
                    answer.sid = ID
                    self.queue.put(answer)
                    del answer
            del m
    def handle(self):

        logging.debug("connection opened from {0}".format(
            self.client_address[0]))

        while True:
            try:
                data = ''
                while len(data) < message.protocolsize():
                    recvdata = self.request.recv(message.protocolsize() -
                                                 len(data))
                    if not recvdata:
                        break
                    else:
                        data += recvdata

                logging.debug("{} bytes recived: {}".format(
                    len(data), binascii.hexlify(data)))
                m = message.Message(data)
                del data
                if m.contentlength > 0:
                    while len(m.content) < m.contentlength:
                        contentdata = self.request.recv(m.contentlength -
                                                        len(m.content))
                        if not contentdata:
                            break
                        else:
                            m.content = m.content + contentdata
                    logging.debug("content {} bytes recived: {}".format(
                        len(m.content), m.content))
                logging.debug("message from client {}: {}".format(
                    self.client_address[0], m))
                print m  #FOR DEBUGGING
            except:
                break

            if not m.sid:
                logging.debug("no sid given from client {0}".format(
                    self.client_address[0]))
                break
            if not len(m.sid) == 16:
                logging.debug("wrong sid given from client {0}".format(
                    self.client_address[0]))
                break

            self.sessionid = binascii.hexlify(m.sid)

            if not self.sessionid in SESSIONS.keys():  #NOT LOGGED IN YET

                self.initSession()
                answer = message.Message()
                answer.sid = ID

                if m.mtype == message.MSG_LOGIN:  #login message
                    logging.debug("try to login client {}".format(
                        self.sessionid))
                    c = m.content.split('\n')
                    try:
                        user = c[0][:32]
                        passwd = c[1][:32]
                    except:
                        logging.debug(
                            "fail to login client {}: Wrong format".format(
                                self.sessionid))
                        answer.content = "Wrong format"
                        answer.mtype = message.MSG_SERVERERROR
                        self.queue.put(answer)
                        break

                    SESSIONS[self.sessionid] = (user, self.queue)

                    if self.loginUser(user, passwd):
                        logging.debug("login user {} successfull".format(user))
                        answer.content = "Login successfull"
                        answer.mtype = message.MSG_LOGINSUCC
                        self.queue.put(answer)
                    else:
                        logging.debug(
                            "fail to login client {}: Wrong password".format(
                                self.sessionid))
                        answer.content = "Login failed, wrong password"
                        answer.mtype = message.MSG_SERVERERROR
                        self.queue.put(answer)
                        continue

                elif m.mtype == message.MSG_TEXT:
                    DQUEUE.put(m)
                    break

                else:
                    answer.content = "Not logged in yet"
                    answer.mtype = message.MSG_SERVERERROR
                    self.queue.put(answer)
                    break

            else:  # ALLREADY LOGGED IN

                if m.ttl > 3:  #check ttl
                    m.ttl = 1

                if m.ttl == 0:
                    logging.debug(
                        "TTL 0, dropping message from client {}: {}".format(
                            self.client_address[0], m))
                    continue
                else:
                    m.ttl -= 1

                if m.mtype == message.MSG_TEXT:
                    DQUEUE.put(m)

                elif m.mtype == message.MSG_STORE:
                    self.storeSecret(SESSIONS[self.sessionid][0], m.content)
                    answer = message.Message()
                    answer.mtype = message.MSG_INFO
                    answer.content = "secret stored"
                    answer.sid = ID
                    self.queue.put(answer)
                    del answer
                    if len(SHIPS) > 0:
                        SQUEUE.put(m)

                elif m.mtype == message.MSG_RETR:
                    secret = self.retrieveSecret(SESSIONS[self.sessionid][0])
                    answer = message.Message()
                    answer.content = "{0}:{1}".format('SECRET', secret)
                    answer.mtype = message.MSG_INFO
                    answer.sid = ID
                    self.queue.put(answer)
                    del answer

                elif m.mtype == message.MSG_INFO:
                    answer = message.Message()
                    answer.mtype = message.MSG_INFO
                    answer.content = info()
                    answer.sid = ID
                    self.queue.put(answer)
                    del answer

                elif m.mtype == message.MSG_SHIPS:  # this is still not completly implemented
                    c = m.content.split(':')
                    try:
                        bserver = c[0][:32]
                        bport = int(c[1][:32])
                        SHIPS.append((bserver, bport))
                    except:
                        answer = message.Message()
                        answer.content = "error adding new Ship Comm System"
                        answer.mtype = message.MSG_SERVERERROR
                        answer.sid = ID
                        self.queue.put(answer)
                        del answer

                elif m.mtype == message.MSG_ECHO:
                    self.queue.put(m)  #echo back message
                    del m

                else:
                    answer = message.Message()
                    answer.content = "unknown message type"
                    answer.mtype = message.MSG_SERVERERROR
                    answer.sid = ID
                    self.queue.put(answer)
                    del answer
            del m