Skip to content

Commit 7fe6a6a

Browse files
committed
modify:delete support for webdav
1 parent 6981008 commit 7fe6a6a

File tree

2 files changed

+40
-8
lines changed

2 files changed

+40
-8
lines changed

XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,15 +181,18 @@ bool CAPIHelp_Distributed::APIHelp_Distributed_DLStorage(LPCXSTR lpszMsgBuffer,
181181
if ('/' == lpszMsgBuffer[i])
182182
{
183183
bFound = true;
184-
memcpy(tszKeyStr, lpszMsgBuffer + 1, i - 1);
185184
break;
186185
}
187186
}
188-
if (!bFound)
187+
if (bFound)
189188
{
190-
APIHelp_IsErrorOccur = true;
191-
APIHelp_dwErrorCode = ERROR_STORAGE_MODULE_APIHELP_NOTFOUND;
192-
return false;
189+
_tcsxcpy(pSt_StorageBucket->tszFileName, lpszMsgBuffer + i);
190+
memcpy(tszKeyStr, lpszMsgBuffer + 1, i - 1);
191+
}
192+
else
193+
{
194+
_tcsxcpy(pSt_StorageBucket->tszFileName, lpszMsgBuffer + 1);
195+
_tcsxcpy(tszKeyStr, lpszMsgBuffer + 1);
193196
}
194197
bFound = false;
195198
//获得对应存储
@@ -208,7 +211,7 @@ bool CAPIHelp_Distributed::APIHelp_Distributed_DLStorage(LPCXSTR lpszMsgBuffer,
208211
APIHelp_dwErrorCode = ERROR_STORAGE_MODULE_APIHELP_NOTFOUND;
209212
return false;
210213
}
211-
_tcsxcpy(pSt_StorageBucket->tszFileName, lpszMsgBuffer + i);
214+
212215
return true;
213216
}
214217
/********************************************************************

XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,10 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
5050

5151
LPCXSTR lpszMethodOption = _X("OPTIONS");
5252
LPCXSTR lpszMethodPropfind = _X("PROPFIND");
53+
LPCXSTR lpszMethodPropPatch = _X("PROPPATCH");
5354
LPCXSTR lpszMethodGet = _X("GET");
5455
LPCXSTR lpszMethodPut = _X("PUT");
56+
LPCXSTR lpszMethodDel = _X("DELETE");
5557
LPCXSTR lpszMethodLock = _X("LOCK");
5658

5759
st_HDRParam.bIsClose = false;
@@ -62,7 +64,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
6264
//用于心跳
6365
st_HDRParam.bIsClose = true;
6466
st_HDRParam.nHttpCode = 200;
65-
LPCXSTR lpszHdrBuffer = _X("Allow: OPTIONS POST GET PUT PROPFIND DELETE LOCK\r\n");
67+
LPCXSTR lpszHdrBuffer = _X("Allow: OPTIONS POST GET PUT PROPFIND PROPPATCH DELETE LOCK\r\n");
6668
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, lpszHdrBuffer);
6769
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
6870
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求OPTIONS心跳方法成功"), lpszClientAddr);
@@ -79,7 +81,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
7981
return false;
8082
}
8183
XENGINE_STORAGEBUCKET st_StorageBucket = {};
82-
if (!APIHelp_Distributed_CTStorage(pSt_HTTPParam->tszHttpUri + 1, st_LoadbalanceCfg.st_LoadBalance.pStl_ListBucket, &st_StorageBucket))
84+
if (!APIHelp_Distributed_DLStorage(pSt_HTTPParam->tszHttpUri, st_LoadbalanceCfg.st_LoadBalance.pStl_ListBucket, &st_StorageBucket))
8385
{
8486
st_HDRParam.bIsClose = true;
8587
st_HDRParam.nHttpCode = 400;
@@ -215,6 +217,33 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
215217
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,处理WEBDAV协议LOCK方法成功,锁用户:%s"), lpszClientAddr, st_WDLock.tszOwner);
216218
return true;
217219
}
220+
else if (0 == _tcsxnicmp(lpszMethodDel, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodDel)))
221+
{
222+
//使用重定向实现上传
223+
st_HDRParam.bIsClose = false;
224+
st_HDRParam.nHttpCode = 204;
225+
226+
XENGINE_STORAGEBUCKET st_StorageBucket = {};
227+
if (!APIHelp_Distributed_DLStorage(pSt_HTTPParam->tszHttpUri, st_LoadbalanceCfg.st_LoadBalance.pStl_ListBucket, &st_StorageBucket))
228+
{
229+
st_HDRParam.bIsClose = true;
230+
st_HDRParam.nHttpCode = 400;
231+
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
232+
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
233+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,处理WEBDAV协议DELETE方法失败,获取BUCKET失败,URL:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri);
234+
return false;
235+
}
236+
int nFLen = 0;
237+
XCHAR tszFileName[MAX_PATH] = {};
238+
_tcsxcpy(tszFileName, pSt_HTTPParam->tszHttpUri + 1);
239+
BaseLib_OperatorString_Replace(tszFileName, &nFLen, st_StorageBucket.tszBuckKey, st_StorageBucket.tszFilePath);
240+
241+
_xtremove(tszFileName);
242+
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
243+
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
244+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,处理WEBDAV协议DELETE方法成功,删除的文件:%s"), lpszClientAddr, tszFileName);
245+
return true;
246+
}
218247
else
219248
{
220249
st_HDRParam.bIsClose = true;

0 commit comments

Comments
 (0)