def handle_server_request(self, conn, addr, f): """ Handle single request conn - socket connection addr - addr info f - file object to serve """ #pdb.set_trace() print("Client %s:%s - connected" % addr) try: #send file size first file_size = fileutils.get_file_size(f) packed_size = struct.pack("!Q", file_size) if not connutils.send_buffer(conn, packed_size): return #recv fileseek packed_seek_value = connutils.recv_buffer(conn, 8) if len(packed_seek_value) != 8: return seek_value = struct.unpack("!Q", packed_seek_value) if not seek_value: return seek_value = seek_value[0] if seek_value: f.seek(seek_value, 0) print("%s: Seeking to %s" % (addr, seek_value)) #send file content transfered = fileutils.transfer_file(conn, f, progress_callback=self.send_progress_handler) print("%s: Bytes send %d" % (addr, transfered)) filesize = fileutils.get_file_size(f) if transfered != filesize - seek_value: print("!! Not all data has been sent !!") except socket.error as e: print("handle_server_request error %s" % e) except KilledThreadException as e: print("Thread %s killed with message: %s" % (addr, e)) finally: f.seek(0) f.close() conn.close() print("%s: sended urgent %s" % (addr, self._urg_sended)) print("Client %s:%s - disconnected" % addr)
def handle_server_request(conn, addr, f): """ Handle single request conn - socket connection addr - addr info f - file object to serve """ print("Client %s:%s - connected" % addr) try: #send file size first file_size = fileutils.get_file_size(f) packed_size = struct.pack("!Q", file_size) if not connutils.send_buffer(conn, packed_size): return #recv fileseek packed_seek_value = connutils.recv_buffer(conn, 8) if len(packed_seek_value) != 8: return seek_value = struct.unpack("!Q", packed_seek_value) if not seek_value: return seek_value = seek_value[0] if seek_value: f.seek(seek_value, 0) print("Seeking to %s" % seek_value) #send file content transfered = fileutils.transfer_file(conn, f, progress_callback=send_progress_handler) print("Bytes send " + str(transfered)) filesize = fileutils.get_file_size(f) if transfered != filesize - seek_value: print("!! Not all data has been sent !!") except socket.error as e: print("handle_server_request error %s" % e) finally: f.seek(0) conn.close() print("Client %s:%s - disconnected" % addr)