def response(self): print('recv: ', self.data) if data_valid(self.data) and auth(self.data): self.call_response[self.data['request_type']]() else: code, key = 1, None sendbackdata = {'code': code, 'userkey': key} self.handler.request.sendall(obj_to_bytes(sendbackdata))
def status(self): code = 0 dir_name = self.data['content'][0] data_dir = self.user.root_dir + '/' + dir_name if not os.path.exists(data_dir): code = 1 file_meta = None else: cache_dir = data_dir + '/' + S_CACHE_DIR with open(cache_dir + '/' + 'meta', 'rb') as f: file_meta = pickle.load(f) sendbackdata = {'code': code, 'content': file_meta} self.handler.request.sendall(obj_to_bytes(sendbackdata))
def listfiles(self): code = 0 dir_name = self.data['content'][0] full_dir_name = self.user.root_dir + '/' + dir_name try: send_back_content = os.listdir(full_dir_name) except os.error as e: code = 1 send_back_content = [str(e)] sendbackdata = {'code': code, 'content': send_back_content} self.handler.request.sendall(obj_to_bytes(sendbackdata))
def login(self): code, key = 0, key_gen() sendbackdata = {'code': code, 'content': key} self.handler.request.sendall(obj_to_bytes(sendbackdata))
def logout(self): code = 0 send_back_content = None sendbackdata = {'code': code, 'content': send_back_content} self.handler.request.sendall(obj_to_bytes(sendbackdata))
def push(self): code = 0 sendbackdata = {'code': code} try: dir_name = self.data['content'][0] file_name = self.data['content'][1] file_md5sum = self.data['content'][2] except IndexError as e: print(e) print('Reseive bad push data') sys.exit(4) data_dir = self.user.root_dir + '/' + dir_name cache_dir = data_dir + '/' + S_CACHE_DIR if not os.path.exists(data_dir): os.mkdir(data_dir) os.mkdir(cache_dir) # cache file. with open(cache_dir + '/' + 'meta', 'wb') as f: pickle.dump({}, f) full_file_name = data_dir + '/' + file_name if not file_md5sum: # file_md5sum = '', get a directory. self.handler.request.sendall(obj_to_bytes(sendbackdata)) print('Get dir: %s' % file_name) try: os.mkdir(full_file_name) print('Transfer OK: ', file_name) except Exception as e: print(e) print('Transfer failed: ', file_name) else: print('Get file: %s' % file_name) try: transfer_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) transfer_sock.bind((DEFAULT_HOST, DEFAULT_TRANSFER_PORT)) transfer_sock.listen(1) self.handler.request.sendall(obj_to_bytes(sendbackdata)) conn, addr = transfer_sock.accept() except socket.error as e: print(e) with open(full_file_name, 'wb') as f: while True: trsf_data = conn.recv(BUF_SIZE) if not trsf_data: break f.write(trsf_data) conn.close() print('file wrote: ', full_file_name) transfer_sock.close() try: if md5sum(full_file_name) == file_md5sum: print('Transfer OK: ', file_name) # sendback OK. with open(cache_dir + '/' + 'meta', 'rb') as f: file_meta = pickle.load(f) file_meta[file_name] = file_md5sum with open(cache_dir + '/' + 'meta', 'wb') as f: pickle.dump(file_meta, f) else: print('Transfer failed: ', file_name) except os.error as e: print('Transfer failed: ', file_name) print(e)