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