Beispiel #1
0
def do_upload(socket, remote_address):
    # print remote_address
    socket._status = SOCKET_STATUS_WAITING # 标记链接状态
    
    error_code = ''
    fileobj = FileObjWrapper(socket.makefile())
    # 读取上传请求
    try:
        request_head = fileobj.read(26)
        # print 'request head', repr(request_head)
        packet_length = hex2int(request_head[:4]) # 第一次参数接受、解析出错,就不理会
    except:
        try:
            fileobj.write(int2hex(RESULT_INVALID_ARGS, int_len=2))
            fileobj.close()
        except:
            pass
        return
    
    socket._status = SOCKET_STATUS_WORKING # 标记链接状态
    
    app_id = hex2int(request_head[4:6], int_len=2)
    file_size = hex2int(request_head[6:10])
    file_hash = request_head[10:26]
    
    try:
        handler = get_app_handler(app_id, file_size, file_hash)
    except FileSizeError:
        fileobj.write(int2hex(RESULT_FILE_TOO_LARGE, int_len=2))
        fileobj.close()
        return
    except Exception:
        log.error(traceback.format_exc())
        fileobj.write(int2hex(RESULT_FS_ERROR, int_len=2))
        fileobj.close()
        return
        
    if not handler: # 找不到授权应用
        fileobj.write(int2hex(RESULT_INVALID_ARGS, int_len=2))
        fileobj.close()
        return
    
    socket.timeout = handler.CONNECTION_TIMEOUT # 设置线程总超时时长,秒
    
    # 读取请求TLV参数
    tlv = fileobj.read(packet_length - 26)
    try:
        handler.handle_request(tlv)
    except InvalidArgsError:
        error_code = RESULT_INVALID_ARGS
    except AuthenticateError:
        error_code = RESULT_AUTH_FAIL
    except FileTypeError:
        error_code = RESULT_WRONG_FILE_TYPE
    except FileExistError, e:
        fileobj.write(int2hex(RESULT_FILE_EXIST, int_len=2))
        fileobj.write(int2hex(4 + len(e.message))) # 4个字节是这个长度值本身长度
        fileobj.write(e.message)
        fileobj.close()
        return
Beispiel #2
0
def do_upload(socket, remote_address):
    # print remote_address
    socket._status = SOCKET_STATUS_WAITING  # 标记链接状态

    error_code = ''
    fileobj = FileObjWrapper(socket.makefile())
    # 读取上传请求
    try:
        request_head = fileobj.read(26)
        # print 'request head', repr(request_head)
        packet_length = hex2int(request_head[:4])  # 第一次参数接受、解析出错,就不理会
    except:
        try:
            fileobj.write(int2hex(RESULT_INVALID_ARGS, int_len=2))
            fileobj.close()
        except:
            pass
        return

    socket._status = SOCKET_STATUS_WORKING  # 标记链接状态

    app_id = hex2int(request_head[4:6], int_len=2)
    file_size = hex2int(request_head[6:10])
    file_hash = request_head[10:26]

    try:
        handler = get_app_handler(app_id, file_size, file_hash)
    except FileSizeError:
        fileobj.write(int2hex(RESULT_FILE_TOO_LARGE, int_len=2))
        fileobj.close()
        return
    except Exception:
        log.error(traceback.format_exc())
        fileobj.write(int2hex(RESULT_FS_ERROR, int_len=2))
        fileobj.close()
        return

    if not handler:  # 找不到授权应用
        fileobj.write(int2hex(RESULT_INVALID_ARGS, int_len=2))
        fileobj.close()
        return

    socket.timeout = handler.CONNECTION_TIMEOUT  # 设置线程总超时时长,秒

    # 读取请求TLV参数
    tlv = fileobj.read(packet_length - 26)
    try:
        handler.handle_request(tlv)
    except InvalidArgsError:
        error_code = RESULT_INVALID_ARGS
    except AuthenticateError:
        error_code = RESULT_AUTH_FAIL
    except FileTypeError:
        error_code = RESULT_WRONG_FILE_TYPE
    except FileExistError, e:
        fileobj.write(int2hex(RESULT_FILE_EXIST, int_len=2))
        fileobj.write(int2hex(4 + len(e.message)))  # 4个字节是这个长度值本身长度
        fileobj.write(e.message)
        fileobj.close()
        return
