Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
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)