5#include "protocol/registry.h"
7#include "utils/logging.h"
9#include <handlers/carrier.h>
10#include <handlers/daq.h>
11#include <handlers/help.h>
12#include <handlers/loader_flasher.h>
13#include <handlers/loader_plugin.h>
14#include <handlers/login_lock.h>
15#include <handlers/mode_manual.h>
16#include <handlers/net_settings.h>
17#include <handlers/ping.h>
18#include <handlers/run_manager.h>
19#include <handlers/sys.h>
21FLASHMEM
void msg::handlers::DynamicRegistry::init(carrier::Carrier &c) {
22 using namespace net::auth;
26 set(
"ping", 100,
new PingRequestHandler{}, SecurityLevel::RequiresNothing);
27 set(
"help", 200,
new HelpHandler(), SecurityLevel::RequiresNothing);
30 set(
"reset_circuit", 300,
new ResetRequestHandler(c), SecurityLevel::RequiresLogin);
31 set(
"set_circuit", 400,
new SetConfigMessageHandler(c), SecurityLevel::RequiresLogin);
32 set(
"get_circuit", 500,
new GetConfigMessageHandler(c), SecurityLevel::RequiresLogin);
33 set(
"get_entities", 600,
new GetEntitiesRequestHandler(c), SecurityLevel::RequiresLogin);
34 set(
"start_run", 700,
new StartRunRequestHandler(), SecurityLevel::RequiresLogin);
35 set(
"stop_run", 780,
new StopRunRequestHandler(), SecurityLevel::RequiresLogin);
38 set(
"one_shot_daq", 800,
new OneshotDAQHandler(), SecurityLevel::RequiresNothing);
39 set(
"manual_mode", 900,
new ManualControlHandler(), SecurityLevel::RequiresNothing);
40 set(
"overload_status", 1000,
new GetOverloadStatusHandler(c), SecurityLevel::RequiresLogin);
42 set(
"net_get", 6000,
new GetNetworkSettingsHandler(), SecurityLevel::RequiresAdmin);
43 set(
"net_set", 6100,
new SetNetworkSettingsHandler(), SecurityLevel::RequiresAdmin);
44 set(
"net_reset", 6200,
new ResetNetworkSettingsHandler(), SecurityLevel::RequiresAdmin);
45 set(
"net_status", 6300,
new NetworkStatusHandler(), SecurityLevel::RequiresNothing);
49 set(
"login", 3100,
new LoginHandler(), SecurityLevel::RequiresNothing);
50 set(
"lock_acquire", 3200,
new LockAcquire(), SecurityLevel::RequiresLogin);
51 set(
"lock_release", 3300,
new LockRelease(), SecurityLevel::RequiresLogin);
53 set(
"sys_ident", 3400,
new GetSystemIdent(), SecurityLevel::RequiresNothing);
54 set(
"sys_reboot", 3500,
new RebootHandler(), SecurityLevel::RequiresAdmin);
55 set(
"sys_log", 3600,
new SyslogHandler(), SecurityLevel::RequiresLogin);
56 set(
"sys_stats", 3700,
new SystemStats(), SecurityLevel::RequiresLogin);
57 set(
"sys_temperatures", 3800,
new ReadTemperaturesHandler(c), SecurityLevel::RequiresLogin);
59 set(
"load_plugin", 4100,
new LoadPluginHandler(), SecurityLevel::RequiresAdmin);
60 set(
"unload_plugin", 4200,
new UnloadPluginHandler(), SecurityLevel::RequiresAdmin);
62 #ifdef ANABRID_WRITE_EEPROM
64 set(
"sys_read_permanent", 4300,
new ReadSystemIdent(), SecurityLevel::RequiresAdmin);
65 set(
"sys_reset_permanent", 4400,
new ResetSystemIdent(), SecurityLevel::RequiresAdmin);
66 set(
"sys_write_permanent", 4500,
new WriteSystemIdent(), SecurityLevel::RequiresAdmin);
69 set(
"ota_update_init", 5000,
new FlasherInitHandler(), SecurityLevel::RequiresAdmin);
70 set(
"ota_update_stream", 5100,
new FlasherDataHandler(), SecurityLevel::RequiresAdmin);
71 set(
"ota_update_abort", 5200,
new FlasherAbortHandler(), SecurityLevel::RequiresAdmin);
72 set(
"ota_update_complete", 5300,
new FlasherCompleteHandler(), SecurityLevel::RequiresAdmin);
76msg::handlers::MessageHandler *msg::handlers::DynamicRegistry::lookup(
const std::string &msg_type) {
77 auto found = entries.find(msg_type);
78 if (found != entries.end()) {
79 return found->second.handler;
86net::auth::SecurityLevel msg::handlers::DynamicRegistry::requiredClearance(
const std::string &msg_type) {
87 auto found = entries.find(msg_type);
88 if (found != entries.end()) {
89 return found->second.clearance;
91 return net::auth::SecurityLevel::RequiresNothing;
96bool msg::handlers::DynamicRegistry::set(
const std::string &msg_type, msg::handlers::MessageHandler *handler,
97 net::auth::SecurityLevel minimumClearance) {
98 return set(msg_type, result_code_counter, handler, minimumClearance);
102bool msg::handlers::DynamicRegistry::set(
const std::string &msg_type,
int result_code_prefix,
103 msg::handlers::MessageHandler *handler,
104 net::auth::SecurityLevel minimumClearance) {
105 auto found = entries.find(msg_type);
106 if (found != entries.end()) {
109 entries[msg_type] = msg::handlers::DynamicRegistry::RegistryEntry{handler, minimumClearance};
110 handler->result_prefix = result_code_prefix;
111 result_code_counter = result_code_prefix + result_code_increment;
116FLASHMEM
void msg::handlers::DynamicRegistry::dump() {
118 Serial.println(
"Registered message handlers (msg::handlers::DynamicRegistry): ");
119 for (
auto const &kv : entries) {
120 Serial.print(kv.first.c_str());
121 if (!kv.second.handler)
122 Serial.print(
"(NULLPTR!)");
126 Serial.println(
"Registry clearance levels:");
127 for (
auto const &kv : entries) {
128 Serial.print(kv.first.c_str());
130 Serial.print((
int)(kv.second.clearance));
136FLASHMEM
void msg::handlers::DynamicRegistry::write_handler_names_to(JsonArray &target) {
137 for (
auto const &kv : entries) {
138 if (kv.second.handler)
139 target.add(kv.first);