diff options
Diffstat (limited to 'client/tunnel_channel.h')
-rw-r--r-- | client/tunnel_channel.h | 140 |
1 files changed, 0 insertions, 140 deletions
diff --git a/client/tunnel_channel.h b/client/tunnel_channel.h deleted file mode 100644 index 63174d8a..00000000 --- a/client/tunnel_channel.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - Copyright (C) 2009 Red Hat, Inc. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see <http://www.gnu.org/licenses/>. - - - Author: - yhalperi@redhat.com -*/ - -#ifndef _H_TUNNEL_CHANNEL -#define _H_TUNNEL_CHANNEL - -#include "common.h" -#include "red_channel.h" -#include "red_client.h" -#include "client_net_socket.h" -#include "platform.h" - -#define TUNNEL_CONFIG - -#ifdef TUNNEL_CONFIG -class TunnelConfigConnectionIfc; -class TunnelConfigListenerIfc; -#endif - -/* channel for tunneling tcp from guest to client network */ -typedef struct TunnelService TunnelService; -class TunnelChannel: public RedChannel, - public ClientNetSocket::EventHandler { -public: - - TunnelChannel(RedClient& client, uint32_t id); - virtual ~TunnelChannel(); - - virtual void on_socket_message_recv_done(ClientNetSocket& sckt, - ClientNetSocket::ReceiveBuffer& buf); - virtual void on_socket_message_send_done(ClientNetSocket& sckt); - virtual void on_socket_fin_recv(ClientNetSocket& sckt); - virtual void on_socket_disconnect(ClientNetSocket& sckt); - -#ifdef TUNNEL_CONFIG - void add_service(TunnelConfigConnectionIfc& source, - uint32_t type, struct in_addr& ip, uint32_t port, - std::string& name, std::string& description); -#endif - static ChannelFactory& Factory(); - -protected: - class TunnelSocket; - - virtual void on_disconnect(); - virtual void on_connect(); - -private: - void handle_init(RedPeer::InMessage* message); - void handle_service_ip_map(RedPeer::InMessage* message); - - void handle_socket_open(RedPeer::InMessage* message); - void handle_socket_fin(RedPeer::InMessage* message); - void handle_socket_close(RedPeer::InMessage* message); - void handle_socket_closed_ack(RedPeer::InMessage* message); - void handle_socket_data(RedPeer::InMessage* message); - void handle_socket_token(RedPeer::InMessage* message); - - TunnelService* find_service(uint32_t id); - TunnelService* find_service(struct in_addr& ip); - TunnelService* find_service(struct in_addr& ip, uint32_t port); - - void send_service(TunnelService& service); - void destroy_sockets(); - -private: - std::vector<TunnelSocket*> _sockets; - std::list<TunnelService*> _services; - uint32_t _max_socket_data_size; - uint32_t _service_id; - uint32_t _service_group; -#ifdef TUNNEL_CONFIG - TunnelConfigListenerIfc* _config_listener; - friend class TunnelConfigListenerIfc; -#endif -}; - -#ifdef TUNNEL_CONFIG -#ifdef _WIN32 -#define TUNNEL_CONFIG_PIPE_NAME "tunnel-config.pipe" -#else -#define TUNNEL_CONFIG_PIPE_NAME "/tmp/tunnel-config.pipe" -#endif - -class TunnelConfigConnectionIfc; - -class TunnelConfigListenerIfc: public NamedPipe::ListenerInterface { -public: - TunnelConfigListenerIfc(TunnelChannel& tunnel); - virtual ~TunnelConfigListenerIfc(); - virtual NamedPipe::ConnectionInterface& create(); - virtual void destroy_connection(TunnelConfigConnectionIfc* conn); - -private: - TunnelChannel& _tunnel; - NamedPipe::ListenerRef _listener_ref; - std::list<TunnelConfigConnectionIfc*> _connections; -}; - -#define TUNNEL_CONFIG_MAX_MSG_LEN 2048 -class TunnelConfigConnectionIfc: public NamedPipe::ConnectionInterface { -public: - TunnelConfigConnectionIfc(TunnelChannel& tunnel, - TunnelConfigListenerIfc& listener); - virtual void bind(NamedPipe::ConnectionRef conn_ref); - virtual void on_data(); - void send_virtual_ip(struct in_addr& ip); - NamedPipe::ConnectionRef get_ref() {return _opaque;} - void handle_msg(); - -private: - TunnelChannel& _tunnel; - TunnelConfigListenerIfc& _listener; - char _in_msg[TUNNEL_CONFIG_MAX_MSG_LEN]; // <service_type> <ip> <port> <name> <desc>\n - int _in_msg_len; - - std::string _out_msg; // <virtual ip>\n - unsigned _out_msg_pos; -}; -#endif - -#endif |