1
0
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:
Dominik Schmidt
2013-01-05 19:59:24 +01:00
parent 7969f4ab51
commit d7645a33be
46 changed files with 4141 additions and 1208 deletions

View File

@@ -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 */