Beispiel #3
0
    def _handler_head(self, msg):
        if len(msg) > self.UPLOAD_PACK_HEAD_MAXSIZE:
            self.failConnection()
            return
        try:
            app_id = int(msg[:4])
            file_hash = msg[4:36]
            file_size = int(msg[36:47])
            tlv = msg[47:]
        except:
            self.closeConnection('%02.f' % RESULT_INVALID_ARGS)
            return
        if settings.DEBUG:
            print '''\npack head:
                                            app_id: %s
                                            file_hash: %s
                                            file_size: %s
                                            tlv: %s
                                 ''' % (app_id, file_hash, file_size, tlv)

        file_hash = file_hash.decode('hex')  # 适应后端 转换成16位字符

        try:
            handler = get_app_handler(app_id, file_size, file_hash)
        except FileSizeError:
            self.closeConnection('%02.f' % RESULT_FILE_TOO_LARGE)
            return
        except Exception:
            log.error(traceback.format_exc())
            self.closeConnection('%02.f' % RESULT_FS_ERROR)
            return
        if not handler:
            self.closeConnection('%02.f' % RESULT_INVALID_ARGS)
            return

        try:
            tlv = self.format_tlv(tlv)
        except:
            self.closeConnection('%02.f' % RESULT_INVALID_ARGS)
            return

        error_code = ''
        # 读取请求TLV参数
        try:
            handler.handle_request(tlv)
            if settings.DEBUG:
                print 'file name:', handler.file_name
                print 'file type:', handler.file_type
        except InvalidArgsError:
            error_code = RESULT_INVALID_ARGS
        except AuthenticateError:
            error_code = RESULT_AUTH_FAIL
        except FileTypeError:
            error_code = RESULT_WRONG_FILE_TYPE
        except FileExistError, e:
            self.closeConnection('%02.f' % RESULT_FILE_EXIST +
                                 self.unformat_tlv(e.message))
            return
Beispiel #4
0
 def _handler_head(self, msg):
     if len(msg) > self.UPLOAD_PACK_HEAD_MAXSIZE:
         self.failConnection()
         return
     try:
         app_id = int(msg[:4])
         file_hash = msg[4:36]
         file_size = int(msg[36:47])
         tlv = msg[47:]
     except:
         self.closeConnection('%02.f' %RESULT_INVALID_ARGS)
         return
     if settings.DEBUG: print '''\npack head:
                                         app_id: %s
                                         file_hash: %s
                                         file_size: %s
                                         tlv: %s
                              ''' %(app_id, file_hash, file_size, tlv)
     
     file_hash = file_hash.decode('hex') # 适应后端 转换成16位字符
     
     try:
         handler = get_app_handler(app_id, file_size, file_hash)
     except FileSizeError:
         self.closeConnection('%02.f' %RESULT_FILE_TOO_LARGE)
         return
     except Exception:
         log.error(traceback.format_exc())
         self.closeConnection('%02.f' %RESULT_FS_ERROR)
         return
     if not handler:
         self.closeConnection('%02.f' %RESULT_INVALID_ARGS)
         return
     
     try:
         tlv = self.format_tlv(tlv)
     except:
         self.closeConnection('%02.f' %RESULT_INVALID_ARGS)
         return
     
     error_code = ''
     # 读取请求TLV参数
     try:
         handler.handle_request(tlv)
         if settings.DEBUG:
             print 'file name:', handler.file_name
             print 'file type:', handler.file_type
     except InvalidArgsError:
         error_code = RESULT_INVALID_ARGS
     except AuthenticateError:
         error_code = RESULT_AUTH_FAIL
     except FileTypeError:
         error_code = RESULT_WRONG_FILE_TYPE
     except FileExistError, e:
         self.closeConnection('%02.f' %RESULT_FILE_EXIST + self.unformat_tlv(e.message))
         return