@@ -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