/* -*- C++ -*- */ /* ==================================================================== * Copyright (c) 1998-2006 Ralf S. Engelschall. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by * Ralf S. Engelschall for use in the * mod_ssl project (http://www.modssl.org/)." * * 4. The names "mod_ssl" must not be used to endorse or promote * products derived from this software without prior written * permission. For written permission, please contact * rse@engelschall.com. * * 5. Products derived from this software may not be called "mod_ssl" * nor may "mod_ssl" appear in their names without prior * written permission of Ralf S. Engelschall. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by * Ralf S. Engelschall for use in the * mod_ssl project (http://www.modssl.org/)." * * THIS SOFTWARE IS PROVIDED BY RALF S. ENGELSCHALL ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RALF S. ENGELSCHALL OR * HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== */ /* ==================================================================== * Copyright (c) 1995-1999 Ben Laurie. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by Ben Laurie * for use in the Apache-SSL HTTP server project." * * 4. The name "Apache-SSL Server" must not be used to * endorse or promote products derived from this software without * prior written permission. * * 5. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Ben Laurie * for use in the Apache-SSL HTTP server project." * * THIS SOFTWARE IS PROVIDED BY BEN LAURIE ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BEN LAURIE OR * HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== */ /**************************************************************************** ** Copyright (c) 2001-2014 ** ** This file is part of the QuickFIX FIX Engine ** ** This file may be distributed under the terms of the quickfixengine.org ** license as defined by quickfixengine.org and appearing in the file ** LICENSE included in the packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.quickfixengine.org/LICENSE for licensing information. ** ** Contact ask@quickfixengine.org if any conditions of this licensing are ** not clear to you. ** ****************************************************************************/ #ifndef FIX_SSLSOCKETINITIATOR_H #define FIX_SSLSOCKETINITIATOR_H #if (HAVE_SSL > 0) #ifdef _MSC_VER #pragma warning( disable : 4503 4355 4786 4290 ) #endif #include "Initiator.h" #include "SocketConnector.h" #include "SSLSocketConnection.h" namespace FIX { /// Socket implementation of Initiator. class SSLSocketInitiator : public Initiator, SocketConnector::Strategy { public: SSLSocketInitiator( Application&, MessageStoreFactory&, const SessionSettings& ) EXCEPT ( ConfigError ); SSLSocketInitiator( Application&, MessageStoreFactory&, const SessionSettings&, LogFactory& ) EXCEPT ( ConfigError ); virtual ~SSLSocketInitiator(); void setPassword(const std::string &pwd) { m_password.assign(pwd); } void setCertAndKey(X509 *cert, RSA *key) { m_cert = cert; m_key = key; } int passwordHandleCallback(char *buf, size_t bufsize, int verify); static int passwordHandleCB(char *buf, int bufsize, int verify, void *instance); private: typedef std::map < socket_handle, SSLSocketConnection* > SocketConnections; typedef std::map < SessionID, int > SessionToHostNum; void onConfigure( const SessionSettings& ) EXCEPT ( ConfigError ); void onInitialize( const SessionSettings& ) EXCEPT ( RuntimeError ); void onStart(); bool onPoll( double timeout ); void onStop(); void doConnect( const SessionID&, const Dictionary& d ); void onConnect( SocketConnector&, socket_handle); void onWrite( SocketConnector&, socket_handle); bool onData( SocketConnector&, socket_handle); void onDisconnect( SocketConnector&, socket_handle); void onError( SocketConnector& ); void onTimeout( SocketConnector& ); bool handshakeSSL(SSL* ssl); void getHost( const SessionID&, const Dictionary&, std::string&, short&, std::string&, short& ); SessionToHostNum m_sessionToHostNum; SocketConnector m_connector; SocketConnections m_pendingConnections; SocketConnections m_connections; time_t m_lastConnect; int m_reconnectInterval; bool m_noDelay; int m_sendBufSize; int m_rcvBufSize; bool m_sslInit; SSL_CTX *m_ctx; std::string m_password; X509 *m_cert; RSA *m_key; }; /*! @} */ } #endif #endif //FIX_SSLSOCKETINITIATOR_H