Skip to content

Commit 166966d

Browse files
committed
fixed:webdav url convert to x storage format
1 parent b7ad84c commit 166966d

File tree

6 files changed

+79
-1
lines changed

6 files changed

+79
-1
lines changed

XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,4 +527,52 @@ bool CAPIHelp_Api::APIHelp_Api_GetLastName(XCHAR* ptszLastName, LPCXSTR lpszPath
527527
_tcsxcpy(ptszLastName, m_StrPath.substr(nPos + 1).c_str());
528528
}
529529
return true;
530+
}
531+
/********************************************************************
532+
函数名称:APIHelp_Api_WDToUrl
533+
函数功能:webdav的路径转为存储服务标准路径
534+
参数.一:lpszUrl
535+
In/Out:In
536+
类型:常量字符指针
537+
可空:N
538+
意思:输入要转换的路径
539+
参数.二:ptszUrl
540+
In/Out:Out
541+
类型:字符指针
542+
可空:N
543+
意思:输出转换后的路径
544+
返回值
545+
类型:逻辑型
546+
意思:是否成功
547+
备注:
548+
*********************************************************************/
549+
bool CAPIHelp_Api::APIHelp_Api_WDToUrl(LPCXSTR lpszUrl, XCHAR* ptszUrl)
550+
{
551+
APIHelp_IsErrorOccur = false;
552+
553+
xstring m_StrUrl = lpszUrl;
554+
// 确保路径以 "/" 开头
555+
if (m_StrUrl.empty() || m_StrUrl[0] != '/')
556+
{
557+
return false;
558+
}
559+
if (0 == _tcsxnicmp("api", m_StrUrl.c_str() + 1, 3))
560+
{
561+
_tcsxcpy(ptszUrl, lpszUrl);
562+
return true;
563+
}
564+
// 找到第一个 '/' 和第二个 '/'
565+
size_t nFirstSlash = m_StrUrl.find('/', 1);
566+
if (nFirstSlash == std::string::npos)
567+
{
568+
return false;
569+
}
570+
//提取bucket
571+
xstring m_StrBucket = m_StrUrl.substr(1, nFirstSlash - 1);
572+
//提取剩余路径
573+
xstring m_StrFile = m_StrUrl.substr(nFirstSlash + 1);
574+
// 构造目标URL
575+
xstring m_XUrl = "/api?filename=" + m_StrFile + "&storeagekey=" + m_StrBucket;
576+
_tcsxcpy(ptszUrl, m_XUrl.c_str());
577+
return true;
530578
}

XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class CAPIHelp_Api
2727
bool APIHelp_Api_GetDIRSize(LPCXSTR lpszDIRStr, __int64u* pInt_DIRSize);
2828
bool APIHelp_Api_UrlStr(XCHAR* ptszKeyStr, LPCXSTR lpszUrl);
2929
bool APIHelp_Api_GetLastName(XCHAR* ptszLastName, LPCXSTR lpszPathStr);
30+
bool APIHelp_Api_WDToUrl(LPCXSTR lpszUrl, XCHAR* ptszUrl);
3031
protected:
3132
private:
3233
};

XEngine_Source/StorageModule_APIHelp/APIHelp_Define.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,25 @@ extern "C" bool APIHelp_Api_UrlStr(XCHAR* ptszKeyStr, LPCXSTR lpszUrl);
390390
备注:
391391
*********************************************************************/
392392
extern "C" bool APIHelp_Api_GetLastName(XCHAR* ptszLastName, LPCXSTR lpszPathStr);
393+
/********************************************************************
394+
函数名称:APIHelp_Api_WDToUrl
395+
函数功能:webdav的路径转为存储服务标准路径
396+
参数.一:lpszUrl
397+
In/Out:In
398+
类型:常量字符指针
399+
可空:N
400+
意思:输入要转换的路径
401+
参数.二:ptszUrl
402+
In/Out:Out
403+
类型:字符指针
404+
可空:N
405+
意思:输出转换后的路径
406+
返回值
407+
类型:逻辑型
408+
意思:是否成功
409+
备注:
410+
*********************************************************************/
411+
extern "C" bool APIHelp_Api_WDToUrl(LPCXSTR lpszUrl, XCHAR* ptszUrl);
393412
/************************************************************************/
394413
/* 加解密函数 */
395414
/************************************************************************/

XEngine_Source/StorageModule_APIHelp/StorageModule_APIHelp.def

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ EXPORTS
1818
APIHelp_Api_Boundary
1919
APIHelp_Api_GetDIRSize
2020
APIHelp_Api_UrlStr
21-
APIHelp_Api_GetLastName
21+
APIHelp_Api_GetLastName
22+
APIHelp_Api_WDToUrl

XEngine_Source/StorageModule_APIHelp/pch.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ extern "C" bool APIHelp_Api_GetLastName(XCHAR* ptszLastName, LPCXSTR lpszPathStr
9696
{
9797
return m_APIHelp.APIHelp_Api_GetLastName(ptszLastName, lpszPathStr);
9898
}
99+
extern "C" bool APIHelp_Api_WDToUrl(LPCXSTR lpszUrl, XCHAR* ptszUrl)
100+
{
101+
return m_APIHelp.APIHelp_Api_WDToUrl(lpszUrl, ptszUrl);
102+
}
99103
/************************************************************************/
100104
/* 加解密函数 */
101105
/************************************************************************/

XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,11 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
200200
}
201201
else
202202
{
203+
//转换参数格式:/storagekey1/webdav/clash-verge-rev-backup/backup.zip 为 /api?filename=webdav/clash-verge-rev-backup/backup.zip&storeagekey=storagekey1
204+
XCHAR tszConvertStr[XPATH_MAX] = {};
205+
APIHelp_Api_WDToUrl(pSt_HTTPParam->tszHttpUri, tszConvertStr);
206+
memset(pSt_HTTPParam->tszHttpUri, '\0', sizeof(pSt_HTTPParam->tszHttpUri));
207+
_tcsxcpy(pSt_HTTPParam->tszHttpUri, tszConvertStr);
203208
XEngine_Task_HttpUPLoader(lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPWEBDAV);
204209
}
205210
}

0 commit comments

Comments
 (0)