Android-cuttlefish cvd tool
vsock_connection.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 <cstddef>
19#include <cstdint>
20#include <functional>
21#include <future>
22#include <mutex>
23#include <string>
24#include <vector>
25
26#include <json/json.h>
27
29
30namespace cuttlefish {
31
33 public:
34 virtual ~VsockConnection();
35 virtual bool Connect(unsigned int port, unsigned int cid,
36 std::optional<int> vhost_user_vsock_cid) = 0;
37 virtual void Disconnect();
38 std::future<bool> ConnectAsync(unsigned int port, unsigned int cid,
39 std::optional<int> vhost_user_vsock_cid);
40 void SetDisconnectCallback(std::function<void()> callback);
41
43 bool IsConnected();
44 bool DataAvailable();
45 int32_t Read();
46 bool Read(std::vector<char>& data);
47 std::vector<char> Read(size_t size);
48 std::future<std::vector<char>> ReadAsync(size_t size);
49
50 bool ReadMessage(std::vector<char>& data);
51 std::vector<char> ReadMessage();
52 std::future<std::vector<char>> ReadMessageAsync();
53 Json::Value ReadJsonMessage();
54 std::future<Json::Value> ReadJsonMessageAsync();
55
56 bool Write(int32_t data);
57 bool Write(const char* data, unsigned int size);
58 bool Write(const std::vector<char>& data);
59 bool WriteMessage(const std::string& data);
60 bool WriteMessage(const std::vector<char>& data);
61 bool WriteMessage(const Json::Value& data);
62 bool WriteStrides(const char* data, unsigned int size,
63 unsigned int num_strides, int stride_size);
64
65 protected:
66 std::recursive_mutex read_mutex_;
67 std::recursive_mutex write_mutex_;
68 std::function<void()> disconnect_callback_;
70};
71
73 public:
74 // the value of vhost_user_vsock_cid isn't actually used, it works like bool,
75 // so any value except nullopt means true
76 bool Connect(unsigned int port, unsigned int cid,
77 std::optional<int> vhost_user) override;
78};
79
81 public:
82 virtual ~VsockServerConnection();
83 void ServerShutdown();
84 bool Connect(unsigned int port, unsigned int cid,
85 std::optional<int> vhost_user_vsock_cid) override;
86
87 private:
89};
90
91} // namespace cuttlefish
Definition: shared_fd.h:129
Definition: vsock_connection.h:72
bool Connect(unsigned int port, unsigned int cid, std::optional< int > vhost_user) override
Definition: vsock_connection.cpp:217
Definition: vsock_connection.h:32
std::future< std::vector< char > > ReadMessageAsync()
Definition: vsock_connection.cpp:148
void SetDisconnectCallback(std::function< void()> callback)
Definition: vsock_connection.cpp:66
std::future< std::vector< char > > ReadAsync(size_t size)
Definition: vsock_connection.cpp:122
bool Write(int32_t data)
Definition: vsock_connection.cpp:168
int32_t Read()
Definition: vsock_connection.cpp:94
std::future< Json::Value > ReadJsonMessageAsync()
Definition: vsock_connection.cpp:164
virtual void Disconnect()
Definition: vsock_connection.cpp:53
bool WriteStrides(const char *data, unsigned int size, unsigned int num_strides, int stride_size)
Definition: vsock_connection.cpp:206
std::future< bool > ConnectAsync(unsigned int port, unsigned int cid, std::optional< int > vhost_user_vsock_cid)
Definition: vsock_connection.cpp:44
virtual ~VsockConnection()
Definition: vsock_connection.cpp:42
bool IsConnected()
Definition: vsock_connection.cpp:74
std::recursive_mutex write_mutex_
Definition: vsock_connection.h:67
bool DataAvailable()
Definition: vsock_connection.cpp:82
std::vector< char > ReadMessage()
Definition: vsock_connection.cpp:127
SharedFD fd_
Definition: vsock_connection.h:69
virtual bool Connect(unsigned int port, unsigned int cid, std::optional< int > vhost_user_vsock_cid)=0
std::function< void()> disconnect_callback_
Definition: vsock_connection.h:68
Json::Value ReadJsonMessage()
Definition: vsock_connection.cpp:152
bool WriteMessage(const std::string &data)
Definition: vsock_connection.cpp:191
bool IsConnected_Unguarded()
Definition: vsock_connection.cpp:72
std::recursive_mutex read_mutex_
Definition: vsock_connection.h:66
Definition: vsock_connection.h:80
virtual ~VsockServerConnection()
Definition: vsock_connection.cpp:227
SharedFD server_fd_
Definition: vsock_connection.h:88
void ServerShutdown()
Definition: vsock_connection.cpp:229
bool Connect(unsigned int port, unsigned int cid, std::optional< int > vhost_user_vsock_cid) override
Definition: vsock_connection.cpp:238
char data[Size]
Definition: incremental_server.cpp:1
uint32_t size
Definition: io.h:2
Definition: alloc_utils.cpp:23