Skip to content

Commit 4af365c

Browse files
committed
support:enable or disable resumable.
support:Support to close specific services
1 parent 90feb49 commit 4af365c

File tree

3 files changed

+203
-153
lines changed

3 files changed

+203
-153
lines changed

XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,18 @@ BOOL XEngine_Task_HttpDownload(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in
156156
__int64x nPosCount = 0;
157157
if (XEngine_APPHelp_RangeFile(lpszClientAddr, &nPosStart, &nPosEnd, &nPosCount, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPDOWNLOAD))
158158
{
159-
bRange = TRUE;
159+
//是否启用了断点续传
160+
if (st_ServiceCfg.st_XStorage.bResumable)
161+
{
162+
bRange = TRUE;
163+
}
164+
else
165+
{
166+
bRange = FALSE;
167+
nPosStart = 0;
168+
nPosEnd = 0;
169+
}
160170
}
161-
162171
_stprintf(tszFileDir, _T("%s%s"), st_ServiceCfg.st_XStorage.tszFileDir, pSt_HTTPParam->tszHttpUri);
163172
if (!Session_DLStroage_Insert(lpszClientAddr, tszFileDir, &ullCount, &ullSize, nPosStart, nPosEnd))
164173
{
@@ -193,18 +202,15 @@ BOOL XEngine_Task_HttpDownload(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in
193202
RfcComponents_HttpServer_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, ullSize);
194203
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD);
195204
//不能在send之前调用
196-
if (2 == st_ServiceCfg.st_XStorage.nSendMode)
205+
if (!NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend))
197206
{
198-
if (!NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend))
199-
{
200-
st_HDRParam.bIsClose = TRUE;
201-
st_HDRParam.nHttpCode = 404;
207+
st_HDRParam.bIsClose = TRUE;
208+
st_HDRParam.nHttpCode = 404;
202209

203-
RfcComponents_HttpServer_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
204-
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD);
205-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("下载客户端:%s,设置回调下载失败,文件:%s,错误:%lX"), lpszClientAddr, tszFileDir, Session_GetLastError());
206-
return FALSE;
207-
}
210+
RfcComponents_HttpServer_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
211+
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD);
212+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("下载客户端:%s,设置回调下载失败,文件:%s,错误:%lX"), lpszClientAddr, tszFileDir, Session_GetLastError());
213+
return FALSE;
208214
}
209215
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("下载客户端:%s,请求下载文件成功,文件名:%s,总大小:%llu,发送大小:%llu,范围:%d - %d"), lpszClientAddr, tszFileDir, ullCount, ullSize, nPosStart, nPosEnd);
210216
return TRUE;

XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.cpp

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,29 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in
9494
int nRVMode = 0;
9595
int nRVCount = 0;
9696
int nHDSize = 0;
97+
_stprintf(tszFileDir, _T("%s%s"), st_ServiceCfg.st_XStorage.tszFileDir, pSt_HTTPParam->tszHttpUri);
98+
9799
if (!Session_UPStroage_Exist(lpszClientAddr))
98100
{
99101
int nPosStart = 0;
100102
int nPosEnd = 0;
101103
__int64x nPosCount = 0;
102104

103-
XEngine_APPHelp_RangeFile(lpszClientAddr, &nPosStart, &nPosEnd, &nPosCount, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPUPLOADER);
104-
RfcComponents_HttpServer_GetRecvModeEx(xhUPHttp, lpszClientAddr, &nRVMode, &nRVCount, &nHDSize);
105+
if (XEngine_APPHelp_RangeFile(lpszClientAddr, &nPosStart, &nPosEnd, &nPosCount, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPUPLOADER))
106+
{
107+
//是否启用了断点续传
108+
if (!st_ServiceCfg.st_XStorage.bResumable)
109+
{
110+
st_HDRParam.bIsClose = TRUE;
111+
st_HDRParam.nHttpCode = 416;
105112

106-
_stprintf(tszFileDir, _T("%s%s"), st_ServiceCfg.st_XStorage.tszFileDir, pSt_HTTPParam->tszHttpUri);
113+
RfcComponents_HttpServer_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
114+
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
115+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("上传客户端:%s,请求断点续传上传文件失败,服务端关闭了此功能,文件:%s,错误:%lX"), lpszClientAddr, tszFileDir, Session_GetLastError());
116+
return FALSE;
117+
}
118+
}
119+
RfcComponents_HttpServer_GetRecvModeEx(xhUPHttp, lpszClientAddr, &nRVMode, &nRVCount, &nHDSize);
107120
if (!Session_UPStroage_Insert(lpszClientAddr, tszFileDir, nPosCount, nRVCount, nPosStart, nPosEnd))
108121
{
109122
st_HDRParam.bIsClose = TRUE;
@@ -124,6 +137,22 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in
124137
RfcComponents_HttpServer_GetRecvModeEx(xhUPHttp, lpszClientAddr, &nRVMode, &nRVCount, &nHDSize);
125138
if (nHDSize >= nRVCount)
126139
{
140+
SESSION_STORAGEINFO st_StorageInfo;
141+
memset(&st_StorageInfo, '\0', sizeof(SESSION_STORAGEINFO));
142+
143+
Session_UPStroage_Close(lpszClientAddr);
144+
Session_UPStroage_GetInfo(lpszClientAddr, &st_StorageInfo);
145+
//大小是否足够
146+
if (st_StorageInfo.ullCount != st_StorageInfo.ullFSize)
147+
{
148+
st_HDRParam.bIsClose = TRUE;
149+
st_HDRParam.nHttpCode = 200;
150+
RfcComponents_HttpServer_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
151+
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
152+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("上传客户端:%s,请求上传文件成功,文件名:%s,总大小:%lld,写入大小:%lld,文件不完整,需要等待断点续传完毕"), lpszClientAddr, tszFileDir, st_StorageInfo.ullCount, st_StorageInfo.ullFSize);
153+
return TRUE;
154+
}
155+
127156
int nHashLen = 0;
128157
UCHAR tszHashStr[MAX_PATH];
129158
XSTORAGECORE_DBFILE st_ProtocolFile;

0 commit comments

Comments
 (0)