supla-device
Loading...
Searching...
No Matches
server_config.h
1/*
2 Copyright (C) AC SOFTWARE SP. Z O.O
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19#ifndef SRC_SUPLA_SUPLET_SERVER_CONFIG_H_
20#define SRC_SUPLA_SUPLET_SERVER_CONFIG_H_
21
22#include <stddef.h>
23#include <stdint.h>
24#include <supla/suplet/assignment_applier.h>
25#include <supla/suplet/definition_cache.h>
26#include <supla/suplet/json_definition.h>
27
28namespace Supla {
29namespace Suplet {
30
31enum class ServerConfigResult : uint8_t {
32 Applied = 0,
33 Removed = 1,
34 InvalidArgument = 2,
35 DefinitionNotSupported = 3,
36 InvalidDefinition = 4,
37 InvalidConfig = 5,
38 StorageError = 6,
39 ResourceLimitExceeded = 7,
40 CreateOnlyParamChanged = 8,
41 Busy = 9,
42 TopologyChangeNotAllowed = 10,
43 DefinitionNotFound = 11,
44 DefinitionCannotBeChanged = 12,
45 InstanceLimitExceeded = 13,
46 ChannelLimitExceeded = 14,
47 InstanceNotFound = 15,
48 VersionMismatch = 16,
49};
50
52 CachedDefinitionInfo cache = {};
53 Category category = Category::Unknown;
54 Kind kind = Kind::Unknown;
55 uint8_t schemaVersion = 0;
56 uint8_t handlerVersion = 0;
57 uint8_t maxInstances = 0;
58};
59
61 public:
62 bool load(const DefinitionCache &cache,
63 uint32_t definitionId,
64 uint16_t definitionVersion,
65 JsonDefinition *definition,
66 CachedDefinitionInfo *info = nullptr) const;
67 uint8_t getCount(const DefinitionCache &cache) const;
68};
69
70class ServerConfigHandler {
71 public:
72 ServerConfigHandler(
73 Manager *manager,
74 Registry *registry,
75 DefinitionCache *definitionCache = nullptr,
76 DownloadedDefinitionStore *downloadedDefinitions = nullptr);
77
78 ServerConfigResult loadDownloadedDefinitions();
79 ServerConfigResult saveDownloadedDefinition(uint32_t definitionId,
80 uint16_t definitionVersion,
81 const char *definitionJson,
82 const uint8_t *sha256);
83 ServerConfigResult beginStagedDownloadedDefinition(
84 uint32_t definitionId,
85 uint16_t definitionVersion,
86 uint16_t jsonSize,
87 const uint8_t *sha256,
88 DefinitionCacheHandle *handle);
89 ServerConfigResult writeStagedDownloadedDefinitionChunk(
91 uint16_t chunkIndex,
92 const uint8_t *data,
93 uint16_t size);
94 ServerConfigResult commitStagedDownloadedDefinition(
96 uint32_t definitionId,
97 uint16_t definitionVersion,
98 uint16_t jsonSize,
99 const uint8_t *sha256);
100 void abortStagedDownloadedDefinition(DefinitionCacheHandle handle);
101 ServerConfigResult removeDownloadedDefinition(uint32_t definitionId,
102 uint16_t definitionVersion);
103 uint8_t getCachedDefinitionCount() const;
104 bool getCachedDefinitionDetails(uint8_t listIndex,
105 CachedDefinitionDetails *details) const;
106 ServerConfigResult garbageCollectUnusedDefinitions();
107 ServerConfigResult applyAssignmentJson(const char *assignmentJson,
108 uint32_t definitionId,
109 uint16_t definitionVersion);
110 ServerConfigResult applyInstanceParams(uint8_t instanceId,
111 uint32_t definitionId,
112 uint16_t definitionVersion,
113 const char *paramsJson,
114 uint16_t paramsSize,
115 uint8_t *appliedInstanceId = nullptr);
116 ServerConfigResult applyInstanceUpgrade(uint8_t instanceId,
117 uint32_t definitionId,
118 uint16_t fromDefinitionVersion,
119 uint16_t toDefinitionVersion,
120 const char *paramsJson,
121 uint16_t paramsSize);
122 ServerConfigResult validateAssignmentJson(
123 const char *assignmentJson,
124 uint32_t definitionId,
125 uint16_t definitionVersion) const;
126 ServerConfigResult validateInstanceParams(
127 uint8_t instanceId,
128 uint32_t definitionId,
129 uint16_t definitionVersion,
130 const char *paramsJson,
131 uint16_t paramsSize) const;
132 ServerConfigResult validateInstanceUpgrade(uint8_t instanceId,
133 uint32_t definitionId,
134 uint16_t fromDefinitionVersion,
135 uint16_t toDefinitionVersion,
136 const char *paramsJson,
137 uint16_t paramsSize) const;
138 ServerConfigResult applyCommandJson(const char *commandJson);
139 ServerConfigResult validateCommandJson(const char *commandJson) const;
140 ServerConfigResult removeAssignment(uint8_t instanceId);
141 bool loadDownloadedDefinition(uint32_t definitionId,
142 uint16_t definitionVersion,
143 JsonDefinition *definition,
144 CachedDefinitionInfo *info = nullptr) const;
145 bool loadDownloadedDefinitionJson(
146 uint32_t definitionId,
147 uint16_t definitionVersion,
148 char *definitionJson,
149 size_t definitionJsonSize,
150 CachedDefinitionInfo *info = nullptr) const;
151
152 bool isRuntimeRefreshRequired() const;
153 void clearRuntimeRefreshRequired();
154
155 private:
156 static ServerConfigResult fromAssignmentResult(AssignmentResult result);
157
158 Manager *manager = nullptr;
159 Registry *registry = nullptr;
160 DefinitionCache *definitionCache = nullptr;
161 DownloadedDefinitionStore *downloadedDefinitions = nullptr;
162 bool runtimeRefreshRequired = false;
163};
164
165} // namespace Suplet
166} // namespace Supla
167
168#endif // SRC_SUPLA_SUPLET_SERVER_CONFIG_H_
Definition definition_cache.h:64
Definition server_config.h:60
Definition json_definition.h:48
Definition manager.h:44
Definition registry.h:28
Definition server_config.h:51
Definition definition_cache.h:52
Definition definition_cache.h:59