// ********************************************************************** // // Copyright (c) 2003-2014 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_SSL_SECURE_TRANSPORT_TRANSCEIVER_I_H #define ICE_SSL_SECURE_TRANSPORT_TRANSCEIVER_I_H #include #include #include #include #include #include #include #ifdef ICE_USE_SECURE_TRANSPORT #include #include namespace IceSSL { class ConnectorI; class AcceptorI; class TransceiverI : public IceInternal::Transceiver { public: virtual IceInternal::NativeInfoPtr getNativeInfo(); virtual IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&, bool&); virtual IceInternal::SocketOperation closing(bool, const Ice::LocalException&); virtual void close(); virtual IceInternal::SocketOperation write(IceInternal::Buffer&); virtual IceInternal::SocketOperation read(IceInternal::Buffer&, bool&); virtual std::string protocol() const; virtual std::string toString() const; virtual std::string toDetailedString() const; virtual Ice::ConnectionInfoPtr getInfo() const; virtual void checkSendSize(const IceInternal::Buffer&, size_t); OSStatus writeRaw(const char*, size_t*) const; OSStatus readRaw(char*, size_t*) const; private: TransceiverI(const InstancePtr&, const IceInternal::StreamSocketPtr&, const std::string&, const std::string&); virtual ~TransceiverI(); virtual NativeConnectionInfoPtr getNativeConnectionInfo() const; friend class ConnectorI; friend class AcceptorI; const InstancePtr _instance; const SecureTransportEnginePtr _engine; const std::string _host; const std::string _adapterName; const bool _incoming; const IceInternal::StreamSocketPtr _stream; SSLContextRef _ssl; SecTrustRef _trust; size_t _buffered; enum SSLWantFlags { SSLWantRead = 0x1, SSLWantWrite = 0x2 }; mutable Ice::Byte _flags; size_t _maxSendPacketSize; size_t _maxRecvPacketSize; }; typedef IceUtil::Handle TransceiverIPtr; } #endif #endif