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