Android-cuttlefish cvd tool
protocol_types.h
Go to the documentation of this file.
1//
2// Copyright (C) 2021 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#pragma once
17
18#include <cstdint>
19#include <string>
20#include <utility>
21#include <vector>
22
23#include <teeui/common_message_types.h> // /system/teeui/libteeui/.../include
24
27
30
31namespace cuttlefish {
32namespace confui {
33// When you update this, please update all the utility functions
34// in conf.cpp: e.g. ToString, etc
35enum class ConfUiCmd : std::uint32_t {
36 kUnknown = 100,
37 kStart = 111, // start rendering, send confirmation msg, & wait respond
38 kStop = 112, // start rendering, send confirmation msg, & wait respond
39 kCliAck = 113, // client acknowledged. "error:err_msg" or "success:command"
40 kCliRespond = 114, // with "confirm" or "cancel" or "abort"
41 kAbort = 115, // to abort the current session
42 kUserInputEvent = 200,
43 kUserTouchEvent = 201
44};
45
46// this is for short messages
48
49std::string ToString(const ConfUiCmd& cmd);
50std::string ToDebugString(const ConfUiCmd& cmd, const bool is_verbose);
51ConfUiCmd ToCmd(const std::string& cmd_str);
52ConfUiCmd ToCmd(std::uint32_t i);
53
54std::string ToString(const teeui::UIOption ui_opt);
55std::optional<teeui::UIOption> ToUiOption(const std::string&);
56
57struct HostError {
58 static constexpr char kSystemError[] = "system_error";
59 static constexpr char kUIError[] = "ui_error";
60 static constexpr char kMessageTooLongError[] = "msg_too_long_error";
61 static constexpr char kIncorrectUTF8[] = "msg_incorrect_utf8";
62};
63
65 using type = std::string;
66 constexpr static const auto kConfirm = "user_confirm";
67 constexpr static const auto kCancel = "user_cancel";
68 constexpr static const auto kTouchEvent = "user_touch";
69 // user may close x button on the virtual window or so
70 // or.. scroll the session up and throw to trash bin
71 constexpr static const auto kUserAbort = "user_abort";
72 constexpr static const auto kUnknown = "user_unknown";
73};
74
76 public:
77 ConfUiMessage(const std::string& session_id) : session_id_{session_id} {}
78 virtual ~ConfUiMessage() = default;
79 virtual std::string ToString() const = 0;
80 void SetSessionId(const std::string session_id) { session_id_ = session_id; }
81 std::string GetSessionId() const { return session_id_; }
82 virtual ConfUiCmd GetType() const = 0;
83 virtual bool SendOver(SharedFD fd) = 0;
84 bool IsUserInput() const;
85
86 protected:
87 std::string session_id_;
88 template <typename... Args>
89 static std::string CreateString(Args&&... args) {
90 return "[" + ArgsToStringWithDelim(",", std::forward<Args>(args)...) + "]";
91 }
92 template <typename... Args>
93 static bool Send_(SharedFD fd, const ConfUiCmd cmd,
94 const std::string& session_id, Args&&... args) {
95 return packet::WritePayload(fd, confui::ToString(cmd), session_id,
96 std::forward<Args>(args)...);
97 }
98};
99
100template <ConfUiCmd cmd>
102 public:
103 ConfUiGenericMessage(const std::string& session_id)
104 : ConfUiMessage{session_id} {}
105 virtual ~ConfUiGenericMessage() = default;
106 std::string ToString() const override {
108 }
109 ConfUiCmd GetType() const override { return cmd; }
110 bool SendOver(SharedFD fd) override {
111 return Send_(fd, GetType(), session_id_);
112 }
113};
114
116 public:
117 ConfUiAckMessage(const std::string& session_id, const bool is_success,
118 const std::string& status)
119 : ConfUiMessage{session_id},
120 is_success_(is_success),
122 virtual ~ConfUiAckMessage() = default;
123 std::string ToString() const override;
124 ConfUiCmd GetType() const override { return ConfUiCmd::kCliAck; }
125 bool SendOver(SharedFD fd) override;
126 bool IsSuccess() const { return is_success_; }
127 std::string GetStatusMessage() const { return status_message_; }
128
129 private:
131 std::string status_message_;
132};
133
134// the signed user response sent to the guest
136 public:
137 ConfUiCliResponseMessage(const std::string& session_id,
138 const UserResponse::type& response,
139 const std::vector<std::uint8_t>& sign = {},
140 const std::vector<std::uint8_t>& msg = {})
141 : ConfUiMessage(session_id),
142 response_(response),
143 sign_(sign),
144 message_{msg} {}
145 virtual ~ConfUiCliResponseMessage() = default;
146 std::string ToString() const override;
147 ConfUiCmd GetType() const override { return ConfUiCmd::kCliRespond; }
148 auto GetResponse() const { return response_; }
149 auto GetMessage() const { return message_; }
150 auto GetSign() const { return sign_; }
151 bool SendOver(SharedFD fd) override;
152
153 private:
155 std::vector<std::uint8_t> sign_; // signed format
156 // second argument to pass via resultCB of promptUserConfirmation
157 std::vector<std::uint8_t> message_;
158};
159
161 public:
162 ConfUiStartMessage(const std::string session_id,
163 const std::string& prompt_text = "",
164 const std::vector<std::uint8_t>& extra_data = {},
165 const std::string& locale = "C",
166 const std::vector<teeui::UIOption> ui_opts = {})
167 : ConfUiMessage(session_id),
168 prompt_text_(prompt_text),
169 extra_data_(extra_data),
170 locale_(locale),
171 ui_opts_(ui_opts) {}
172 virtual ~ConfUiStartMessage() = default;
173 std::string ToString() const override;
174 ConfUiCmd GetType() const override { return ConfUiCmd::kStart; }
175 std::string GetPromptText() const { return prompt_text_; }
176 std::vector<std::uint8_t> GetExtraData() const { return extra_data_; }
177 std::string GetLocale() const { return locale_; }
178 std::vector<teeui::UIOption> GetUiOpts() const { return ui_opts_; }
179 bool SendOver(SharedFD fd) override;
180
181 private:
182 std::string prompt_text_;
183 std::vector<std::uint8_t> extra_data_;
184 std::string locale_;
185 std::vector<teeui::UIOption> ui_opts_;
186
187 std::string UiOptsToString() const;
188};
189
190// this one is for deliverSecureInputEvent() as well as
191// physical-input based implementation
193 public:
194 ConfUiUserSelectionMessage(const std::string& session_id,
195 const UserResponse::type& response)
196 : ConfUiMessage(session_id), response_(response) {}
197 virtual ~ConfUiUserSelectionMessage() = default;
198 std::string ToString() const override;
199 ConfUiCmd GetType() const override { return ConfUiCmd::kUserInputEvent; }
200 auto GetResponse() const { return response_; }
201 bool SendOver(SharedFD fd) override;
202
203 private:
205};
206
208 public:
209 ConfUiUserTouchMessage(const std::string& session_id, const int x,
210 const int y)
211 : ConfUiMessage(session_id),
212 x_(x),
213 y_(y),
214 response_(UserResponse::kTouchEvent) {}
215 virtual ~ConfUiUserTouchMessage() = default;
216 std::string ToString() const override;
217 ConfUiCmd GetType() const override { return ConfUiCmd::kUserTouchEvent; }
218 auto GetResponse() const { return response_; }
219 bool SendOver(SharedFD fd) override;
220 std::pair<int, int> GetLocation() const { return {x_, y_}; }
221
222 private:
223 int x_;
224 int y_;
226};
227
230
231} // end of namespace confui
232} // end of namespace cuttlefish
Definition: shared_fd.h:129
Definition: protocol_types.h:115
bool is_success_
Definition: protocol_types.h:130
std::string status_message_
Definition: protocol_types.h:131
bool SendOver(SharedFD fd) override
Definition: protocol_types.cpp:118
ConfUiAckMessage(const std::string &session_id, const bool is_success, const std::string &status)
Definition: protocol_types.h:117
bool IsSuccess() const
Definition: protocol_types.h:126
ConfUiCmd GetType() const override
Definition: protocol_types.h:124
std::string GetStatusMessage() const
Definition: protocol_types.h:127
std::string ToString() const override
Definition: protocol_types.cpp:113
Definition: protocol_types.h:135
auto GetSign() const
Definition: protocol_types.h:150
auto GetMessage() const
Definition: protocol_types.h:149
std::vector< std::uint8_t > sign_
Definition: protocol_types.h:155
std::vector< std::uint8_t > message_
Definition: protocol_types.h:157
UserResponse::type response_
Definition: protocol_types.h:154
std::string ToString() const override
Definition: protocol_types.cpp:123
ConfUiCliResponseMessage(const std::string &session_id, const UserResponse::type &response, const std::vector< std::uint8_t > &sign={}, const std::vector< std::uint8_t > &msg={})
Definition: protocol_types.h:137
bool SendOver(SharedFD fd) override
Definition: protocol_types.cpp:128
auto GetResponse() const
Definition: protocol_types.h:148
ConfUiCmd GetType() const override
Definition: protocol_types.h:147
Definition: protocol_types.h:101
ConfUiGenericMessage(const std::string &session_id)
Definition: protocol_types.h:103
std::string ToString() const override
Definition: protocol_types.h:106
ConfUiCmd GetType() const override
Definition: protocol_types.h:109
bool SendOver(SharedFD fd) override
Definition: protocol_types.h:110
Definition: protocol_types.h:75
static std::string CreateString(Args &&... args)
Definition: protocol_types.h:89
virtual ConfUiCmd GetType() const =0
std::string session_id_
Definition: protocol_types.h:87
bool IsUserInput() const
Definition: protocol_types.cpp:103
void SetSessionId(const std::string session_id)
Definition: protocol_types.h:80
virtual bool SendOver(SharedFD fd)=0
static bool Send_(SharedFD fd, const ConfUiCmd cmd, const std::string &session_id, Args &&... args)
Definition: protocol_types.h:93
ConfUiMessage(const std::string &session_id)
Definition: protocol_types.h:77
virtual std::string ToString() const =0
std::string GetSessionId() const
Definition: protocol_types.h:81
Definition: protocol_types.h:160
bool SendOver(SharedFD fd) override
Definition: protocol_types.cpp:151
std::string GetPromptText() const
Definition: protocol_types.h:175
ConfUiStartMessage(const std::string session_id, const std::string &prompt_text="", const std::vector< std::uint8_t > &extra_data={}, const std::string &locale="C", const std::vector< teeui::UIOption > ui_opts={})
Definition: protocol_types.h:162
std::string ToString() const override
Definition: protocol_types.cpp:144
std::vector< teeui::UIOption > GetUiOpts() const
Definition: protocol_types.h:178
std::string GetLocale() const
Definition: protocol_types.h:177
ConfUiCmd GetType() const override
Definition: protocol_types.h:174
std::string prompt_text_
Definition: protocol_types.h:182
std::vector< teeui::UIOption > ui_opts_
Definition: protocol_types.h:185
std::string UiOptsToString() const
Definition: protocol_types.cpp:132
std::string locale_
Definition: protocol_types.h:184
std::vector< std::uint8_t > GetExtraData() const
Definition: protocol_types.h:176
std::vector< std::uint8_t > extra_data_
Definition: protocol_types.h:183
Definition: protocol_types.h:192
bool SendOver(SharedFD fd) override
Definition: protocol_types.cpp:160
std::string ToString() const override
Definition: protocol_types.cpp:156
auto GetResponse() const
Definition: protocol_types.h:200
UserResponse::type response_
Definition: protocol_types.h:204
ConfUiUserSelectionMessage(const std::string &session_id, const UserResponse::type &response)
Definition: protocol_types.h:194
ConfUiCmd GetType() const override
Definition: protocol_types.h:199
Definition: protocol_types.h:207
auto GetResponse() const
Definition: protocol_types.h:218
std::pair< int, int > GetLocation() const
Definition: protocol_types.h:220
UserResponse::type response_
Definition: protocol_types.h:225
ConfUiUserTouchMessage(const std::string &session_id, const int x, const int y)
Definition: protocol_types.h:209
int y_
Definition: protocol_types.h:224
ConfUiCmd GetType() const override
Definition: protocol_types.h:217
bool SendOver(SharedFD fd) override
Definition: protocol_types.cpp:171
std::string ToString() const override
Definition: protocol_types.cpp:164
int x_
Definition: protocol_types.h:223
int status()
Definition: health.cpp:42
constexpr const ssize_t kMaxPayloadLength
Definition: packet_types.h:37
bool WritePayload(SharedFD d, const std::string &cmd_str, const std::string &session_id, Args &&... args)
Definition: packet.h:110
ConfUiCmd
Definition: protocol_types.h:35
constexpr const ssize_t kMaxMessageLength
Definition: protocol_types.h:47
std::string ArgsToStringWithDelim(Delim &&delim, Args &&... args)
Definition: utils.h:36
ConfUiCmd ToCmd(std::uint32_t i)
Definition: protocol_types.cpp:54
std::string ToString(const ConfUiMessage &msg)
Definition: protocol.cpp:85
std::optional< teeui::UIOption > ToUiOption(const std::string &src)
Definition: protocol_types.cpp:89
std::string ToDebugString(const ConfUiCmd &cmd, const bool is_verbose)
Definition: protocol_types.cpp:30
Definition: alloc_utils.cpp:23
std::vector< std::string_view > Args
Definition: incremental.h:28
UIOption
Definition: common_message_types.h:37
lowest-level packet for communication between host & guest
Definition: protocol_types.h:57
static constexpr char kUIError[]
Definition: protocol_types.h:59
static constexpr char kIncorrectUTF8[]
Definition: protocol_types.h:61
static constexpr char kMessageTooLongError[]
Definition: protocol_types.h:60
static constexpr char kSystemError[]
Definition: protocol_types.h:58
Definition: protocol_types.h:64
static constexpr const auto kUserAbort
Definition: protocol_types.h:71
static constexpr const auto kConfirm
Definition: protocol_types.h:66
static constexpr const auto kCancel
Definition: protocol_types.h:67
std::string type
Definition: protocol_types.h:65
static constexpr const auto kUnknown
Definition: protocol_types.h:72
static constexpr const auto kTouchEvent
Definition: protocol_types.h:68