socks5bytestreamserver.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef SOCKS5BYTESTREAMSERVER_H__
00015 #define SOCKS5BYTESTREAMSERVER_H__
00016
00017 #include "macros.h"
00018 #include "connectionhandler.h"
00019 #include "logsink.h"
00020 #include "mutex.h"
00021
00022 namespace gloox
00023 {
00024
00025 class ConnectionTCPServer;
00026
00037 class GLOOX_API SOCKS5BytestreamServer : public ConnectionHandler, public ConnectionDataHandler
00038 {
00039
00040 friend class SOCKS5BytestreamManager;
00041
00042 public:
00049 SOCKS5BytestreamServer( const LogSink& logInstance, int port, const std::string& ip = EmptyString );
00050
00054 ~SOCKS5BytestreamServer();
00055
00061 ConnectionError listen();
00062
00069 ConnectionError recv( int timeout );
00070
00074 void stop();
00075
00081 int localPort() const;
00082
00088 const std::string localInterface() const;
00089
00090
00091 virtual void handleIncomingConnection( ConnectionBase* server, ConnectionBase* connection );
00092
00093
00094 virtual void handleReceivedData( const ConnectionBase* connection, const std::string& data );
00095
00096
00097 virtual void handleConnect( const ConnectionBase* connection );
00098
00099
00100 virtual void handleDisconnect( const ConnectionBase* connection, ConnectionError reason );
00101
00102 private:
00103 SOCKS5BytestreamServer& operator=( const SOCKS5BytestreamServer& );
00104 void registerHash( const std::string& hash );
00105 void removeHash( const std::string& hash );
00106 ConnectionBase* getConnection( const std::string& hash );
00107
00108 enum NegotiationState
00109 {
00110 StateDisconnected,
00111 StateUnnegotiated,
00112 StateAuthmethodAccepted,
00113 StateAuthAccepted,
00114 StateDestinationAccepted,
00115 StateActive
00116 };
00117
00118 struct ConnectionInfo
00119 {
00120 NegotiationState state;
00121 std::string hash;
00122 };
00123
00124 typedef std::map<ConnectionBase*, ConnectionInfo> ConnectionMap;
00125 ConnectionMap m_connections;
00126
00127 typedef std::list<const ConnectionBase*> ConnectionList;
00128 ConnectionList m_oldConnections;
00129
00130 typedef std::list<std::string> HashMap;
00131 HashMap m_hashes;
00132
00133 ConnectionTCPServer* m_tcpServer;
00134
00135 util::Mutex m_mutex;
00136 const LogSink& m_logInstance;
00137 std::string m_ip;
00138 int m_port;
00139
00140 };
00141
00142 }
00143
00144 #endif // SOCKS5BYTESTREAMSERVER_H__