From 639f973c2c7c29509ae55e5e3ab246cf03973794 Mon Sep 17 00:00:00 2001 From: hurricane618 Date: Tue, 14 Nov 2023 17:56:48 +0800 Subject: [PATCH] make sub and unsub more safe using uuid replace sub_name Signed-off-by: hurricane618 --- observer_agent/grpc_comm/Makefile | 2 +- observer_agent/grpc_comm/client.cpp | 17 ++++++++---- observer_agent/grpc_comm/client_pub_demo.cpp | 18 +++++++++---- observer_agent/grpc_comm/client_sub_demo.cpp | 28 +++++++++++++------- observer_agent/grpc_comm/grpc_api.h | 6 +++-- 5 files changed, 48 insertions(+), 23 deletions(-) diff --git a/observer_agent/grpc_comm/Makefile b/observer_agent/grpc_comm/Makefile index 6b882bc..be426f9 100644 --- a/observer_agent/grpc_comm/Makefile +++ b/observer_agent/grpc_comm/Makefile @@ -28,7 +28,7 @@ else LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++`\ -pthread\ -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed\ - -ldl + -ldl -luuid endif PROTOC = protoc GRPC_CPP_PLUGIN = grpc_cpp_plugin diff --git a/observer_agent/grpc_comm/client.cpp b/observer_agent/grpc_comm/client.cpp index 4ff5c29..2d7abc0 100644 --- a/observer_agent/grpc_comm/client.cpp +++ b/observer_agent/grpc_comm/client.cpp @@ -14,6 +14,7 @@ * Description: secDetector grpc client */ #include +#include #include "comm_api.grpc.pb.h" #include "grpc_api.h" @@ -29,12 +30,18 @@ using data_comm::PublishRequest; #define BUF_NUM 1024 PubSubClient::PubSubClient(std::shared_ptr channel) - : stub_(SubManager::NewStub(channel)) {} + : stub_(SubManager::NewStub(channel)) { + uuid_t uuid; + char uuid_temp[37]; + uuid_generate(uuid); + uuid_unparse(uuid, uuid_temp); + uuid_str = std::string(uuid_temp); + } -std::unique_ptr> PubSubClient::Subscribe(const int topic, const std::string& name) { +std::unique_ptr> PubSubClient::Subscribe(const int topic) { SubscribeRequest request; request.set_topic(topic); - request.set_sub_name(name); + request.set_sub_name(uuid_str); Message msg; SubFlag = true; @@ -58,10 +65,10 @@ void PubSubClient::Publish(const int topic, const std::string& content) { } } -void PubSubClient::UnSubscribe(const int topic, const std::string& name) { +void PubSubClient::UnSubscribe(const int topic) { UnSubscribeRequest request; request.set_topic(topic); - request.set_sub_name(name); + request.set_sub_name(uuid_str); ClientContext unsub_context; Message msg; diff --git a/observer_agent/grpc_comm/client_pub_demo.cpp b/observer_agent/grpc_comm/client_pub_demo.cpp index 273dce3..c3f8fd3 100644 --- a/observer_agent/grpc_comm/client_pub_demo.cpp +++ b/observer_agent/grpc_comm/client_pub_demo.cpp @@ -14,6 +14,7 @@ * Description: secDetector grpc client publish demo */ #include +#include #include "comm_api.grpc.pb.h" using grpc::Channel; @@ -30,12 +31,18 @@ using data_comm::PublishRequest; class PubSubClient { public: PubSubClient(std::shared_ptr channel) - : stub_(SubManager::NewStub(channel)) {} + : stub_(SubManager::NewStub(channel)) { + uuid_t uuid; + char uuid_temp[37]; + uuid_generate(uuid); + uuid_unparse(uuid, uuid_temp); + uuid_str = std::string(uuid_temp); + } - std::unique_ptr> Subscribe(const int topic, const std::string& name) { + std::unique_ptr> Subscribe(const int topic) { SubscribeRequest request; request.set_topic(topic); - request.set_sub_name(name); + request.set_sub_name(uuid_str); Message msg; SubFlag = true; @@ -59,10 +66,10 @@ class PubSubClient { } } - void UnSubscribe(const int topic, const std::string& name) { + void UnSubscribe(const int topic) { UnSubscribeRequest request; request.set_topic(topic); - request.set_sub_name(name); + request.set_sub_name(uuid_str); ClientContext unsub_context; Message msg; @@ -91,6 +98,7 @@ class PubSubClient { std::unique_ptr stub_; bool SubFlag; ClientContext context; + std::string uuid_str; }; int main(int argc, char** argv) { diff --git a/observer_agent/grpc_comm/client_sub_demo.cpp b/observer_agent/grpc_comm/client_sub_demo.cpp index a54eec2..59a329c 100644 --- a/observer_agent/grpc_comm/client_sub_demo.cpp +++ b/observer_agent/grpc_comm/client_sub_demo.cpp @@ -14,6 +14,7 @@ * Description: secDetector grpc client subscribe demo */ #include +#include #include "comm_api.grpc.pb.h" using grpc::Channel; @@ -30,12 +31,18 @@ using data_comm::PublishRequest; class PubSubClient { public: PubSubClient(std::shared_ptr channel) - : stub_(SubManager::NewStub(channel)) {} - - std::unique_ptr> Subscribe(const int topic, const std::string& name) { + : stub_(SubManager::NewStub(channel)) { + uuid_t uuid; + char uuid_temp[37]; + uuid_generate(uuid); + uuid_unparse(uuid, uuid_temp); + uuid_str = std::string(uuid_temp); + } + + std::unique_ptr> Subscribe(const int topic) { SubscribeRequest request; request.set_topic(topic); - request.set_sub_name(name); + request.set_sub_name(uuid_str); Message msg; SubFlag = true; @@ -59,10 +66,10 @@ class PubSubClient { } } - void UnSubscribe(const int topic, const std::string& name) { + void UnSubscribe(const int topic) { UnSubscribeRequest request; request.set_topic(topic); - request.set_sub_name(name); + request.set_sub_name(uuid_str); ClientContext unsub_context; Message msg; @@ -91,6 +98,7 @@ class PubSubClient { std::unique_ptr stub_; bool SubFlag; ClientContext context; + std::string uuid_str; }; int main(int argc, char** argv) { @@ -98,18 +106,18 @@ int main(int argc, char** argv) { PubSubClient client(grpc::CreateChannel( server_address, grpc::InsecureChannelCredentials())); - if (argc != 3) { - std::cout << "[Usage] ./client_sub_demo topic_num suber_name" << std::endl; + if (argc != 2) { + std::cout << "[Usage] ./client_sub_demo topic_num" << std::endl; } - std::unique_ptr> cli_reader = client.Subscribe(std::stoi(argv[1]), argv[2]); + std::unique_ptr> cli_reader = client.Subscribe(std::stoi(argv[1])); std::string some_data = client.ReadFrom(cli_reader); std::cout << "whz: " << some_data << std::endl; while (some_data != "" && some_data != "end") { some_data = client.ReadFrom(cli_reader); std::cout << "loop whz: " << some_data << std::endl; } - client.UnSubscribe(std::stoi(argv[1]), argv[2]); + client.UnSubscribe(std::stoi(argv[1])); return 0; } diff --git a/observer_agent/grpc_comm/grpc_api.h b/observer_agent/grpc_comm/grpc_api.h index 624da97..4bfae78 100644 --- a/observer_agent/grpc_comm/grpc_api.h +++ b/observer_agent/grpc_comm/grpc_api.h @@ -2,6 +2,7 @@ #define SECDETECTOR_OBSERVER_AGENT_GRPC_API_H #include +#include #include "comm_api.grpc.pb.h" using grpc::Server; @@ -34,15 +35,16 @@ void RunServer(); class PubSubClient { public: PubSubClient(std::shared_ptr channel); - std::unique_ptr> Subscribe(const int topic, const std::string& name); + std::unique_ptr> Subscribe(const int topic); void Publish(const int topic, const std::string& content); - void UnSubscribe(const int topic, const std::string& name); + void UnSubscribe(const int topic); std::string ReadFrom(std::unique_ptr> &reader); private: std::unique_ptr stub_; bool SubFlag; ClientContext context; + std::string uuid_str; }; #endif -- Gitee