Skip to content

Commit b448678

Browse files
committed
modify:webdav serves via a separate port
1 parent 4cdcbcf commit b448678

File tree

13 files changed

+362
-105
lines changed

13 files changed

+362
-105
lines changed

XEngine_Source/StorageModule_Config/Config_Define.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ typedef struct tag_XEngine_ServerConfig
1919
bool bDeamon;
2020
bool bReuseraddr;
2121
int nCenterPort;
22+
int nWebdavPort;
2223
int nStorageDLPort;
2324
int nStorageUPPort;
2425
struct
@@ -31,6 +32,7 @@ typedef struct tag_XEngine_ServerConfig
3132
int nMaxQueue;
3233
int nIOThread;
3334
int nCenterThread;
35+
int nWebdavThread;
3436
int nStorageDLThread;
3537
int nStorageUPThread;
3638
}st_XMax;
@@ -41,6 +43,7 @@ typedef struct tag_XEngine_ServerConfig
4143
int nTimeCheck;
4244
int nCenterTimeOut;
4345
int nStorageTimeOut;
46+
int nWebdavTimeOut;
4447
}st_XTime;
4548
struct
4649
{
@@ -102,6 +105,7 @@ typedef struct tag_XEngine_ServerConfig
102105
bool bDLEnable;
103106
bool bUPEnable;
104107
bool bCHEnable;
108+
bool bWDEnable;
105109
}st_XCert;
106110
struct
107111
{

XEngine_Source/StorageModule_Config/Config_Json/Config_Json.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,11 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVERCONFIG
8484
_tcsxcpy(pSt_ServerConfig->tszIPAddr, st_JsonRoot["tszIPAddr"].asCString());
8585
pSt_ServerConfig->bDeamon = st_JsonRoot["bDeamon"].asInt();
8686
pSt_ServerConfig->nCenterPort = st_JsonRoot["nCenterPort"].asInt();
87+
pSt_ServerConfig->nWebdavPort = st_JsonRoot["nWebdavPort"].asInt();
8788
pSt_ServerConfig->nStorageDLPort = st_JsonRoot["nStorageDLPort"].asInt();
8889
pSt_ServerConfig->nStorageUPPort = st_JsonRoot["nStorageUPPort"].asInt();
8990

90-
if (st_JsonRoot["XMax"].empty() || (6 != st_JsonRoot["XMax"].size()))
91+
if (st_JsonRoot["XMax"].empty() || (7 != st_JsonRoot["XMax"].size()))
9192
{
9293
Config_IsErrorOccur = true;
9394
Config_dwErrorCode = ERROR_XENGINE_BLOGIC_CONFIG_JSON_XMAX;
@@ -100,8 +101,9 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVERCONFIG
100101
pSt_ServerConfig->st_XMax.nCenterThread = st_JsonXMax["CenterThread"].asInt();
101102
pSt_ServerConfig->st_XMax.nStorageUPThread = st_JsonXMax["nStorageUPThread"].asInt();
102103
pSt_ServerConfig->st_XMax.nStorageDLThread = st_JsonXMax["nStorageDLThread"].asInt();
104+
pSt_ServerConfig->st_XMax.nWebdavThread = st_JsonXMax["nWebdavThread"].asInt();
103105

104-
if (st_JsonRoot["XTime"].empty() || (5 != st_JsonRoot["XTime"].size()))
106+
if (st_JsonRoot["XTime"].empty() || (6 != st_JsonRoot["XTime"].size()))
105107
{
106108
Config_IsErrorOccur = true;
107109
Config_dwErrorCode = ERROR_XENGINE_BLOGIC_CONFIG_JSON_XTIME;
@@ -113,6 +115,7 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVERCONFIG
113115
pSt_ServerConfig->st_XTime.nTimeCheck = st_JsonXTime["nTimeCheck"].asInt();
114116
pSt_ServerConfig->st_XTime.nCenterTimeOut = st_JsonXTime["nCenterTimeOut"].asInt();
115117
pSt_ServerConfig->st_XTime.nStorageTimeOut = st_JsonXTime["nStorageTimeOut"].asInt();
118+
pSt_ServerConfig->st_XTime.nWebdavTimeOut = st_JsonXTime["nWebdavTimeOut"].asInt();
116119

117120
if (st_JsonRoot["XLog"].empty() || (3 != st_JsonRoot["XLog"].size()))
118121
{
@@ -202,7 +205,7 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVERCONFIG
202205
pSt_ServerConfig->st_P2xp.nSDPort = st_JsonP2xp["nSDPort"].asInt();
203206
pSt_ServerConfig->st_P2xp.nRVPort = st_JsonP2xp["nRVPort"].asInt();
204207

205-
if (st_JsonRoot["XCert"].empty() || (6 != st_JsonRoot["XCert"].size()))
208+
if (st_JsonRoot["XCert"].empty() || (7 != st_JsonRoot["XCert"].size()))
206209
{
207210
Config_IsErrorOccur = true;
208211
Config_dwErrorCode = ERROR_XENGINE_BLOGIC_CONFIG_JSON_CERT;
@@ -212,6 +215,8 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVERCONFIG
212215
pSt_ServerConfig->st_XCert.bDLEnable = st_JsonCert["bDLEnable"].asBool();
213216
pSt_ServerConfig->st_XCert.bUPEnable = st_JsonCert["bUPEnable"].asBool();
214217
pSt_ServerConfig->st_XCert.bCHEnable = st_JsonCert["bCHEnable"].asBool();
218+
pSt_ServerConfig->st_XCert.bWDEnable = st_JsonCert["bWDEnable"].asBool();
219+
215220
if (!st_JsonCert["tszCertChain"].isNull())
216221
{
217222
_tcsxcpy(pSt_ServerConfig->st_XCert.tszCertChain, st_JsonCert["tszCertChain"].asCString());

XEngine_Source/XEngine_StorageApp/StorageApp_Center.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ bool XEngine_Task_HttpCenter(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
5858
LPCXSTR lpszMethodPost = _X("POST");
5959
LPCXSTR lpszMethodOption = _X("OPTIONS");
6060

61-
LPCXSTR lpszMethodPropfind = _X("PROPFIND");
62-
6361
if (st_ServiceCfg.st_XAuth.bCHAuth)
6462
{
6563
XCHAR tszUserName[64];
@@ -146,16 +144,12 @@ bool XEngine_Task_HttpCenter(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
146144
Storage_TaskAction(tszAPIName, lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam);
147145
}
148146
}
149-
else if (0 == _tcsxnicmp(lpszMethodPropfind, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodPropfind)))
150-
{
151-
Storage_TaskWebdav(lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount);
152-
}
153147
else if (0 == _tcsxnicmp(lpszMethodOption, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodOption)))
154148
{
155149
//用于心跳
156150
st_HDRParam.bIsClose = true;
157151
st_HDRParam.nHttpCode = 200;
158-
LPCXSTR lpszHdrBuffer = _X("Allow: POST GET PUT PROPFIND PROPPATCH MKCOL COPY MOVE DELETE LOCK UNLOCK OPTIONS\r\n");
152+
LPCXSTR lpszHdrBuffer = _X("Allow: POST GET PUT\r\n");
159153
HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, lpszHdrBuffer);
160154
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER);
161155
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("业务客户端:%s,请求OPTIONS心跳方法成功"), lpszClientAddr);

XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,29 +71,36 @@ using namespace std;
7171
#define STORAGE_NETTYPE_HTTPUPLOADER 1
7272
#define STORAGE_NETTYPE_HTTPDOWNLOAD 2
7373
#define STORAGE_NETTYPE_HTTPCENTER 3
74+
#define STORAGE_NETTYPE_HTTPWEBDAV 4
7475

7576
extern bool bIsRun;
7677
extern XHANDLE xhLog;
7778

7879
extern XHANDLE xhHBDownload;
7980
extern XHANDLE xhHBUPLoader;
8081
extern XHANDLE xhHBCenter;
82+
extern XHANDLE xhHBWebdav;
8183

8284
extern XHANDLE xhNetDownload;
8385
extern XHANDLE xhNetUPLoader;
8486
extern XHANDLE xhNetCenter;
87+
extern XHANDLE xhNetWebdav;
8588

8689
extern XHANDLE xhUPPool;
8790
extern XHANDLE xhDLPool;
8891
extern XHANDLE xhCTPool;
92+
extern XHANDLE xhWDPool;
8993

9094
extern XHANDLE xhDLSsl;
9195
extern XHANDLE xhUPSsl;
9296
extern XHANDLE xhCHSsl;
97+
extern XHANDLE xhWDSsl;
98+
9399
extern XHANDLE xhLimit;
94100
extern XHANDLE xhUPHttp;
95101
extern XHANDLE xhDLHttp;
96102
extern XHANDLE xhCenterHttp;
103+
extern XHANDLE xhWebdavHttp;
97104

98105
extern XSOCKET hBroadSocket;
99106
extern shared_ptr<std::thread> pSTDThread;
@@ -107,11 +114,11 @@ extern XENGINE_LBCONFIG st_LoadbalanceCfg;
107114
#include "StorageApp_Download.h"
108115
#include "StorageApp_UPLoader.h"
109116
#include "StorageApp_Center.h"
117+
#include "StorageApp_Webdav.h"
110118
#include "Storage_APPTask/Storage_TaskPass.h"
111119
#include "Storage_APPTask/Storage_TaskP2p.h"
112120
#include "Storage_APPTask/Storage_TaskManage.h"
113121
#include "Storage_APPTask/Storage_TaskAction.h"
114-
#include "Storage_APPTask/Storage_TaskWebdav.h"
115122

116123
#ifdef _MSC_BUILD
117124
#pragma comment(lib,"Ws2_32.lib")

XEngine_Source/XEngine_StorageApp/StorageApp_Network.cpp

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,47 @@ void CALLBACK XEngine_Callback_CenterLeave(LPCXSTR lpszClientAddr, XSOCKET hSock
130130
XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_BYSELF, STORAGE_NETTYPE_HTTPCENTER);
131131
}
132132
//////////////////////////////////////////////////////////////////////////
133+
bool CALLBACK XEngine_Callback_WebdavLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam)
134+
{
135+
if (st_ServiceCfg.st_XCert.bWDEnable)
136+
{
137+
OPenSsl_Server_AcceptEx(xhWDSsl, hSocket, lpszClientAddr);
138+
}
139+
HttpProtocol_Server_CreateClientEx(xhWebdavHttp, lpszClientAddr, 0);
140+
SocketOpt_HeartBeat_InsertAddrEx(xhHBWebdav, lpszClientAddr);
141+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,进入了服务器"), lpszClientAddr);
142+
return true;
143+
}
144+
void CALLBACK XEngine_Callback_WebdavRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam)
145+
{
146+
if (st_ServiceCfg.st_XCert.bWDEnable)
147+
{
148+
int nSLen = 0;
149+
XCHAR* ptszMsgBuffer = NULL;
150+
OPenSsl_Server_RecvMemoryEx(xhWDSsl, lpszClientAddr, &ptszMsgBuffer, &nSLen, lpszRecvMsg, nMsgLen);
151+
if (!HttpProtocol_Server_InserQueueEx(xhWebdavHttp, lpszClientAddr, ptszMsgBuffer, nSLen))
152+
{
153+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpProtocol_GetLastError());
154+
return;
155+
}
156+
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
157+
}
158+
else
159+
{
160+
if (!HttpProtocol_Server_InserQueueEx(xhWebdavHttp, lpszClientAddr, lpszRecvMsg, nMsgLen))
161+
{
162+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpProtocol_GetLastError());
163+
return;
164+
}
165+
}
166+
SocketOpt_HeartBeat_ActiveAddrEx(xhHBWebdav, lpszClientAddr);
167+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("WEBDAV客户端:%s,投递包成功,大小:%d"), lpszClientAddr, nMsgLen);
168+
}
169+
void CALLBACK XEngine_Callback_WebdavLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam)
170+
{
171+
XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_BYSELF, STORAGE_NETTYPE_HTTPWEBDAV);
172+
}
173+
//////////////////////////////////////////////////////////////////////////
133174
void CALLBACK XEngine_Callback_HBDownload(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam)
134175
{
135176
XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_HEARTBEAT, STORAGE_NETTYPE_HTTPDOWNLOAD);
@@ -142,6 +183,10 @@ void CALLBACK XEngine_Callback_HBCenter(LPCXSTR lpszClientAddr, XSOCKET hSocket,
142183
{
143184
XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_HEARTBEAT, STORAGE_NETTYPE_HTTPCENTER);
144185
}
186+
void CALLBACK XEngine_Callback_HBWebdav(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam)
187+
{
188+
XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_HEARTBEAT, STORAGE_NETTYPE_HTTPWEBDAV);
189+
}
145190
//////////////////////////////////////////////////////////////////////////
146191
bool XEngine_Net_CloseClient(LPCXSTR lpszClientAddr, int nLeaveType, int nClientType)
147192
{
@@ -225,6 +270,29 @@ bool XEngine_Net_CloseClient(LPCXSTR lpszClientAddr, int nLeaveType, int nClient
225270
HttpProtocol_Server_CloseClinetEx(xhCenterHttp, lpszClientAddr);
226271
OPenSsl_Server_CloseClientEx(xhCHSsl, lpszClientAddr);
227272
}
273+
else if (STORAGE_NETTYPE_HTTPWEBDAV == nClientType)
274+
{
275+
m_StrClient = _X("WEBDAV客户端");
276+
if (STORAGE_LEAVETYPE_HEARTBEAT == nLeaveType)
277+
{
278+
m_StrLeaveMsg = _X("心跳超时");
279+
NetCore_TCPXCore_CloseForClientEx(xhNetWebdav, lpszClientAddr);
280+
}
281+
else if (STORAGE_LEAVETYPE_BYSELF == nLeaveType)
282+
{
283+
m_StrLeaveMsg = _X("被动断开");
284+
SocketOpt_HeartBeat_DeleteAddrEx(xhHBWebdav, lpszClientAddr);
285+
}
286+
else
287+
{
288+
m_StrLeaveMsg = _X("主动关闭");
289+
290+
NetCore_TCPXCore_CloseForClientEx(xhNetWebdav, lpszClientAddr);
291+
SocketOpt_HeartBeat_DeleteAddrEx(xhHBWebdav, lpszClientAddr);
292+
}
293+
HttpProtocol_Server_CloseClinetEx(xhWebdavHttp, lpszClientAddr);
294+
OPenSsl_Server_CloseClientEx(xhWDSsl, lpszClientAddr);
295+
}
228296
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("%s:%s,与服务器断开,原因:%s"), m_StrClient.c_str(), lpszClientAddr, m_StrLeaveMsg.c_str());
229297
return true;
230298
}
@@ -293,6 +361,26 @@ bool XEngine_Net_SendMsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsg
293361
SocketOpt_HeartBeat_ActiveAddrEx(xhHBCenter, lpszClientAddr);
294362
}
295363
}
364+
else if (STORAGE_NETTYPE_HTTPWEBDAV == nType)
365+
{
366+
if (st_ServiceCfg.st_XCert.bWDEnable)
367+
{
368+
int nSLen = 0;
369+
XCHAR* ptszMsgBuffer = NULL;
370+
371+
OPenSsl_Server_SendMemoryEx(xhWDSsl, lpszClientAddr, lpszMsgBuffer, nMsgLen, &ptszMsgBuffer, &nSLen);
372+
bRet = NetCore_TCPXCore_SendEx(xhNetWebdav, lpszClientAddr, ptszMsgBuffer, nSLen);
373+
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
374+
}
375+
else
376+
{
377+
bRet = NetCore_TCPXCore_SendEx(xhNetWebdav, lpszClientAddr, lpszMsgBuffer, nMsgLen);
378+
}
379+
if (bRet && st_ServiceCfg.st_XTime.bHBTime)
380+
{
381+
SocketOpt_HeartBeat_ActiveAddrEx(xhHBWebdav, lpszClientAddr);
382+
}
383+
}
296384
if (!bRet)
297385
{
298386
XLONG dwRet = NetCore_GetLastError();

XEngine_Source/XEngine_StorageApp/StorageApp_Network.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ void CALLBACK XEngine_Callback_UPLoaderLeave(LPCXSTR lpszClientAddr, XSOCKET hSo
99
bool CALLBACK XEngine_Callback_CenterLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam);
1010
void CALLBACK XEngine_Callback_CenterRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam);
1111
void CALLBACK XEngine_Callback_CenterLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam);
12+
bool CALLBACK XEngine_Callback_WebdavLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam);
13+
void CALLBACK XEngine_Callback_WebdavRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam);
14+
void CALLBACK XEngine_Callback_WebdavLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam);
1215

1316
void CALLBACK XEngine_Callback_HBDownload(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam);
1417
void CALLBACK XEngine_Callback_HBUPLoader(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam);
1518
void CALLBACK XEngine_Callback_HBCenter(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam);
19+
void CALLBACK XEngine_Callback_HBWebdav(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam);
1620

1721
bool XEngine_Net_CloseClient(LPCXSTR lpszClientAddr, int nLeaveType, int nClientType = STORAGE_NETTYPE_HTTPDOWNLOAD);
1822
bool XEngine_Net_SendMsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nType = STORAGE_NETTYPE_HTTPDOWNLOAD);

0 commit comments

Comments
 (0)