@@ -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+ // ////////////////////////////////////////////////////////////////////////
133174void 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// ////////////////////////////////////////////////////////////////////////
146191bool 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 ();
0 commit comments