Browse Source

!2 add lable to websocket

chenliangyu 9 months ago
parent
commit
37878b7673

+ 64 - 3
Module/mod_chromium/CWebsocketServer.cpp

@@ -801,11 +801,66 @@ namespace Chromium {
 		return std::make_pair(dstTransId, dstPayLoad);
 	}
 
+	std::string url_decode(const std::string& str) {
+		std::string decoded_str;
+		for (size_t i = 0; i < str.length(); ++i) {
+			if (str[i] == '%') {
+				if (i + 2 < str.length()) {
+					std::string hex_str = str.substr(i + 1, 2);
+					try {
+						int hex_val = std::stoi(hex_str, nullptr, 16);
+						decoded_str += static_cast<char>(hex_val);
+						i += 2;
+					}
+					catch (const std::invalid_argument& e) {
+						// 处理无效的编码
+						decoded_str += '%';
+					}
+					catch (const std::out_of_range& e) {
+						decoded_str += '%';
+					}
+				}
+				else {
+					decoded_str += '%';
+				}
+			}
+			else if (str[i] == '+') {
+				decoded_str += ' ';
+			}
+			else {
+				decoded_str += str[i];
+			}
+		}
+		return decoded_str;
+	}
+
+	// 解析 query string 的函数
+	std::map<std::string, std::string> parse_query_string(const std::string& query_string) {
+		std::map<std::string, std::string> params;
+		std::stringstream ss(query_string);
+		std::string pair;
+
+		while (std::getline(ss, pair, '&')) {
+			size_t equal_pos = pair.find('=');
+			if (equal_pos != std::string::npos) {
+				std::string key = pair.substr(0, equal_pos);
+				std::string value = pair.substr(equal_pos + 1);
+				params[url_decode(key)] = url_decode(value); // 解码 key 和 value
+			}
+			else if (!pair.empty()) {
+				params[url_decode(pair)] = ""; // 处理只有 key 没有 value 的情况
+			}
+		}
+		return params;
+	}
 
 	void CWebsocketServer::open_handler(websocketpp::connection_hdl hdl) {
 		// hand shake here
 		server::connection_ptr con = m_wsserver.get_con_from_hdl(hdl);
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("new ws connection to ws server : %u, isSecure:%d, url:%s", hdl.lock().get(), con->get_uri()->get_secure(), con->get_uri()->str().c_str());
+		std::string query_str = con->get_uri()->get_query();
+		auto params = parse_query_string(query_str);
+		if (params.find("name") != params.end())
+			ConfigManager::getInstance().m_ws_nameArr[(long)hdl.lock().get()] = params["name"];
 		LogManager::getInstance().logWebSocketBuild((uint64_t)hdl.lock().get(), con->get_uri()->str(), "unsafe");
 		ConfigManager::getInstance().m_connection_hdls.insert(std::pair<unsigned int, websocketpp::connection_hdl>((long)hdl.lock().get(), hdl));
 	}
