Android-cuttlefish cvd tool
socket2socket_proxy.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2022 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
17#pragma once
18
19#include <functional>
20#include <memory>
21#include <thread>
22
24
25namespace cuttlefish {
26
28 public:
29 ProxyServer(SharedFD server, std::function<SharedFD()> clients_factory);
30 void Join();
32
33 private:
35 std::thread server_;
36};
37
38// Executes a TCP proxy
39// Accept() is called on the server in a loop, for every client connection a
40// target connection is created through the conn_factory callback and data is
41// forwarded between the two connections.
42// This function is meant to execute forever, but will return if the server is
43// closed in another thread. It's recommended the caller disables the default
44// behavior for SIGPIPE before calling this function, otherwise it runs the risk
45// or crashing the process when a connection breaks.
46void Proxy(SharedFD server, std::function<SharedFD()> conn_factory);
47std::unique_ptr<ProxyServer> ProxyAsync(SharedFD server, std::function<SharedFD()> conn_factory);
48
49} // namespace cuttlefish
Definition: socket2socket_proxy.h:27
ProxyServer(SharedFD server, std::function< SharedFD()> clients_factory)
Definition: socket2socket_proxy.cpp:115
void Join()
Definition: socket2socket_proxy.cpp:178
std::thread server_
Definition: socket2socket_proxy.h:35
SharedFD stop_fd_
Definition: socket2socket_proxy.h:34
~ProxyServer()
Definition: socket2socket_proxy.cpp:184
Definition: shared_fd.h:129
Definition: alloc_utils.cpp:23
std::unique_ptr< ProxyServer > ProxyAsync(SharedFD server, std::function< SharedFD()> conn_factory)
Definition: socket2socket_proxy.cpp:196
void Proxy(SharedFD server, std::function< SharedFD()> conn_factory)
Definition: socket2socket_proxy.cpp:191