接口名称 | 功能说明 |
---|---|
XL_Init | 初始化SDK,并使其为处理后续操作做好准备。 |
XL_UnInit | 反初始化SDK,释放模块运行期间申请的资源。 |
XL_DelTempFile | 删除临时文件 |
XL_SetSpeedLimit | 设置最大下载速度 |
XL_SetProxy | 设置全局代理 |
XL_SetUserAgent | 设置HTTP请求时客户端信息 |
XL_ParseThunderPrivateUrl | 将迅雷专用链转成实际URL |
XL_SetUploadSpeedLimit | 限制上传速度 |
XL_CreateTaskByURL | 简单封装了XL_CreateTask接口 |
XL_CreateTaskByThunder | 拉起迅雷7创建下载任务 |
XL_ForceStopTask | 强制暂停任务 |
接口名称 | 功能说明 |
---|---|
XL_CreateTask | 创建任务 |
XL_DeleteTask | 销毁任务 |
XL_StartTask | 开始任务 |
XL_StopTask | 停止任务 |
XL_QueryTaskInfoEx | 查询任务信息 |
struct DownTaskParam { int nReserved1; TCHAR szTaskUrl[2084]; // 任务URL,支持http,https,ftp,ftps格式 TCHAR szRefUrl[2084]; // 可空,HTTP下载所在的网页URL TCHAR szCookies[4096]; // 可空,浏览器cookie TCHAR szFilename[MAX_PATH]; // 下载保存文件名. TCHAR szReserved[MAX_PATH]; TCHAR szSavePath[MAX_PATH]; // 文件保存目录 HWND hReserved; BOOL bReserved1; TCHAR szReserved1[64]; TCHAR szReserved2[64]; BOOL IsOnlyOriginal; //是否只从原始地址下载 UINT nReserved2; BOOL bReserved2; BOOL IsResume; // 是否用续传 DWORD reserved[2048]; }
struct DownTaskInfo { DOWN_TASK_STATUS stat; //任务状态 TASK_ERROR_TYPE fail_code; //错误码 TCHAR szFilename[MAX_PATH]; //文件名 TCHAR szReserved[MAX_PATH]; __int64 nTotalSize; // 该任务总大小(字节) __int64 nTotalDownload; // 下载有效字节数(可能存在回退的情况) float fPercent; // 下载进度 int nTotalTime; // 不提供该值 int nSrcTotal; // 总资源数 int nSrcUsing; // 可用资源数 int nReserved1; int nReserved2; int nReserved3; int nReserved; __int64 nTotalUpload; // 现不提供该值 __int64 nDonationP2P; // p2p资源贡献的数据长度 __int64 nReserved4; __int64 nDonationOrgin; // 原始资源贡献的数据长度 __int64 nDonationP2S; // 镜像资源贡献的数据长度 __int64 nReserved5; __int64 nReserved6; int nSpeed; // 速度(字节/秒) int nSpeedP2S; // 加速服务器资源的下载速度 int nSpeedP2P; // peer下载速度 bool IsOriginUsable; // 原始资源是否可用 float fReserved; int bReserved; DWORD reserved[64]; }; enum DOWN_TASK_STATUS { NOITEM = 0, TSC_ERROR, TSC_PAUSE, TSC_DOWNLOAD, TSC_COMPLETE, TSC_STARTPENDING, TSC_STOPPENDING }; enum TASK_ERROR_TYPE { TASK_ERROR_UNKNOWN = 0x00, // 未知错误 TASK_ERROR_DISK_CREATE = 0x01, // 创建文件失败 TASK_ERROR_DISK_WRITE = 0x02, // 写文件失败 TASK_ERROR_DISK_READ = 0x03, // 读文件失败 TASK_ERROR_DISK_RENAME = 0x04, // 重命名失败 TASK_ERROR_DISK_PIECEHASH = 0x05, // 文件片校验失败 TASK_ERROR_DISK_FILEHASH = 0x06, // 文件全文校验失败 TASK_ERROR_DISK_DELETE = 0x07, // 删除文件失败失败 TASK_ERROR_DOWN_INVALID = 0x10, // 无效的DOWN地址 TASK_ERROR_PROXY_AUTH_TYPE_UNKOWN = 0x20, // 代理类型未知 TASK_ERROR_PROXY_AUTH_TYPE_FAILED = 0x21, // 代理认证失败 TASK_ERROR_HTTPMGR_NOT_IP = 0x30, // http下载中无ip可用 TASK_ERROR_TIMEOUT = 0x40, // 任务超时 TASK_ERROR_CANCEL = 0x41, // 任务取消 TASK_ERROR_TP_CRASHED= 0x42, // MINITP崩溃 TASK_ERROR_ID_INVALID = 0x43, // TaskId 非法 };
enum DOWN_PROXY_TYPE { PROXY_TYPE_IE = 0, PROXY_TYPE_HTTP = 1, PROXY_TYPE_RESERVED= 2, //不支持该代理 PROXY_TYPE_SOCK5 = 3, PROXY_TYPE_UNKOWN = 255, }; enum DOWN_PROXY_AUTH_TYPE { PROXY_AUTH_NONE =0, PROXY_AUTH_AUTO, PROXY_AUTH_BASE64, PROXY_AUTH_NTLM, PROXY_AUTH_DEGEST, PROXY_AUTH_UNKOWN, }; struct DOWN_PROXY_INFO { BOOL bIEProxy; BOOL bProxy; DOWN_PROXY_TYPE stPType; DOWN_PROXY_AUTH_TYPE stResverd; TCHAR szHost[2048]; INT32 nPort; TCHAR szUser[50]; TCHAR szPwd[50]; TCHAR szDomain[2048]; };
1.全局接口是线程不安全的,且XL_Init外的其他接口必须在该函数成功返回后才能调用; 2.如果任务处于TSC_STARTPENDING或TSC_STOPPENDING,关于任务的操作只能调用查询任务信息的接口。
任务的操作是异步执行的。调用接口有两个操作: 1.操作上层xldl.dll中的虚任务 2.在命令队列对push一条相关操作的命令
接口层可以操作的任务都是虚任务,真实任务是在MiniThunderPlatfom进程创建的。任务创建的流程: 1.Xldl创建虚任务; 2.将操作与参数push到命令队列; 3.命令处理线程负责执行队列中的命令,与MiniThunderPlatfom同步通信; 4.MiniThunderPlatfom创建任务成功后,虚任务就可以和实任务映射。 之后所有对virtual task 的操作都将映射到真正的task,并在MiniTP执行真正的操作。 任务信息查询,任务信息的更新需要调用者驱动,需要调用者每隔1s调用一次该接口。任务信息查询和更新的流程: 1.调用接口查询信息时,先从虚任务查询任务信息,第一次调用的时候肯定没有信息 2.将查询操作与参数push到命令队列; 3.命令处理线程负责执行队列中的命令,与MiniThunderPlatfom同步通信; 4.查询到真实任务信息后,将信息存储到虚任务中; 5.第二次查询就可以直接查询到任务信息,这些信息是上一次查询到的。 这里就会出现这样的情况,第一次查询操作不能获取到任务信息,即任务处于pause/start_pending状态中。更极端的情况,任务下载完成前一次查询没有调用过,在任务完成后再调用该接口会发现任务进度为0。
这种情况是不被欢迎的,但又不可避免。子进程异常退出后MiniThunderPlatfom创建的任务会销毁。这样,虚任务除了与真实任务的映射关系,其实并无意义。这时候,查询任务信息就会返回任务出错,错误码为TASK_ERROR_ID_INVALID(任务id非法)。这时需要重新创建续传任务,接口为XL_CreateTask,结构体中其他参数与创建普通任务相同,参数IsResume设为TRUE。
Sdk总共有10个二进制文件。二进制文件之间的依赖关系如下图所示:
各个文件功能介绍:
文件名 | 功能 |
---|---|
xldl.dll | 导出MiniTP接口 |
MiniThunderPlatform.exe | 独立进程 |
download_engine.dll | MiniTP核心库 |
zlib1.dll | 压缩通信数据 |
dl_peer_id.dll | 获取迅雷客户端标识 |
XLBugReport.exe | 负责上报捕获到的崩溃 |
XLBugHandler.dll | 负责拉起XLBugReport .exe |
minizip.dll、mini_unzip.dll | 用于压缩文件崩溃堆栈 |
atl71.dll | 微软提供的程序库 |