diff --git a/0.CurUseCommonLib/CurrentUseLib/download-complete.wav b/0.CurUseCommonLib/CurrentUseLib/download-complete.wav new file mode 100644 index 0000000..990d07c Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download-complete.wav differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/MiniThunderPlatform.exe b/0.CurUseCommonLib/CurrentUseLib/download/MiniThunderPlatform.exe new file mode 100644 index 0000000..22adf91 Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/MiniThunderPlatform.exe differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/XLBugHandler.dll b/0.CurUseCommonLib/CurrentUseLib/download/XLBugHandler.dll new file mode 100644 index 0000000..26b4529 Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/XLBugHandler.dll differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/XLBugReport.exe b/0.CurUseCommonLib/CurrentUseLib/download/XLBugReport.exe new file mode 100644 index 0000000..4417dab Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/XLBugReport.exe differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/atl71.dll b/0.CurUseCommonLib/CurrentUseLib/download/atl71.dll new file mode 100644 index 0000000..66f9cf7 Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/atl71.dll differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/dc.ini b/0.CurUseCommonLib/CurrentUseLib/download/dc.ini new file mode 100644 index 0000000..169a9b7 --- /dev/null +++ b/0.CurUseCommonLib/CurrentUseLib/download/dc.ini @@ -0,0 +1,3 @@ +[op] +ps=1 +pp=1 \ No newline at end of file diff --git a/0.CurUseCommonLib/CurrentUseLib/download/dl_peer_id.dll b/0.CurUseCommonLib/CurrentUseLib/download/dl_peer_id.dll new file mode 100644 index 0000000..8b28b17 Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/dl_peer_id.dll differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/download_engine.dll b/0.CurUseCommonLib/CurrentUseLib/download/download_engine.dll new file mode 100644 index 0000000..3e22c24 Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/download_engine.dll differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/id.dat b/0.CurUseCommonLib/CurrentUseLib/download/id.dat new file mode 100644 index 0000000..9fa4d2f --- /dev/null +++ b/0.CurUseCommonLib/CurrentUseLib/download/id.dat @@ -0,0 +1,4 @@ +[partner] +id = 80000043 +ver = 3.2.1.46 + diff --git a/0.CurUseCommonLib/CurrentUseLib/download/mini_unzip_dll.dll b/0.CurUseCommonLib/CurrentUseLib/download/mini_unzip_dll.dll new file mode 100644 index 0000000..2d27340 Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/mini_unzip_dll.dll differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/minizip.dll b/0.CurUseCommonLib/CurrentUseLib/download/minizip.dll new file mode 100644 index 0000000..0040849 Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/minizip.dll differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/msvcp71.dll b/0.CurUseCommonLib/CurrentUseLib/download/msvcp71.dll new file mode 100644 index 0000000..5f1a87b Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/msvcp71.dll differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/msvcr71.dll b/0.CurUseCommonLib/CurrentUseLib/download/msvcr71.dll new file mode 100644 index 0000000..b50a30d Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/msvcr71.dll differ diff --git a/0.CurUseCommonLib/CurrentUseLib/download/zlib1.dll b/0.CurUseCommonLib/CurrentUseLib/download/zlib1.dll new file mode 100644 index 0000000..8c3f7e1 Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/download/zlib1.dll differ diff --git a/0.CurUseCommonLib/CurrentUseLib/version.data b/0.CurUseCommonLib/CurrentUseLib/version.data new file mode 100644 index 0000000..fd7130d --- /dev/null +++ b/0.CurUseCommonLib/CurrentUseLib/version.data @@ -0,0 +1 @@ +1.2.141023.7z \ No newline at end of file diff --git a/0.CurUseCommonLib/CurrentUseLib/xldl.dll b/0.CurUseCommonLib/CurrentUseLib/xldl.dll new file mode 100644 index 0000000..605ae5b Binary files /dev/null and b/0.CurUseCommonLib/CurrentUseLib/xldl.dll differ diff --git a/0.CurUseCommonLib/CurrentUseLib/xldl.h b/0.CurUseCommonLib/CurrentUseLib/xldl.h new file mode 100644 index 0000000..3a21826 --- /dev/null +++ b/0.CurUseCommonLib/CurrentUseLib/xldl.h @@ -0,0 +1,159 @@ +#pragma once + +// 所有结构体定义按1字节对齐 +#pragma pack(push, 1) +struct DownTaskParam +{ + DownTaskParam() + { + memset(this, 0, sizeof(DownTaskParam)); + nReserved1 = 5; + bReserved = FALSE; + DisableAutoRename = FALSE; + IsOnlyOriginal = FALSE; + IsResume = TRUE; + } + int nReserved; + wchar_t szTaskUrl[2084]; // 任务URL + wchar_t szRefUrl[2084]; // 引用页 + wchar_t szCookies[4096]; // 浏览器cookie + wchar_t szFilename[MAX_PATH]; // 下载保存文件名. + wchar_t szReserved0[MAX_PATH]; + wchar_t szSavePath[MAX_PATH]; // 文件保存目录 + HWND hReserved; + BOOL bReserved; + wchar_t szReserved1[64]; + wchar_t szReserved2[64]; + BOOL IsOnlyOriginal; // 是否只从原始地址下载 + UINT nReserved1; + BOOL DisableAutoRename; // 禁止智能命名 + BOOL IsResume; // 是否用续传 + DWORD reserved[2048]; +}; +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 非法 +}; +struct DownTaskInfo +{ + DownTaskInfo() + { + memset(this, 0, sizeof(DownTaskInfo)); + stat = TSC_PAUSE; + fail_code = TASK_ERROR_UNKNOWN; + fPercent = 0; + bIsOriginUsable = false; + fHashPercent = 0; + } + DOWN_TASK_STATUS stat; + TASK_ERROR_TYPE fail_code; + wchar_t szFilename[MAX_PATH]; + wchar_t szReserved0[MAX_PATH]; + __int64 nTotalSize; // 该任务总大小(字节) + __int64 nTotalDownload; // 下载有效字节数(可能存在回退的情况) + float fPercent; // 下载进度 + int nReserved0; + int nSrcTotal; // 总资源数 + int nSrcUsing; // 可用资源数 + int nReserved1; + int nReserved2; + int nReserved3; + int nReserved4; + __int64 nReserved5; + __int64 nDonationP2P; // p2p贡献字节数 + __int64 nReserved6; + __int64 nDonationOrgin; // 原始资源共享字节数 + __int64 nDonationP2S; // 镜像资源共享字节数 + __int64 nReserved7; + __int64 nReserved8; + int nSpeed; // 即时速度(字节/秒) + int nSpeedP2S; // 即时速度(字节/秒) + int nSpeedP2P; // 即时速度(字节/秒) + bool bIsOriginUsable; // 原始资源是否有效 + float fHashPercent; // 现不提供该值 + int IsCreatingFile; // 是否正在创建文件 + DWORD reserved[64]; +}; +enum DOWN_PROXY_TYPE +{ + PROXY_TYPE_IE = 0, + PROXY_TYPE_HTTP = 1, + PROXY_TYPE_SOCK4 = 2, + PROXY_TYPE_SOCK5 = 3, + PROXY_TYPE_FTP = 4, + 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 stAType; + wchar_t szHost[2048]; + INT32 nPort; + wchar_t szUser[50]; + wchar_t szPwd[50]; + wchar_t szDomain[2048]; +}; +struct WSAPROTOCOL_INFOW; + +#pragma pack(pop) + +namespace DownEngine +{ + extern "C" __declspec(dllimport) BOOL XL_Init(void); + extern "C" __declspec(dllimport) BOOL XL_UnInit(void); + extern "C" __declspec(dllimport) HANDLE XL_CreateTask(DownTaskParam &stParam); + extern "C" __declspec(dllimport) BOOL XL_DeleteTask(HANDLE hTask); + extern "C" __declspec(dllimport) BOOL XL_StartTask(HANDLE hTask); + extern "C" __declspec(dllimport) BOOL XL_StopTask(HANDLE hTask); + extern "C" __declspec(dllimport) BOOL XL_ForceStopTask(HANDLE hTask); + extern "C" __declspec(dllimport) BOOL XL_QueryTaskInfo(HANDLE hTask, DownTaskInfo & stTaskInfo); //旧版接口,使用Ex接口替换 + extern "C" __declspec(dllimport) BOOL XL_QueryTaskInfoEx(HANDLE hTask, DownTaskInfo & stTaskInfo); + extern "C" __declspec(dllimport) BOOL XL_DelTempFile(DownTaskParam &stParam); + extern "C" __declspec(dllimport) void XL_SetSpeedLimit(INT32 nKBps); + extern "C" __declspec(dllimport) void XL_SetUploadSpeedLimit(INT32 nTcpKBps,INT32 nOtherKBps); + extern "C" __declspec(dllimport) BOOL XL_SetProxy(DOWN_PROXY_INFO &stProxyInfo); + extern "C" __declspec(dllimport) void XL_SetUserAgent(const wchar_t *pszUserAgent); + extern "C" __declspec(dllimport) BOOL XL_ParseThunderPrivateUrl(const wchar_t *pszThunderUrl, wchar_t *normalUrlBuffer, INT32 bufferLen); + extern "C" __declspec(dllimport) BOOL XL_GetFileSizeWithUrl(const wchar_t * lpURL, INT64& iFileSize); + extern "C" __declspec(dllimport) BOOL XL_SetFileIdAndSize(HANDLE hTask, char szFileId[40], unsigned __int64 nFileSize); + extern "C" __declspec(dllimport) BOOL XL_SetAdditionInfo( HANDLE task_id, WSAPROTOCOL_INFOW *sock_info, CHAR *http_resp_buf, LONG buf_len ); + extern "C" __declspec(dllimport) HANDLE XL_CreateTaskByURL(const wchar_t *url, const wchar_t *path, const wchar_t *fileName, BOOL IsResume); + extern "C" __declspec(dllimport) LONG XL_CreateTaskByThunder(wchar_t *pszUrl, wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie); + extern "C" __declspec(dllimport) LONG XL_CreateBTTaskByThunder(const wchar_t *pszPath); +}; diff --git a/0.CurUseCommonLib/DownWrapper.cpp b/0.CurUseCommonLib/DownWrapper.cpp new file mode 100644 index 0000000..d48e031 --- /dev/null +++ b/0.CurUseCommonLib/DownWrapper.cpp @@ -0,0 +1,135 @@ +#include "DownWrapper.h" + +namespace DownEngine +{ + + CDownWrapper::CDownWrapper(LPCWSTR sPath) + { + m_hModule = LoadLibraryW(sPath); + if (m_hModule == NULL) + { + throw L"can not load xldl.dll"; + } + WCHAR szModulePath[MAX_PATH] = { 0 }; + GetModuleFileNameW(NULL, szModulePath, MAX_PATH); + PathRemoveFileSpecW(szModulePath); // 鎷嗗垎璺緞 鏂扮増浣跨敤PathCchRemoveFileSpec + + WCHAR szDllpath[MAX_PATH] = { 0 }; + PathCombineW(szDllpath, szModulePath, L"xldl.dll"); // 杩炴帴璺緞, 鏂扮増寤鸿浣跨敤 PathCchCombine + m_Init = (fn_Init) GetProcAddress(m_hModule, "XL_Init"); + m_UnInit = (fn_UnInit) GetProcAddress(m_hModule, "XL_UnInit"); + m_TaskCreate = (fn_TaskCreate) GetProcAddress(m_hModule, "XL_CreateTask"); + m_TaskDelete = (fn_TaskDelete) GetProcAddress(m_hModule, "XL_DeleteTask"); + m_TaskStart = (fn_TaskStart) GetProcAddress(m_hModule, "XL_StartTask"); + m_TaskStop = (fn_TaskStop) GetProcAddress(m_hModule, "XL_StopTask"); + m_ForceStopTask = (fn_ForceStopTask) GetProcAddress(m_hModule, "XL_ForceStopTask"); + m_QueryTaskInfo = (fn_QueryTaskInfo) GetProcAddress(m_hModule, "XL_QueryTaskInfo"); + m_QueryTaskInfoEx = (fn_QueryTaskInfoEx) GetProcAddress(m_hModule, "XL_QueryTaskInfoEx"); + m_DelTempFile = (fn_DelTempFile) GetProcAddress(m_hModule, "XL_DelTempFile"); + m_SetSpeedLimit = (fn_SetSpeedLimit) GetProcAddress(m_hModule, "XL_SetSpeedLimit"); + m_SetUploadSpeedLimit = (fn_SetUploadSpeedLimit) GetProcAddress(m_hModule, "XL_SetUploadSpeedLimit"); + m_SetProxy = (fn_SetProxy) GetProcAddress(m_hModule, "XL_SetProxy"); + m_SetUserAgent = (fn_SetUserAgent) GetProcAddress(m_hModule, "XL_SetUserAgent"); + m_ParseThunderPrivateUrl = (fn_ParseThunderPrivateUrl) GetProcAddress(m_hModule, "XL_ParseThunderPrivateUrl"); + m_GetFileSizeWithUrl = (fn_GetFileSizeWithUrl) GetProcAddress(m_hModule, "XL_GetFileSizeWithUrl"); + m_SetFileIdAndSize = (fn_SetFileIdAndSize) GetProcAddress(m_hModule, "XL_SetFileIdAndSize"); + m_SetAdditionInfo = (fn_SetAdditionInfo) GetProcAddress(m_hModule, "XL_SetAdditionInfo"); + m_CreateTaskByURL = (fn_CreateTaskByURL) GetProcAddress(m_hModule, "XL_CreateTaskByURL"); + m_CreateTaskByThunder = (fn_CreateTaskByThunder) GetProcAddress(m_hModule, "XL_CreateTaskByThunder"); + m_CreateBTTaskByThunder = (fn_CreateBTTaskByThunder) GetProcAddress(m_hModule, "XL_CreateBTTaskByThunder"); + } + + CDownWrapper::~CDownWrapper() + { + if (m_hModule) + { + FreeLibrary(m_hModule); + } + } + + HANDLE CDownWrapper::TaskCreate(DownTaskParam ¶m) + { + CHECKFUNC(m_TaskCreate, NULL); return m_TaskCreate(param); + } + BOOL CDownWrapper::TaskDelete(HANDLE hTask) + { + CHECKFUNC(m_TaskDelete, FALSE); return m_TaskDelete(hTask); + } + BOOL CDownWrapper::TaskStart(HANDLE hTask) + { + CHECKFUNC(m_TaskStart, FALSE); return m_TaskStart(hTask); + } + BOOL CDownWrapper::TaskStop(HANDLE hTask) + { + CHECKFUNC(m_TaskStop, FALSE); return m_TaskStop(hTask); + } + BOOL CDownWrapper::TaskForceStop(HANDLE hTask) + { + CHECKFUNC(m_ForceStopTask, FALSE); return m_ForceStopTask(hTask); + } + BOOL CDownWrapper::TaskQueryInfo(HANDLE hTask, DownTaskInfo & stTaskInfo) + { + CHECKFUNC(m_QueryTaskInfo, FALSE); return m_QueryTaskInfo(hTask, stTaskInfo); + } + BOOL CDownWrapper::TaskQueryInfoEx(HANDLE hTask, DownTaskInfo & stTaskInfo) + { + CHECKFUNC(m_QueryTaskInfoEx, FALSE); return m_QueryTaskInfoEx(hTask, stTaskInfo); + } + BOOL CDownWrapper::DelTempFile(DownTaskParam &stParam) + { + CHECKFUNC(m_DelTempFile, FALSE); return m_DelTempFile(stParam); + } + void CDownWrapper::SetSpeedLimit(INT32 nBps) + { + CHECKFUNC_(m_SetSpeedLimit); m_SetSpeedLimit(nBps); + } + void CDownWrapper::SetUploadSpeedLimit(INT32 nTcpBps, INT32 nOtherBps) + { + CHECKFUNC_(m_SetUploadSpeedLimit); m_SetUploadSpeedLimit(nTcpBps, nOtherBps); + } + BOOL CDownWrapper::SetProxy(DOWN_PROXY_INFO &stProxyInfo) + { + CHECKFUNC(m_SetProxy, FALSE); return m_SetProxy(stProxyInfo); + } + void CDownWrapper::SetUserAgent(const wchar_t *pszUserAgent) + { + CHECKFUNC_(m_SetUserAgent); m_SetUserAgent(pszUserAgent); + } + BOOL CDownWrapper::ParseThunderPrivateUrl(const wchar_t *pszThunderUrl, wchar_t *normalUrlBuffer, INT32 bufferLen) + { + CHECKFUNC(m_ParseThunderPrivateUrl, FALSE); return m_ParseThunderPrivateUrl(pszThunderUrl, normalUrlBuffer, bufferLen); + } + BOOL CDownWrapper::GetFileSizeWithUrl(const wchar_t * lpURL, INT64& iFileSize) + { + CHECKFUNC(m_GetFileSizeWithUrl, FALSE); return m_GetFileSizeWithUrl(lpURL, iFileSize); + } + BOOL CDownWrapper::SetFileIdAndSize(HANDLE hTask, char szFileId[40], unsigned __int64 nFileSize) + { + CHECKFUNC(m_SetFileIdAndSize, FALSE); return m_SetFileIdAndSize(hTask, szFileId, nFileSize); + } + BOOL CDownWrapper::SetAdditionInfo(HANDLE task_id, WSAPROTOCOL_INFOW *sock_info, CHAR *http_resp_buf, LONG buf_len) + { + CHECKFUNC(m_SetAdditionInfo, FALSE); return m_SetAdditionInfo(task_id, sock_info, http_resp_buf, buf_len); + } + HANDLE CDownWrapper::CreateTaskByURL(const wchar_t *url, const wchar_t *path, const wchar_t *fileName, BOOL IsResume) + { + CHECKFUNC(m_CreateTaskByURL, FALSE); return m_CreateTaskByURL(url, path, fileName, IsResume); + } + LONG CDownWrapper::CreateTaskByThunder(wchar_t *pszUrl, wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie) + { + CHECKFUNC(m_CreateTaskByThunder, FALSE); return m_CreateTaskByThunder(pszUrl, pszFileName, pszReferUrl, pszCharSet, pszCookie); + } + LONG CDownWrapper::CreateBTTaskByThunder(const wchar_t *pszPath) + { + CHECKFUNC(m_CreateBTTaskByThunder, FALSE); return m_CreateBTTaskByThunder(pszPath); + } + DownTaskParam CDownWrapper::CreateDownTaskParam(const wchar_t TaskUrl[], const wchar_t Filename[], const wchar_t SavePath[], BOOL IsResume, BOOL IsOnlyOriginal, BOOL DisableAutoRename) + { + DownTaskParam TaskParam; + TaskParam.DisableAutoRename = FALSE; + StrCpyW(TaskParam.szTaskUrl, TaskUrl); + StrCpyW(TaskParam.szFilename, Filename); + StrCpyW(TaskParam.szSavePath, SavePath); + return TaskParam; + } +}; diff --git a/0.CurUseCommonLib/DownWrapper.h b/0.CurUseCommonLib/DownWrapper.h new file mode 100644 index 0000000..ed80802 --- /dev/null +++ b/0.CurUseCommonLib/DownWrapper.h @@ -0,0 +1,67 @@ +#pragma once +#include "./xldl.h" + +#define DEF_DETOUR_FUNC( func, returntype, ...) typedef returntype ( * fn_##func )(##__VA_ARGS__); fn_##func m_##func; + +#define CHECKFUNC(f, ret) if (f == NULL) return ret; +#define CHECKFUNC_(f) if (f == NULL) return; +namespace DownEngine +{ + class CDownWrapper + { + public: + CDownWrapper(LPCWSTR sPath); + virtual ~CDownWrapper(); + BOOL InitEngine() + { + CHECKFUNC(m_Init, FALSE); return m_Init(); + } + BOOL UnEngine() + { + CHECKFUNC(m_UnInit, FALSE); return m_UnInit(); + } + HANDLE TaskCreate(DownTaskParam ¶m); + BOOL TaskDelete(HANDLE hTask); + BOOL TaskStart(HANDLE hTask); + BOOL TaskStop(HANDLE hTask); + BOOL TaskForceStop(HANDLE hTask); + BOOL TaskQueryInfo(HANDLE hTask, DownTaskInfo & stTaskInfo); + BOOL TaskQueryInfoEx(HANDLE hTask, DownTaskInfo & stTaskInfo); + BOOL DelTempFile(DownTaskParam &stParam); + void SetSpeedLimit(INT32 nBps); + void SetUploadSpeedLimit(INT32 nTcpBps, INT32 nOtherBps); + BOOL SetProxy(DOWN_PROXY_INFO &stProxyInfo); + void SetUserAgent(const wchar_t *pszUserAgent); + BOOL ParseThunderPrivateUrl(const wchar_t *pszThunderUrl, wchar_t *normalUrlBuffer, INT32 bufferLen); + BOOL GetFileSizeWithUrl(const wchar_t * lpURL, INT64& iFileSize); + BOOL SetFileIdAndSize(HANDLE hTask, char szFileId[40], unsigned __int64 nFileSize); + BOOL SetAdditionInfo(HANDLE task_id, WSAPROTOCOL_INFOW *sock_info, CHAR *http_resp_buf, LONG buf_len); + HANDLE CreateTaskByURL(const wchar_t *url, const wchar_t *path, const wchar_t *fileName, BOOL IsResume); + LONG CreateTaskByThunder(wchar_t *pszUrl, wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie); + LONG CreateBTTaskByThunder(const wchar_t *pszPath); + DownTaskParam CreateDownTaskParam(const wchar_t TaskUrl[], const wchar_t Filename[], const wchar_t SavePath[], BOOL IsResume = TRUE, BOOL IsOnlyOriginal = FALSE, BOOL DisableAutoRename = FALSE); + private: + HMODULE m_hModule; + DEF_DETOUR_FUNC(Init, BOOL, void); + DEF_DETOUR_FUNC(UnInit, BOOL, void); + DEF_DETOUR_FUNC(TaskCreate, HANDLE, DownTaskParam &stParam); + DEF_DETOUR_FUNC(TaskDelete, BOOL, HANDLE hTask); + DEF_DETOUR_FUNC(TaskStart, BOOL, HANDLE hTask); + DEF_DETOUR_FUNC(TaskStop, BOOL, HANDLE hTask); + DEF_DETOUR_FUNC(ForceStopTask, BOOL, HANDLE hTask); + DEF_DETOUR_FUNC(QueryTaskInfo, BOOL, HANDLE hTask, DownTaskInfo & stTaskInfo); + DEF_DETOUR_FUNC(QueryTaskInfoEx, BOOL, HANDLE hTask, DownTaskInfo & stTaskInfo); + DEF_DETOUR_FUNC(DelTempFile, BOOL, DownTaskParam &stParam); + DEF_DETOUR_FUNC(SetSpeedLimit, void, INT32 nKBps); + DEF_DETOUR_FUNC(SetUploadSpeedLimit, void, INT32 nTcpKBps, INT32 nOtherKBps); + DEF_DETOUR_FUNC(SetProxy, BOOL, DOWN_PROXY_INFO &stProxyInfo); + DEF_DETOUR_FUNC(SetUserAgent, void, const wchar_t *pszUserAgent); + DEF_DETOUR_FUNC(ParseThunderPrivateUrl, BOOL, const wchar_t *pszThunderUrl, wchar_t *normalUrlBuffer, INT32 bufferLen); + DEF_DETOUR_FUNC(GetFileSizeWithUrl, BOOL, const wchar_t * lpURL, INT64& iFileSize); + DEF_DETOUR_FUNC(SetFileIdAndSize, BOOL, HANDLE hTask, char szFileId[40], unsigned __int64 nFileSize); + DEF_DETOUR_FUNC(SetAdditionInfo, BOOL, HANDLE task_id, WSAPROTOCOL_INFOW *sock_info, CHAR *http_resp_buf, LONG buf_len); + DEF_DETOUR_FUNC(CreateTaskByURL, HANDLE, const wchar_t *url, const wchar_t *path, const wchar_t *fileName, BOOL IsResume); + DEF_DETOUR_FUNC(CreateTaskByThunder, LONG, wchar_t *pszUrl, wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie); + DEF_DETOUR_FUNC(CreateBTTaskByThunder, LONG, const wchar_t *pszPath); + }; +}; \ No newline at end of file diff --git a/0.CurUseCommonLib/xldl.h b/0.CurUseCommonLib/xldl.h new file mode 100644 index 0000000..c121200 --- /dev/null +++ b/0.CurUseCommonLib/xldl.h @@ -0,0 +1,164 @@ +#pragma once + +#ifdef WIN32 +#include +#include +#endif + +// 所有结构体定义按1字节对齐 +#pragma pack(push, 1) +struct DownTaskParam +{ + DownTaskParam() + { + memset(this, 0, sizeof(DownTaskParam)); + nReserved1 = 5; + bReserved = FALSE; + DisableAutoRename = FALSE; + IsOnlyOriginal = FALSE; + IsResume = TRUE; + } + int nReserved; + wchar_t szTaskUrl[2084]; // 任务URL + wchar_t szRefUrl[2084]; // 引用页 + wchar_t szCookies[4096]; // 浏览器cookie + wchar_t szFilename[MAX_PATH]; // 下载保存文件名. + wchar_t szReserved0[MAX_PATH]; + wchar_t szSavePath[MAX_PATH]; // 文件保存目录 + HWND hReserved; + BOOL bReserved; + wchar_t szReserved1[64]; + wchar_t szReserved2[64]; + BOOL IsOnlyOriginal; // 是否只从原始地址下载 + UINT nReserved1; + BOOL DisableAutoRename; // 禁止智能命名 + BOOL IsResume; // 是否用续传 + DWORD reserved[2048]; +}; +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 非法 +}; +struct DownTaskInfo +{ + DownTaskInfo() + { + memset(this, 0, sizeof(DownTaskInfo)); + stat = TSC_PAUSE; + fail_code = TASK_ERROR_UNKNOWN; + fPercent = 0; + bIsOriginUsable = false; + fHashPercent = 0; + } + DOWN_TASK_STATUS stat; + TASK_ERROR_TYPE fail_code; + wchar_t szFilename[MAX_PATH]; + wchar_t szReserved0[MAX_PATH]; + __int64 nTotalSize; // 该任务总大小(字节) + __int64 nTotalDownload; // 下载有效字节数(可能存在回退的情况) + float fPercent; // 下载进度 + int nReserved0; + int nSrcTotal; // 总资源数 + int nSrcUsing; // 可用资源数 + int nReserved1; + int nReserved2; + int nReserved3; + int nReserved4; + __int64 nReserved5; + __int64 nDonationP2P; // p2p贡献字节数 + __int64 nReserved6; + __int64 nDonationOrgin; // 原始资源共享字节数 + __int64 nDonationP2S; // 镜像资源共享字节数 + __int64 nReserved7; + __int64 nReserved8; + int nSpeed; // 即时速度(字节/秒) + int nSpeedP2S; // 即时速度(字节/秒) + int nSpeedP2P; // 即时速度(字节/秒) + bool bIsOriginUsable; // 原始资源是否有效 + float fHashPercent; // 现不提供该值 + int IsCreatingFile; // 是否正在创建文件 + DWORD reserved[64]; +}; +enum DOWN_PROXY_TYPE +{ + PROXY_TYPE_IE = 0, + PROXY_TYPE_HTTP = 1, + PROXY_TYPE_SOCK4 = 2, + PROXY_TYPE_SOCK5 = 3, + PROXY_TYPE_FTP = 4, + 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 stAType; + wchar_t szHost[2048]; + INT32 nPort; + wchar_t szUser[50]; + wchar_t szPwd[50]; + wchar_t szDomain[2048]; +}; +/*struct WSAPROTOCOL_INFOW;*/ + +#pragma pack(pop) + +namespace DownEngine +{ + extern "C" __declspec(dllimport) BOOL XL_Init(void); + extern "C" __declspec(dllimport) BOOL XL_UnInit(void); + extern "C" __declspec(dllimport) HANDLE XL_CreateTask(DownTaskParam &stParam); + extern "C" __declspec(dllimport) BOOL XL_DeleteTask(HANDLE hTask); + extern "C" __declspec(dllimport) BOOL XL_StartTask(HANDLE hTask); + extern "C" __declspec(dllimport) BOOL XL_StopTask(HANDLE hTask); + extern "C" __declspec(dllimport) BOOL XL_ForceStopTask(HANDLE hTask); + extern "C" __declspec(dllimport) BOOL XL_QueryTaskInfo(HANDLE hTask, DownTaskInfo & stTaskInfo); //旧版接口,使用Ex接口替换 + extern "C" __declspec(dllimport) BOOL XL_QueryTaskInfoEx(HANDLE hTask, DownTaskInfo & stTaskInfo); + extern "C" __declspec(dllimport) BOOL XL_DelTempFile(DownTaskParam &stParam); + extern "C" __declspec(dllimport) void XL_SetSpeedLimit(INT32 nKBps); + extern "C" __declspec(dllimport) void XL_SetUploadSpeedLimit(INT32 nTcpKBps,INT32 nOtherKBps); + extern "C" __declspec(dllimport) BOOL XL_SetProxy(DOWN_PROXY_INFO &stProxyInfo); + extern "C" __declspec(dllimport) void XL_SetUserAgent(const wchar_t *pszUserAgent); + extern "C" __declspec(dllimport) BOOL XL_ParseThunderPrivateUrl(const wchar_t *pszThunderUrl, wchar_t *normalUrlBuffer, INT32 bufferLen); + extern "C" __declspec(dllimport) BOOL XL_GetFileSizeWithUrl(const wchar_t * lpURL, INT64& iFileSize); + extern "C" __declspec(dllimport) BOOL XL_SetFileIdAndSize(HANDLE hTask, char szFileId[40], unsigned __int64 nFileSize); + extern "C" __declspec(dllimport) BOOL XL_SetAdditionInfo( HANDLE task_id, WSAPROTOCOL_INFOW *sock_info, CHAR *http_resp_buf, LONG buf_len ); + extern "C" __declspec(dllimport) HANDLE XL_CreateTaskByURL(const wchar_t *url, const wchar_t *path, const wchar_t *fileName, BOOL IsResume); + extern "C" __declspec(dllimport) LONG XL_CreateTaskByThunder(wchar_t *pszUrl, wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie); + extern "C" __declspec(dllimport) LONG XL_CreateBTTaskByThunder(const wchar_t *pszPath); +}; diff --git a/xiaomi_Thunder_Cloud/xldl.idb b/xiaomi_Thunder_Cloud/xldl.idb new file mode 100644 index 0000000..25b161b Binary files /dev/null and b/xiaomi_Thunder_Cloud/xldl.idb differ