gloox 1.0.24
connectionsocks5proxy.h
1/*
2 Copyright (c) 2007-2019 by Jakob Schröter <js@camaya.net>
3 This file is part of the gloox library. http://camaya.net/gloox
4
5 This software is distributed under a license. The full license
6 agreement can be found in the file LICENSE in this distribution.
7 This software may not be copied, modified, sold or distributed
8 other than expressed in the named license agreement.
9
10 This software is distributed without any warranty.
11*/
12
13
14#ifndef CONNECTIONSOCKS5PROXY_H__
15#define CONNECTIONSOCKS5PROXY_H__
16
17#include "gloox.h"
18#include "connectionbase.h"
19#include "logsink.h"
20
21#include <string>
22
23namespace gloox
24{
25
54 {
55 public:
70 ConnectionSOCKS5Proxy( ConnectionBase* connection, const LogSink& logInstance,
71 const std::string& server, int port = -1, bool ip = false );
72
86 const LogSink& logInstance,
87 const std::string& server, int port = -1, bool ip = false );
88
92 virtual ~ConnectionSOCKS5Proxy();
93
94 // reimplemented from ConnectionBase
95 virtual ConnectionError connect();
96
97 // reimplemented from ConnectionBase
98 virtual ConnectionError recv( int timeout = -1 );
99
100 // reimplemented from ConnectionBase
101 virtual bool send( const std::string& data );
102
103 // reimplemented from ConnectionBase
104 virtual ConnectionError receive();
105
106 // reimplemented from ConnectionBase
107 virtual void disconnect();
108
109 // reimplemented from ConnectionBase
110 virtual void cleanup();
111
112 // reimplemented from ConnectionBase
113 virtual void getStatistics( long int &totalIn, long int &totalOut );
114
115 // reimplemented from ConnectionDataHandler
116 virtual void handleReceivedData( const ConnectionBase* connection, const std::string& data );
117
118 // reimplemented from ConnectionDataHandler
119 virtual void handleConnect( const ConnectionBase* connection );
120
121 // reimplemented from ConnectionDataHandler
122 virtual void handleDisconnect( const ConnectionBase* connection, ConnectionError reason );
123
124 // reimplemented from ConnectionDataHandler
125 virtual ConnectionBase* newInstance() const;
126
134 void setServer( const std::string& host, int port = -1, bool ip = false )
135 { m_server = host; m_port = port; m_ip = ip; }
136
142 void setProxyAuth( const std::string& user, const std::string& password )
143 { m_proxyUser = user; m_proxyPwd = password; }
144
149 void setConnectionImpl( ConnectionBase* connection );
150
151 private:
152 enum Socks5State
153 {
154 S5StateDisconnected,
155 S5StateConnecting,
156 S5StateNegotiating,
157 S5StateAuthenticating,
158 S5StateConnected
159 };
160
161 ConnectionSOCKS5Proxy &operator=( const ConnectionSOCKS5Proxy& );
162 void negotiate();
163
164 ConnectionBase* m_connection;
165 const LogSink& m_logInstance;
166
167 Socks5State m_s5state;
168
169 std::string m_proxyUser;
170 std::string m_proxyPwd;
171 std::string m_proxyHandshakeBuffer;
172 bool m_ip;
173
174 };
175
176}
177
178#endif // CONNECTIONSOCKS5PROXY_H__
An abstract base class for a connection.
This is an abstract base class to receive events from a ConnectionBase-derived object.
This is an implementation of a simple SOCKS5 Proxying connection (RFC 1928 + RFC 1929).
void setServer(const std::string &host, int port=-1, bool ip=false)
void setProxyAuth(const std::string &user, const std::string &password)
An implementation of log sink and source.
Definition: logsink.h:39
The namespace for the gloox library.
Definition: adhoc.cpp:28
ConnectionError
Definition: gloox.h:684