Adding RESTAPI processing

This commit is contained in:
stephb9959
2021-03-03 23:18:51 -08:00
parent 9dcffbb649
commit fa1ae57e82
16 changed files with 403 additions and 30 deletions

View File

@@ -21,6 +21,6 @@ add_executable(ucentral
src/uCentral.cpp src/uCentral.h src/common.h src/TIP/Routing.cpp src/TIP/Routing.h
src/TIP/WebTokenResult.cpp src/TIP/WebTokenResult.h src/uCentralRESTAPIServer.cpp src/uCentralRESTAPIServer.h
src/uCentralWebSocketServer.cpp src/uCentralWebSocketServer.h src/SubSystemServer.cpp src/SubSystemServer.h
src/uStorageService.cpp src/uStorageService.h src/DeviceStatusServer.cpp src/DeviceStatusServer.h)
src/uStorageService.cpp src/uStorageService.h src/DeviceStatusServer.cpp src/DeviceStatusServer.h src/RESTAPI_oauth2Handler.cpp src/RESTAPI_oauth2Handler.h src/RESTAPI_devicesHandler.cpp src/RESTAPI_devicesHandler.h src/RESTAPI_deviceHandler.cpp src/RESTAPI_deviceHandler.h src/RESTAPI_UnknownRequestHandler.cpp src/RESTAPI_UnknownRequestHandler.h)
target_link_libraries(ucentral PRIVATE yaml-cpp ${Poco_LIBRARIES} ${Boost_LIBRARIES})

View File

@@ -0,0 +1,10 @@
//
// Created by stephane bourque on 2021-03-03.
//
#include "RESTAPI_UnknownRequestHandler.h"
void RESTAPI_UnknownRequestHandler::handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
{
};

View File

@@ -0,0 +1,46 @@
//
// Created by stephane bourque on 2021-03-03.
//
#ifndef UCENTRAL_RESTAPI_UNKNOWNREQUESTHANDLER_H
#define UCENTRAL_RESTAPI_UNKNOWNREQUESTHANDLER_H
#include "Poco/Net/HTTPServer.h"
#include "Poco/Net/HTTPRequestHandler.h"
#include "Poco/Net/HTTPRequestHandlerFactory.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/HTTPServerRequest.h"
#include "Poco/Net/HTTPServerResponse.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/SecureServerSocket.h"
#include "Poco/Net/WebSocket.h"
#include "Poco/Net/NetException.h"
#include "Poco/Net/Context.h"
#include "Poco/JSON/Parser.h"
#include "Poco/DynamicAny.h"
using Poco::Net::ServerSocket;
using Poco::Net::SecureServerSocket;
using Poco::Net::WebSocket;
using Poco::Net::Context;
using Poco::Net::WebSocketException;
using Poco::Net::HTTPRequestHandler;
using Poco::Net::HTTPRequestHandlerFactory;
using Poco::Net::HTTPServer;
using Poco::Net::HTTPServerRequest;
using Poco::Net::HTTPResponse;
using Poco::Net::HTTPServerResponse;
using Poco::Net::HTTPServerParams;
using Poco::JSON::Parser;
class RESTAPI_UnknownRequestHandler: public HTTPRequestHandler
{
public:
void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response);
};
#endif //UCENTRAL_RESTAPI_UNKNOWNREQUESTHANDLER_H

View File

@@ -0,0 +1,10 @@
//
// Created by stephane bourque on 2021-03-03.
//
#include "RESTAPI_deviceHandler.h"
void RESTAPI_deviceHandler::handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
{
};

View File

@@ -0,0 +1,46 @@
//
// Created by stephane bourque on 2021-03-03.
//
#ifndef UCENTRAL_RESTAPI_DEVICEHANDLER_H
#define UCENTRAL_RESTAPI_DEVICEHANDLER_H
#include "Poco/Net/HTTPServer.h"
#include "Poco/Net/HTTPRequestHandler.h"
#include "Poco/Net/HTTPRequestHandlerFactory.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/HTTPServerRequest.h"
#include "Poco/Net/HTTPServerResponse.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/SecureServerSocket.h"
#include "Poco/Net/WebSocket.h"
#include "Poco/Net/NetException.h"
#include "Poco/Net/Context.h"
#include "Poco/JSON/Parser.h"
#include "Poco/DynamicAny.h"
using Poco::Net::ServerSocket;
using Poco::Net::SecureServerSocket;
using Poco::Net::WebSocket;
using Poco::Net::Context;
using Poco::Net::WebSocketException;
using Poco::Net::HTTPRequestHandler;
using Poco::Net::HTTPRequestHandlerFactory;
using Poco::Net::HTTPServer;
using Poco::Net::HTTPServerRequest;
using Poco::Net::HTTPResponse;
using Poco::Net::HTTPServerResponse;
using Poco::Net::HTTPServerParams;
using Poco::JSON::Parser;
class RESTAPI_deviceHandler: public HTTPRequestHandler
{
public:
void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response);
};
#endif //UCENTRAL_RESTAPI_DEVICEHANDLER_H

