blob: 848eb2910b6d19c0ef73482104fe5c9c130f2554 [file] [log] [blame]
//
// 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 <cstdint>
#include <functional>
#include <optional>
#include <string>
#include <tuple>
#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<PayloadHeader, std::string>;
// 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<ConfUiMessage> 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