1 // 2 // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021 3 // 4 // Distributed under the Boost Software License, Version 1.0. (See accompanying 5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 // 7 #pragma once 8 9 #include "td/actor/actor.h" 10 11 #include "td/utils/BufferedFd.h" 12 #include "td/utils/common.h" 13 #include "td/utils/logging.h" 14 #include "td/utils/port/IPAddress.h" 15 #include "td/utils/port/SocketFd.h" 16 #include "td/utils/Status.h" 17 18 namespace td { 19 20 extern int VERBOSITY_NAME(proxy); 21 22 class TransparentProxy : public Actor { 23 public: 24 class Callback { 25 public: 26 Callback() = default; 27 Callback(const Callback &) = delete; 28 Callback &operator=(const Callback &) = delete; 29 virtual ~Callback() = default; 30 31 virtual void set_result(Result<BufferedFd<SocketFd>> r_buffered_socket_fd) = 0; 32 virtual void on_connected() = 0; 33 }; 34 35 TransparentProxy(SocketFd socket_fd, IPAddress ip_address, string username, string password, 36 unique_ptr<Callback> callback, ActorShared<> parent); 37 38 protected: 39 BufferedFd<SocketFd> fd_; 40 IPAddress ip_address_; 41 string username_; 42 string password_; 43 unique_ptr<Callback> callback_; 44 ActorShared<> parent_; 45 46 void on_error(Status status); 47 void tear_down() override; 48 void start_up() override; 49 void hangup() override; 50 51 void loop() override; 52 void timeout_expired() override; 53 54 virtual Status loop_impl() = 0; 55 }; 56 57 } // namespace td 58