fix httprequest and improoved webserver

This commit is contained in:
Simon Stürz 2015-09-05 18:21:46 +02:00 committed by Michael Zanetti
parent b11206cbc8
commit 6639890fd3
2 changed files with 16 additions and 12 deletions

View File

@ -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();

View File

@ -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();
} }
} }