Skip to content

Commit 8cae983

Browse files
committed
added:get method of download file support for webdav
1 parent b84de25 commit 8cae983

File tree

1 file changed

+30
-6
lines changed

1 file changed

+30
-6
lines changed

XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
5050

5151
LPCXSTR lpszMethodOption = _X("OPTIONS");
5252
LPCXSTR lpszMethodPropfind = _X("PROPFIND");
53+
LPCXSTR lpszMethodGet = _X("GET");
5354

5455
st_HDRParam.bIsClose = false;
5556
st_HDRParam.nHttpCode = 200;
@@ -60,7 +61,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
6061
st_HDRParam.bIsClose = true;
6162
st_HDRParam.nHttpCode = 200;
6263
LPCXSTR lpszHdrBuffer = _X("Allow: POST GET PUT PROPFIND DELETE OPTIONS\r\n");
63-
HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, lpszHdrBuffer);
64+
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, lpszHdrBuffer);
6465
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
6566
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求OPTIONS心跳方法成功"), lpszClientAddr);
6667
}
@@ -70,7 +71,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
7071
{
7172
st_HDRParam.bIsClose = true;
7273
st_HDRParam.nHttpCode = 403;
73-
HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
74+
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
7475
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
7576
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,处理WEBDAV协议PROPFIND方法失败,地址不正确,URL:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri);
7677
return false;
@@ -80,7 +81,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
8081
{
8182
st_HDRParam.bIsClose = true;
8283
st_HDRParam.nHttpCode = 400;
83-
HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
84+
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
8485
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
8586
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,处理WEBDAV协议PROPFIND方法失败,URL:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri);
8687
return false;
@@ -114,7 +115,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
114115
if (0 == nListCount)
115116
{
116117
st_HDRParam.nHttpCode = 404;
117-
HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
118+
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
118119
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
119120
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,处理WEBDAV协议PROPFIND方法失败,文件没有找到,URL:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri);
120121
return false;
@@ -124,11 +125,34 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
124125

125126
st_HDRParam.nHttpCode = 207;
126127
_tcsxcpy(st_HDRParam.tszMimeType, _X("xml"));
127-
HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
128+
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
128129
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
129-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,处理WEBDAV协议PROPFIND方法成功,文件名称:%s"), lpszClientAddr, tszFindStr);
130+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,处理WEBDAV协议PROPFIND方法成功,文件名称:%s"), lpszClientAddr, tszFindStr);
130131
return false;
131132
}
133+
else if (0 == _tcsxnicmp(lpszMethodGet, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodGet)))
134+
{
135+
//使用重定向实现下载
136+
st_HDRParam.bIsClose = true;
137+
st_HDRParam.nHttpCode = 302;
138+
139+
XCHAR tszRequestAddr[MAX_PATH] = {};
140+
XCHAR tszHostStr[128] = {};
141+
HttpProtocol_ServerHelp_GetField(&pptszListHdr, nHdrCount, _X("Host"), tszHostStr);
142+
143+
XCHAR tszPortWebdav[64] = {};
144+
XCHAR tszPortDownload[64] = {};
145+
_xstprintf(tszPortWebdav, _X("%d"), st_ServiceCfg.nWebdavPort);
146+
_xstprintf(tszPortDownload, _X("%d"), st_ServiceCfg.nStorageDLPort);
147+
//转换端口
148+
APIHelp_Api_UrlChange(tszHostStr, tszPortWebdav, tszPortDownload);
149+
_xstprintf(tszRequestAddr, _X("Location: http://%s%s\r\n"), tszHostStr, pSt_HTTPParam->tszHttpUri);
150+
151+
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszRequestAddr);
152+
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
153+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求的文件被要求重定向到:%s"), lpszClientAddr, tszRequestAddr);
154+
return true;
155+
}
132156
else
133157
{
134158
st_HDRParam.bIsClose = true;

0 commit comments

Comments
 (0)