AsioSessionState::AsioSessionState( AsioServerTransport & transport, AsioIoService & ioService) : mIoService(ioService), mState(Ready), mIssueZeroByteRead(false), mReadBufferRemaining(), mWriteBufferRemaining(), mTransport(transport), mFilterAdapterPtr(new FilterAdapter(*this)), mCloseAfterWrite(), mReflecting() { if (transport.mWireProtocol == Wp_Http || transport.mWireProtocol == Wp_Https) { mWireFilters.clear(); mWireFilters.push_back( FilterPtr(new HttpFrameFilter()) ); } if (transport.mWireProtocol == Wp_Https) { FilterPtr sslFilterPtr; #if defined(BOOST_WINDOWS) && defined(RCF_USE_OPENSSL) if (transport.mpServer->getPreferSchannel()) { sslFilterPtr = transport.mpServer->createFilter(RcfFilter_SspiSchannel); } else { sslFilterPtr = transport.mpServer->createFilter(RcfFilter_OpenSsl); } #elif defined(BOOST_WINDOWS) sslFilterPtr = transport.mpServer->createFilter(RcfFilter_SspiSchannel); #elif defined(RCF_USE_OPENSSL) sslFilterPtr = transport.mpServer->createFilter(RcfFilter_OpenSsl); #endif if (!sslFilterPtr) { RCF_THROW( Exception(_RcfError_SslNotSupported()) ); } mWireFilters.push_back( sslFilterPtr ); } if (mWireFilters.size() > 0) { setTransportFilters( std::vector<FilterPtr>() ); } }
HttpsClientTransport::HttpsClientTransport(const HttpsEndpoint & httpsEndpoint) : TcpClientTransport(httpsEndpoint.getIp(), httpsEndpoint.getPort()) { std::vector<FilterPtr> wireFilters; // HTTP framing. wireFilters.push_back( FilterPtr( new HttpFrameFilter( getRemoteAddr().getIp(), getRemoteAddr().getPort()))); // SSL. ClientStub * pClientStub = getTlsClientStubPtr(); RCF_ASSERT(pClientStub); FilterPtr sslFilterPtr; #if RCF_FEATURE_SSPI==1 && RCF_FEATURE_OPENSSL==1 if (pClientStub->getSslImplementation() == Si_Schannel) { sslFilterPtr.reset( new SchannelFilter(pClientStub) ); } else { RCF_ASSERT(pClientStub->getSslImplementation() == Si_OpenSsl); sslFilterPtr.reset( new OpenSslEncryptionFilter(pClientStub) ); } #elif RCF_FEATURE_SSPI==1 sslFilterPtr.reset( new SchannelFilter(pClientStub) ); #elif RCF_FEATURE_OPENSSL==1 sslFilterPtr.reset( new OpenSslEncryptionFilter(pClientStub) ); #endif if (!sslFilterPtr) { RCF_THROW( Exception(_RcfError_SslNotSupported()) ); } wireFilters.push_back(sslFilterPtr); // HTTP CONNECT filter for passing through a proxy. wireFilters.push_back( FilterPtr( new HttpConnectFilter( getRemoteAddr().getIp(), getRemoteAddr().getPort()))); setWireFilters(wireFilters); }