// // Copyright (C) 2021 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #include #include #include #include #include "common/libs/confui/protocol.h" #include "common/libs/fs/shared_fd.h" namespace cuttlefish { namespace confui { namespace packet { /* * for communication between Confirmation UI guest and host. * * Payload is actually the header. When we send/recv, besides Payload, * the "payload_length_" bytes should be additionally sent/recv'ed. * * The payload is assumed to be a text (e.g. char[N]) * The WritePayload will create the string. When read, however, * the receiver should parse it * * The format we use for confirmation UI is: * session_id:type:contents * * e.g. GooglePay10354:start:my confirmaton message */ struct PayloadHeader { std::uint32_t payload_length_; }; // PayloadHeader + the message actually being sent using Payload = std::tuple; // msg will look like "334522:start:Hello I am Here!" // this function returns 334522, start, "Hello I am Here!" // if no session id is given, it is regarded as SESSION_ANY ConfUiMessage PayloadToConfUiMessage(const std::string& str_to_parse); std::optional RecvConfUiMsg(SharedFD fd); bool SendAck(SharedFD fd, const std::string& session_id, const bool is_success, const std::string& additional_info); bool SendResponse(SharedFD fd, const std::string& session_id, const std::string& additional_info); // for HAL bool SendCmd(SharedFD fd, const std::string& session_id, ConfUiCmd cmd, const std::string& additional_info); // this is for short messages constexpr const ssize_t kMaxPayloadLength = 1000; } // end of namespace packet } // end of namespace confui } // end of namespace cuttlefish