From 8a65cacad39e1847c2910c0777acd5f43eb36b1c Mon Sep 17 00:00:00 2001 From: zgzxx Date: Tue, 17 Oct 2023 17:11:46 +0800 Subject: [PATCH] add secDetector sdk --- lib/CMakeLists.txt | 12 ++++ lib/secDetector_sdk.cpp | 121 ++++++++++++++++++++++++++++++++++++++++ lib/secDetector_sdk.h | 55 ++++++++++++++++++ 3 files changed, 188 insertions(+) create mode 100644 lib/CMakeLists.txt create mode 100644 lib/secDetector_sdk.cpp create mode 100644 lib/secDetector_sdk.h diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt new file mode 100644 index 0000000..3c1f4cc --- /dev/null +++ b/lib/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.14.1) + +project(secDetector_sdk) + +set(CMAKE_CXX_FALAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++ -g") +set(SDK_LINK_FLAGS "--lgrpc++ -lgrpc -lprotobuf -lpthread -wl,--no-as-needed -lgrpc++_reflection -wl,--as-needed -ldl") +set(SDK_SRC secDetector_sdk.cpp ../observer_agent/grpc_comm/comm_api.grpc.pb.o ../observer_agent/grpc_comm/comm_api.pb.o) + +add_library(secDetectorsdk SHARED ${SDK_SRC}) + +set_target_properties(secDetectorsdk PROPERTIES LINK_FALSGS "${SDK_LINK_FLAGS}") +target_include_directories(secDetectorsdk PROVATE ./ ../observer_agent/grpc_comm/) diff --git a/lib/secDetector_sdk.cpp b/lib/secDetector_sdk.cpp new file mode 100644 index 0000000..d15d6a6 --- /dev/null +++ b/lib/secDetector_sdk.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Huawei Technologies Co., Ltd. All rights reserved. + * secDetector is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + * + * Author: zhangguanghzhi + * Create: 2023-10-8 + * Description: secDetector sdk file + */ + +#include +#include +#include "../observer_agent/grpc_comm/grpc_api.h" + +using namespace std; +static string server_address("unix:///var/run/secDetector.sock"); +static PubSubClient g_client(grpc::CreateChannel(server_address, grpc::InsecureChannelCredentials)); + +using Readmap = map>>; +static Readmap g_reader_map; + +PubSubClient::PubSubClient(shared_ptr channel) + : stub_(SubManager::NewStub(channel)) {} + +unique_ptr> PubSubClient::Subscribe(const int topic) +{ + SubscribeRequest request; + request.set_topic(topic); + + return stub_->Subscribe(&context, request); +} + +void PubSubClient::Publish(const int topic, const string &context) +{ + PublishRequest request; + request.set_topic(topic); + request.set_data(context); + + ClientContext pub_context; + Message msg; + + grpc::Status status = stub_->Publish(&pub_context, request, &msg); + + if (!status.ok()) { + cerr << "Publish Error: " << status.error.code() << ": " << status.error_message() << endl; + } +} + +void PubSubClient::UnSubscribe(const int topic) +{ + UnSubscribeRequest request; + request.set_topic(topic); + + Message msg; + grpc::Status status = stub_->UnSubscibe(&context, request, &msg); + + SubFlag = false; + + if (!status.ok()) { + cerr << "UnSubscribe Error: " << status.error.code() << ": " << status.error_message() << endl; + } + + cout << "UnSubsccribe Received: " << msg.text() << endl; +} + +string PubSubClient::ReadFrom(unique_ptr> &reader) +{ + Message msg; + reader->Read(&msg); + cout << "Received: " << msg.text() << endl; + return msg.text(); +} + + + +#ifdef __cplusplus +extern "C" { +#endif + +void *secSub(const int topic) +{ + unique_ptr> reader = g_clinet.Subscribe(topic); + void * ret_reader = static(reader.get()); + + g_reader_map.insert(Readmap::value_type(ret_reader, move(reader))); + return ret_reader; +} + +void secUnsub(const int topic, void *reader) +{ + g_client.Publih(topic, "end"); + g_client.UnSubscribe(topic); + + Readmao::iterator iter = g_reader_map.find(reader); + if (iter != g_reader_map.end()) { + g_reader_map.erase(iter); + } +} + +const char *secReadFrom(void *reader) +{ + string msg; + + Readmao::iterator iter = g_reader_map.find(reader); + if (iter != g_reader_map.end()) { + msg = g_client.ReadFrom(iter->second); + } + + return msg.c_str(); +} + +#ifdef __cplusplus +} +#endif + diff --git a/lib/secDetector_sdk.h b/lib/secDetector_sdk.h new file mode 100644 index 0000000..cf67a89 --- /dev/null +++ b/lib/secDetector_sdk.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Huawei Technologies Co., Ltd. All rights reserved. + * secDetector is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + * + * Author: zhangguangzhi + * Create: 2023-10-8 + * Description: secDetector sdk file + */ + +#ifndef SECDETECTOR_SDK_H +#define SECDETECTOR_SDK_H +/* file */ +#define CREATFILE 0x00000001 +#define DELFILE 0x00000002 +#define SETFILEATTR 0x00000004 +#define WRITEFILE 0x00000008 +#define READFILE 0x00000010 +/* process */ +#define CREATPROCESS 0x00000020 +#define DESTROYPROCESS 0x00000040 +#define GETPROCESSATTR 0x00000080 +#define SETPROCESSATTR 0x00000100 +/* program behavior */ +#define CREATEPIPE 0x00000200 +#define EXCMD 0x00000400 +#define CALLAPI 0x00000800 +/* network */ +#define ACCESSPORT 0x00001000 +#define CONNECTNET 0x00002000 +/* memory tamper */ +#define PROCESSCODETAMPER 0x00004000 +#define KERNELKEYDATATAMPER 0x00008000 +/* resource consumption */ +#define CPURESOURCECONSEME 0x00010000 +#define MEMRESOURCECONSEME 0x00020000 +#define STORAGERESOURCECONSEME 0x00040000 +/* account management */ +#define LOGINSUCCESS 0x00080000 +#define LOGINFAILED 0x00100000 +#define NEWACCOUNT 0x00200000 +/* device management */ +#define OPERATEDEV 0x00400000 + +void *secSub(const int topic); +void secUnsub(const int topic, void *reader); +const char *secReadFrom(void *reader) + +#endif -- Gitee