From 279a88a17f98eafb2edf4651142c94deb67ef70e Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 17 Nov 2017 08:52:15 +0100 Subject: [PATCH] Put web server for API in place in the main window (1) --- httpserver/httpconnectionhandlerpool.cpp | 7 ++++++- httpserver/httplistener.cpp | 6 +++++- httpserver/httprequest.cpp | 6 ++++-- httpserver/httprequest.h | 2 ++ sdrbase/webapi/webapirequestmapper.cpp | 6 +++++- sdrgui/CMakeLists.txt | 2 ++ sdrgui/mainwindow.cpp | 10 ++++++++++ sdrgui/mainwindow.h | 5 +++++ 8 files changed, 39 insertions(+), 5 deletions(-) diff --git a/httpserver/httpconnectionhandlerpool.cpp b/httpserver/httpconnectionhandlerpool.cpp index 7634f940e..5e4b59fb4 100644 --- a/httpserver/httpconnectionhandlerpool.cpp +++ b/httpserver/httpconnectionhandlerpool.cpp @@ -66,7 +66,12 @@ HttpConnectionHandler* HttpConnectionHandlerPool::getConnectionHandler() int maxConnectionHandlers = useQtSettings ? settings->value("maxThreads",100).toInt() : listenerSettings.maxThreads; if (pool.count()setBusy(); pool.append(freeHandler); } diff --git a/httpserver/httplistener.cpp b/httpserver/httplistener.cpp index 35407deda..5cbf712f2 100644 --- a/httpserver/httplistener.cpp +++ b/httpserver/httplistener.cpp @@ -51,7 +51,11 @@ void HttpListener::listen() { if (!pool) { - pool=new HttpConnectionHandlerPool(settings,requestHandler); + if (useQtSettings) { + pool = new HttpConnectionHandlerPool(settings, requestHandler); + } else { + pool = new HttpConnectionHandlerPool(listenerSettings, requestHandler); + } } QString host = useQtSettings ? settings->value("host").toString() : listenerSettings.host; int port = useQtSettings ? settings->value("port").toInt() : listenerSettings.port; diff --git a/httpserver/httprequest.cpp b/httpserver/httprequest.cpp index 8d0e45ba5..7e8c1f0b4 100644 --- a/httpserver/httprequest.cpp +++ b/httpserver/httprequest.cpp @@ -12,7 +12,8 @@ using namespace qtwebapp; -HttpRequest::HttpRequest(QSettings* settings) +HttpRequest::HttpRequest(QSettings* settings) : + useQtSettings(true) { status=waitForRequest; currentSize=0; @@ -22,7 +23,8 @@ HttpRequest::HttpRequest(QSettings* settings) tempFile=0; } -HttpRequest::HttpRequest(const HttpListenerSettings& settings) +HttpRequest::HttpRequest(const HttpListenerSettings& settings) : + useQtSettings(false) { status=waitForRequest; currentSize=0; diff --git a/httpserver/httprequest.h b/httpserver/httprequest.h index e764b60ce..f628d76bd 100644 --- a/httpserver/httprequest.h +++ b/httpserver/httprequest.h @@ -239,6 +239,8 @@ private: /** Buffer for collecting characters of request and header lines */ QByteArray lineBuffer; + /** Settings flag */ + bool useQtSettings; }; } // end of namespace diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp index db9fdd5b6..4950670e0 100644 --- a/sdrbase/webapi/webapirequestmapper.cpp +++ b/sdrbase/webapi/webapirequestmapper.cpp @@ -27,7 +27,7 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http { if (m_adapter == 0) // format service unavailable if adapter is null { - + response.setStatus(500,"Service not available"); } else // normal processing { @@ -37,5 +37,9 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http { } + else + { + response.setStatus(404,"Not found"); + } } } diff --git a/sdrgui/CMakeLists.txt b/sdrgui/CMakeLists.txt index 8ce8cba0e..68aa53a3c 100644 --- a/sdrgui/CMakeLists.txt +++ b/sdrgui/CMakeLists.txt @@ -148,6 +148,8 @@ include_directories( . ${CMAKE_SOURCE_DIR}/sdrbase ${CMAKE_SOURCE_DIR}/logging + ${CMAKE_SOURCE_DIR}/httpserver + ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client ${CMAKE_CURRENT_BINARY_DIR} ${OPENGL_INCLUDE_DIR} ) diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index ae4379c2a..fcbaffdf3 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -52,6 +52,8 @@ #include "gui/glspectrum.h" #include "gui/glspectrumgui.h" #include "loggerwithfile.h" +#include "webapi/webapirequestmapper.h" +#include "webapi/webapiserver.h" #include "mainwindow.h" #include "ui_mainwindow.h" @@ -195,11 +197,19 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, QWidget* parent) : connect(ui->tabInputsView, SIGNAL(currentChanged(int)), this, SLOT(tabInputViewIndexChanged())); + m_requestMapper = new WebAPIRequestMapper(qApp); + m_apiServer = new WebAPIServer(m_requestMapper); + m_apiServer->start(); + qDebug() << "MainWindow::MainWindow: end"; } MainWindow::~MainWindow() { + m_apiServer->stop(); + delete m_apiServer; + delete m_requestMapper; + delete m_pluginManager; delete m_dateTimeWidget; delete m_showSystemWidget; diff --git a/sdrgui/mainwindow.h b/sdrgui/mainwindow.h index 4f6c038dc..6d77c5fb8 100644 --- a/sdrgui/mainwindow.h +++ b/sdrgui/mainwindow.h @@ -49,6 +49,8 @@ class DeviceSinkAPI; class DeviceUISet; class PluginInterface; class QWidget; +class WebAPIRequestMapper; +class WebAPIServer; namespace qtwebapp { class LoggerWithFile; @@ -116,6 +118,9 @@ private: qtwebapp::LoggerWithFile *m_logger; + WebAPIRequestMapper *m_requestMapper; + WebAPIServer *m_apiServer; + void loadSettings(); void loadPresetSettings(const Preset* preset, int tabIndex); void savePresetSettings(Preset* preset, int tabIndex);