View File

@@ -0,0 +1,10 @@
//
// Created by stephane bourque on 2021-03-03.
//
#include "RESTAPI_devicesHandler.h"
void RESTAPI_devicesHandler::handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
{
};

View File

@@ -0,0 +1,44 @@
//
// Created by stephane bourque on 2021-03-03.
//
#ifndef UCENTRAL_RESTAPI_DEVICESHANDLER_H
#define UCENTRAL_RESTAPI_DEVICESHANDLER_H
#include "Poco/Net/HTTPServer.h"
#include "Poco/Net/HTTPRequestHandler.h"
#include "Poco/Net/HTTPRequestHandlerFactory.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/HTTPServerRequest.h"
#include "Poco/Net/HTTPServerResponse.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/SecureServerSocket.h"
#include "Poco/Net/WebSocket.h"
#include "Poco/Net/NetException.h"
#include "Poco/Net/Context.h"
#include "Poco/JSON/Parser.h"
#include "Poco/DynamicAny.h"
using Poco::Net::ServerSocket;
using Poco::Net::SecureServerSocket;
using Poco::Net::WebSocket;
using Poco::Net::Context;
using Poco::Net::WebSocketException;
using Poco::Net::HTTPRequestHandler;
using Poco::Net::HTTPRequestHandlerFactory;
using Poco::Net::HTTPServer;
using Poco::Net::HTTPServerRequest;
using Poco::Net::HTTPResponse;
using Poco::Net::HTTPServerResponse;
using Poco::Net::HTTPServerParams;
using Poco::JSON::Parser;
class RESTAPI_devicesHandler: public HTTPRequestHandler
{
public:
void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response);
};
#endif //UCENTRAL_RESTAPI_DEVICESHANDLER_H

View File

@@ -0,0 +1,10 @@
//
// Created by stephane bourque on 2021-03-03.
//
#include "RESTAPI_oauth2Handler.h"
void RESTAPI_oauth2Handler::handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
{
};

View File

@@ -0,0 +1,44 @@
//
// Created by stephane bourque on 2021-03-03.
//
#ifndef UCENTRAL_RESTAPI_OAUTH2HANDLER_H
#define UCENTRAL_RESTAPI_OAUTH2HANDLER_H
#include "Poco/Net/HTTPServer.h"
#include "Poco/Net/HTTPRequestHandler.h"
#include "Poco/Net/HTTPRequestHandlerFactory.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/HTTPServerRequest.h"
#include "Poco/Net/HTTPServerResponse.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/SecureServerSocket.h"
#include "Poco/Net/WebSocket.h"
#include "Poco/Net/NetException.h"
#include "Poco/Net/Context.h"
#include "Poco/JSON/Parser.h"
#include "Poco/DynamicAny.h"
using Poco::Net::ServerSocket;
using Poco::Net::SecureServerSocket;
using Poco::Net::WebSocket;
using Poco::Net::Context;
using Poco::Net::WebSocketException;
using Poco::Net::HTTPRequestHandler;
using Poco::Net::HTTPRequestHandlerFactory;
using Poco::Net::HTTPServer;
using Poco::Net::HTTPServerRequest;
using Poco::Net::HTTPResponse;
using Poco::Net::HTTPServerResponse;
using Poco::Net::HTTPServerParams;
using Poco::JSON::Parser;
class RESTAPI_oauth2Handler: public HTTPRequestHandler
{
public:
void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response);
};
#endif //UCENTRAL_RESTAPI_OAUTH2HANDLER_H

View File

