fix httprequest and improoved webserver
This commit is contained in:
parent
b11206cbc8
commit
6639890fd3
@ -175,6 +175,7 @@ void HttpRequest::validate()
|
|||||||
qCWarning(dcWebServer) << "Could not parse end of HTTP header (empty line between header and body):" << m_rawData;
|
qCWarning(dcWebServer) << "Could not parse end of HTTP header (empty line between header and body):" << m_rawData;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_rawHeader = m_rawData.left(headerEndIndex);
|
m_rawHeader = m_rawData.left(headerEndIndex);
|
||||||
m_payload = m_rawData.right(m_rawData.length() - headerEndIndex).simplified();
|
m_payload = m_rawData.right(m_rawData.length() - headerEndIndex).simplified();
|
||||||
|
|
||||||
|
|||||||
@ -144,11 +144,6 @@ void WebServer::sendHttpReply(HttpReply *reply)
|
|||||||
reply->packReply();
|
reply->packReply();
|
||||||
qCDebug(dcWebServer) << "respond" << reply->httpStatusCode() << reply->httpReasonPhrase();
|
qCDebug(dcWebServer) << "respond" << reply->httpStatusCode() << reply->httpReasonPhrase();
|
||||||
socket->write(reply->data());
|
socket->write(reply->data());
|
||||||
|
|
||||||
// // close the connection if wanted
|
|
||||||
// if (reply->closeConnection())
|
|
||||||
// socket->close();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WebServer::verifyFile(QSslSocket *socket, const QString &fileName)
|
bool WebServer::verifyFile(QSslSocket *socket, const QString &fileName)
|
||||||
@ -277,7 +272,7 @@ void WebServer::readClient()
|
|||||||
|
|
||||||
HttpRequest request;
|
HttpRequest request;
|
||||||
if (m_incompleteRequests.contains(socket)) {
|
if (m_incompleteRequests.contains(socket)) {
|
||||||
qCWarning(dcWebServer) << "Append data to incomlete request";
|
qCDebug(dcWebServer) << "Append data to incomlete request";
|
||||||
request = m_incompleteRequests.take(socket);
|
request = m_incompleteRequests.take(socket);
|
||||||
request.appendData(data);
|
request.appendData(data);
|
||||||
} else {
|
} else {
|
||||||
@ -338,7 +333,17 @@ void WebServer::readClient()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// request for a file...
|
// request for a file...
|
||||||
if (request.method() == HttpRequest::Get && m_webinterfaceDir.exists()) {
|
if (request.method() == HttpRequest::Get) {
|
||||||
|
// check if the webinterface dir does exist, otherwise a filerequest is not relevant
|
||||||
|
if (!m_webinterfaceDir.exists()) {
|
||||||
|
qCWarning(dcWebServer) << "webinterface folder" << m_webinterfaceDir.path() << "does not exist.";
|
||||||
|
HttpReply *reply = RestResource::createErrorReply(HttpReply::NotFound);
|
||||||
|
reply->setClientId(clientId);
|
||||||
|
sendHttpReply(reply);
|
||||||
|
reply->deleteLater();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QString path = fileName(request.url().path());
|
QString path = fileName(request.url().path());
|
||||||
if (!verifyFile(socket, path))
|
if (!verifyFile(socket, path))
|
||||||
return;
|
return;
|
||||||
@ -362,7 +367,7 @@ void WebServer::readClient()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// reject everything else...
|
// reject everything else...
|
||||||
qCWarning(dcWebServer) << "Unknown message received. Respond client with 501: Not Implemented.";
|
qCWarning(dcWebServer) << "Unknown message received.";
|
||||||
HttpReply *reply = RestResource::createErrorReply(HttpReply::NotImplemented);
|
HttpReply *reply = RestResource::createErrorReply(HttpReply::NotImplemented);
|
||||||
reply->setClientId(clientId);
|
reply->setClientId(clientId);
|
||||||
sendHttpReply(reply);
|
sendHttpReply(reply);
|
||||||
@ -377,10 +382,8 @@ void WebServer::onDisconnected()
|
|||||||
foreach (WebServerClient *client, m_webServerClients) {
|
foreach (WebServerClient *client, m_webServerClients) {
|
||||||
if (client->address() == socket->peerAddress()) {
|
if (client->address() == socket->peerAddress()) {
|
||||||
client->removeConnection(socket);
|
client->removeConnection(socket);
|
||||||
qCDebug(dcWebServer) << "connection count" << client->connections().count();
|
|
||||||
if (client->connections().isEmpty()) {
|
if (client->connections().isEmpty()) {
|
||||||
m_webServerClients.removeAll(client);
|
m_webServerClients.removeAll(client);
|
||||||
qCDebug(dcWebServer) << "delete client" << client->address().toString();
|
|
||||||
client->deleteLater();
|
client->deleteLater();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -411,8 +414,9 @@ void WebServer::onEncrypted()
|
|||||||
|
|
||||||
void WebServer::onError(QAbstractSocket::SocketError error)
|
void WebServer::onError(QAbstractSocket::SocketError error)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(error)
|
||||||
QSslSocket* socket = static_cast<QSslSocket *>(sender());
|
QSslSocket* socket = static_cast<QSslSocket *>(sender());
|
||||||
qCWarning(dcConnection) << "Client socket error" << socket->peerAddress() << error << socket->errorString();
|
qCWarning(dcConnection) << QString("Client socket error %1:%2 ->").arg(socket->peerAddress().toString()).arg(socket->peerPort()) << socket->errorString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! Returns true if this \l{WebServer} started successfully. */
|
/*! Returns true if this \l{WebServer} started successfully. */
|
||||||
@ -497,5 +501,4 @@ void WebServerClient::onTimout()
|
|||||||
socket->close();
|
socket->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user