supla-device
Loading...
Searching...
No Matches
server_config.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_SUPLET_SERVER_CONFIG_H_
5#define SRC_SUPLA_SUPLET_SERVER_CONFIG_H_
6
7#include <stddef.h>
8#include <stdint.h>
9#include <supla/suplet/assignment_applier.h>
10#include <supla/suplet/definition_cache.h>
11#include <supla/suplet/json_definition.h>
12
13namespace Supla {
14namespace Suplet {
15
16enum class ServerConfigResult : uint8_t {
17 Applied = 0,
18 Removed = 1,
19 InvalidArgument = 2,
20 DefinitionNotSupported = 3,
21 InvalidDefinition = 4,
22 InvalidConfig = 5,
23 StorageError = 6,
24 ResourceLimitExceeded = 7,
25 CreateOnlyParamChanged = 8,
26 Busy = 9,
27 TopologyChangeNotAllowed = 10,
28 DefinitionNotFound = 11,
29 DefinitionCannotBeChanged = 12,
30 InstanceLimitExceeded = 13,
31 ChannelLimitExceeded = 14,
32 InstanceNotFound = 15,
33 VersionMismatch = 16,
34};
35
37 CachedDefinitionInfo cache = {};
38 Category category = Category::Unknown;
39 Kind kind = Kind::Unknown;
40 uint8_t schemaVersion = 0;
41 uint8_t handlerVersion = 0;
42 uint8_t maxInstances = 0;
43};
44
46 public:
47 bool load(const DefinitionCache &cache,
48 uint32_t definitionId,
49 uint16_t definitionVersion,
50 JsonDefinition *definition,
51 CachedDefinitionInfo *info = nullptr) const;
52 uint8_t getCount(const DefinitionCache &cache) const;
53};
54
56 public:
58 Manager *manager,
59 Registry *registry,
60 DefinitionCache *definitionCache = nullptr,
61 DownloadedDefinitionStore *downloadedDefinitions = nullptr);
62
63 ServerConfigResult loadDownloadedDefinitions();
64 ServerConfigResult saveDownloadedDefinition(uint32_t definitionId,
65 uint16_t definitionVersion,
66 const char *definitionJson,
67 const uint8_t *sha256);
68 ServerConfigResult beginStagedDownloadedDefinition(
69 uint32_t definitionId,
70 uint16_t definitionVersion,
71 uint16_t jsonSize,
72 const uint8_t *sha256,
73 DefinitionCacheHandle *handle);
74 ServerConfigResult writeStagedDownloadedDefinitionChunk(
76 uint16_t chunkIndex,
77 const uint8_t *data,
78 uint16_t size);
79 ServerConfigResult commitStagedDownloadedDefinition(
81 uint32_t definitionId,
82 uint16_t definitionVersion,
83 uint16_t jsonSize,
84 const uint8_t *sha256);
85 void abortStagedDownloadedDefinition(DefinitionCacheHandle handle);
86 ServerConfigResult removeDownloadedDefinition(uint32_t definitionId,
87 uint16_t definitionVersion);
88 uint8_t getCachedDefinitionCount() const;
89 bool getCachedDefinitionDetails(uint8_t listIndex,
90 CachedDefinitionDetails *details) const;
91 ServerConfigResult garbageCollectUnusedDefinitions();
92 ServerConfigResult applyAssignmentJson(const char *assignmentJson,
93 uint32_t definitionId,
94 uint16_t definitionVersion);
95 ServerConfigResult applyInstanceParams(uint8_t instanceId,
96 uint32_t definitionId,
97 uint16_t definitionVersion,
98 const char *paramsJson,
99 uint16_t paramsSize,
100 uint8_t *appliedInstanceId = nullptr);
101 ServerConfigResult applyInstanceUpgrade(uint8_t instanceId,
102 uint32_t definitionId,
103 uint16_t fromDefinitionVersion,
104 uint16_t toDefinitionVersion,
105 const char *paramsJson,
106 uint16_t paramsSize);
107 ServerConfigResult validateAssignmentJson(
108 const char *assignmentJson,
109 uint32_t definitionId,
110 uint16_t definitionVersion) const;
111 ServerConfigResult validateInstanceParams(
112 uint8_t instanceId,
113 uint32_t definitionId,
114 uint16_t definitionVersion,
115 const char *paramsJson,
116 uint16_t paramsSize) const;
117 ServerConfigResult validateInstanceUpgrade(uint8_t instanceId,
118 uint32_t definitionId,
119 uint16_t fromDefinitionVersion,
120 uint16_t toDefinitionVersion,
121 const char *paramsJson,
122 uint16_t paramsSize) const;
123 ServerConfigResult applyCommandJson(const char *commandJson);
124 ServerConfigResult validateCommandJson(const char *commandJson) const;
125 ServerConfigResult removeAssignment(uint8_t instanceId);
126 bool loadDownloadedDefinition(uint32_t definitionId,
127 uint16_t definitionVersion,
128 JsonDefinition *definition,
129 CachedDefinitionInfo *info = nullptr) const;
130 bool loadDownloadedDefinitionJson(
131 uint32_t definitionId,
132 uint16_t definitionVersion,
133 char *definitionJson,
134 size_t definitionJsonSize,
135 CachedDefinitionInfo *info = nullptr) const;
136
137 bool isRuntimeRefreshRequired() const;
138 void clearRuntimeRefreshRequired();
139
140 private:
141 static ServerConfigResult fromAssignmentResult(AssignmentResult result);
142
143 Manager *manager = nullptr;
144 Registry *registry = nullptr;
145 DefinitionCache *definitionCache = nullptr;
146 DownloadedDefinitionStore *downloadedDefinitions = nullptr;
147 bool runtimeRefreshRequired = false;
148};
149
150} // namespace Suplet
151} // namespace Supla
152
153#endif // SRC_SUPLA_SUPLET_SERVER_CONFIG_H_
Definition definition_cache.h:49
Definition server_config.h:45
Definition json_definition.h:33
Definition manager.h:29
Definition registry.h:13
Definition server_config.h:55
Definition server_config.h:36
Definition definition_cache.h:37
Definition definition_cache.h:44