text: /****************************************************************************
  **
  ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
  ** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
  ** Contact: http://www.qt-project.org/legal
  **
  ** This file is part of the QtNetwork module of the Qt Toolkit.
  **
  ** $QT_BEGIN_LICENSE:LGPL$
  ** Commercial License Usage
  ** Licensees holding valid commercial Qt licenses may use this file in
  ** accordance with the commercial license agreement provided with the
  ** Software or, alternatively, in accordance with the terms contained in
  ** a written agreement between you and Digia.  For licensing terms and
  ** conditions see http://qt.digia.com/licensing.  For further information
  ** use the contact form at http://qt.digia.com/contact-us.
  **
  ** GNU Lesser General Public License Usage
  ** Alternatively, this file may be used under the terms of the GNU Lesser
  ** General Public License version 2.1 as published by the Free Software
  ** Foundation and appearing in the file LICENSE.LGPL included in the
  ** packaging of this file.  Please review the following information to
  ** ensure the GNU Lesser General Public License version 2.1 requirements
  ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
  **
  ** In addition, as a special exception, Digia gives you certain additional
  ** rights.  These rights are described in the Digia Qt LGPL Exception
  ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
  **
  ** GNU General Public License Usage
  ** Alternatively, this file may be used under the terms of the GNU
  ** General Public License version 3.0 as published by the Free Software
  ** Foundation and appearing in the file LICENSE.GPL included in the
  ** packaging of this file.  Please review the following information to
  ** ensure the GNU General Public License version 3.0 requirements will be
  ** met: http://www.gnu.org/copyleft/gpl.html.
  **
  **
  ** $QT_END_LICENSE$
  **
  ****************************************************************************/
  
  /****************************************************************************
  **
  ** In addition, as a special exception, the copyright holders listed above give
  ** permission to link the code of its release of Qt with the OpenSSL project's
  ** "OpenSSL" library (or modified versions of the "OpenSSL" library that use the
  ** same license as the original version), and distribute the linked executables.
  **
  ** You must comply with the GNU General Public License version 2 in all
  ** respects for all of the code used other than the "OpenSSL" code.  If you
  ** modify this file, you may extend this exception to your version of the file,
  ** but you are not obligated to do so.  If you do not wish to do so, delete
  ** this exception statement from your version of this file.
  **
  ****************************************************************************/
  
  #ifndef QSSLCONFIGURATION_P_H
  #define QSSLCONFIGURATION_P_H
  
  //
  //  W A R N I N G
  //  -------------
  //
  // This file is not part of the Qt API.  It exists for the convenience
  // of the QSslSocket API.  This header file may change from
  // version to version without notice, or even be removed.
  //
  // We mean it.
  //
  
  #include "qsslconfiguration.h"
  #include "qlist.h"
  #include "qsslcertificate.h"
  #include "qsslcipher.h"
  #include "qsslkey.h"
  
  QT_BEGIN_NAMESPACE
  
  class QSslConfigurationPrivate: public QSharedData
  {
  public:
      QSslConfigurationPrivate()
          : protocol(QSsl::SecureProtocols),
            peerVerifyMode(QSslSocket::AutoVerifyPeer),
            peerVerifyDepth(0),
            allowRootCertOnDemandLoading(true),
            peerSessionShared(false),
            sslOptions(QSslConfigurationPrivate::defaultSslOptions),
            sslSessionTicketLifeTimeHint(-1),
            nextProtocolNegotiationStatus(QSslConfiguration::NextProtocolNegotiationNone)
      { }
  
      QSslCertificate peerCertificate;
      QList<QSslCertificate> peerCertificateChain;
  
      QList<QSslCertificate> localCertificateChain;
  
      QSslKey privateKey;
      QSslCipher sessionCipher;
      QList<QSslCipher> ciphers;
      QList<QSslCertificate> caCertificates;
  
      QSsl::SslProtocol protocol;
      QSslSocket::PeerVerifyMode peerVerifyMode;
      int peerVerifyDepth;
      bool allowRootCertOnDemandLoading;
      bool peerSessionShared;
  
      Q_AUTOTEST_EXPORT static bool peerSessionWasShared(const QSslConfiguration &configuration);
  
      QSsl::SslOptions sslOptions;
  
      Q_AUTOTEST_EXPORT static const QSsl::SslOptions defaultSslOptions;
  
      QByteArray sslSession;
      int sslSessionTicketLifeTimeHint;
  
      QList<QByteArray> nextAllowedProtocols;
      QByteArray nextNegotiatedProtocol;
      QSslConfiguration::NextProtocolNegotiationStatus nextProtocolNegotiationStatus;
  
      // in qsslsocket.cpp:
      static QSslConfiguration defaultConfiguration();
      static void setDefaultConfiguration(const QSslConfiguration &configuration);
      static void deepCopyDefaultConfiguration(QSslConfigurationPrivate *config);
  };
  
  // implemented here for inlining purposes
  inline QSslConfiguration::QSslConfiguration(QSslConfigurationPrivate *dd)
      : d(dd)
  {
  }
  
  QT_END_NAMESPACE
  
  #endif
  