|
@@ -31,8 +31,6 @@ If you have any questions, please contact us: 1585346868@qq.com Or visit our web
|
|
|
#include "net/util.h"
|
|
#include "net/util.h"
|
|
|
#include "net/http_cache.h"
|
|
#include "net/http_cache.h"
|
|
|
#include "util/codec.h"
|
|
#include "util/codec.h"
|
|
|
-
|
|
|
|
|
-#define BARE_HP 0
|
|
|
|
|
ylib::network::http::http_server_lst::http_server_lst(server* server)
|
|
ylib::network::http::http_server_lst::http_server_lst(server* server)
|
|
|
{
|
|
{
|
|
|
|
|
|
|
@@ -41,7 +39,7 @@ ylib::network::http::http_server_lst::http_server_lst(server* server)
|
|
|
ylib::network::http::http_server_lst::~http_server_lst()
|
|
ylib::network::http::http_server_lst::~http_server_lst()
|
|
|
{
|
|
{
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
EnHandleResult ylib::network::http::http_server_lst::OnPrepareListen(ITcpServer* pSender, SOCKET soListen)
|
|
EnHandleResult ylib::network::http::http_server_lst::OnPrepareListen(ITcpServer* pSender, SOCKET soListen)
|
|
|
{
|
|
{
|
|
@@ -51,9 +49,7 @@ EnHandleResult ylib::network::http::http_server_lst::OnPrepareListen(ITcpServer*
|
|
|
EnHandleResult ylib::network::http::http_server_lst::OnAccept(ITcpServer* pSender, CONNID dwConnID, UINT_PTR soClient)
|
|
EnHandleResult ylib::network::http::http_server_lst::OnAccept(ITcpServer* pSender, CONNID dwConnID, UINT_PTR soClient)
|
|
|
{
|
|
{
|
|
|
//std::cout << "[OnAccept] HttpServerConnect:" << pSender->GetConnectionCount() << std::endl;
|
|
//std::cout << "[OnAccept] HttpServerConnect:" << pSender->GetConnectionCount() << std::endl;
|
|
|
-#if BARE_HP == 0
|
|
|
|
|
pSender->SetConnectionExtra(dwConnID, (PVOID)new temp_recv);
|
|
pSender->SetConnectionExtra(dwConnID, (PVOID)new temp_recv);
|
|
|
-#endif
|
|
|
|
|
#if HTTP_SERVER_DEBUG_PRINT == 1
|
|
#if HTTP_SERVER_DEBUG_PRINT == 1
|
|
|
ylib::log->info("OnAccept ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
ylib::log->info("OnAccept ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
|
#endif
|
|
#endif
|
|
@@ -116,7 +112,6 @@ EnHandleResult ylib::network::http::http_server_lst::OnClose(ITcpServer* pSender
|
|
|
#if HTTP_SERVER_DEBUG_PRINT == 1
|
|
#if HTTP_SERVER_DEBUG_PRINT == 1
|
|
|
ylib::log->info("OnClose ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
ylib::log->info("OnClose ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
|
#endif
|
|
#endif
|
|
|
-#if BARE_HP == 0
|
|
|
|
|
PVOID extra = 0;
|
|
PVOID extra = 0;
|
|
|
if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
|
{
|
|
{
|
|
@@ -129,11 +124,26 @@ EnHandleResult ylib::network::http::http_server_lst::OnClose(ITcpServer* pSender
|
|
|
m_server->agent()->disconnect(tr->agent_ssl,tr->agent_connid);
|
|
m_server->agent()->disconnect(tr->agent_ssl,tr->agent_connid);
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
|
|
+ if(tr->is_ws){
|
|
|
|
|
+ auto website = m_server->center()->website(tr->host);
|
|
|
|
|
+ if (website != nullptr)
|
|
|
|
|
+ {
|
|
|
|
|
+ std::shared_ptr<network::http::websocket_message> ws_msg = std::make_shared<network::http::websocket_message>();
|
|
|
|
|
+ ws_msg->type = network::http::HTTP_SERVER_WEBSOCKET_TYPE_CLOSE;
|
|
|
|
|
+ ws_msg->filepath = tr->ws_filepath;
|
|
|
|
|
+ website->router()->push_close((uint64)dwConnID,ws_msg);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
delete tr;
|
|
delete tr;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
return HR_OK;
|
|
return HR_OK;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -142,7 +152,7 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnMessageBegin(IHttpServ
|
|
|
#if HTTP_SERVER_DEBUG_PRINT == 1
|
|
#if HTTP_SERVER_DEBUG_PRINT == 1
|
|
|
ylib::log->info("OnMessageBegin ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
ylib::log->info("OnMessageBegin ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
|
#endif
|
|
#endif
|
|
|
-#if BARE_HP == 0
|
|
|
|
|
|
|
+
|
|
|
PVOID extra = 0;
|
|
PVOID extra = 0;
|
|
|
if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
|
{
|
|
{
|
|
@@ -151,7 +161,7 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnMessageBegin(IHttpServ
|
|
|
((temp_recv*)extra)->data.clear();
|
|
((temp_recv*)extra)->data.clear();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
|
+
|
|
|
return HPR_OK;
|
|
return HPR_OK;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -161,16 +171,15 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnRequestLine(IHttpServe
|
|
|
// ylib::log->info("OnRequestLine ("+nstring::from((uint64)dwConnID)+")","http_server");
|
|
// ylib::log->info("OnRequestLine ("+nstring::from((uint64)dwConnID)+")","http_server");
|
|
|
//#endif
|
|
//#endif
|
|
|
|
|
|
|
|
-#if BARE_HP == 0
|
|
|
|
|
PVOID extra = 0;
|
|
PVOID extra = 0;
|
|
|
if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
|
{
|
|
{
|
|
|
if (extra != 0)
|
|
if (extra != 0)
|
|
|
{
|
|
{
|
|
|
((temp_recv*)extra)->url = lpszUrl;
|
|
((temp_recv*)extra)->url = lpszUrl;
|
|
|
- }
|
|
|
|
|
|
|
+ ((temp_recv*)extra)->ws_filepath = std::string(lpszUrl);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
-#endif
|
|
|
|
|
return HPR_OK;
|
|
return HPR_OK;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -188,7 +197,6 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnHeader(IHttpServer* pS
|
|
|
#if HTTP_SERVER_DEBUG_PRINT == 1
|
|
#if HTTP_SERVER_DEBUG_PRINT == 1
|
|
|
ylib::log->info("OnHeader ("+std::to_string((uint64)dwConnID)+")"+lpszName+":"+lpszValue,"http_server");
|
|
ylib::log->info("OnHeader ("+std::to_string((uint64)dwConnID)+")"+lpszName+":"+lpszValue,"http_server");
|
|
|
#endif
|
|
#endif
|
|
|
-#if BARE_HP == 0
|
|
|
|
|
if(strcmp(lpszName,"Host") == 0){
|
|
if(strcmp(lpszName,"Host") == 0){
|
|
|
PVOID extra = 0;
|
|
PVOID extra = 0;
|
|
|
if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
@@ -200,7 +208,6 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnHeader(IHttpServer* pS
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
-#endif
|
|
|
|
|
return HPR_OK;
|
|
return HPR_OK;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -232,6 +239,53 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnUpgrade(IHttpServer* p
|
|
|
ylib::log->info("OnUpgrade ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
ylib::log->info("OnUpgrade ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
|
|
+ if (m_server->center()->config().websocket_enable)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (enUpgradeType == HUT_WEB_SOCKET)
|
|
|
|
|
+ {
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ PVOID extra = 0;
|
|
|
|
|
+ if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
|
|
|
+ {
|
|
|
|
|
+ if (extra != 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ ((temp_recv*)extra)->is_ws = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ LPCSTR lpszValue = nullptr;
|
|
|
|
|
+ if (pSender->GetHeader(dwConnID,"Sec-WebSocket-Key", &lpszValue) == false)
|
|
|
|
|
+ return HPR_ERROR;
|
|
|
|
|
+
|
|
|
|
|
+ // std::string value = std::string(lpszValue)+ "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
|
|
|
|
+
|
|
|
|
|
+ // std::string accept_value = codec::base64::en(codec::sha1(value));
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ // THeader headers[3];
|
|
|
|
|
+ // headers[0].name = "Connection";
|
|
|
|
|
+ // headers[0].value = "Upgrade";
|
|
|
|
|
+ // headers[1].name = "Upgrade";
|
|
|
|
|
+ // headers[1].value = "WebSocket";
|
|
|
|
|
+ // headers[2].name = "Sec-WebSocket-Accept";
|
|
|
|
|
+ // headers[2].value = accept_value.c_str();
|
|
|
|
|
+ // pSender->SendResponse(dwConnID, 101, "Switching Protocols", headers,3);
|
|
|
|
|
+
|
|
|
|
|
+ std::shared_ptr<network::http::websocket_message> ws_msg = std::make_shared<network::http::websocket_message>();
|
|
|
|
|
+ ws_msg->sec_websocket_key = std::string(lpszValue);
|
|
|
|
|
+ ws_msg->connid = (uint64)dwConnID;
|
|
|
|
|
+ ws_msg->type = network::http::HTTP_SERVER_WEBSOCKET_TYPE_UPGRADE;
|
|
|
|
|
+ if (_MessageComplete(pSender,dwConnID,network::http::HTTP_SERVER_MESSAGE_TYPE_WEBSOCKET,ws_msg))
|
|
|
|
|
+ return HPR_OK;
|
|
|
|
|
+ return HPR_ERROR;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ return HPR_ERROR;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return HPR_OK;
|
|
return HPR_OK;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -241,7 +295,6 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnBody(IHttpServer* pSen
|
|
|
ylib::log->info("OnBody ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
ylib::log->info("OnBody ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
-#if BARE_HP == 0
|
|
|
|
|
PVOID extra = 0;
|
|
PVOID extra = 0;
|
|
|
if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
|
{
|
|
{
|
|
@@ -257,20 +310,11 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnBody(IHttpServer* pSen
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-#endif
|
|
|
|
|
return HPR_OK;
|
|
return HPR_OK;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-EnHttpParseResult ylib::network::http::http_server_lst::OnMessageComplete(IHttpServer* pSender, CONNID dwConnID)
|
|
|
|
|
|
|
+bool ylib::network::http::http_server_lst::_MessageComplete(IHttpServer* pSender,CONNID dwConnID,network::http::message_type msg_type,std::shared_ptr<network::http::websocket_message> ws_msg)
|
|
|
{
|
|
{
|
|
|
-#if HTTP_SERVER_DEBUG_PRINT == 1
|
|
|
|
|
- ylib::log->info("OnMessageComplete ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
|
|
|
-#endif
|
|
|
|
|
-#if BARE_HP == 1
|
|
|
|
|
- pSender->SendResponse(dwConnID, 200, "OK", nullptr, 0, (const BYTE*)"ONLY_HP_OK", 3);
|
|
|
|
|
- return HPR_OK;
|
|
|
|
|
-#endif
|
|
|
|
|
- network::http::reqpack* rp = nullptr;
|
|
|
|
|
|
|
+ network::http::reqpack* rp = nullptr;
|
|
|
temp_recv* tr = nullptr;
|
|
temp_recv* tr = nullptr;
|
|
|
{
|
|
{
|
|
|
|
|
|
|
@@ -280,10 +324,10 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnMessageComplete(IHttpS
|
|
|
if (extra != 0)
|
|
if (extra != 0)
|
|
|
tr = (temp_recv*)extra;
|
|
tr = (temp_recv*)extra;
|
|
|
else
|
|
else
|
|
|
- return HPR_OK;
|
|
|
|
|
|
|
+ return true;
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
- return HPR_OK;
|
|
|
|
|
|
|
+ return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// QPS记录
|
|
// QPS记录
|
|
@@ -294,10 +338,16 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnMessageComplete(IHttpS
|
|
|
{
|
|
{
|
|
|
pSender->SendResponse(dwConnID, 404, "Not Found", nullptr, 0, (const BYTE*)"No fount site", 12);
|
|
pSender->SendResponse(dwConnID, 404, "Not Found", nullptr, 0, (const BYTE*)"No fount site", 12);
|
|
|
delete rp;
|
|
delete rp;
|
|
|
- return HPR_OK;
|
|
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
// 创建请求包
|
|
// 创建请求包
|
|
|
- rp = new network::http::reqpack(tr->url, tr->host, tr->data, (uint64)dwConnID, m_server, website);
|
|
|
|
|
|
|
+ std::string url;
|
|
|
|
|
+ if(msg_type == network::http::HTTP_SERVER_MESSAGE_TYPE_WEBSOCKET){
|
|
|
|
|
+ url = tr->ws_filepath;
|
|
|
|
|
+ }else{
|
|
|
|
|
+ url = tr->url;
|
|
|
|
|
+ }
|
|
|
|
|
+ rp = new network::http::reqpack(url, tr->host, tr->data, (uint64)dwConnID, m_server, website, msg_type, ws_msg);
|
|
|
|
|
|
|
|
// 开始前处理请求包
|
|
// 开始前处理请求包
|
|
|
{
|
|
{
|
|
@@ -310,13 +360,19 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnMessageComplete(IHttpS
|
|
|
rp->body() = end_data;
|
|
rp->body() = end_data;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
// 追加置路由
|
|
// 追加置路由
|
|
|
website->router()->push(rp);
|
|
website->router()->push(rp);
|
|
|
- return HPR_OK;
|
|
|
|
|
-
|
|
|
|
|
|
|
+ return true;
|
|
|
|
|
+}
|
|
|
|
|
+EnHttpParseResult ylib::network::http::http_server_lst::OnMessageComplete(IHttpServer* pSender, CONNID dwConnID)
|
|
|
|
|
+{
|
|
|
|
|
+#if HTTP_SERVER_DEBUG_PRINT == 1
|
|
|
|
|
+ ylib::log->info("OnMessageComplete ("+std::to_string((uint64)dwConnID)+")","http_server");
|
|
|
|
|
+#endif
|
|
|
|
|
+ if (_MessageComplete(pSender,dwConnID,network::http::HTTP_SERVER_MESSAGE_TYPE_NORMAL,nullptr))
|
|
|
|
|
+ return HPR_OK;
|
|
|
|
|
+ return HPR_ERROR;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
EnHttpParseResult ylib::network::http::http_server_lst::OnParseError(IHttpServer* pSender, CONNID dwConnID, int iErrorCode, LPCSTR lpszErrorDesc)
|
|
EnHttpParseResult ylib::network::http::http_server_lst::OnParseError(IHttpServer* pSender, CONNID dwConnID, int iErrorCode, LPCSTR lpszErrorDesc)
|
|
@@ -339,16 +395,74 @@ EnHttpParseResult ylib::network::http::http_server_lst::OnParseError(IHttpServer
|
|
|
|
|
|
|
|
EnHandleResult ylib::network::http::http_server_lst::OnWSMessageHeader(IHttpServer* pSender, CONNID dwConnID, BOOL bFinal, BYTE iReserved, BYTE iOperationCode, const BYTE lpszMask[4], ULONGLONG ullBodyLen)
|
|
EnHandleResult ylib::network::http::http_server_lst::OnWSMessageHeader(IHttpServer* pSender, CONNID dwConnID, BOOL bFinal, BYTE iReserved, BYTE iOperationCode, const BYTE lpszMask[4], ULONGLONG ullBodyLen)
|
|
|
{
|
|
{
|
|
|
- return HR_OK;
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if(iReserved != 0)
|
|
|
|
|
+ return HR_ERROR; // 服务器不支持扩展
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ std::shared_ptr<network::http::websocket_message> ws_msg = std::make_shared<network::http::websocket_message>();
|
|
|
|
|
+ ws_msg->type = network::http::HTTP_SERVER_WEBSOCKET_TYPE_MESSAGE_HEADER;
|
|
|
|
|
+ ws_msg->connid = (uint64)dwConnID;
|
|
|
|
|
+ ws_msg->header._final = bFinal;
|
|
|
|
|
+ ws_msg->header.opcode = iOperationCode;
|
|
|
|
|
+ ws_msg->header.mask[0] = lpszMask[0];
|
|
|
|
|
+ ws_msg->header.mask[1] = lpszMask[1];
|
|
|
|
|
+ ws_msg->header.mask[2] = lpszMask[2];
|
|
|
|
|
+ ws_msg->header.mask[3] = lpszMask[3];
|
|
|
|
|
+ ws_msg->header.length = ullBodyLen;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ PVOID extra = 0;
|
|
|
|
|
+ if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
|
|
|
+ {
|
|
|
|
|
+ if (extra != 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ ((temp_recv*)extra)->data.clear();
|
|
|
|
|
+ ((temp_recv*)extra)->ws_msg = *ws_msg.get();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ if (_MessageComplete(pSender,dwConnID,network::http::HTTP_SERVER_MESSAGE_TYPE_WEBSOCKET,ws_msg))
|
|
|
|
|
+ return HR_OK;
|
|
|
|
|
+ return HR_ERROR;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
EnHandleResult ylib::network::http::http_server_lst::OnWSMessageBody(IHttpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
|
|
EnHandleResult ylib::network::http::http_server_lst::OnWSMessageBody(IHttpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
|
|
|
{
|
|
{
|
|
|
|
|
+ PVOID extra = 0;
|
|
|
|
|
+ if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
|
|
|
+ {
|
|
|
|
|
+ if (extra != 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ ((temp_recv*)extra)->data.append((char*)pData, iLength);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
return HR_OK;
|
|
return HR_OK;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
EnHandleResult ylib::network::http::http_server_lst::OnWSMessageComplete(IHttpServer* pSender, CONNID dwConnID)
|
|
EnHandleResult ylib::network::http::http_server_lst::OnWSMessageComplete(IHttpServer* pSender, CONNID dwConnID)
|
|
|
{
|
|
{
|
|
|
- return HR_OK;
|
|
|
|
|
|
|
+
|
|
|
|
|
+ std::shared_ptr<network::http::websocket_message> ws_msg = std::make_shared<network::http::websocket_message>();
|
|
|
|
|
+
|
|
|
|
|
+ PVOID extra = 0;
|
|
|
|
|
+ if (pSender->GetConnectionExtra(dwConnID, &extra))
|
|
|
|
|
+ {
|
|
|
|
|
+ if (extra != 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 先带上 HEADER 缓存的 opcode 等信息;不要在这里 clear data,
|
|
|
|
|
+ // 否则 _MessageComplete 拷贝到 reqpack 的 body 会是空的
|
|
|
|
|
+ *ws_msg.get() = ((temp_recv*)extra)->ws_msg;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ws_msg->type = network::http::HTTP_SERVER_WEBSOCKET_TYPE_MESSAGE_BODY;
|
|
|
|
|
+ ws_msg->connid = (uint64)dwConnID;
|
|
|
|
|
+ if(_MessageComplete(pSender,dwConnID,network::http::HTTP_SERVER_MESSAGE_TYPE_WEBSOCKET,ws_msg))
|
|
|
|
|
+ {
|
|
|
|
|
+ return HR_OK;
|
|
|
|
|
+ }
|
|
|
|
|
+ return HR_ERROR;
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|