@@ -813,8 +868,11 @@ namespace Chromium {
 	void CWebsocketServer::open_handler_wss(websocketpp::connection_hdl hdl) {
 		// hand shake here
 		auto con = m_server_wss.get_con_from_hdl(hdl);
+		std::string query_str = con->get_uri()->get_query();
+		auto params = parse_query_string(query_str);
+		if (params.find("name") != params.end())
+			ConfigManager::getInstance().m_ws_nameArr[(long)hdl.lock().get()] = params["name"];
 		unsigned int dstHdl = (long)hdl.lock().get();//start from 0, be different from ws
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("new wss connection to ws server : %u, isSecure:%d, url:%s", dstHdl, con->get_uri()->get_secure(), con->get_uri()->str().c_str());
 		LogManager::getInstance().logWebSocketBuild((uint64_t)hdl.lock().get(), con->get_uri()->str(), "wss");
 		ConfigManager::getInstance().m_connection_wss_hdls.insert(std::pair<unsigned int, websocketpp::connection_hdl>((long)dstHdl, hdl));
 	}
@@ -823,7 +881,10 @@ namespace Chromium {
 		// hand shake here
 		auto con = m_ws_sm2_server.get_con_from_hdl(hdl);
 		unsigned int dstHdl = (long)hdl.lock().get();//start from 0, be different from ws
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("new ws by encrypt connection to ws server : %u, isSecure:%d, url:%s", dstHdl, con->get_uri()->get_secure(), con->get_uri()->str().c_str());
+		std::string query_str = con->get_uri()->get_query();
+		auto params = parse_query_string(query_str);
+		if (params.find("name") != params.end())
+			ConfigManager::getInstance().m_ws_nameArr[(long)hdl.lock().get()] = params["name"];
 		LogManager::getInstance().logWebSocketBuild((uint64_t)hdl.lock().get(), con->get_uri()->str(), "ws_sm2");
 		ConfigManager::getInstance().m_connection_ws_sm2_hdls.insert(std::pair<unsigned int, websocketpp::connection_hdl>(dstHdl, hdl));
 		ConfigManager::getInstance().m_ws_sm2_hdls_manager.insert(std::make_pair(dstHdl, new SM2_Encrypt_Manager()));

+ 31 - 7
Module/mod_chromium/baseEx.cpp

@@ -960,9 +960,10 @@ void LogManager::logWebSocketBuild(int64_t hdl, const std::string& url, const st
 	Json::Value detail;
 	detail["url"] = url;
 	detail["isSecurity"] = isSecurity;
-
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 	writeLog(log);
 }
@@ -1033,6 +1034,8 @@ void LogManager::logWebSocketBeginSession(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1043,6 +1046,8 @@ void LogManager::logWebSocketClose(int64_t hdl) {
 	log["hdl"] = hdl;
 	log["78173721_logType"] = "ws_close";
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 	writeLog(log);
 }
@@ -1076,6 +1081,8 @@ void LogManager::logWebSocketInfo(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1110,6 +1117,8 @@ void LogManager::logWebSocketRegister(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1146,6 +1155,8 @@ void LogManager::logWebSocketRequest(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1180,6 +1191,8 @@ void LogManager::logWebSocketSetVar(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1212,7 +1225,8 @@ void LogManager::logWebSocketGetVar(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1241,7 +1255,8 @@ void LogManager::logWebSocketBroadcast(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1272,7 +1287,8 @@ void LogManager::logVtmEndSession(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1311,7 +1327,8 @@ void LogManager::logVtmRequestAck(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1357,7 +1374,8 @@ void LogManager::logVtmEvent(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1394,7 +1412,8 @@ void LogManager::logVtmSessionAck(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1430,6 +1449,8 @@ void LogManager::logWsLogEvent(
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1466,6 +1487,8 @@ void LogManager::logWsLogWarn(
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_nameArr.find(hdl) != ConfigManager::getInstance().m_ws_nameArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_nameArr[hdl];
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
 	writeLog(log);
@@ -1560,6 +1583,7 @@ void LogManager::logEntityStageChange(
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 	log["timestamp"] = getCurrentTimestamp();
 
+
 	writeLog(log);
 }
 

+ 1 - 0
Module/mod_chromium/baseEx.h

@@ -224,6 +224,7 @@ public:
 //params for CWebsocketServer
 public:
 	std::map<unsigned int, websocketpp::connection_hdl> m_connection_hdls;
+	std::map<unsigned int, std::string> m_ws_nameArr;
 	std::map<unsigned int, websocketpp::connection_hdl> m_connection_ws_sm2_hdls;
 	std::map<unsigned int, websocketpp::connection_hdl> m_connection_wss_hdls;
 	std::map<unsigned int, std::shared_ptr<SM2_Encrypt_Manager>> m_ws_sm2_hdls_manager;

+ 1 - 1
Module/mod_chromium/mod_chromium.cpp

@@ -493,7 +493,7 @@ namespace Chromium {
 				}
 				
 			};
-			std::thread(repeat_dirtyLogs_Fun).detach();
+			//std::thread(repeat_dirtyLogs_Fun).detach();
 		}
 		LogManager::getInstance().logEntityStageChange("OnPreStart_Init", 0, "end");
 	}