//---------------------------------------------------------------------------- // // Copyright (C) Intel Corporation, 2006 - 2007. // // File: TcpConsumer.h // // Contents: Handles outgoing TCP messages. // // Notes: //---------------------------------------------------------------------------- #ifndef _MPS_TCP_CONSUMER_H__ #define _MPS_TCP_CONSUMER_H__ //=================================================== // INCLUDES //=================================================== #include #include #include #include "TcpSvcHandler.h" #include "SOCKSv5.h" /*************************************************************************************** // Tcp_Consumer // /**************************************************************************************/ class Tcp_Consumer { public: enum REP_STATUS{SUCCESS, FAILURE}; //=================================================== // CTOR / DTOR //=================================================== Tcp_Consumer(Tcp_Svc_Handler* handler); virtual ~Tcp_Consumer(); //=================================================== // PROTOTYPE: //=================================================== //----------------------------------------- // Get reference to socket stream //----------------------------------------- ACE_SOCK_Stream& getPeer(void) const; //----------------------------------------- // Finish sending event when flow control conditions abate. //----------------------------------------- STATUS handle_output (ACE_HANDLE h); //----------------------------------------- // //----------------------------------------- void handle_close(); void connectionClose(); //----------------------------------------- // add message block to message queue, and // register to write handler. //----------------------------------------- STATUS sendData(ACE_Message_Block* mb); virtual STATUS sendVersionMsg(SOCKS_V5_METHOD support_method){return STATUS_FAILURE;} // Put message in this tunnel handler queue STATUS putq(ACE_Message_Block *mb, ACE_Time_Value *tv=0); //----------------------------------------- // Notify this consumer wether there is tunnelSupplier that uses its services. // In case tcpSvcHandler released this tcpConsumer, (is_hold = false) // there is no nned to use this instance- and thus we delete it. //----------------------------------------- //int setTunnelHold(bool is_hold); virtual const char* identifier() { return _svc_handler->identifier();} protected: // ACE_Recursive_Thread_Mutex& socket_mutex() {return _svc_handler->_socket_mutex;}; //=================================================== // Data Member //=================================================== Tcp_Svc_Handler* _svc_handler; ACE_Recursive_Thread_Mutex _mutex; ACE_UINT32 _msg_counter; //for DEBUG purpose only. }; /*************************************************************************************** // // /**************************************************************************************/ class SocksConsumer: public Tcp_Consumer { public: enum CHANNEL_REP_REASON { SUCCEEDED =0, SERVER_FAILURE =1, CONNECTION_NOT_ALLOWED =2, NETWORK_UNREACHABLE =3, HOST_UNREACHABLE =4, CONNECTION_REFUESED =5, TTL_EXPIRED =6, COMMAND_NOT_SUPPORTED =7, ADDRESS_TYPE_NOT_SUPPORTED =8 }; //=================================================== // CTOR / DTOR //=================================================== SocksConsumer(Tcp_Svc_Handler* handler):Tcp_Consumer(handler){}; virtual ~SocksConsumer(){}; //=================================================== // PROTOTYPE: //=================================================== //----------------------------------------- // send Socks negotiation message according to // openChannel reply //----------------------------------------- STATUS openRep(REP_STATUS status, CHANNEL_REP_REASON reason=CONNECTION_REFUESED); //----------------------------------------- // send Socks version message //----------------------------------------- virtual STATUS sendVersionMsg(SOCKS_V5_METHOD support_method); //----------------------------------------- // send Socks authentication message //----------------------------------------- STATUS sendAuthMsg(SOCKS_V5_REP status); protected: //=================================================== // Data Member //=================================================== }; #endif //_MPS_TCP_CONSUMER_H__