connectionsocks5proxy.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef CONNECTIONSOCKS5PROXY_H__
00015 #define CONNECTIONSOCKS5PROXY_H__
00016
00017 #include "gloox.h"
00018 #include "connectionbase.h"
00019 #include "logsink.h"
00020
00021 #include <string>
00022
00023 namespace gloox
00024 {
00025
00053 class GLOOX_API ConnectionSOCKS5Proxy : public ConnectionBase, public ConnectionDataHandler
00054 {
00055 public:
00070 ConnectionSOCKS5Proxy( ConnectionBase *connection, const LogSink& logInstance,
00071 const std::string& server, int port = -1, bool ip = false );
00072
00085 ConnectionSOCKS5Proxy( ConnectionDataHandler *cdh, ConnectionBase *connection,
00086 const LogSink& logInstance,
00087 const std::string& server, int port = -1, bool ip = false );
00088
00092 virtual ~ConnectionSOCKS5Proxy();
00093
00094
00095 virtual ConnectionError connect();
00096
00097
00098 virtual ConnectionError recv( int timeout = -1 );
00099
00100
00101 virtual bool send( const std::string& data );
00102
00103
00104 virtual ConnectionError receive();
00105
00106
00107 virtual void disconnect();
00108
00109
00110 virtual void cleanup();
00111
00112
00113 virtual void getStatistics( int &totalIn, int &totalOut );
00114
00115
00116 virtual void handleReceivedData( const ConnectionBase* connection, const std::string& data );
00117
00118
00119 virtual void handleConnect( const ConnectionBase* connection );
00120
00121
00122 virtual void handleDisconnect( const ConnectionBase* connection, ConnectionError reason );
00123
00124
00125 virtual ConnectionBase* newInstance() const;
00126
00134 void setServer( const std::string& host, int port = -1, bool ip = false )
00135 { m_server = host; m_port = port; m_ip = ip; }
00136
00142 void setProxyAuth( const std::string& user, const std::string& password )
00143 { m_proxyUser = user; m_proxyPassword = password; }
00144
00149 void setConnectionImpl( ConnectionBase* connection );
00150
00151 private:
00152 enum Socks5State
00153 {
00154 S5StateDisconnected,
00155 S5StateConnecting,
00156 S5StateNegotiating,
00157 S5StateAuthenticating,
00158 S5StateConnected
00159 };
00160
00161 ConnectionSOCKS5Proxy &operator=( const ConnectionSOCKS5Proxy& );
00162 void negotiate();
00163
00164 ConnectionBase* m_connection;
00165 const LogSink& m_logInstance;
00166
00167 Socks5State m_s5state;
00168
00169 std::string m_proxyUser;
00170 std::string m_proxyPassword;
00171 std::string m_proxyHandshakeBuffer;
00172 bool m_ip;
00173
00174 };
00175
00176 }
00177
00178 #endif // CONNECTIONSOCKS5PROXY_H__