Use 0 instead of Q_NULLPTR in public headers.
[contrib/qtwebsockets.git] / src / websockets / qwebsocketserver.h
index 92db91b..930f344 100644 (file)
@@ -1,32 +1,59 @@
-/*
-QWebSockets implements the WebSocket protocol as defined in RFC 6455.
-Copyright (C) 2013 Kurt Pattyn (pattyn.kurt@gmail.com)
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-*/
+/****************************************************************************
+**
+** Copyright (C) 2014 Kurt Pattyn <pattyn.kurt@gmail.com>.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebSockets 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$
+**
+****************************************************************************/
 
 #ifndef QWEBSOCKETSERVER_H
 #define QWEBSOCKETSERVER_H
 
-#include <QObject>
-#include <QString>
-#include <QHostAddress>
-
 #include "QtWebSockets/qwebsockets_global.h"
 #include "QtWebSockets/qwebsocketprotocol.h"
 
+#include <QtCore/QObject>
+#include <QtCore/QString>
+#include <QtNetwork/QHostAddress>
+
+#ifndef QT_NO_SSL
+#include <QtNetwork/QSslConfiguration>
+#include <QtNetwork/QSslError>
+#endif
+
 QT_BEGIN_NAMESPACE
 
 class QWebSocketServerPrivate;
@@ -39,8 +66,18 @@ class Q_WEBSOCKETS_EXPORT QWebSocketServer : public QObject
     Q_DISABLE_COPY(QWebSocketServer)
     Q_DECLARE_PRIVATE(QWebSocketServer)
 
+    Q_ENUMS(SslMode)
+
 public:
-    explicit QWebSocketServer(const QString &serverName, QObject *parent = Q_NULLPTR);
+    enum SslMode {
+#ifndef QT_NO_SSL
+        SecureMode,
+#endif
+        NonSecureMode
+    };
+
+    explicit QWebSocketServer(const QString &serverName, SslMode secureMode,
+                              QObject *parent = 0);
     virtual ~QWebSocketServer();
 
     bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
@@ -54,14 +91,15 @@ public:
     quint16 serverPort() const;
     QHostAddress serverAddress() const;
 
+    SslMode secureMode() const;
+
     bool setSocketDescriptor(int socketDescriptor);
     int socketDescriptor() const;
 
-    bool waitForNewConnection(int msec = 0, bool *timedOut = 0);
     bool hasPendingConnections() const;
     virtual QWebSocket *nextPendingConnection();
 
-    QAbstractSocket::SocketError serverError() const;
+    QWebSocketProtocol::CloseCode error() const;
     QString errorString() const;
 
     void pauseAccepting();
@@ -74,18 +112,25 @@ public:
     void setProxy(const QNetworkProxy &networkProxy);
     QNetworkProxy proxy() const;
 #endif
+#ifndef QT_NO_SSL
+    void setSslConfiguration(const QSslConfiguration &sslConfiguration);
+    QSslConfiguration sslConfiguration() const;
+#endif
 
     QList<QWebSocketProtocol::Version> supportedVersions() const;
-    QList<QString> supportedProtocols() const;
-    QList<QString> supportedExtensions() const;
 
 Q_SIGNALS:
     void acceptError(QAbstractSocket::SocketError socketError);
+    void serverError(QWebSocketProtocol::CloseCode closeCode);
+    //TODO: should use a delegate iso of a synchronous signal
+    //see also QTBUG-16251
     void originAuthenticationRequired(QWebSocketCorsAuthenticator *pAuthenticator);
     void newConnection();
-
-private:
-    QWebSocketServerPrivate * const d_ptr;
+#ifndef QT_NO_SSL
+    void peerVerifyError(const QSslError &error);
+    void sslErrors(const QList<QSslError> &errors);
+#endif
+    void closed();
 };
 
 QT_END_NAMESPACE