mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralgw.git
synced 2025-10-29 18:02:27 +00:00
Adding RESTAPI processing
This commit is contained in:
@@ -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})
|
||||
10
src/RESTAPI_UnknownRequestHandler.cpp
Normal file
10
src/RESTAPI_UnknownRequestHandler.cpp
Normal 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)
|
||||
{
|
||||
|
||||
};
|
||||
46
src/RESTAPI_UnknownRequestHandler.h
Normal file
46
src/RESTAPI_UnknownRequestHandler.h
Normal 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
|
||||
10
src/RESTAPI_deviceHandler.cpp
Normal file
10
src/RESTAPI_deviceHandler.cpp
Normal 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)
|
||||
{
|
||||
|
||||
};
|
||||
46
src/RESTAPI_deviceHandler.h
Normal file
46
src/RESTAPI_deviceHandler.h
Normal 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
|
||||
10
src/RESTAPI_devicesHandler.cpp
Normal file
10
src/RESTAPI_devicesHandler.cpp
Normal 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)
|
||||
{
|
||||
|
||||
};
|
||||
44
src/RESTAPI_devicesHandler.h
Normal file
44
src/RESTAPI_devicesHandler.h
Normal 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
|
||||
10
src/RESTAPI_oauth2Handler.cpp
Normal file
10
src/RESTAPI_oauth2Handler.cpp
Normal 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)
|
||||
{
|
||||
|
||||
};
|
||||
44
src/RESTAPI_oauth2Handler.h
Normal file
44
src/RESTAPI_oauth2Handler.h
Normal 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
|
||||
@@ -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();
|
||||
|
||||
@@ -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>";
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user