@@ -143,7 +143,7 @@ std::string default_config() {
return std::string{"{\"uuid\":1613927736,\"steer\":{\"enabled\":1,\"network\":\"wan\",\"debug_level\":0},\"stats\":{\"interval\":60,\"neighbours\":1,\"traffic\":1,\"wifiiface\":1,\"wifistation\":1,\"pids\":1,\"serviceprobe\":1,\"lldp\":1,\"system\":1,\"poe\":1},\"phy\":[{\"band\":\"2\",\"cfg\":{\"disabled\":0,\"country\":\"DE\",\"channel\":6,\"txpower\":30,\"beacon_int\":100,\"htmode\":\"HE40\",\"hwmode\":\"11g\",\"chanbw\":20}},{\"band\":\"5\",\"cfg\":{\"mimo\":\"4x4\",\"disabled\":0,\"country\":\"DE\",\"channel\":0,\"htmode\":\"HE80\"}},{\"band\":\"5u\",\"cfg\":{\"disabled\":0,\"country\":\"DE\",\"channel\":100,\"htmode\":\"VHT80\"}},{\"band\":\"5l\",\"cfg\":{\"disabled\":0,\"country\":\"DE\",\"channel\":36,\"htmode\":\"VHT80\"}}],\"ssid\":[{\"band\":[\"2\"],\"cfg\":{\"ssid\":\"uCentral-Guest\",\"encryption\":\"psk2\",\"key\":\"OpenWifi\",\"mode\":\"ap\",\"isolate\":1,\"network\":\"guest\",\"ieee80211r\":1,\"ieee80211v\":1,\"ieee80211k\":1,\"ft_psk_generate_local\":1,\"ft_over_ds\":1,\"mobility_domain\":\"4f57\"}},{\"band\":[\"5l\",\"5\"],\"cfg\":{\"ssid\":\"uCentral-NAT.200\",\"encryption\":\"psk2\",\"key\":\"OpenWifi\",\"mode\":\"ap\",\"network\":\"nat200\",\"ieee80211r\":1,\"ieee80211v\":1,\"ieee80211k\":1,\"ft_psk_generate_local\":1,\"ft_over_ds\":1,\"mobility_domain\":\"4f51\"}},{\"band\":[\"5l\",\"5\"],\"cfg\":{\"ssid\":\"uCentral-EAP\",\"encryption\":\"wpa2\",\"server\":\"148.251.188.218\",\"port\":1812,\"auth_secret\":\"uSyncRad1u5\",\"mode\":\"ap\",\"network\":\"lan\",\"ieee80211r\":1,\"ieee80211v\":1,\"ieee80211k\":1,\"ft_psk_generate_local\":1,\"ft_over_ds\":1,\"mobility_domain\":\"4f51\"}},{\"band\":[\"5l\",\"5\"],\"cfg\":{\"ssid\":\"uCentral\",\"encryption\":\"psk2\",\"key\":\"OpenWifi\",\"mode\":\"ap\",\"network\":\"wan\",\"ieee80211r\":1,\"ieee80211v\":1,\"ieee80211k\":1,\"ft_psk_generate_local\":1,\"ft_over_ds\":1,\"mobility_domain\":\"4f51\"}}],\"network\":[{\"mode\":\"wan\",\"cfg\":{\"proto\":\"dhcp\"}},{\"mode\":\"gre\",\"cfg\":{\"vid\":\"50\",\"peeraddr\":\"50.210.104.108\"}},{\"mode\":\"nat\",\"vlan\":200,\"cfg\":{\"proto\":\"static\",\"ipaddr\":\"192.168.16.1\",\"netmask\":\"255.255.255.0\",\"mtu\":1500,\"ip6assign\":60,\"dhcp\":{\"start\":10,\"limit\":100,\"leasetime\":\"6h\"},\"leases\":[{\"ip\":\"192.168.100.2\",\"mac\":\"00:11:22:33:44:55\",\"hostname\":\"test\"},{\"ip\":\"192.168.100.3\",\"mac\":\"00:11:22:33:44:56\",\"hostname\":\"test2\"}]}},{\"mode\":\"guest\",\"cfg\":{\"proto\":\"static\",\"ipaddr\":\"192.168.12.11\",\"dhcp\":{\"start\":10,\"limit\":100,\"leasetime\":\"6h\"}}}],\"ntp\":{\"enabled\":1,\"enable_server\":1,\"server\":[\"0.openwrt.pool.ntp.org\",\"1.openwrt.pool.ntp.org\"]},\"ssh\":{\"enable\":1,\"Port\":22},\"system\":{\"timezone\":\"CET-1CEST,M3.5.0,M10.5.0/3\"},\"log\":{\"_log_proto\":\"udp\",\"_log_ip\":\"192.168.11.23\",\"_log_port\":12345,\"_log_hostname\":\"foo\",\"_log_size\":128},\"rtty\":{\"host\":\"websocket.usync.org\",\"token\":\"7049cb6b7949ba06c6b356d76f0f6275\",\"interface\":\"wan\"}}"};
}
void test() {
void createTestRecord() {
uint64_t Now = time(nullptr);
std::string SerialNumber{"24f5a207a130"};
@@ -158,6 +158,13 @@ void test() {
.Notes = "test device"};
uStorageService::instance()->CreateDevice(D);
std::vector<uCentralStatistics> Stats;
if(uStorageService::instance()->GetStatisticsData(SerialNumber,1,100,Stats)) {
std::cout << "Found " << std::to_string(Stats.size()) << " stats entries." << std::endl;
// std::cout << " entry(0): " << Stats[0].Data << std::endl;
}
}
int uCentral::main(const ArgVec& args)
@@ -169,15 +176,13 @@ int uCentral::main(const ArgVec& args)
std::cout << "Time: " << time(nullptr) << std::endl;
uStorageService::instance()->start();
test();
createTestRecord();
DeviceStatusServer::instance()->start();
TIPGWServer::instance()->start();
uCentralRESTAPIServer::instance()->start();
uCentralWebSocketServer::instance()->start();
std::cout << "Time: " << time(nullptr) << std::endl;
waitForTerminationRequest();
TIPGWServer::instance()->stop();

View File

@@ -4,21 +4,133 @@
#include "uCentralRESTAPIServer.h"
#include "Poco/URI.h"
#include "RESTAPI_oauth2Handler.h"
#include "RESTAPI_devicesHandler.h"
#include "RESTAPI_deviceHandler.h"
#include "RESTAPI_UnknownRequestHandler.h"
uCentralRESTAPIServer * uCentralRESTAPIServer::instance_ = nullptr;
uCentralRESTAPIServer::uCentralRESTAPIServer() noexcept:
SubSystemServer("RESTAPIServer","RESTAPIServer","ucentral.restapi")
SubSystemServer("RESTAPIServer","RESTAPIServer","ucentral.restapi"),
server_(nullptr)
{
}
int uCentralRESTAPIServer::start() {
SubSystemServer::logger().information("Starting ");
SubSystemServer::logger().information("Starting.");
std::string l{"Starting: " +
SubSystemServer::host(0).address() + ":" + std::to_string(SubSystemServer::host(0).port()) +
" key:" + SubSystemServer::host(0).key_file() +
" cert:" + SubSystemServer::host(0).cert_file()};
logger().information(l);
SecureServerSocket sock( SubSystemServer::host(0).port(),
64,
new Context(Poco::Net::Context::TLS_SERVER_USE,
SubSystemServer::host(0).key_file(),
SubSystemServer::host(0).cert_file(),
""));
auto Params = new HTTPServerParams;
Params->setMaxThreads(16);
Params->setMaxQueued(100);
server_ = new HTTPServer( new RESTAPIRequestHandlerFactory, sock, Params);
server_->start();
return 0;
}
HTTPRequestHandler* RESTAPIRequestHandlerFactory::createRequestHandler(const HTTPServerRequest& request)
{
uCentralRESTAPIServer::instance()->logger().information("Request from "
+ request.clientAddress().toString()
+ ": "
+ request.getMethod()
+ " "
+ request.getURI()
+ " "
+ request.getVersion());
for (auto it = request.begin(); it != request.end(); ++it)
{
uCentralRESTAPIServer::instance()->logger().information(it->first + ": " + it->second);
}
Poco::URI uri(request.getURI());
if( strncmp(uri.getPath().c_str(),"/api/v1/oauth2",strlen("/api/v1/oauth2"))==0) {
return new RESTAPI_oauth2Handler;
} else if ( strncmp(uri.getPath().c_str(),"/api/v1/devices",strlen("/api/v1/devices"))==0) {
return new RESTAPI_devicesHandler;
} else if ( strncmp(uri.getPath().c_str(),"/api/v1/device",strlen("/api/v1/device"))==0) {
return new RESTAPI_deviceHandler;
}
return new RESTAPI_UnknownRequestHandler;
}
void uCentralRESTAPIServer::stop() {
SubSystemServer::logger().information("Stopping ");
server_->stop();
}
void RESTAPIPageRequestHandler::handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
{
if(request.getURI() == "/api/v1/oauth2") {
} else if(request.getURI() == "/api/v1/devices") {
} else if(request.getURI() == "/api/v1/device") {
}
response.setChunkedTransferEncoding(true);
response.setContentType("text/html");
std::ostream& ostr = response.send();
ostr << "<html>";
ostr << "<head>";
ostr << "<title>WebSocketServer</title>";
ostr << "<script type=\"text/javascript\">";
ostr << "function WebSocketTest()";
ostr << "{";
ostr << " if (\"WebSocket\" in window)";
ostr << " {";
ostr << " var ws = new WebSocket(\"ws://" << request.serverAddress().toString() << "/ws\");";
ostr << " ws.onopen = function()";
ostr << " {";
ostr << " ws.send(\"Hello, world!\");";
ostr << " };";
ostr << " ws.onmessage = function(evt)";
ostr << " { ";
ostr << " var msg = evt.data;";
ostr << " alert(\"Message received: \" + msg);";
ostr << " ws.close();";
ostr << " };";
ostr << " ws.onclose = function()";
ostr << " { ";
ostr << " alert(\"WebSocket closed.\");";
ostr << " };";
ostr << " }";
ostr << " else";
ostr << " {";
ostr << " alert(\"This browser does not support WebSockets.\");";
ostr << " }";
ostr << "}";
ostr << "</script>";
ostr << "</head>";
ostr << "<body>";
ostr << " <h1>WebSocket Server</h1>";
ostr << " <p><a href=\"javascript:WebSocketTest()\">Run WebSocket Script</a></p>";
ostr << "</body>";
ostr << "</html>";
}

View File

@@ -7,6 +7,34 @@
#include "SubSystemServer.h"
#include "Poco/Net/HTTPServer.h"
#include "Poco/Net/HTTPRequestHandler.h"
#include "Poco/Net/HTTPRequestHandlerFactory.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/HTTPServerRequest.h"
#include "Poco/Net/HTTPServerResponse.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/SecureServerSocket.h"
#include "Poco/Net/WebSocket.h"
#include "Poco/Net/NetException.h"
#include "Poco/Net/Context.h"
#include "Poco/JSON/Parser.h"
#include "Poco/DynamicAny.h"
using Poco::Net::ServerSocket;
using Poco::Net::SecureServerSocket;
using Poco::Net::WebSocket;
using Poco::Net::Context;
using Poco::Net::WebSocketException;
using Poco::Net::HTTPRequestHandler;
using Poco::Net::HTTPRequestHandlerFactory;
using Poco::Net::HTTPServer;
using Poco::Net::HTTPServerRequest;
using Poco::Net::HTTPResponse;
using Poco::Net::HTTPServerResponse;
using Poco::Net::HTTPServerParams;
using Poco::JSON::Parser;
class uCentralRESTAPIServer : public SubSystemServer {
public:
@@ -25,8 +53,20 @@ public:
}
private:
static uCentralRESTAPIServer * instance_;
static uCentralRESTAPIServer * instance_;
HTTPServer * server_;
};
class RESTAPIPageRequestHandler: public HTTPRequestHandler
{
public:
void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response);
};
class RESTAPIRequestHandlerFactory: public HTTPRequestHandlerFactory
{
public:
HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request);
};
#endif //UCENTRAL_UCENTRALRESTAPISERVER_H

