mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-13 09:34:53 +02:00
Update QxtWeb
This commit is contained in:
@@ -1,27 +1,33 @@
|
||||
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) Qxt Foundation. Some rights reserved.
|
||||
**
|
||||
** This file is part of the QxtWeb module of the Qxt library.
|
||||
**
|
||||
** This library is free software; you can redistribute it and/or modify it
|
||||
** under the terms of the Common Public License, version 1.0, as published
|
||||
** by IBM, and/or under the terms of the GNU Lesser General Public License,
|
||||
** version 2.1, as published by the Free Software Foundation.
|
||||
**
|
||||
** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY
|
||||
** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
|
||||
** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR
|
||||
** FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** You should have received a copy of the CPL and the LGPL along with this
|
||||
** file. See the LICENSE file and the cpl1.0.txt/lgpl-2.1.txt files
|
||||
** included with the source distribution for more information.
|
||||
** If you did not receive a copy of the licenses, contact the Qxt Foundation.
|
||||
**
|
||||
** <http://libqxt.org> <foundation@libqxt.org>
|
||||
**
|
||||
****************************************************************************/
|
||||
** Copyright (c) 2006 - 2011, the LibQxt project.
|
||||
** See the Qxt AUTHORS file for a list of authors and copyright holders.
|
||||
** All rights reserved.
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * 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.
|
||||
** * Neither the name of the LibQxt project nor the
|
||||
** names of its contributors may be used to endorse or promote products
|
||||
** derived from this software without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
** ANY EXPRESS 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 <COPYRIGHT HOLDER> 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.
|
||||
**
|
||||
** <http://libqxt.org> <foundation@libqxt.org>
|
||||
*****************************************************************************/
|
||||
|
||||
/*!
|
||||
\class QxtHttpServerConnector
|
||||
@@ -41,8 +47,32 @@ high traffic scenarios or virtual hosting configurations.
|
||||
|
||||
\sa QxtHttpSessionManager
|
||||
*/
|
||||
|
||||
/*!
|
||||
\class QxtHttpsServerConnector
|
||||
|
||||
\inmodule QxtWeb
|
||||
|
||||
\brief The QxtHttpsServerConnector class provides a built-in HTTPS server for QxtHttpSessionManager
|
||||
|
||||
QxtHttpSessionManager does the work of managing sessions and state for the
|
||||
otherwise stateless HTTP protocol, but it relies on QxtAbstractHttpConnector
|
||||
subclasses to implement the protocol used to communicate with the web server.
|
||||
|
||||
QxtHttpsServerConnector is a convenience subclass of QxtHttpServerConnector
|
||||
that adds HTTPS handling to the internal web server by delegating the
|
||||
incoming connection handling to QxtSslServer.
|
||||
|
||||
QxtHttpsServerConnector is only available if Qt was compiled with OpenSSL support.
|
||||
|
||||
\sa QxtHttpSessionManager
|
||||
\sa QxtHttpServerConnector
|
||||
\sa QxtSslServer
|
||||
*/
|
||||
|
||||
#include "qxthttpsessionmanager.h"
|
||||
#include "qxtwebevent.h"
|
||||
#include "qxtsslserver.h"
|
||||
#include <QTcpServer>
|
||||
#include <QHash>
|
||||
#include <QTcpSocket>
|
||||
@@ -57,12 +87,19 @@ public:
|
||||
#endif
|
||||
|
||||
/*!
|
||||
* Creates a QxtHttpServerConnector with the given \a parent.
|
||||
* Creates a QxtHttpServerConnector with the given \a parent and \a server.
|
||||
*
|
||||
* You may pass a QTcpServer subclass to the \a server parameter to enable customized behaviors, for
|
||||
* instance to use QSslSocket like QxtHttpsServerConnector does. Pass 0 (the default) to \a server
|
||||
* to allow QxtHttpServerConnector to create its own QTcpServer.
|
||||
*/
|
||||
QxtHttpServerConnector::QxtHttpServerConnector(QObject* parent) : QxtAbstractHttpConnector(parent)
|
||||
QxtHttpServerConnector::QxtHttpServerConnector(QObject* parent, QTcpServer* server) : QxtAbstractHttpConnector(parent)
|
||||
{
|
||||
QXT_INIT_PRIVATE(QxtHttpServerConnector);
|
||||
qxt_d().server = new QTcpServer(this);
|
||||
if(server)
|
||||
qxt_d().server = server;
|
||||
else
|
||||
qxt_d().server = new QTcpServer(this);
|
||||
QObject::connect(qxt_d().server, SIGNAL(newConnection()), this, SLOT(acceptConnection()));
|
||||
}
|
||||
|
||||
@@ -74,6 +111,36 @@ bool QxtHttpServerConnector::listen(const QHostAddress& iface, quint16 port)
|
||||
return qxt_d().server->listen(iface, port);
|
||||
}
|
||||
|
||||
/*!
|
||||
* \reimp
|
||||
*/
|
||||
bool QxtHttpServerConnector::shutdown()
|
||||
{
|
||||
if(qxt_d().server->isListening()){
|
||||
qxt_d().server->close();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \reimp
|
||||
*/
|
||||
quint16 QxtHttpServerConnector::serverPort() const
|
||||
{
|
||||
return qxt_d().server->serverPort();
|
||||
}
|
||||
|
||||
/*!
|
||||
* Returns the QTcpServer used by this QxtHttpServerConnector. Use this pointer
|
||||
* to adjust the maxPendingConnections or QNetworkProxy properties of the
|
||||
* server.
|
||||
*/
|
||||
QTcpServer* QxtHttpServerConnector::tcpServer() const
|
||||
{
|
||||
return qxt_d().server;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
*/
|
||||
@@ -123,3 +190,54 @@ void QxtHttpServerConnector::writeHeaders(QIODevice* device, const QHttpResponse
|
||||
if (header.majorVersion() == 0) return; // 0.9 doesn't have headers
|
||||
device->write(header.toString().toUtf8());
|
||||
}
|
||||
|
||||
#ifndef QT_NO_OPENSSL
|
||||
/*!
|
||||
* Creates a QxtHttpsServerConnector with the given \a parent.
|
||||
*/
|
||||
QxtHttpsServerConnector::QxtHttpsServerConnector(QObject* parent)
|
||||
: QxtHttpServerConnector(parent, new QxtSslServer)
|
||||
{
|
||||
// initializers only
|
||||
// Reparent the SSL server
|
||||
tcpServer()->setParent(this);
|
||||
}
|
||||
|
||||
/*!
|
||||
* \reimp
|
||||
*/
|
||||
bool QxtHttpsServerConnector::listen(const QHostAddress& iface, quint16 port)
|
||||
{
|
||||
return QxtHttpServerConnector::listen(iface, port);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Returns the QxtSslServer used by this QxtHttpsServerConnector. Use this
|
||||
* pointer to adjust the maxPendingConnections or QNetworkProxy properties of the
|
||||
* server or the SSL properties assigned to incoming connections.
|
||||
*/
|
||||
QxtSslServer* QxtHttpsServerConnector::tcpServer() const
|
||||
{
|
||||
return static_cast<QxtSslServer*>(QxtHttpServerConnector::tcpServer());
|
||||
}
|
||||
|
||||
/*!
|
||||
* Handles peer verification errors during SSL negotiation. This method may
|
||||
* be overridden to tear-down the connection.
|
||||
*/
|
||||
void QxtHttpsServerConnector::peerVerifyError(const QSslError &error)
|
||||
{
|
||||
qWarning() << "QxtHttpsServerConnector::peerVerifyError(): " << error.errorString();
|
||||
}
|
||||
|
||||
/*!
|
||||
* Handles errors with SSL negotiation. This method may be overridden to
|
||||
* examine the errors and take appropriate action. The default behavior
|
||||
* is to terminate the connection (ie: ignoreSslErrors() is NOT called).
|
||||
*/
|
||||
void QxtHttpsServerConnector::sslErrors(const QList<QSslError> &errors)
|
||||
{
|
||||
for(int i = 0; i < errors.size(); ++i)
|
||||
qWarning() << "QxtHttpsServerConnector::sslErrors(): " << errors.at(i).errorString();
|
||||
}
|
||||
#endif /* QT_NO_OPENSSL */
|
||||
|
Reference in New Issue
Block a user