Skip to content

Commit dc81cb1

Browse files
committed
fixed:net type value is incorrect for download
improved:cb send get failure process
1 parent faa5ca9 commit dc81cb1

File tree

2 files changed

+39
-32
lines changed

2 files changed

+39
-32
lines changed

XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,23 @@ void XCALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket,
4444
{
4545
int nMsgLen = 4096;
4646
int nListCount = 0;
47-
int nNetType = *(int*)lParam;
47+
int nNetType = 0;
4848
__int64u nTimeWait = 0;
4949
XCHAR tszMsgBuffer[4096];
5050
SESSION_STORAGEINFO st_StorageInfo;
5151

5252
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
5353
memset(&st_StorageInfo, '\0', sizeof(SESSION_STORAGEINFO));
5454

55-
Session_DLStroage_GetInfo(lpszClientAddr, &st_StorageInfo);
55+
if (NULL != lParam)
56+
{
57+
nNetType = *(int*)lParam;
58+
}
59+
if (!Session_DLStroage_GetInfo(lpszClientAddr, &st_StorageInfo))
60+
{
61+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,获取用户对应文件内容失败,错误:%lX"), lpszClientAddr, Session_GetLastError());
62+
return;
63+
}
5664
if (st_ServiceCfg.st_XLimit.bLimitMode && st_StorageInfo.nLimit > 0)
5765
{
5866
__int64u nLimitTime = 0;
@@ -104,7 +112,7 @@ void XCALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket,
104112
{
105113
NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr);
106114
}
107-
115+
free(lParam);
108116
Session_DLStroage_Delete(lpszClientAddr);
109117
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("下载客户端:%s,文件已经发送完毕,用户已经被移除发送列表"), lpszClientAddr);
110118
}
@@ -116,18 +124,14 @@ void XCALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket,
116124
}
117125
XEngine_Task_SendDownload(lpszClientAddr, tszMsgBuffer, nMsgLen, nNetType);
118126
}
119-
}
120-
else
121-
{
122-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,获取用户对应文件内容失败,错误:%lX"), lpszClientAddr, Session_GetLastError());
123-
}
124-
//限速,如果没有单独限速,默认全局限速
125-
if (st_ServiceCfg.st_XLimit.bLimitMode && (0 == st_StorageInfo.nLimit))
126-
{
127-
Session_DLStroage_GetCount(&nListCount);
128-
Algorithm_Calculation_SleepFlow(xhLimit, &nTimeWait, st_ServiceCfg.st_XLimit.nMaxDNLoader, nListCount, 4096);
129-
//WINDOWS下sleep_for精度可能不准
130-
std::this_thread::sleep_for(std::chrono::microseconds(nTimeWait));
127+
//限速,如果没有单独限速,默认全局限速
128+
if (st_ServiceCfg.st_XLimit.bLimitMode && (0 == st_StorageInfo.nLimit))
129+
{
130+
Session_DLStroage_GetCount(&nListCount);
131+
Algorithm_Calculation_SleepFlow(xhLimit, &nTimeWait, st_ServiceCfg.st_XLimit.nMaxDNLoader, nListCount, 4096);
132+
//WINDOWS下sleep_for精度可能不准
133+
std::this_thread::sleep_for(std::chrono::microseconds(nTimeWait));
134+
}
131135
}
132136
}
133137

@@ -326,14 +330,19 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in
326330
}
327331
_xstprintf(tszFieldStr, _X("FileHash: %s\r\n"), tszHashStr);
328332
//不能在send之前调用
333+
HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, ullSize, tszFieldStr);
334+
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType);
335+
//发送
329336
bool bRet = false;
337+
int* pInt_NetType = (int*)malloc(sizeof(int));
338+
*pInt_NetType = nNetType;
330339
if (STORAGE_NETTYPE_HTTPWEBDAV == nNetType)
331340
{
332-
bRet = NetCore_TCPXCore_CBSendEx(xhNetWebdav, lpszClientAddr, XEngine_Download_CBSend, &nNetType);
341+
bRet = NetCore_TCPXCore_CBSendEx(xhNetWebdav, lpszClientAddr, XEngine_Download_CBSend, pInt_NetType);
333342
}
334343
else
335344
{
336-
bRet = NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend, &nNetType);
345+
bRet = NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend, pInt_NetType);
337346
}
338347
if (!bRet)
339348
{
@@ -345,8 +354,6 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in
345354
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,设置回调下载失败,文件:%s,错误:%lX"), lpszClientAddr, tszFileDir, Session_GetLastError());
346355
return false;
347356
}
348-
HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, ullSize, tszFieldStr);
349-
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType);
350357
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("下载客户端:%s,请求下载文件成功,文件名:%s,总大小:%llu,发送大小:%llu,范围:%d - %d"), lpszClientAddr, tszFileDir, ullCount, ullSize, nPosStart, nPosEnd);
351358
return true;
352359
}

XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,10 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
143143
else if (0 == _tcsxnicmp(lpszMethodGet, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodGet)))
144144
{
145145
if (st_ServiceCfg.st_XStorage.bWDLocation)
146+
{
147+
XEngine_Task_HttpDownload(lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPWEBDAV);
148+
}
149+
else
146150
{
147151
//使用重定向实现下载
148152
st_HDRParam.bIsClose = true;
@@ -165,14 +169,19 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
165169
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
166170
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求文件下载被重定向到:%s"), lpszClientAddr, tszRequestAddr);
167171
}
168-
else
169-
{
170-
XEngine_Task_HttpDownload(lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPWEBDAV);
171-
}
172172
}
173173
else if (0 == _tcsxnicmp(lpszMethodPut, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodPut)))
174174
{
175175
if (st_ServiceCfg.st_XStorage.bWDLocation)
176+
{
177+
//转换参数格式:/storagekey1/webdav/clash-verge-rev-backup/backup.zip 为 /api?filename=webdav/clash-verge-rev-backup/backup.zip&storeagekey=storagekey1
178+
XCHAR tszConvertStr[XPATH_MAX] = {};
179+
APIHelp_Api_WDToUrl(pSt_HTTPParam->tszHttpUri, tszConvertStr);
180+
memset(pSt_HTTPParam->tszHttpUri, '\0', sizeof(pSt_HTTPParam->tszHttpUri));
181+
_tcsxcpy(pSt_HTTPParam->tszHttpUri, tszConvertStr);
182+
XEngine_Task_HttpUPLoader(lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPWEBDAV);
183+
}
184+
else
176185
{
177186
//使用重定向实现上传
178187
st_HDRParam.bIsClose = false;
@@ -208,15 +217,6 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
208217
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
209218
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求文件上传被重定向到:%s"), lpszClientAddr, tszRequestAddr);
210219
}
211-
else
212-
{
213-
//转换参数格式:/storagekey1/webdav/clash-verge-rev-backup/backup.zip 为 /api?filename=webdav/clash-verge-rev-backup/backup.zip&storeagekey=storagekey1
214-
XCHAR tszConvertStr[XPATH_MAX] = {};
215-
APIHelp_Api_WDToUrl(pSt_HTTPParam->tszHttpUri, tszConvertStr);
216-
memset(pSt_HTTPParam->tszHttpUri, '\0', sizeof(pSt_HTTPParam->tszHttpUri));
217-
_tcsxcpy(pSt_HTTPParam->tszHttpUri, tszConvertStr);
218-
XEngine_Task_HttpUPLoader(lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPWEBDAV);
219-
}
220220
}
221221
else if (0 == _tcsxnicmp(lpszMethodLock, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodLock)))
222222
{

0 commit comments

Comments
 (0)