Skip to content

Commit faa5ca9

Browse files
committed
fixed:repeat response for download failure
modify:download mix message support
1 parent 26048ca commit faa5ca9

File tree

2 files changed

+53
-22
lines changed

2 files changed

+53
-22
lines changed

XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,14 @@ void XCALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket,
6060
if (nLimitTime > (__int64u)st_StorageInfo.nLimit)
6161
{
6262
//当前平均速度大于限制速度,不做处理
63-
NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend, lParam);
63+
if (STORAGE_NETTYPE_HTTPWEBDAV == nNetType)
64+
{
65+
NetCore_TCPXCore_CBSendEx(xhNetWebdav, lpszClientAddr, XEngine_Download_CBSend, lParam);
66+
}
67+
else
68+
{
69+
NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend, lParam);
70+
}
6471
return;
6572
}
6673
}
@@ -89,7 +96,15 @@ void XCALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket,
8996
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,请求完成通知失败,可能对方服务没有开启,文件:%s,地址:%s"), lpszClientAddr, st_StorageInfo.tszFileDir, st_ServiceCfg.st_XProxy.tszDLPass);
9097
}
9198
}
92-
NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr);
99+
if (STORAGE_NETTYPE_HTTPWEBDAV == nNetType)
100+
{
101+
NetCore_TCPXCore_CBSendEx(xhNetWebdav, lpszClientAddr);
102+
}
103+
else
104+
{
105+
NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr);
106+
}
107+
93108
Session_DLStroage_Delete(lpszClientAddr);
94109
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("下载客户端:%s,文件已经发送完毕,用户已经被移除发送列表"), lpszClientAddr);
95110
}
@@ -310,10 +325,17 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in
310325
st_HDRParam.bIsClose = true;
311326
}
312327
_xstprintf(tszFieldStr, _X("FileHash: %s\r\n"), tszHashStr);
313-
HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, ullSize, tszFieldStr);
314-
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType);
315328
//不能在send之前调用
316-
if (!NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend, &nNetType))
329+
bool bRet = false;
330+
if (STORAGE_NETTYPE_HTTPWEBDAV == nNetType)
331+
{
332+
bRet = NetCore_TCPXCore_CBSendEx(xhNetWebdav, lpszClientAddr, XEngine_Download_CBSend, &nNetType);
333+
}
334+
else
335+
{
336+
bRet = NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend, &nNetType);
337+
}
338+
if (!bRet)
317339
{
318340
st_HDRParam.bIsClose = true;
319341
st_HDRParam.nHttpCode = 404;
@@ -323,6 +345,8 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in
323345
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,设置回调下载失败,文件:%s,错误:%lX"), lpszClientAddr, tszFileDir, Session_GetLastError());
324346
return false;
325347
}
348+
HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, ullSize, tszFieldStr);
349+
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType);
326350
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("下载客户端:%s,请求下载文件成功,文件名:%s,总大小:%llu,发送大小:%llu,范围:%d - %d"), lpszClientAddr, tszFileDir, ullCount, ullSize, nPosStart, nPosEnd);
327351
return true;
328352
}

XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -142,26 +142,33 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
142142
}
143143
else if (0 == _tcsxnicmp(lpszMethodGet, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodGet)))
144144
{
145-
//使用重定向实现下载
146-
st_HDRParam.bIsClose = true;
147-
st_HDRParam.nHttpCode = 302;
145+
if (st_ServiceCfg.st_XStorage.bWDLocation)
146+
{
147+
//使用重定向实现下载
148+
st_HDRParam.bIsClose = true;
149+
st_HDRParam.nHttpCode = 302;
148150

149-
XCHAR tszRequestAddr[512] = {};
150-
XCHAR tszHostStr[128] = {};
151-
HttpProtocol_ServerHelp_GetField(&pptszListHdr, nHdrCount, _X("Host"), tszHostStr);
151+
XCHAR tszRequestAddr[512] = {};
152+
XCHAR tszHostStr[128] = {};
153+
HttpProtocol_ServerHelp_GetField(&pptszListHdr, nHdrCount, _X("Host"), tszHostStr);
152154

153-
XCHAR tszPortWebdav[64] = {};
154-
XCHAR tszPortDownload[64] = {};
155-
_xstprintf(tszPortWebdav, _X("%d"), st_ServiceCfg.nWebdavPort);
156-
_xstprintf(tszPortDownload, _X("%d"), st_ServiceCfg.nStorageDLPort);
157-
//转换端口
158-
int nReplaceLen = 0;
159-
BaseLib_String_Replace(tszHostStr, &nReplaceLen, tszPortWebdav, tszPortDownload, true);
160-
_xstprintf(tszRequestAddr, _X("Location: http://%s%s\r\n"), tszHostStr, pSt_HTTPParam->tszHttpUri);
155+
XCHAR tszPortWebdav[64] = {};
156+
XCHAR tszPortDownload[64] = {};
157+
_xstprintf(tszPortWebdav, _X("%d"), st_ServiceCfg.nWebdavPort);
158+
_xstprintf(tszPortDownload, _X("%d"), st_ServiceCfg.nStorageDLPort);
159+
//转换端口
160+
int nReplaceLen = 0;
161+
BaseLib_String_Replace(tszHostStr, &nReplaceLen, tszPortWebdav, tszPortDownload, true);
162+
_xstprintf(tszRequestAddr, _X("Location: http://%s%s\r\n"), tszHostStr, pSt_HTTPParam->tszHttpUri);
161163

162-
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszRequestAddr);
163-
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
164-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求文件下载被重定向到:%s"), lpszClientAddr, tszRequestAddr);
164+
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszRequestAddr);
165+
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
166+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求文件下载被重定向到:%s"), lpszClientAddr, tszRequestAddr);
167+
}
168+
else
169+
{
170+
XEngine_Task_HttpDownload(lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPWEBDAV);
171+
}
165172
}
166173
else if (0 == _tcsxnicmp(lpszMethodPut, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodPut)))
167174
{

0 commit comments

Comments
 (0)