diff --git a/.gitignore b/.gitignore index 6732e72..fab7372 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bbce6dd --- /dev/null +++ b/Dockerfile @@ -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 diff --git a/StreamingWebserver.pro b/StreamingWebserver.pro new file mode 100644 index 0000000..ff6dcc9 --- /dev/null +++ b/StreamingWebserver.pro @@ -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) diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..f035609 --- /dev/null +++ b/main.cpp @@ -0,0 +1,17 @@ +#include + +#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(); +} diff --git a/streamingwebserver.cpp b/streamingwebserver.cpp new file mode 100644 index 0000000..e041c0d --- /dev/null +++ b/streamingwebserver.cpp @@ -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")); +} diff --git a/streamingwebserver.h b/streamingwebserver.h new file mode 100644 index 0000000..690e4f2 --- /dev/null +++ b/streamingwebserver.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +#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; +};