Added basic webserver functionality

This commit is contained in:
0xFEEDC0DE64
2018-05-02 18:22:57 +02:00
parent e611bcf762
commit 187c655b8d
6 changed files with 177 additions and 29 deletions

92
.gitignore vendored
View File

@ -1,39 +1,73 @@
# C++ objects and libs
# This file is used to ignore files which are generated
# ----------------------------------------------------------------------------
*.slo
*.lo
*.o
*~
*.autosave
*.a
*.la
*.lai
*.core
*.moc
*.o
*.obj
*.orig
*.rej
*.so
*.dll
*.dylib
# Qt-es
*.so.*
*_pch.h.cpp
*_resource.rc
*.qm
.#*
*.*#
core
!core/
tags
.DS_Store
.directory
*.debug
Makefile*
*.prl
*.app
moc_*.cpp
ui_*.h
qrc_*.cpp
Thumbs.db
*.res
*.rc
/.qmake.cache
/.qmake.stash
*.pro.user
*.pro.user.*
*.qbs.user
*.qbs.user.*
*.moc
moc_*.cpp
moc_*.h
qrc_*.cpp
ui_*.h
Makefile*
*build-*
# QtCreator
# qtcreator generated files
*.pro.user*
*.autosave
# xemacs temporary files
*.flc
# QtCtreator Qml
*.qmlproject.user
*.qmlproject.user.*
# Vim temporary files
.*.swp
# QtCtreator CMake
CMakeLists.txt.user*
# Visual Studio generated files
*.ib_pdb_index
*.idb
*.ilk
*.pdb
*.sln
*.suo
*.vcproj
*vcproj.*.*.user
*.ncb
*.sdf
*.opensdf
*.vcxproj
*vcxproj.*
# MinGW generated files
*.Debug
*.Release
# Python byte code
*.pyc
# Binaries
# --------
*.dll
*.exe

42
Dockerfile Normal file
View File

@ -0,0 +1,42 @@
FROM ubuntu:artful
RUN ln -snf /usr/share/zoneinfo/Europe/Vienna /etc/localtime && echo Europe/Vienna > /etc/timezone
RUN apt update \
&& apt install tzdata -y \
&& rm /var/lib/apt/lists/* /var/log/* -Rf
RUN apt update \
&& apt install libssl1.0.0 ca-certificates libqt5core5a libqt5gui5 libqt5network5 libqt5multimedia5 -y \
&& rm /var/lib/apt/lists/* /var/log/* -Rf
RUN apt update \
&& apt install git-core g++ make qt5-default qtmultimedia5-dev qttools5-dev qttools5-dev-tools -y \
&& rm /var/lib/apt/lists/* /var/log/* -Rf
ADD . /tmp/StreamingWebserver
RUN mkdir -p /tmp/build_StreamingWebserver \
&& qmake /tmp/StreamingWebserver -o /tmp/build_StreamingWebserver/Makefile -config release \
&& make -C /tmp/build_StreamingWebserver -j8 \
&& make -C /tmp/build_StreamingWebserver install
FROM ubuntu:artful
RUN ln -snf /usr/share/zoneinfo/Europe/Vienna /etc/localtime && echo Europe/Vienna > /etc/timezone
RUN apt update \
&& apt install tzdata -y \
&& rm /var/lib/apt/lists/* /var/log/* -Rf
RUN apt update \
&& apt install libssl1.0.0 ca-certificates libqt5core5a libqt5gui5 libqt5network5 libqt5multimedia5 -y \
&& rm /var/lib/apt/lists/* /var/log/* -Rf
COPY --from=0 /tmp/build_StreamingWebserver/StreamingWebserver /root/
EXPOSE 8080/tcp
CMD /root/StreamingWebserver

16
StreamingWebserver.pro Normal file
View File

@ -0,0 +1,16 @@
QT = core network
CONFIG += c++14
CONFIG -= app_bundle
DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000
HEADERS += streamingwebserver.h
SOURCES += main.cpp \
streamingwebserver.cpp
OTHER_FILES += .dockerignore \
Dockerfile
include(QtWebserver/QtWebserver.pri)

17
main.cpp Normal file
View File

@ -0,0 +1,17 @@
#include <QCoreApplication>
#include "streamingwebserver.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
StreamingWebserver server(&app);
if(!server.listen(QHostAddress::Any, 8080))
{
qCritical() << "webserver could not start listening:" << server.errorString();
return -2;
}
return app.exec();
}

20
streamingwebserver.cpp Normal file
View File

@ -0,0 +1,20 @@
#include "streamingwebserver.h"
#include "httpclientconnection.h"
#include "httpcontainers.h"
StreamingWebserver::StreamingWebserver(QObject *parent) :
HttpServer(parent)
{
}
void StreamingWebserver::handleRequest(HttpClientConnection *connection, const HttpRequest &request)
{
HttpResponse response;
response.protocol = request.protocol;
response.statusCode = HttpResponse::StatusCode::NotFound;
response.headers.insert(QStringLiteral("Server"), QStringLiteral("Hatschi Server 1.0"));
response.headers.insert(QStringLiteral("Content-Type"), QStringLiteral("text/html"));
connection->sendResponse(response, tr("Not Found"));
}

19
streamingwebserver.h Normal file
View File

@ -0,0 +1,19 @@
#pragma once
#include <QObject>
#include "httpserver.h"
class HttpClientConnection;
class HttpRequest;
class StreamingWebserver : public HttpServer
{
Q_OBJECT
public:
explicit StreamingWebserver(QObject *parent = Q_NULLPTR);
protected:
void handleRequest(HttpClientConnection *connection, const HttpRequest &request) Q_DECL_OVERRIDE;
};