// ********************************************************************** // // Copyright (c) 2003-2013 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #ifndef ICE_TCP_TRANSCEIVER_H #define ICE_TCP_TRANSCEIVER_H #include #include #include #include #include #include namespace IceInternal { class TcpConnector; class TcpAcceptor; class TcpTransceiver : public Transceiver, public NativeInfo { enum State { StateNeedConnect, StateConnectPending, StateProxyConnectRequest, StateProxyConnectRequestPending, StateConnected }; public: virtual NativeInfoPtr getNativeInfo(); #ifdef ICE_USE_IOCP virtual AsyncInfo* getAsyncInfo(SocketOperation); #endif virtual SocketOperation initialize(Buffer&, Buffer&); virtual void close(); virtual bool write(Buffer&); virtual bool read(Buffer&); #ifdef ICE_USE_IOCP virtual bool startWrite(Buffer&); virtual void finishWrite(Buffer&); virtual void startRead(Buffer&); virtual void finishRead(Buffer&); #endif virtual std::string type() const; virtual std::string toString() const; virtual Ice::ConnectionInfoPtr getInfo() const; virtual void checkSendSize(const Buffer&, size_t); private: TcpTransceiver(const InstancePtr&, SOCKET, const NetworkProxyPtr&, const Address&); TcpTransceiver(const InstancePtr&, SOCKET); virtual ~TcpTransceiver(); void connect(); friend class TcpConnector; friend class TcpAcceptor; const NetworkProxyPtr _proxy; const Address _addr; const TraceLevelsPtr _traceLevels; const Ice::LoggerPtr _logger; const Ice::StatsPtr _stats; State _state; std::string _desc; #ifdef ICE_USE_IOCP AsyncInfo _read; AsyncInfo _write; int _maxSendPacketSize; int _maxReceivePacketSize; #endif }; } #endif