diff --git a/server/wsproxy/mastermgr.cc b/server/wsproxy/mastermgr.cc index 1fa12f8..ffb7ed2 100644 --- a/server/wsproxy/mastermgr.cc +++ b/server/wsproxy/mastermgr.cc @@ -7,6 +7,7 @@ #include #include #include +#include #include "mastermgr.h" #include "master.h" @@ -242,14 +243,32 @@ std::shared_ptr MasterMgr::GetRequestByContextId(long long contex void MasterMgr::AddHttpTunnelRequest(int socket_handle, std::shared_ptr request) { - ++curr_context_id_; - auto req = std::make_shared(); - req->socket_handle = socket_handle; - req->context_id = curr_context_id_; - req->request = request; + if (!request->GetParams()->IsObject() || + request->GetParams()->Get("team_uuid", "").GetString() == "") { + return; + } + std::string team_uuid = request->GetParams()->Get("team_uuid", "").GetString(); + unsigned int code = a8::openssl::Crc32((unsigned char*)team_uuid.data(), team_uuid.size()); + std::shared_ptr svr = GetConnById(code % mastersvr_hash_.size() + 1); + if (svr) { + ++curr_context_id_; - pending_http_tunnel_socket_hash_[socket_handle] = req; - pending_http_tunnel_context_hash_[curr_context_id_] = req; + ss::SS_WSP_HttpTunnelRequest msg; + msg.set_context_id(curr_context_id_); + msg.set_url(request->GetUrl()); + std::string query_str; + request->GetParams()->ToUrlEncodeStr(query_str); + msg.set_query_str(query_str); + svr->SendMsg(msg); + + auto req = std::make_shared(); + req->socket_handle = socket_handle; + req->context_id = curr_context_id_; + req->request = request; + + pending_http_tunnel_socket_hash_[socket_handle] = req; + pending_http_tunnel_context_hash_[curr_context_id_] = req; + } } void MasterMgr::RemoveHttpTunnelRequest(int socket_handle)