diff options
author | Seungjae Yoo <seungjaeyoo@google.com> | 2023-04-26 05:37:30 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-04-26 05:37:30 +0000 |
commit | 060e725a2d9f8c0a17d2878bfedf7df960d83d02 (patch) | |
tree | d0d734407895193dd20b8be0716ba85cc6a98a32 | |
parent | efbde0298eb493cd74437f302dacc89df8a7a188 (diff) | |
parent | 8c3a92a075dbd25bd7b9dbe2beb9386b422d6d76 (diff) | |
download | wmediumd-060e725a2d9f8c0a17d2878bfedf7df960d83d02.tar.gz |
Support LoadConfig and ReloadConfig into wmediumdservice am: 161328389a am: cd1e94b88c am: a4ada4f4d6 am: 8c3a92a075
Original change: https://android-review.googlesource.com/c/platform/external/wmediumd/+/2560910
Change-Id: Ic29b98af30e715cb238a953ab108c7014da46bea
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | wmediumd/api.h | 2 | ||||
-rw-r--r-- | wmediumd/grpc.h | 2 | ||||
-rw-r--r-- | wmediumd/wmediumd.c | 24 | ||||
-rw-r--r-- | wmediumd_server/wmediumd.proto | 6 | ||||
-rw-r--r-- | wmediumd_server/wmediumd_server.cc | 33 |
5 files changed, 62 insertions, 5 deletions
diff --git a/wmediumd/api.h b/wmediumd/api.h index c887755..05b363b 100644 --- a/wmediumd/api.h +++ b/wmediumd/api.h @@ -134,7 +134,7 @@ struct wmediumd_set_snr { }; #pragma pack(pop) -struct wmediumd_reload_config { +struct wmediumd_load_config { /* path of wmediumd configuration file */ char config_path[0]; }; diff --git a/wmediumd/grpc.h b/wmediumd/grpc.h index bd8c81a..0393495 100644 --- a/wmediumd/grpc.h +++ b/wmediumd/grpc.h @@ -25,6 +25,8 @@ #define MSG_TYPE_RESPONSE_SIZE (sizeof(struct wmediumd_grpc_response_message) - sizeof(long)) enum wmediumd_grpc_request_data_type { + REQUEST_LOAD_CONFIG, + REQUEST_RELOAD_CONFIG, REQUEST_SET_CIVICLOC, REQUEST_SET_LCI, REQUEST_SET_POSITION, diff --git a/wmediumd/wmediumd.c b/wmediumd/wmediumd.c index d19506e..a3f6de1 100644 --- a/wmediumd/wmediumd.c +++ b/wmediumd/wmediumd.c @@ -1362,8 +1362,8 @@ static int process_set_snr_message(struct wmediumd *ctx, struct wmediumd_set_snr return 0; } -static int process_reload_config_message(struct wmediumd *ctx, - struct wmediumd_reload_config *reload_config) { +static int process_load_config_message(struct wmediumd *ctx, + struct wmediumd_load_config *reload_config) { char *config_path; int result = 0; @@ -1544,6 +1544,22 @@ static void wmediumd_grpc_service_handler(struct usfstl_loop_entry *entry) { } else { // TODO(273384914): Support more request types. switch (request_message.data_type) { + case REQUEST_LOAD_CONFIG: + if (process_load_config_message(ctx, (struct wmediumd_load_config *)(request_message.data_payload)) < 0) { + w_logf(ctx, LOG_ERR, "%s: failed to execute load_config\n", __func__); + wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_INVALID); + break; + } + wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_ACK); + break; + case REQUEST_RELOAD_CONFIG: + if (process_reload_current_config_message(ctx) < 0) { + w_logf(ctx, LOG_ERR, "%s: failed to execute reload_config\n", __func__); + wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_INVALID); + break; + } + wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_ACK); + break; case REQUEST_SET_CIVICLOC: if (process_set_civicloc_message(ctx, (struct wmediumd_set_civicloc *)(request_message.data_payload), request_message.data_size) < 0) { w_logf(ctx, LOG_ERR, "%s: failed to execute set_civicloc\n", __func__); @@ -1692,8 +1708,8 @@ static void wmediumd_api_handler(struct usfstl_loop_entry *entry) } break; case WMEDIUMD_MSG_RELOAD_CONFIG: - if (process_reload_config_message(ctx, - (struct wmediumd_reload_config *)data) < 0) { + if (process_load_config_message(ctx, + (struct wmediumd_load_config *)data) < 0) { response = WMEDIUMD_MSG_INVALID; } break; diff --git a/wmediumd_server/wmediumd.proto b/wmediumd_server/wmediumd.proto index 0c21941..a4c1a1c 100644 --- a/wmediumd_server/wmediumd.proto +++ b/wmediumd_server/wmediumd.proto @@ -19,6 +19,8 @@ package wmediumdserver; import "google/protobuf/empty.proto"; service WmediumdService { + rpc LoadConfig(LoadConfigRequest) returns (google.protobuf.Empty) {} + rpc ReloadConfig(google.protobuf.Empty) returns (google.protobuf.Empty) {} rpc SetCivicloc(SetCiviclocRequest) returns (google.protobuf.Empty) {} rpc SetLci(SetLciRequest) returns (google.protobuf.Empty) {} rpc SetPosition(SetPositionRequest) returns (google.protobuf.Empty) {} @@ -27,6 +29,10 @@ service WmediumdService { rpc StopPcap(google.protobuf.Empty) returns (google.protobuf.Empty) {} } +message LoadConfigRequest { + string path = 1; +} + message SetCiviclocRequest { string mac_address = 1; string civicloc = 2; diff --git a/wmediumd_server/wmediumd_server.cc b/wmediumd_server/wmediumd_server.cc index 6f38e1f..2a2e62c 100644 --- a/wmediumd_server/wmediumd_server.cc +++ b/wmediumd_server/wmediumd_server.cc @@ -41,6 +41,7 @@ using grpc::ServerBuilder; using grpc::ServerContext; using grpc::Status; using grpc::StatusCode; +using wmediumdserver::LoadConfigRequest; using wmediumdserver::SetCiviclocRequest; using wmediumdserver::SetLciRequest; using wmediumdserver::SetPositionRequest; @@ -99,6 +100,38 @@ class WmediumdServiceImpl final : public WmediumdService::Service { public: WmediumdServiceImpl(int event_fd, int msq_id) : event_fd_(event_fd), msq_id_(msq_id) {} + + Status LoadConfig(ServerContext* context, const LoadConfigRequest* request, + Empty* reply) override { + // Construct request payload + ssize_t size = + sizeof(struct wmediumd_load_config) + (request->path().length() + 1); + struct wmediumd_load_config* request_data_payload = + (struct wmediumd_load_config*)malloc(size); + strcpy(request_data_payload->config_path, request->path().c_str()); + + struct wmediumd_grpc_response_message response_message; + SendAndReceiveGrpcMessage(REQUEST_LOAD_CONFIG, size, request_data_payload, + &response_message); + free(request_data_payload); + if (response_message.data_type != RESPONSE_ACK) { + return Status(StatusCode::FAILED_PRECONDITION, + "Failed to execute LoadConfig"); + } + return Status::OK; + } + + Status ReloadConfig(ServerContext* context, const Empty* request, + Empty* reply) override { + struct wmediumd_grpc_response_message response_message; + SendAndReceiveGrpcMessage(REQUEST_RELOAD_CONFIG, &response_message); + if (response_message.data_type != RESPONSE_ACK) { + return Status(StatusCode::FAILED_PRECONDITION, + "Failed to execute ReloadConfig"); + } + return Status::OK; + } + Status SetCivicloc(ServerContext* context, const SetCiviclocRequest* request, Empty* reply) override { // Validate parameters |