1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-22 07:38:59 -04:00

SDRdaemon: differentiate data and device settings. Implement data settings (1)

This commit is contained in:
f4exb
2018-08-23 01:12:46 +02:00
parent e067778b78
commit 749f8a8ae7
13 changed files with 6625 additions and 3608 deletions
+126 -8
View File
@@ -26,6 +26,7 @@
#include "webapirequestmapper.h"
#include "SWGDaemonSummaryResponse.h"
#include "SWGInstanceDevicesResponse.h"
#include "SWGSDRDaemonDataSettings.h"
#include "SWGDeviceSettings.h"
#include "SWGDeviceState.h"
#include "SWGDeviceReport.h"
@@ -95,10 +96,12 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http
daemonInstanceSummaryService(request, response);
} else if (path == WebAPIAdapterDaemon::daemonInstanceLoggingURL) {
daemonInstanceLoggingService(request, response);
} else if (path == WebAPIAdapterDaemon::daemonSettingsURL) {
daemonSettingsService(request, response);
} else if (path == WebAPIAdapterDaemon::daemonReportURL) {
daemonReportService(request, response);
} else if (path == WebAPIAdapterDaemon::daemonDataSettingsURL) {
daemonDataSettingsService(request, response);
} else if (path == WebAPIAdapterDaemon::daemonDeviceSettingsURL) {
daemonDeviceSettingsService(request, response);
} else if (path == WebAPIAdapterDaemon::daemonDeviceReportURL) {
daemonDeviceReportService(request, response);
} else if (path == WebAPIAdapterDaemon::daemonRunURL) {
daemonRunService(request, response);
} else {
@@ -188,7 +191,75 @@ void WebAPIRequestMapper::daemonInstanceLoggingService(qtwebapp::HttpRequest& re
}
}
void WebAPIRequestMapper::daemonSettingsService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
void WebAPIRequestMapper::daemonDataSettingsService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
{
SWGSDRangel::SWGErrorResponse errorResponse;
response.setHeader("Content-Type", "application/json");
response.setHeader("Access-Control-Allow-Origin", "*");
if ((request.getMethod() == "PUT") || (request.getMethod() == "PATCH"))
{
QString jsonStr = request.getBody();
QJsonObject jsonObject;
if (parseJsonBody(jsonStr, jsonObject, response))
{
SWGSDRangel::SWGSDRDaemonDataSettings normalResponse;
QStringList dataSettingsKeys;
if (validateDataSettings(normalResponse, jsonObject, dataSettingsKeys))
{
int status = m_adapter->daemonDataSettingsPutPatch(
(request.getMethod() == "PUT"), // force settings on PUT
dataSettingsKeys,
normalResponse,
errorResponse);
response.setStatus(status);
if (status/100 == 2) {
response.write(normalResponse.asJson().toUtf8());
} else {
response.write(errorResponse.asJson().toUtf8());
}
}
else
{
response.setStatus(400,"Invalid JSON request");
errorResponse.init();
*errorResponse.getMessage() = "Invalid JSON request";
response.write(errorResponse.asJson().toUtf8());
}
}
else
{
response.setStatus(400,"Invalid JSON format");
errorResponse.init();
*errorResponse.getMessage() = "Invalid JSON format";
response.write(errorResponse.asJson().toUtf8());
}
}
else if (request.getMethod() == "GET")
{
SWGSDRangel::SWGSDRDaemonDataSettings normalResponse;
int status = m_adapter->daemonDataSettingsGet(normalResponse, errorResponse);
response.setStatus(status);
if (status/100 == 2) {
response.write(normalResponse.asJson().toUtf8());
} else {
response.write(errorResponse.asJson().toUtf8());
}
}
else
{
response.setStatus(405,"Invalid HTTP method");
errorResponse.init();
*errorResponse.getMessage() = "Invalid HTTP method";
response.write(errorResponse.asJson().toUtf8());
}
}
void WebAPIRequestMapper::daemonDeviceSettingsService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
{
SWGSDRangel::SWGErrorResponse errorResponse;
response.setHeader("Content-Type", "application/json");
@@ -207,7 +278,7 @@ void WebAPIRequestMapper::daemonSettingsService(qtwebapp::HttpRequest& request,
if (validateDeviceSettings(normalResponse, jsonObject, deviceSettingsKeys))
{
int status = m_adapter->daemonSettingsPutPatch(
int status = m_adapter->daemonDeviceSettingsPutPatch(
(request.getMethod() == "PUT"), // force settings on PUT
deviceSettingsKeys,
normalResponse,
@@ -240,7 +311,7 @@ void WebAPIRequestMapper::daemonSettingsService(qtwebapp::HttpRequest& request,
{
SWGSDRangel::SWGDeviceSettings normalResponse;
resetDeviceSettings(normalResponse);
int status = m_adapter->daemonSettingsGet(normalResponse, errorResponse);
int status = m_adapter->daemonDeviceSettingsGet(normalResponse, errorResponse);
response.setStatus(status);
if (status/100 == 2) {
@@ -258,7 +329,7 @@ void WebAPIRequestMapper::daemonSettingsService(qtwebapp::HttpRequest& request,
}
}
void WebAPIRequestMapper::daemonReportService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
void WebAPIRequestMapper::daemonDeviceReportService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
{
SWGSDRangel::SWGErrorResponse errorResponse;
response.setHeader("Content-Type", "application/json");
@@ -340,6 +411,53 @@ void WebAPIRequestMapper::daemonRunService(qtwebapp::HttpRequest& request, qtweb
}
}
bool WebAPIRequestMapper::validateDataSettings(SWGSDRangel::SWGSDRDaemonDataSettings& dataSettings, QJsonObject& jsonObject, QStringList& dataSettingsKeys)
{
if (jsonObject.contains("nbFECBlocks"))
{
int nbFECBlocks = jsonObject["nbFECBlocks"].toInt();
if (nbFECBlocks >=0 && nbFECBlocks < 127) {
dataSettings.setNbFecBlocks(nbFECBlocks);
} else {
dataSettings.setNbFecBlocks(0);
}
}
if (jsonObject.contains("dataPort"))
{
int dataPort = jsonObject["dataPort"].toInt();
if (dataPort > 1023 && dataPort < 65536) {
dataSettings.setDataPort(dataPort);
} else {
dataSettings.setDataPort(9090);
}
}
if (jsonObject.contains("txDelay"))
{
int txDelay = jsonObject["txDelay"].toInt();
if (txDelay > 100) {
dataSettings.setTxDelay(txDelay);
} else {
dataSettings.setTxDelay(100);
}
}
if (jsonObject.contains("dataAddress") && jsonObject["dataAddress"].isString()) {
dataSettings.setDataAddress(new QString(jsonObject["dataAddress"].toString()));
} else {
return false;
}
dataSettingsKeys = jsonObject.keys();
return true;
}
// TODO: put in library in common with SDRangel. Can be static.
bool WebAPIRequestMapper::validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& deviceSettings, QJsonObject& jsonObject, QStringList& deviceSettingsKeys)
{