echoConnection::echoConnection( const net::LocalEndpointR& local, unsigned short timeout ) { net::ConnectionEndpoint::ConnectionType type = local->type(); switch ( type ) { case net::ConnectionEndpoint::UDP: LOG_FATAL << "UDP local connection type not implemented"; abort(); case net::ConnectionEndpoint::TCP: { const net::LocalTCPendpoint* lcl = static_cast<const net::LocalTCPendpoint*>( local.get() ); LOG_TRACE << "Created connection handler for " << lcl->toString(); break; } #ifdef WITH_SSL case net::ConnectionEndpoint::SSL: { const net::LocalSSLendpoint* lcl = static_cast<const net::LocalSSLendpoint*>( local.get() ); LOG_TRACE << "Created connection handler (SSL) for " << lcl->toString(); break; } #else case net::ConnectionEndpoint::SSL: #endif // WITH_SSL default: LOG_FATAL << "Impossible local connection type !"; abort(); } m_state = NEW; m_dataStart = NULL; m_dataSize = 0; m_idleTimeout = timeout; }
wolframeConnection::wolframeConnection( const WolframeHandler& context, const net::LocalEndpointR& local ) : m_globalCtx( context ), m_input(0), m_inputsize(16536), /*m_inputpos(0),*/ m_output(0), m_outputsize( 4096 ), m_execContext( &context.proc(), &context.aaaa()) { m_input = std::malloc( m_inputsize); m_output = std::malloc( m_outputsize); if (!m_input || !m_output) { if (m_input) std::free( m_input); if (m_output) std::free( m_output); throw std::bad_alloc(); } net::ConnectionEndpoint::ConnectionType type = local->type(); std::string protocol; if (local->config().protocol.empty()) { protocol = "wolframe"; } else { protocol = local->config().protocol; } m_protocolHandler.reset( m_execContext.provider()->protocolHandler( protocol)); if (!m_protocolHandler.get()) { LOG_FATAL << "protocol '" << protocol << "' is not known (protocol module not loaded)"; abort(); } switch ( type ) { case net::ConnectionEndpoint::UDP: LOG_FATAL << "UDP local connection type not implemented"; abort(); case net::ConnectionEndpoint::TCP: { m_localEP = local; LOG_TRACE << "Created connection handler for " << m_localEP->toString(); break; } #ifdef WITH_SSL case net::ConnectionEndpoint::SSL: { m_localEP = local; LOG_TRACE << "Created connection handler (SSL) for " << m_localEP->toString(); break; } #else case net::ConnectionEndpoint::SSL: #endif // WITH_SSL default: LOG_FATAL << "Impossible local connection type !"; abort(); } // Initialize channel data to start-up values m_state = NEW_CONNECTION; m_dataStart = NULL; m_dataSize = 0; m_authentication = NULL; m_authorization = NULL; m_audit = NULL; m_protocolHandler->setInputBuffer( m_input, m_inputsize); m_protocolHandler->setOutputBuffer( m_output, m_outputsize, 0); m_protocolHandler->setExecContext( &m_execContext); m_protocolHandler->setLocalEndPoint( m_localEP); }