View File

@@ -85,8 +85,6 @@ void uCentralWebSocketServer::process_message(char *Message, std::string & Respo
logger().information(SerialNumber + ": configuration check.");
Connection.CfgUUID = ds["uuid"];
std::cout << "Newer config check start" << std::endl;
std::string NewConfig;
uint64_t NewConfigUUID;
@@ -102,7 +100,6 @@ void uCentralWebSocketServer::process_message(char *Message, std::string & Respo
} else {
Response.clear();
}
std::cout << "Newer config check finished" << std::endl;
}
else if(ds.contains("log")) {
std::string log = ds["log"].toString();
@@ -161,16 +158,20 @@ void PageRequestHandler::handleRequest(HTTPServerRequest& request, HTTPServerRes
void WebSocketRequestHandler::handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
{
Application& app = Application::instance();
Poco::Logger & l = uCentralWebSocketServer::instance()->logger();
std::string Address;
std::string ResponseDocument;
try
{
WebSocket ws(request, response);
std::string ResponseDocument;
Address = ws.peerAddress().toString();
ws.setReceiveTimeout(Poco::Timespan());
ws.setNoDelay(true);
ws.setKeepAlive(true);
l.information("Connection from: " + Address);
@@ -199,15 +200,17 @@ void WebSocketRequestHandler::handleRequest(HTTPServerRequest& request, HTTPServ
switch (Op) {
case WebSocket::FRAME_OP_PING:
{
std::cout << "Sending a PONG" << std::endl;
ws.sendFrame("", 0, WebSocket::FRAME_OP_PING | WebSocket::FRAME_FLAG_FIN);
l.information("PING(" + Connection.SerialNumber + "): received.");
ws.sendFrame("", 0, WebSocket::FRAME_OP_PONG | WebSocket::FRAME_FLAG_FIN);
}
break;
case WebSocket::FRAME_OP_PONG:
{
std::cout << "Got a PONG" << std::endl;
l.information("PONG(" + Connection.SerialNumber + "): received.");
}
break;
case WebSocket::FRAME_OP_TEXT:
{
std::cout << "Incoming(" << Connection.SerialNumber << "): " << IncomingSize << " bytes." << std::endl;
@@ -220,17 +223,12 @@ void WebSocketRequestHandler::handleRequest(HTTPServerRequest& request, HTTPServ
if (!ResponseDocument.empty()) {
Connection.TX += ResponseDocument.size();
// std::cout << "RETURN:" << ResponseDocument << std::endl;
usleep(8000);
std::cout << "Returning " << ResponseDocument.size() << " bytes" << std::endl;
std::cout << "Returning(" << Connection.SerialNumber << "): " << ResponseDocument.size() << " bytes" << std::endl;
ws.sendFrame(ResponseDocument.c_str(), ResponseDocument.size());
} else {
// std::cout << "No response." << std::endl;
usleep(8000);
ws.sendFrame(ResponseDocument.c_str(), ResponseDocument.size(), WebSocket::FRAME_OP_PING | WebSocket::FRAME_FLAG_FIN);
}
}
break;
default:
{
l.warning("UNKNOWN WS Frame operation: " + std::to_string(Op));

View File

@@ -22,8 +22,6 @@
#include "Poco/JSON/Parser.h"
#include "Poco/DynamicAny.h"
using Poco::Net::ServerSocket;
using Poco::Net::SecureServerSocket;
using Poco::Net::WebSocket;

View File

@@ -95,7 +95,7 @@ bool uStorageService::GetStatisticsData(std::string &SerialNumber, uint32_t From
*session_ << "SELECT SerialNumber, UUID, Data, Recorded FROM Statistics WHERE SerialNumber=?" ,
into(Records),
use(SerialNumber),
range(From,From+HowMany), now;
range(From,From+HowMany-1), now;
for(auto i: Records)
{

View File

@@ -55,11 +55,11 @@ ucentral.websocket.host.0.cert = /Users/stephb/Desktop/Dropbox/clion/ucentralgw/
ucentral.websocket.host.0.key = /Users/stephb/Desktop/Dropbox/clion/ucentralgw/certs/ws-key.pem
ucentral.websocket.host.0.key.password = mypassword
ucentral.restapi.host.0.address = 127.0.0.1
ucentral.restapi.host.0.address = 10.100.49.22
ucentral.restapi.host.0.port = 16001
ucentral.restapi.host.0.cert = 127.0.0.1
ucentral.restapi.host.0.key = 127.0.0.1
ucentral.restapi.host.0.key.password = 127.0.0.1
ucentral.restapi.host.0.cert = /Users/stephb/Desktop/Dropbox/clion/ucentralgw/certs/ws-cert.pem
ucentral.restapi.host.0.key = /Users/stephb/Desktop/Dropbox/clion/ucentralgw/certs/ws-key.pem
ucentral.restapi.host.0.key.password = mypassword
ucentral.tipgateway.host.0.address = 127.0.0.1
ucentral.tipgateway.host.0.port = 14001